Версия для печати темы (https://pro1c.org.ua/index.php?s=4dbb5ef563060de26560d2b7e964b495&showtopic=28423)

Нажмите сюда для просмотра этой темы в обычном формате

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 _ Программирование в 1С Предприятие 8.3 _ Исключение при ошибке печати

Автор: logist 29.02.16, 11:43

                Попытка
                    ТабличныйДокумент.Напечатать(РежимИспользованияДиалогаПечати.НеИспользовать);
                Исключение
                    Ошибка = Истина;
                КонецПопытки;

Допустим принтер выключен, или по какой-то другой причине, 1С в момент печати выдает окно "Ошибка печати", как поймать эту ошибку? Исключение не срабатывает.

Автор: pablo 29.02.16, 11:48

Это ошибка уровня ОС и 1с, вероятно, не сбрасывает такие исключения в транслятор, поэтому перехватывать такой Exception возможно только через некую внешнюю приблуду, которая будет перехватывать сообщения ОС, анализировать и передавать в 1с каким-либо способом (самый топорный - через файл на диске). Скорее всего, ничего готового нет.

Автор: sava1 29.02.16, 12:25

Цитата(pablo @ 29.02.16, 11:48) *
ошибка уровня ОС

Это не ошибка - система тупо вставит задание в спулер. Может, попрововать печатать без очереди....
Или проверять доступность принтера до печати.

Автор: pablo 29.02.16, 12:57

на самом деле, система может выдавать

Цитата
окно "Ошибка печати"
и может не выдавать. Это зависит от установленных драйверов принтера. И да,
Цитата
система тупо вставит задание в спулер
, а уже драйвер может рисовать красивые окошки про ошибки печати. и здесь возможна описанная мной схема, только ловить нужно другие сообщения в другом месте.

Автор: logist 29.02.16, 13:43

Проблема вообще вот в чем - выполняется печать пакета Табдоков, например их 10, каждый отправляется отдельно, и иногда возникают ситуации что какой-то один не напечатался, например 5й, появилось окно Ошибка печати, тут же пропало и печать пошла дальше, вот нужно отловить этот один пятый, что именно он не напечатался.
Работа с очередью через WMI не подходит, там возвращается вся текущая очередь, и в любом случае в ней все доки имеют одинаковое название.
Опрашивать доступность принтера перед печатью - вроде хорошо, но учитывая условия проблемы - на момент опроса он будет доступен, а через долю секунды когда происходит печать - нет, и может же быть наоборот.

Автор: sava1 29.02.16, 13:56

Вариантов несколько:
1. Просим у мелких (линухов) документацию на спулер или сами отслеживаем код - находим место, где генерится хрень типа ШоуВиндоу (или оные)
и пишем перехватчик.
2. Пишем мелким, чтобы они дописали код (типо СэндМесседж(....)) при ошибках, сами делаем подписку на события.
3. Просим разработчиков (а че нам?) чтобы сразу генерили Внешнее событие для 1с (чтоб нам не извращаться).

Автор: logist 29.02.16, 14:04

sava1, да smile.gif

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7
https://pro1c.org.ua