Печать отчета, имеющего обложку и нижний колонтитул в качестве вложенных отчетов на экране обработки

#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;
            }
        }
    }