24.07.2006, 15:49 | #1 |
Участник
|
Печать на принтер подпакетами
Всем, здрасьте.
Как реализовать вывод на печать группами? Ситуация следующая. На принтер поступают документы по заказу (накладные, с/ф и др.) , в порядке очериди, но т.к. некоторые документы занимают больший размер, чем другие иногда возникает ситуации, при которых выводится один документ с одного заказа, затем длокумент с другого заказа Как можно сделать так, чтобы сначала печатались все документы по одному заказу, потом по другому. Т.е. ставить в очередь на печать не документы, а группы документов. Всем заранее спасибо за советы, комментарии и предложения. |
|
24.07.2006, 16:33 | #2 |
program-ёр
|
Похожая история Как временно приостановить обработку?
__________________
Становись лучше |
|
25.07.2006, 05:37 | #3 |
Участник
|
Если мне не изменяет память, то можно покопаться в классах:
PrintJobSettings SysPrintOptions |
|
31.07.2006, 05:41 | #4 |
Участник
|
Попробовал покопаться в классах, почитал ветку, ничего полезного к сожалению не нашел.
Здесь приостанавливать печать нам не нужно, нужно именно задать определенный порядок вывода на принтер, чтобы print spooler его не поменял. |
|
31.07.2006, 14:02 | #5 |
Участник
|
Я что-то плохо понял постановку задачи.
Пользователь нажал кнопку и пошла печать пакет документов. Без дополнительного диалога с пользователем. Другой пользователь в то же время нажал ту же кнопку и пошла печать другого пакета документов. Поскольку печать идет физически на один и тот же принтер, то в очередь задания попадают по мере готовности вне зависимости от того, от какого пользователя они пришли и что этому предшествовало. Так? Если все так и обстоит, то лучше сделать дополнительную табличку с выставлением флага. Если флаг стоит, то на принтер ничего не посылаем. Ждем пока флаг будет снят. Перед отправкой на принтер сами устанавливаем флаг, после завершения печати снимаем. В любом случае, как-то "рулить" очередью принтера - бессмысленно |
|
31.07.2006, 14:18 | #6 |
Участник
|
Не совсем так.
На примере: есть Заказ1, по нему сформировали накладную, отправили на печать, сформировали фактуру, отправили на печать, затем по Заказу2 то же самое: сформировали накладную, отпарвили на печать, сформировали фактуру, отпарвили на печать. Т.е. на Print Spooler документы попадают в нужной последовательности. Но, иногда возникает след. ситуация: накладная и фактура по Заказу1 не влезают в буфер принтера вместе, но туда влезают накладная по Заказу1 и по Заказу2 соотв. на принтер документы могут попасть не в той последоватеьльности (что и происходит), в которой они отсылались на печать из Аксапты. Поэтому нам нужно как-то реализовать подпакет для печати, в котором будут все документы по одному заказу, чтобы соблюсти последовательность отправки на печать заказов. |
|
31.07.2006, 20:02 | #7 |
Участник
|
Я на эти грабли уже наступал. Почему Вы решили что проблема именно в спуллере принтера? Он что, как-то проверяет влезет в него пришедший пакет или нет еще ДО собственно попытки что-то там принять?
Судя по описанию, проблема именно в порядке отправки заданий на печать. Если у Вас процесс печати накладной и счета фактуры по одному и тому же заказу разнесены во времени, то не удивляйтесь, что между ними "втиснется" накладная от другого заказа. Принтер тут вообще не при чем! Это стандартная ситуация в многопользовательских приложениях. Вам надо сделать следующее: 1) Процесс печати накладной и счета фактуры должен быть организован одним пакетом без вмешательства пользователя. Под "пакетом" в данном случае я понимаю программную отправку на печать документов. Без открытия окон предварительного просмотра. Совсем грубо, нечто вроде PHP код:
Это НЕ проблема спуллера принтера - это проблема AXAPTA. |
|
|
За это сообщение автора поблагодарили: Pavel Pustovalov (1). |
01.08.2006, 06:00 | #8 |
Участник
|
2 Владимир Максимов:
про спуллер это нам наши айтишники сказали в коде же как раз примерно такая рализация как вы и описали (reportRunInvoice.run()), последовательный вывод на принтер докментов по заказу потом переход на другой заказ: примерно так: пользователя нажимает кнопку "Печать документов" в некой форме, далее происходит примерно следующее. Код: while select salesTable where salesTable.DeliveryDate == 01\08\2006 { SalesDocs.print(salesTable) } Идею вашу я понял, хотя как мне кажется у нас как раз и реализовано нечто подобное, попробую еще покопаться, может чего упустил. |
|
01.08.2006, 10:11 | #9 |
Участник
|
Цитата:
Сообщение от Владимир Максимов
Я на эти грабли уже наступал. Почему Вы решили что проблема именно в спуллере принтера? Он что, как-то проверяет влезет в него пришедший пакет или нет еще ДО собственно попытки что-то там принять?
Судя по описанию, проблема именно в порядке отправки заданий на печать. Если у Вас процесс печати накладной и счета фактуры по одному и тому же заказу разнесены во времени, то не удивляйтесь, что между ними "втиснется" накладная от другого заказа. Принтер тут вообще не при чем! Это стандартная ситуация в многопользовательских приложениях. Это НЕ проблема спуллера принтера - это проблема AXAPTA. Стакивался с этим, когда реализовывал печать сертификационных документов по накладным. Вначале сделал вывод каждого документа, как отдельное задание на печать - в результате печатались в совершенно произвольном порядке. Пришлось переделывать - все документы засовывал в одно задание.
__________________
Axapta v.3.0 sp5 kr2 |
|
01.08.2006, 11:11 | #10 |
Участник
|
Цитата:
Сообщение от AndyD
Не согласен - это как раз таки спулер.
Стакивался с этим, когда реализовывал печать сертификационных документов по накладным. Вначале сделал вывод каждого документа, как отдельное задание на печать - в результате печатались в совершенно произвольном порядке. Пришлось переделывать - все документы засовывал в одно задание. |
|
25.08.2006, 14:19 | #11 |
Участник
|
Цитата:
Сообщение от AndyD
Вначале сделал вывод каждого документа, как отдельное задание на печать - в результате печатались в совершенно произвольном порядке. Пришлось переделывать - все документы засовывал в одно задание.
|
|
25.08.2006, 14:37 | #12 |
Участник
|
Не совсем.
Это делалось не в Axapta. Отсканированные сертификаты в виде рисунков выводились на печать с помощью WINAPI-функций
__________________
Axapta v.3.0 sp5 kr2 |
|
25.08.2006, 15:16 | #13 |
Участник
|
А в axapt'e интересно возможно как-нибудь с помощью api-функций выкрутиться?
|
|
01.09.2006, 18:58 | #14 |
Участник
|
Цитата:
Сообщение от Владимир Максимов
Это НЕ проблема спуллера принтера - это проблема AXAPTA.
Цитата:
Сообщение от AndyD
Не согласен - это как раз таки спулер.
Стакивался с этим, когда реализовывал печать сертификационных документов по накладным. Вначале сделал вывод каждого документа, как отдельное задание на печать - в результате печатались в совершенно произвольном порядке. Пришлось переделывать - все документы засовывал в одно задание. Цитата:
Сообщение от AndyD
Это делалось не в Axapta. Отсканированные сертификаты в виде рисунков выводились на печать с помощью WINAPI-функций
AndyD, хотелось бы мне знать: 1. Наблюдали ли Вы окно очереди принтера? И в окне документы помещались в очередь не в том порядке, в каком отсылались на печать?! То есть, если уж "виноват спулер", он именно должен был нарушить очередь - а в этом я сомневаюсь. Либо это был какой-то чересчур умный принтер, с собственной сортировкой? 2. Какой программой выводились на печать документы (всё-таки из Аксапты, но через WinAPI, или откуда-то ещё)? 3. Версия Windows? Сетевой или локальный принтер? При печати не вмешивались ли задания других пользователей? Дело в том, что Володя реально и долго занимался проблемой очереди на печать, как раз при выводе сертификатов из Аксапты, и я с его мнением согласен. Очередь на печать должна идти в порядке отсылки, если одинаковы права и приоритеты. |
|
04.09.2006, 17:48 | #15 |
Злыдни
|
Мне кажется, что решить данную проблему программированием не удастся. В центрах обслуживания клиентов с большой нагрузкой по печати от нескольких операторов "дешевле" поставить хороший принтер с сортировщиком. Для каждого оператора назначается свой лоток вывода. Печать "пакета" документов: накладная, счет-фактура и приложения (набор сертификатов) должна выполняться одним заданием для оператора. В худшем случае это приведет лишь к разделению одного набора документов от другого, без перемешивания внутри пакета
|
|
04.09.2006, 20:25 | #16 |
злыдень
|
Цитата:
Сообщение от somebody
Дело в том, что Володя реально и долго занимался проблемой очереди на печать, как раз при выводе сертификатов из Аксапты, и я с его мнением согласен. Очередь на печать должна идти в порядке отсылки, если одинаковы права и приоритеты.
__________________
Ибо зло есть лучшая сила человека. "Человек должен становиться все лучше и злее" -- так учу я. /Ф. Ницше/ Последний раз редактировалось Recoilme; 04.09.2006 в 20:32. |
|