AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 11.10.2008, 10:51   #1  
offenmeier is offline
offenmeier
HAI; CAN HAS STDIO?
Аватар для offenmeier
Соотечественники
 
77 / 36 (2) +++
Регистрация: 17.02.2005
Адрес: Auckland, NZ
Navision печать на AOS
а вот такая штука. есть класс, который всегда запускается на сервере. класс занимается тем, что печатает на принтер некоторые отчеты.

пока класс запускался с клиента, все печаталось.

как только класс определили в batch job, стали печататься пустые страницы вместо отчетов.

почему такое может происходить?

печатает же SalesFormLetter_Invoice, если поставить его в пакетную обработку.

может, кто-то сталкивался, помогите советом. DAX 2009 RTM.

еще один нюанс: если делать тот же трюк с печатью в PDF, то тот же результат. запускаем с клиента - получаем замечательный PDF, ставим в пакетную обработку - PDF создаются, но пустые.

куда и как печатать - управляю через PrintJobSettings. ежели на принтер, то так:

X++:
pjs.setTarget(PrintMedium::Printer);
pjs.deviceName(printerName, ClassRunMode::Server);
а ежели в PDF, то так:

X++:
pjs.format(PrintFormat::PDF);
pjs.setTarget(PrintMedium::File);
pjs.fileName(folderPath + _sales + ".pdf");
при этом pjs тоже живет на сервере, иначе на серверный принтер не напечатает.

в чем же разница, через клиент я его запускаю, или в пакетную обработку ставлю - в обоих случаях класс на сервере отрабатывает.. в DAX 2009 сделали так, что пакетная обработка на сервере работает, если runsImpersonated = true, пытаюсь пользоваться.. что, придется таки по-старинке, batch server поднимать? не хотелось бы сдаваться, SalesFormLetter-то печатает из пакетной обработки..

помогите, господа, советом, где с бубном надо танцевать. спасибо.
__________________
our sharp bitter vitriol is not that of the vulgar.
Старый 11.10.2008, 11:25   #2  
offenmeier is offline
offenmeier
HAI; CAN HAS STDIO?
Аватар для offenmeier
Соотечественники
 
77 / 36 (2) +++
Регистрация: 17.02.2005
Адрес: Auckland, NZ
хм, немного усложнилось )

класс делает следующее:

- запускает для определенных заказов SalesFormLetter_Invoice.update(), с печатью отчета из этого класса. то есть в него передается этот printJobSettings и говорится PrintFormLetter = true.

- печатает еще два итоговых отчета. печатает в таком стиле: new ReportRun() -> передаем ему запись -> передаем ему PrintJobSettings -> reportRun.run()

теперь следим за движениями рук. я перезапускаю AOS, чищу usage data, комментирую печать итоговых отчетов. инвойсы печатаются на ура!

смотрим дальше: убираю комментарии, мол, давайте теперь то же самое, но с итоговыми отчетами - и снова печатаются пустые страницы, причем все пустые, и инвойсы тоже.

комментирую обратно свои итоговые отчеты - теперь печатаются только инвойсы, но все равно все страницы пустые.

перезапускаю AOS, чищу usage data - инвойсы печатаются, как родные.

наверное, это и есть решение, usage data чистить перед печатью - вот только неясно, какие именно. крыша едет с этими приколами.

может, более здравые мысли имеются, господа? спасибо за внимание.
__________________
our sharp bitter vitriol is not that of the vulgar.
Старый 14.10.2008, 00:29   #3  
offenmeier is offline
offenmeier
HAI; CAN HAS STDIO?
Аватар для offenmeier
Соотечественники
 
77 / 36 (2) +++
Регистрация: 17.02.2005
Адрес: Auckland, NZ
эх, что, ни у кого нет мыслей на этот счет? все отчеты я заставил печататься, а вот SalesInvoice так и не хочет из пакетной обработки.

пишу в майкрософт сегодня.
__________________
our sharp bitter vitriol is not that of the vulgar.
Старый 17.11.2008, 03:16   #4  
offenmeier is offline
offenmeier
HAI; CAN HAS STDIO?
Аватар для offenmeier
Соотечественники
 
77 / 36 (2) +++
Регистрация: 17.02.2005
Адрес: Auckland, NZ
все, разобрались с майкрософтом на пару )

в общем, в новой чудесной чисто серверной пакетной обработке, новинке версии 2009, не все так гладко, как хотелось бы.

