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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 24.07.2006, 15:49   #1  
Pavel Pustovalov is offline
Pavel Pustovalov
Участник
 
65 / 11 (1) +
Регистрация: 09.08.2004
Адрес: Omsk
Печать на принтер подпакетами
Всем, здрасьте.

Как реализовать вывод на печать группами?
Ситуация следующая. На принтер поступают документы по заказу (накладные, с/ф и др.) , в порядке очериди, но т.к. некоторые документы занимают больший размер, чем другие иногда возникает ситуации, при которых выводится один документ с одного заказа, затем длокумент с другого заказа
Как можно сделать так, чтобы сначала печатались все документы по одному заказу, потом по другому. Т.е. ставить в очередь на печать не документы, а группы документов.

Всем заранее спасибо за советы, комментарии и предложения.
Старый 24.07.2006, 16:33   #2  
kvg6 is offline
kvg6
program-ёр
Аватар для kvg6
1C
 
160 / 81 (3) ++++
Регистрация: 27.09.2005
Адрес: Moscow forever
Похожая история Как временно приостановить обработку?
__________________
Становись лучше
Старый 25.07.2006, 05:37   #3  
Dodger is offline
Dodger
Участник
 
26 / 15 (1) ++
Регистрация: 02.12.2005
Если мне не изменяет память, то можно покопаться в классах:
PrintJobSettings
SysPrintOptions
Старый 31.07.2006, 05:41   #4  
Pavel Pustovalov is offline
Pavel Pustovalov
Участник
 
65 / 11 (1) +
Регистрация: 09.08.2004
Адрес: Omsk
Попробовал покопаться в классах, почитал ветку, ничего полезного к сожалению не нашел.
Здесь приостанавливать печать нам не нужно, нужно именно задать определенный порядок вывода на принтер, чтобы print spooler его не поменял.
Старый 31.07.2006, 14:02   #5  
Владимир Максимов is offline
Владимир Максимов
Участник
КОРУС Консалтинг
 
1,698 / 1195 (43) ++++++++
Регистрация: 13.01.2004
Записей в блоге: 3
Я что-то плохо понял постановку задачи.

Пользователь нажал кнопку и пошла печать пакет документов. Без дополнительного диалога с пользователем.

Другой пользователь в то же время нажал ту же кнопку и пошла печать другого пакета документов.

Поскольку печать идет физически на один и тот же принтер, то в очередь задания попадают по мере готовности вне зависимости от того, от какого пользователя они пришли и что этому предшествовало.

Так?

Если все так и обстоит, то лучше сделать дополнительную табличку с выставлением флага. Если флаг стоит, то на принтер ничего не посылаем. Ждем пока флаг будет снят. Перед отправкой на принтер сами устанавливаем флаг, после завершения печати снимаем.

В любом случае, как-то "рулить" очередью принтера - бессмысленно
Старый 31.07.2006, 14:18   #6  
Pavel Pustovalov is offline
Pavel Pustovalov
Участник
 
65 / 11 (1) +
Регистрация: 09.08.2004
Адрес: Omsk
Не совсем так.
На примере: есть Заказ1, по нему сформировали накладную, отправили на печать, сформировали фактуру, отправили на печать, затем по Заказу2 то же самое: сформировали накладную, отпарвили на печать, сформировали фактуру, отпарвили на печать. Т.е. на Print Spooler документы попадают в нужной последовательности.
Но, иногда возникает след. ситуация: накладная и фактура по Заказу1 не влезают в буфер принтера вместе, но туда влезают накладная по Заказу1 и по Заказу2 соотв. на принтер документы могут попасть не в той последоватеьльности (что и происходит), в которой они отсылались на печать из Аксапты.
Поэтому нам нужно как-то реализовать подпакет для печати, в котором будут все документы по одному заказу, чтобы соблюсти последовательность отправки на печать заказов.
Старый 31.07.2006, 20:02   #7  
Владимир Максимов is offline
Владимир Максимов
Участник
КОРУС Консалтинг
 
1,698 / 1195 (43) ++++++++
Регистрация: 13.01.2004
Записей в блоге: 3
Я на эти грабли уже наступал. Почему Вы решили что проблема именно в спуллере принтера? Он что, как-то проверяет влезет в него пришедший пакет или нет еще ДО собственно попытки что-то там принять?

