【发布时间】:2020-03-12 18:45:34
【问题描述】:
基本上我想在打印发票和备忘录屏幕上创建一个新的操作按钮,以打印所选发票的报告。
为什么我们要创建新的操作按钮,在这里我们需要为每个发票(SO 类型)打印不同的格式,所以当用户在网格中选择 3 个不同的记录时 举个例子 1. INV1234 等类型是 TS 然后我需要打印 xyz 报告 2. INV9875 这不是通过 SO 创建的,那么我需要打印 ABC 报告 3. CRM4567 和 SO 类型为 TS(如上 1 个选项)
所以这里 1 和 3 应该打印在一页中(就像处理按钮在默认 acumatica 中的工作方式一样) 2 选项报告应在新选项卡中打印。
如果我得到一个示例代码,可以在单页中打印相同的报告,而在另一个选项卡中打印另一个则很好。
下面是代码
public PXAction<PrintInvoicesFilter> PrintReport;
[PXUIField(DisplayName = "Print Sales Invoice with Price", MapEnableRights = PXCacheRights.Select, MapViewRights = PXCacheRights.Select)]
[PXLookupButton]
public virtual IEnumerable printReport(PXAdapter adapter, [PXString] string reportID)
{
PXReportRequiredException ex = null;
foreach (ARInvoice doc in Base.ARDocumentList.Cache.Cached)
{
var parameters = new Dictionary<string, string>();
if (doc.Selected == true)
{
ARTran TranData = PXSelectReadonly<ARTran, Where<ARTran.tranType, Equal<Required<ARTran.tranType>>,
And<ARTran.refNbr, Equal<Required<ARTran.refNbr>>>>>.Select(Base, doc.DocType, doc.RefNbr);
if (TranData != null)
{
if (TranData.SOOrderType == "WS" || TranData.SOOrderType == "WO" || TranData.SOOrderType == "TS" || TranData.SOOrderType == "IM")
{
if (reportID == null) reportID = "KR501011";
if (reportID == "KR501011")
{
parameters["DocType"] = doc.DocType;
parameters["RefNbr"] = doc.RefNbr;
}
ex = PXReportRequiredException.CombineReport(ex, "KR501011", parameters,false);
}
if (TranData.SOOrderType == "RX")
{
if (reportID == null) reportID = "KR501016";
if (reportID == "KR501016")
{
parameters["DocType"] = doc.DocType;
parameters["RefNbr"] = doc.RefNbr;
}
ex = PXReportRequiredException.CombineReport(ex, "KR501016", parameters,false);
}
if (string.IsNullOrEmpty(TranData.SOOrderType))
{
if (reportID == null) reportID = "KR501038";
if (reportID == "KR501038")
{
parameters["DocType"] = doc.DocType;
parameters["RefNbr"] = doc.RefNbr;
}
ex = PXReportRequiredException.CombineReport(ex, "KR501038", parameters,false);
}
}
}
}
if (ex != null)
{
ex.Mode = PXBaseRedirectException.WindowMode.New;
ex.SeparateWindows = false;
throw ex;
}
提前致谢。
【问题讨论】:
-
有人可以帮我一键打印多个报告ID