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, 14:02   #4  
Владимир Максимов is offline
Владимир Максимов
Участник
КОРУС Консалтинг
 
1,698 / 1195 (43) ++++++++
Регистрация: 13.01.2004
Записей в блоге: 3
Я что-то плохо понял постановку задачи.

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

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

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

Так?

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

В любом случае, как-то "рулить" очередью принтера - бессмысленно
Старый 31.07.2006, 14:18   #5  
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   #6  
Владимир Максимов 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   #7  
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   #8  
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   #9  
Pavel Pustovalov is offline
Pavel Pustovalov
Участник
 
65 / 11 (1) +
Регистрация: 09.08.2004
Адрес: Omsk
Цитата:
Сообщение от AndyD
Не согласен - это как раз таки спулер.
Стакивался с этим, когда реализовывал печать сертификационных документов по накладным. Вначале сделал вывод каждого документа, как отдельное задание на печать - в результате печатались в совершенно произвольном порядке. Пришлось переделывать - все документы засовывал в одно задание.
А не подскажите как организовать это одно задание для группы документов?
Старый 25.08.2006, 14:19   #10  
Rect is offline
Rect
Участник
 
43 / 11 (1) +
Регистрация: 29.05.2006
Цитата:
Сообщение от AndyD
Вначале сделал вывод каждого документа, как отдельное задание на печать - в результате печатались в совершенно произвольном порядке. Пришлось переделывать - все документы засовывал в одно задание.
т.е., например, создается один отчет, включающий в себя печатные формы нескольких документов и между документами вставляется разделитель страниц. Я правильно понял?
Старый 01.09.2006, 18:58   #11  
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, 20:25   #12  
Recoilme is offline
Recoilme
злыдень
Аватар для Recoilme
Злыдни
 
895 / 192 (8) ++++++
Регистрация: 18.06.2003
Цитата:
Сообщение от somebody
Дело в том, что Володя реально и долго занимался проблемой очереди на печать, как раз при выводе сертификатов из Аксапты, и я с его мнением согласен. Очередь на печать должна идти в порядке отсылки, если одинаковы права и приоритеты.
Можно ещё, например, склеить все изображения в один файл, например в html. И послать один документ, для решения проблемы единовременной печати тех же сертификатов. Иногда так проще.
__________________
Ибо зло есть лучшая сила человека. "Человек должен становиться все лучше и злее" -- так учу я. /Ф. Ницше/

Последний раз редактировалось Recoilme; 04.09.2006 в 20:32.
Старый 25.08.2006, 14:37   #13  
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   #14  
Rect is offline
Rect
Участник
 
43 / 11 (1) +
Регистрация: 29.05.2006
А в axapt'e интересно возможно как-нибудь с помощью api-функций выкрутиться?
Старый 04.09.2006, 17:48   #15  
KiselevSA is offline
KiselevSA
Злыдни
Аватар для KiselevSA
Злыдни
Лучший по профессии 2015
 
958 / 333 (13) ++++++
Регистрация: 25.01.2002
Адрес: Москва
Мне кажется, что решить данную проблему программированием не удастся. В центрах обслуживания клиентов с большой нагрузкой по печати от нескольких операторов "дешевле" поставить хороший принтер с сортировщиком. Для каждого оператора назначается свой лоток вывода. Печать "пакета" документов: накладная, счет-фактура и приложения (набор сертификатов) должна выполняться одним заданием для оператора. В худшем случае это приведет лишь к разделению одного набора документов от другого, без перемешивания внутри пакета
Старый 31.07.2006, 05:41   #16  
Pavel Pustovalov is offline
Pavel Pustovalov
Участник
 
65 / 11 (1) +
Регистрация: 09.08.2004
Адрес: Omsk
Попробовал покопаться в классах, почитал ветку, ничего полезного к сожалению не нашел.
Здесь приостанавливать печать нам не нужно, нужно именно задать определенный порядок вывода на принтер, чтобы print spooler его не поменял.
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Отчеты и печать штрих кода 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, время: 15:57.