Судя по описанию, проблема именно в порядке отправки заданий на печать. Если у Вас процесс печати накладной и счета фактуры по одному и тому же заказу разнесены во времени, то не удивляйтесь, что между ними "втиснется" накладная от другого заказа. Принтер тут вообще не при чем! Это стандартная ситуация в многопользовательских приложениях.

Вам надо сделать следующее:

1) Процесс печати накладной и счета фактуры должен быть организован одним пакетом без вмешательства пользователя.

Под "пакетом" в данном случае я понимаю программную отправку на печать документов. Без открытия окон предварительного просмотра. Совсем грубо, нечто вроде

PHP код:
reportRunPacking.printJobSettings().setTarget(PrintMedium::Printer);
reportRunPacking.run();
reportRunInvoice.printJobSettings().setTarget(PrintMedium::Printer);
reportRunInvoice.run(); 
2) Как уже было описано ранее, эта отправка на печать должна быть окружена установкой и снятием некоего флага, свидетельствующего о том, что идет печать "пакета", просьба подождать.

Это НЕ проблема спуллера принтера - это проблема AXAPTA.
За это сообщение автора поблагодарили: Pavel Pustovalov (1).
Старый 01.08.2006, 06:00   #8  
Pavel Pustovalov is offline
Pavel Pustovalov
Участник
 
65 / 11 (1) +
Регистрация: 09.08.2004
Адрес: Omsk
2 Владимир Максимов:
про спуллер
это нам наши айтишники сказали

в коде же как раз примерно такая рализация как вы и описали (reportRunInvoice.run()), последовательный вывод на принтер докментов по заказу потом переход на другой заказ: примерно так: пользователя нажимает кнопку "Печать документов" в некой форме, далее происходит примерно следующее.
Код:
while select salesTable
   where salesTable.DeliveryDate == 01\08\2006
{
   SalesDocs.print(salesTable)
}
в классе salesDocs происходит перебор необходимых документов по заказу и вывод соотв. отчета на принтер
Идею вашу я понял, хотя как мне кажется у нас как раз и реализовано нечто подобное, попробую еще покопаться, может чего упустил.
Старый 01.08.2006, 10:11   #9  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2479 (88) +++++++++
Регистрация: 20.08.2005
Цитата:
Сообщение от Владимир Максимов
Я на эти грабли уже наступал. Почему Вы решили что проблема именно в спуллере принтера? Он что, как-то проверяет влезет в него пришедший пакет или нет еще ДО собственно попытки что-то там принять?

Судя по описанию, проблема именно в порядке отправки заданий на печать. Если у Вас процесс печати накладной и счета фактуры по одному и тому же заказу разнесены во времени, то не удивляйтесь, что между ними "втиснется" накладная от другого заказа. Принтер тут вообще не при чем! Это стандартная ситуация в многопользовательских приложениях.

Это НЕ проблема спуллера принтера - это проблема AXAPTA.
Не согласен - это как раз таки спулер.
Стакивался с этим, когда реализовывал печать сертификационных документов по накладным. Вначале сделал вывод каждого документа, как отдельное задание на печать - в результате печатались в совершенно произвольном порядке. Пришлось переделывать - все документы засовывал в одно задание.
__________________
Axapta v.3.0 sp5 kr2
Старый 01.08.2006, 11:11   #10  
Pavel Pustovalov is offline
Pavel Pustovalov
Участник
 
65 / 11 (1) +
Регистрация: 09.08.2004
Адрес: Omsk
Цитата:
Сообщение от AndyD
Не согласен - это как раз таки спулер.
Стакивался с этим, когда реализовывал печать сертификационных документов по накладным. Вначале сделал вывод каждого документа, как отдельное задание на печать - в результате печатались в совершенно произвольном порядке. Пришлось переделывать - все документы засовывал в одно задание.
А не подскажите как организовать это одно задание для группы документов?
Старый 25.08.2006, 14:19   #11  
Rect is offline
Rect
Участник
 
43 / 11 (1) +
Регистрация: 29.05.2006
Цитата:
Сообщение от AndyD
Вначале сделал вывод каждого документа, как отдельное задание на печать - в результате печатались в совершенно произвольном порядке. Пришлось переделывать - все документы засовывал в одно задание.
т.е., например, создается один отчет, включающий в себя печатные формы нескольких документов и между документами вставляется разделитель страниц. Я правильно понял?
Старый 25.08.2006, 14:37   #12  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2479 (88) +++++++++
Регистрация: 20.08.2005
Не совсем.
Это делалось не в Axapta. Отсканированные сертификаты в виде рисунков выводились на печать с помощью WINAPI-функций
__________________
Axapta v.3.0 sp5 kr2
Старый 25.08.2006, 15:16   #13  
Rect is offline
Rect
Участник
 
