powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / последовательная печать отчетов и файлов PDf
5 сообщений из 5, страница 1 из 1
последовательная печать отчетов и файлов PDf
    #39442036
Фотография Разумная кровать
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здравствуйте, уважаемые знатоки.

Мы в компании реализовали печать комплекта документов и PDF файлов-сканов сертификатов продукции.

Первыми на печать отправляются счета-фактуры и товарно-транспортные накладные выводятся через DoCmd.OpenReport.
Затем на печать отправляются файлы PDF при помощи
Код: vbnet
1.
2.
Set Wsh = CreateObject("Wscript.Shell")
Call Wsh.Run(FilePath, 0, True).




И возникла проблема. Если необходимо распечатать сразу несколько комплекто на несколько поставок, то получается следующее.

Из кода отправляем печать аксесовых отчетов. Они все правильно встают в очередь. Затем печатаем PDF файлы. Они начинают вставать в очередь. Затем мы переходим к печати к следующему документу, начинаем печатать аксесовые документы по следующей поставке. Но в этот момент ещё не была закончена печать PDF файлов из предыдущего комплекта

И получается, что вместо правильно отсортированной распечатанной пачки документов, мы получаем пачку с не пойми как разложенными сертификатами.

Я попытался задать Sleep. Это помогло, но не сильно. Сотрудникам все равно приходится вручную сортировать документы.

Каким образом можно заставить код VBA перейти к печати следующего комлекта только после того, как будет распечатан последний файл PDF ?
...
Рейтинг: 0 / 0
последовательная печать отчетов и файлов PDf
    #39442102
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Разумная кроватьЗатем на печать отправляются файлы PDF при помощи
Код: vbnet
1.
2.
Set Wsh = CreateObject("Wscript.Shell")
Call Wsh.Run(FilePath, 0, True)


По-моему, этот код открывает файл на просмотр... и то при условии, что .PDF имеется в %PATHEXT%. Или в FilePath сформирована строка запуска связанного приложения и печати файла?

Разумная кроватьполучается, что вместо правильно отсортированной распечатанной пачки документов, мы получаем пачку с не пойми как разложенными сертификатами.

Я попытался задать Sleep. Это помогло, но не сильно. Сотрудникам все равно приходится вручную сортировать документы.
Могу предложить через WMI получать список (ну или просто количество) заданий печати в очереди дефолтного (или нужного) принтера, и инициировать печать следующего документа только когда очередь пуста. Что-то типа:

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
Set Wsh = CreateObject("Wscript.Shell")
Set objWMIService = GetObject("winmgmts:\\.\root\CIMV2") 
For Each FilePath In FilePathCollection
    Do
        DoEvents
        Set colItems = objWMIService.ExecQuery("SELECT * FROM Win32_PrintJob",,48) 
    Loop Until colItems.Items.Count = 0
    Call Wsh.Run(FilePath, 0, True)
Next
...
Рейтинг: 0 / 0
последовательная печать отчетов и файлов PDf
    #39442166
AkinaРазумная кроватьЗатем на печать отправляются файлы PDF при помощи
Код: vbnet
1.
Call Wsh.Run(FilePath, 0, True)


По-моему, этот код открывает файл на просмотр... и то при условии, что .PDF имеется в %PATHEXT%. Или в FilePath сформирована строка запуска связанного приложения и печати файла? У меня тоже вопросы. Этот код гласит - открыть файл в скрытом окне ассоциированного приложения и остановить вызвавший процесс до закрытия приложения. Проверил - показывает (!) файл в окне Акробата. Поэтому:
1. Как вы добились, что файл сразу печатается?
2. Если вызвавший код останавливается до завершения процесса, то как получается, что следующий пакет печатается не дожидаясь его завершения?

На заметку - API функция ShellExecute умеет сразу отправлять на печать указанный файл.
...
Рейтинг: 0 / 0
последовательная печать отчетов и файлов PDf
    #39442171
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Анатолий ( Киев )2. Если вызвавший код останавливается до завершения процесса, то как получается, что следующий пакет печатается не дожидаясь его завершения?Да это как раз понятно как может быть... открылось окно - пустили на печать и закрыли, открылось второе - пустили на печать и закрыли, открылось третье - пустили на печать... а принтер ещё не закончил печать первого, и какой будет напечатан после печати первого (второй или третий) - это лотерея.
...
Рейтинг: 0 / 0
последовательная печать отчетов и файлов PDf
    #39442216
Фотография Разумная кровать
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AkinaПо-моему, этот код открывает файл на просмотр... и то при условии, что .PDF имеется в %PATHEXT%. Или в FilePath сформирована строка запуска связанного приложения и печати файла?


Саму строку запуска на печать я получал вот таким вот образом

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
PDFPath = oShell.regread("HKEY_CLASSES_ROOT\Software\Adobe\Acrobat\Exe\") & " /p /h %1"

.....

strFilePath = Replace(strPDFReaderPath, "%1", strFileNAme)

'и запускаем 
Shell strFilePath




Ещё хочу добавить, что вчера хотел выложить обновление с Wsh.Run(FilePath, 0, True), а не выложил. Потому используется обычный Shell. Также добавил вчера ещё один Sleep на 20 секунд после печати каждого коплекта, и сегодня(вот только пришла информация) все распечаталось нормально.


Идея с просмотром очереди печати. Спасибо большое за неё, если проблемы возникнут снова, попробую сей метод.
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / последовательная печать отчетов и файлов PDf
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]