0
delgadoo
24.05.19
✎
11:42
|
Всем добрый день! Ситуация такая:
1) при печати из 1С необходимо опросить состояние принтера (который стоит по умолчанию), и при наличии каких-либо ошибок - выводить соответствующее окно и завершать дальнейшее выполнение кода.
2) в том случае, если в принтере закончилась бумага - принтер об этом узнает только если попытается что-то распечатать и если у него не получается напечатать, то он меняет статус на условно говоря "С ошибкой". Вот тут важный момент!: очередь печати в самом принтере остается и если вставить бумагу в лоток, печать продолжится.
Вопрос: необходимо в тот момент, когда принтер "словил" ошибку печати, очищать эту самую очередь у принтера.
п.с.
в документации можно найти расширенное состояние принтера "Мало бумаги" - но но при опросе принтера такого статуса не было (видимо машина достаточно простая). Принтер Kyocera Ecosys p30445dn
при печати как я понял используется 2 очереди: виндовая и очередь в самом принтере. Очередь виндовую получается почистить средствами 1С, а вот очередь принтера - нет.
получение принтеров и очистка виндовой очереди реализована вот так:
objWMIService = ПолучитьCOMОбъект ("winmgmts:{impersonationLevel=impersonate}!\\" +ИмяКомпьютера() + "\root\cimv2");
colPrinters = objWMIService.ExecQuery("Select * From Win32_Printer");
Product = colPrinters[0];
Сори, не нашел как код тегом оформить.
Product.CancelAllJobs();
|
|