43 / 11 (1) +
Регистрация: 29.05.2006
А в axapt'e интересно возможно как-нибудь с помощью api-функций выкрутиться?
Старый 01.09.2006, 18:58   #14  
somebody is offline
somebody
Участник
 
128 / 30 (2) +++
Регистрация: 30.04.2003
Адрес: Москва
Цитата:
Сообщение от Владимир Максимов
Это НЕ проблема спуллера принтера - это проблема AXAPTA.
Цитата:
Сообщение от AndyD
Не согласен - это как раз таки спулер.
Стакивался с этим, когда реализовывал печать сертификационных документов по накладным. Вначале сделал вывод каждого документа, как отдельное задание на печать - в результате печатались в совершенно произвольном порядке. Пришлось переделывать - все документы засовывал в одно задание.
Цитата:
Сообщение от AndyD
Это делалось не в Axapta. Отсканированные сертификаты в виде рисунков выводились на печать с помощью WINAPI-функций
2 AndyD

AndyD, хотелось бы мне знать:
1. Наблюдали ли Вы окно очереди принтера? И в окне документы помещались в очередь не в том порядке, в каком отсылались на печать?! То есть, если уж "виноват спулер", он именно должен был нарушить очередь - а в этом я сомневаюсь.
Либо это был какой-то чересчур умный принтер, с собственной сортировкой?
2. Какой программой выводились на печать документы (всё-таки из Аксапты, но через WinAPI, или откуда-то ещё)?
3. Версия Windows? Сетевой или локальный принтер? При печати не вмешивались ли задания других пользователей?

Дело в том, что Володя реально и долго занимался проблемой очереди на печать, как раз при выводе сертификатов из Аксапты, и я с его мнением согласен. Очередь на печать должна идти в порядке отсылки, если одинаковы права и приоритеты.
Старый 04.09.2006, 17:48   #15  
KiselevSA is offline
KiselevSA
Злыдни
Аватар для KiselevSA
Злыдни
Лучший по профессии 2015
 
958 / 333 (13) ++++++
Регистрация: 25.01.2002
Адрес: Москва
Мне кажется, что решить данную проблему программированием не удастся. В центрах обслуживания клиентов с большой нагрузкой по печати от нескольких операторов "дешевле" поставить хороший принтер с сортировщиком. Для каждого оператора назначается свой лоток вывода. Печать "пакета" документов: накладная, счет-фактура и приложения (набор сертификатов) должна выполняться одним заданием для оператора. В худшем случае это приведет лишь к разделению одного набора документов от другого, без перемешивания внутри пакета
Старый 04.09.2006, 20:25   #16  
Recoilme is offline
Recoilme
злыдень
Аватар для Recoilme
Злыдни
 
895 / 192 (8) ++++++
Регистрация: 18.06.2003
Цитата:
Сообщение от somebody
Дело в том, что Володя реально и долго занимался проблемой очереди на печать, как раз при выводе сертификатов из Аксапты, и я с его мнением согласен. Очередь на печать должна идти в порядке отсылки, если одинаковы права и приоритеты.
Можно ещё, например, склеить все изображения в один файл, например в html. И послать один документ, для решения проблемы единовременной печати тех же сертификатов. Иногда так проще.
__________________
Ибо зло есть лучшая сила человека. "Человек должен становиться все лучше и злее" -- так учу я. /Ф. Ницше/

Последний раз редактировалось Recoilme; 04.09.2006 в 20:32.
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Отчеты и печать штрих кода KingPeas DAX: Программирование 18 24.09.2008 14:31
Как получить указатель на отчёт когда пользователь выбрал Печать на принтер в просмотрщике, в форму SysPrintForm? rkorchagin DAX: Программирование 10 17.04.2008 11:59
Печать сразу на принтер. egorych DAX: Программирование 3 14.02.2008 15:28
Печать на сервере ZVV DAX: Администрирование 5 09.11.2004 15:47
автоматическая печать копии отчета на другой принтер lexx DAX: Программирование 0 27.09.2004 11:34

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

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

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