если не вдаваться в детали, то если создавать экземпляр класса прямо внутри цикла перебора записей SalesTable, и после каждой итерации присваивать указателю null, то все работает. а если вынести invoice update в отдельную функцию и создавать объекты там, то напечатан будет только первый инвойс, все последующие пойдут на печать пустыми страницами. а иногда и первый не пойдет.

ладно, сделал, работает, закрыли. спасибо
__________________
our sharp bitter vitriol is not that of the vulgar.
За это сообщение автора поблагодарили: Poleax (1).
Старый 04.01.2011, 13:07   #5  
Dynamic is offline
Dynamic
Участник
 
2 / 10 (1) +
Регистрация: 04.01.2011
Добрый день, Offenmeier и уважаемые участники AXForum!

Мы столкнулись с 2-мя проблемами. При печати отчётов в PDF - файл в батче периодически генерируются пустые файлы (при печати с клиента все хорошо):

1. В цикле по CustTrans для каждой транзакции ищется CustInvoiceJour и для него запускается печать отчёта SalesInvoice в PDF, точно так же как в методе CustInvoiceJour.printJournal(). В результате генерируется много PDF- файлов, причём часть из этих файлов повреждённые (не открываются). Что вы могли бы посоветовать для решения этой проблемы, мне кажется, что наша проблема похожа на описанную вами. Не совсем понятно, что вы имели в виду, когда писали:
"после каждой итерации присваивать указателю null", какой конкретно указатель имеется в виду?
Не могли бы вы написать, что ответил вам Майкрософт по этому поводу?
2. Вторая проблема касается печати собственных отчётов в файл в батче. Мы написали RunBaseBatch класс и отчёт. Внутри в классе вызывается печать отчёта, это происходит, как в методе CustInvoiceJour.printJournal(). За один запуск печатается от 1 до 4 отчётов, при этом случайным образом некоторые из них печатаются повреждёнными (не открываются).
Во время тестов мы обнаружили, что проблема касается не только печати в PDF, но и вообще печати в файл (тестировали и для ASCII-файлов). В последнем случае генерируются пустые txt - файлы.
Что вы бы могли посоветовать для решения этой проблемы?
Старый 02.02.2011, 06:00   #6  
offenmeier is offline
offenmeier
HAI; CAN HAS STDIO?
Аватар для offenmeier
Соотечественники
 
77 / 36 (2) +++
Регистрация: 17.02.2005
Адрес: Auckland, NZ
зашёл сюда совершенно случайно! странно, что не получил на электронную почту уведомление о сообщении.

1. проблема возникла потом снова, и мне пришлось снова говорить с Майкрософтом. оказывается, на сервере из-за особенностей распределения памяти в переменные иногда пишется мусор. поэтому когда я создавал отчёт на сервере, одно из свойств его PrintJobSettings оказывалось равным нулю вместо единицы (свойство AllPages).

report.printJobSettings().allPages(true);

после добавления этого кода всё заработало.

2. ещё был такой баг: если в PDF была картинка (логотип к примеру), то из серверной пакетной обработки сохранить PDF невозможно, там какая-то проблема с изображениями и их выводом на сервере в PDF. я делал логотип invisible если отчёт выполняется на сервере и экспортируется в PDF, но может исправили с тех пор.
__________________
our sharp bitter vitriol is not that of the vulgar.
За это сообщение автора поблагодарили: Logger (3), player (1).
Старый 02.02.2011, 10:57   #7  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,952 / 3230 (115) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
Цитата:
Сообщение от offenmeier Посмотреть сообщение
...оказывается, на сервере из-за особенностей распределения памяти в переменные иногда пишется мусор. поэтому когда я создавал отчёт на сервере, одно из свойств его PrintJobSettings оказывалось равным нулю вместо единицы (свойство AllPages).

report.printJobSettings().allPages(true);

после добавления этого кода всё заработало.
...
Ух ты !

А это признано багой ? Или считать как данность и исправлено не будет ?

Что же теперь получается - нельзя полагаться на дефолтные значения переменных ?
Старый 03.02.2011, 02:19   #8  
offenmeier is offline
offenmeier
HAI; CAN HAS STDIO?
Аватар для offenmeier
Соотечественники
 
77 / 36 (2) +++
Регистрация: 17.02.2005
Адрес: Auckland, NZ
PrintJobSettings это как бы и не обычная переменная, это какая-то структура описанная в .NET коде ядра. попробуй в дебаггере посмотреть, что у неё внутри: лично мне так и не удалось внутрь заглянуть.

