19.07.2017, 14:29 | #1 |
Участник
|
Трудности с формированием PDF в пакетном режиме
При формировании PDF файла в пакетном задании происходит остановка службы или просто прерывание выполнения.
Не в пакетном режиме все нормально формируется. PDF формируется через штатный функционал Report: X++: public int print() { int ret; this.printJobSettings().suppressScalingMessage(true); this.printJobSettings().clientPrintJobSettings().suppressScalingMessage(true); if (email) { this.printJobSettings().setTarget(PrintMedium::File); this.printJobSettings().format(PrintFormat::PDF); FileName = strfmt(@'\\AOS-01\@Shared\Exchange\TK\%1%2_%3.pdf',"СчетНаОплату",today(),salesPurchReport.getHeaderData().SalesPurchId); if (WinapiServer::fileExists(FileName)) { WinapiServer::deleteFile(FileName); } this.printJobSettings().fileName(FileName); } info("ret = super()"); ret = super(); this.printPDFMail(); return ret; } SysReportRun который отнаследован от ReportRun X++: /* <SYS> void run(boolean onlyReport = false) </SYS> */ // <GEEU> public void run(boolean onlyReport = false) // </GEEU> { // If this report is a webReport the run a webReport. if (webSession() && runBaseReport) { runBaseReport.runWebReport(); } else { // When running the report and onlyReport = true then run the report. if (!onlyReport && runBaseReport) { if (runBaseReport.prompt()) { runBaseReport.run(); } // If the prompt returns false the do not run the report. // The RunBaseReport.Run method calls the ReportRun.run method with the parm onlyReport = true. return; } } this.buildPrintGrandTotal(); this.buildPrintOnlyTotals(); // <GEEU> this.updateReportDesign_W(); // </GEEU> info("beforeSuper"); // инфолог виден в журнале выполнения super(); // Метод в ядре AX. что внутри не понятно =( info("AfterSuper"); // До этого инфолога выполнение не доходит } |
|
19.07.2017, 15:06 | #2 |
Участник
|
В Ax2009 получалось и сейчас работает.
Пришлось поправить класс PDFViewer, добавляя везде вместо PHP код:
PHP код:
|
|
|
За это сообщение автора поблагодарили: iiipoizone (1). |
19.07.2017, 15:57 | #3 |
Участник
|
В этом классе все уже прописано, но вот так:
X++: if(isRunningOnServer())
{
bmpImage = WinAPIServer::getTempFileName();
}
else
{
bmpImage = WinAPI::getTempFile();
} |
|
20.07.2017, 11:26 | #4 |
Участник
|
Вот это очень смущает:
X++: this.printJobSettings().suppressScalingMessage(true); this.printJobSettings().clientPrintJobSettings().suppressScalingMessage(true); В обоих случаях должна быть ошибка. В первом т.к. идёт выполнения кода на сервере, во втором, т.к. идёт вызов suppressScalingMessage для неинициализированного объекта. PS Что если просто отладить пакетное задание, вместо выставления инфологов? Последний раз редактировалось Товарищ ♂uatr; 20.07.2017 в 11:30. |
|
|
За это сообщение автора поблагодарили: iiipoizone (1). |
21.07.2017, 07:05 | #5 |
Участник
|
Цитата:
Здесь 2 варианта или он вернёт экземпляр класса созданного на клиенте (https://msdn.microsoft.com/en-us/lib...bsettings.aspx) или null.
|
|
21.07.2017, 10:41 | #6 |
Участник
|
Посмотрите, как реализован экспорт SRS отчетов в классе SRSReportServerWarmup.
X++: public void runSampleRdpReportWithParameters() { str reportFilePath; SrsReportDataContract contract; SalesInvoiceContract rdpContractClass; LogisticsAddressCountryRegionISOCode code = 'US'; // Create a controller to run the report. SrsReportRunController controller = new SrsReportRunController(); // set the report name and design to be run controller.parmReportName(ssrsReportStr(SalesInvoice, Report)); // suppress the parameter dialog as this is to be run by the batch service controller.parmShowDialog(false); // choose to save the executed report as a pdf file reportFilePath = System.IO.Path::Combine(this.getTempPath(), ssrsReportStr(SalesInvoice, Report) + #FileExtensionPDF); this.setReportRunControllerPrintToFile(controller, reportFilePath); // Set any required parameter values here by first getting the report contract. contract = controller.parmReportContract(); // And then fill in that contract based on the contract type (Rdl or Rdp) // Example of using an Rdp class specific data contract rdpContractClass = contract.parmRdpContract() as SalesInvoiceContract; // Set the required parameter rdpContractClass.parmCountryRegionISOCode(code); // run the report controller.runReport(); } |
|
|
За это сообщение автора поблагодарили: iiipoizone (1). |
24.07.2017, 07:50 | #7 |
Участник
|
Что то нет такого)
Попробую сделать отправку в пакете Word или Excel. Надо же как-то сделать на AX 2009 Последний раз редактировалось iiipoizone; 24.07.2017 в 07:53. |
|
24.07.2017, 09:14 | #8 |
Участник
|
Забыл спросить сразу.
В конфигурационной утилите АОСа установлена галочка "Разрешить клиентам подключаться к принтерам на этом сервере". ? На том АОСе где пакеты обрабатываются. |
|
|
За это сообщение автора поблагодарили: iiipoizone (1). |
24.07.2017, 10:52 | #9 |
Участник
|
Разрешил. Службу перезапустил. Но не помогло. Переделаю в Word
Всем спасибо) |
|