#acumatica
#acumatica
Вопрос:
Я создал пользовательский отчет, в котором сопроводительное письмо в качестве вложенного отчета вызывается в заголовке отчета, а сводный отчет вызывается в нижнем колонтитуле отчета. Это отлично работает при вызове в меню действий для печати одного отчета.
Я разработал экран обработки, аналогичный печати заказа на продажу / обработке электронной почты, и при печати нескольких документов сопроводительное письмо печатается один раз, а основной отчет печатается для всех выбранных документов, а итоговый отчет печатается для последнего документа.
public PXAction<SOOrder> printreport;
[PXUIField(DisplayName = "Print Production Report", MapEnableRights = PXCacheRights.Select)]
[PXButton(SpecialType = PXSpecialButtonType.ReportsFolder)]
protected virtual IEnumerable PrintReport(PXAdapter adapter)
{
List<SOOrder> list = adapter.Get<SOOrder>().ToList();
if (list.Count > 0)
{
string reportID = "PS642000";
Base.Save.Press();
Dictionary<string, string> parameters = new Dictionary<string, string>();
string actualReportID = null;
PXReportRequiredException ex = null;
Dictionary<PX.SM.PrintSettings, PXReportRequiredException> reportsToPrint = new Dictionary<PX.SM.PrintSettings, PXReportRequiredException>();
foreach (SOOrder order in list)
{
PSSOOrderExtNV extNV = Base.Document.Cache.GetExtension<PSSOOrderExtNV>(order);
if (extNV.UsrIsScreenPrint != true)
continue;
parameters = new Dictionary<string, string>();
parameters["SOOrder.OrderType"] = order.OrderType;
parameters["SOOrder.OrderNbr"] = order.OrderNbr;
object cstmr = PXSelectorAttribute.Select<SOOrder.customerID>(Base.Document.Cache, order);
actualReportID = new NotificationUtility(Base).SearchReport(SONotificationSource.Customer, cstmr, reportID, order.BranchID);
ex = PXReportRequiredException.CombineReport(ex, actualReportID, parameters);
reportsToPrint = PX.SM.SMPrintJobMaint.AssignPrintJobToPrinter(reportsToPrint, parameters, adapter, new NotificationUtility(Base).SearchPrinter, SONotificationSource.Customer, reportID, actualReportID, order.BranchID);
}
if (ex != null)
{
PX.SM.SMPrintJobMaint.CreatePrintJobGroups(reportsToPrint);
throw ex;
}
}
Как устранить проблему?
Ответ №1:
Я пробовал и не сработал. Теперь я удалил вложенный отчет и выполняю его отдельно в последовательности, чтобы заархивировать требуемый результат.
public PXAction<SOOrder> screenprintreport;
[PXUIField(DisplayName = "Screen Print Production Report", MapEnableRights = PXCacheRights.Select)]
[PXButton(SpecialType = PXSpecialButtonType.ReportsFolder)]
protected virtual IEnumerable screenPrintReport(PXAdapter adapter)
{
List<SOOrder> list = adapter.Get<SOOrder>().ToList();
if (list.Count > 0)
{
string creportID = "SO641010";
string reportID = "PS642000";
Base.Save.Press();
Dictionary<string, string> parameters = new Dictionary<string, string>();
string actualReportID = null;
PXReportRequiredException ex = null;
Dictionary<PX.SM.PrintSettings, PXReportRequiredException> reportsToPrint = new Dictionary<PX.SM.PrintSettings, PXReportRequiredException>();
foreach (SOOrder order in list)
{
PSSOOrderExtNV extNV = Base.Document.Cache.GetExtension<PSSOOrderExtNV>(order);
if (extNV.UsrIsScreenPrint != true)
continue;
parameters = new Dictionary<string, string>();
parameters["SOOrder.OrderType"] = order.OrderType;
parameters["SOOrder.OrderNbr"] = order.OrderNbr;
object cstmr = PXSelectorAttribute.Select<SOOrder.customerID>(Base.Document.Cache, order);
actualReportID = new NotificationUtility(Base).SearchReport(SONotificationSource.Customer, cstmr, creportID, order.BranchID);
ex = PXReportRequiredException.CombineReport(ex, actualReportID, parameters);
reportsToPrint = PX.SM.SMPrintJobMaint.AssignPrintJobToPrinter(reportsToPrint, parameters, adapter, new NotificationUtility(Base).SearchPrinter, SONotificationSource.Customer, creportID, actualReportID, order.BranchID);
actualReportID = null;
actualReportID = new NotificationUtility(Base).SearchReport(SONotificationSource.Customer, cstmr, reportID, order.BranchID);
ex = PXReportRequiredException.CombineReport(ex, actualReportID, parameters);
reportsToPrint = PX.SM.SMPrintJobMaint.AssignPrintJobToPrinter(reportsToPrint, parameters, adapter, new NotificationUtility(Base).SearchPrinter, SONotificationSource.Customer, reportID, actualReportID, order.BranchID);
}
if (ex != null)
{
PX.SM.SMPrintJobMaint.CreatePrintJobGroups(reportsToPrint);
throw ex;
}
}
}