ни до этого, ни после, я не встречался с подобными проблемами, я думаю, что скорее всего этот баг (а я думаю, что это баг) относится только к PrintJobSettings и только к этому его свойству AllPages, наверное пропустили его в .NET коде инициализации, и туда попадает мусор.
__________________
our sharp bitter vitriol is not that of the vulgar.
Старый 23.02.2011, 15:46   #9  
Dynamic is offline
Dynamic
Участник
 
2 / 10 (1) +
Регистрация: 04.01.2011
Здравствуйте, Offenmeier.

Большое спасибо за ответ (по поводу печати в PDF из серверного батча)!
Он нам очень помог!
Старый 05.03.2013, 10:14   #10  
SVlk is offline
SVlk
Участник
 
7 / 10 (1) +
Регистрация: 17.01.2012
Аксапта 2009.
Есть следующий код:

X++:
public void run()
{
    SalesReport_Invoice4Paym_RU launcher;
    PrintJobSettings            printJobSettings;
    FileName                    fileName;
    ;
    super();

    invoice4PaymJour = CustInvoice4PaymJour_RU::find('0100000');

    fileName = strfmt("%1%2.pdf", 'C:\\temp\\', invoice4PaymJour.Invoice4PaymId);

    printJobSettings = new PrintJobSettings();
    printJobSettings.format(PrintFormat::PDF);
    printJobSettings.setTarget(PrintMedium::File);
    printJobSettings.allPages(true);
    printJobSettings.fileName(fileName);

    launcher = new SalesReport_Invoice4Paym_RU();
    launcher.setParameters(PrintCopyOriginal::OriginalPrint, invoice4PaymJour);

    launcher.prompt();
    launcher.setPrintJobSettings(printJobSettings.packPrintJobSettings());
    launcher.run();
}
Класс наследник RunBaseBatch, выполняется на сервере (если вместо этого кода написать копирование файла - отрабатывает на сервере, проверял).
Но PDF файл создается на локальной машине.
Если запускать в пакетной обработке - падает сервер.
Картинка в отчете есть, но я ее скрываю.

Помогите, кто сталкивался.
-------------------------------
Зашел с другой стороны:
Сделал тупой отчет с одной строчкой, класс наследник RunBaseReport (серверный)

переопределил функцию:
X++:
void makePrintJobSettings()
{
    FileName                    fileName;
    ;
    super();

    fileName = 'C:\\temp\\test123.pdf';

    printJobSettings = new PrintJobSettings();
    printJobSettings.format(PrintFormat::PDF);
    printJobSettings.setTarget(PrintMedium::File);
    printJobSettings.allPages(true);
    printJobSettings.fileName(fileName);
}
При запуске руками - создает файл на локальной машине.
При запуске в батче выдает ошибку:

Ошибка времени выполнения: PrintJobSettings Объект не инициализирован.

(S)\Classes\PrintJobSettings\packPrintJobSettings
(S)\Classes\RunBaseReport\run - line 16
(S)\Classes\BatchRun\runJobStatic - line 63

По всему выходит что PrintJobSettings - чисто клиентский объект.
Как его сделать серверным?
В этой ветке у всех получилось.
Что я делаю не так?
Старый 05.03.2013, 16:55   #11  
SVlk is offline
SVlk
Участник
 
7 / 10 (1) +
Регистрация: 17.01.2012
Победил.
Во втором примере в Run() добавил this.initParmDefault();
Заработало.
Точнее стал говорить внятные ошибки.
Причины в массе клиентских вызовов в разных местах.
Когда все поубирал - заработало.
В том числе и первый пример.

Отлаживал на сервере по методе:
Отладка на сервере

По поводу изображений - да, не работает с изображениями.
Класс Image - клиентский.
В хелпе такое висит:
Note
In Microsoft Dynamics AX, the Image class is bound to the client. The class can no longer be run from the server because of the security risks that are associated with file handling.


А в классе PDFViewer в методе writeBitmap на 49 строчке используется:
img = new Image(c);
Теги
aos, ax2009, pdf, печать

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
daxis: Troubleshooting blocked SPIDS in AOS Blog bot DAX Blogs 0 01.04.2009 18:05
Arijit Basu: Multiple AOS in a Multi CPU Machine :) Blog bot DAX Blogs 1 19.12.2007 17:11
Arijit Basu: AX 4 AOS Basics: [Level 100] Blog bot DAX Blogs 0 18.11.2007 14:30
DynamicsTech: What's New in Dynamics Ax 4.0 AOS? Blog bot DAX Blogs 0 12.04.2007 11:50
axaptapedia: Control AOS from command line Blog bot DAX Blogs 0 09.03.2007 14:50

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 15:31.