|
Проверить доступность\работоспособность принтера перед ТабДок.Напечатать() | ☑ | ||
---|---|---|---|---|
0
zelenprog
18.03.24
✎
13:05
|
Здравствуйте!
ТабличныйДокумент программно отправляется сразу на печать на конкретный принтер командой: ТабДок.ИмяПринтера = "ПринтерХХХ"; ТабДок.Напечатать(РежимИспользованияДиалогаПечати.Неиспользовать); Если принтер "ПринтерХХХ" включен и доступен, то все без проблем. Однако, если он не доступен, то тут могут произойти всякие непредсказуемые неожиданности. Как проверить, что принтер доступен и готов к печати? Подскажите плиз. |
|||
1
Волшебник
18.03.24
✎
13:09
|
||||
2
Злопчинский
18.03.24
✎
21:26
|
Возможно, для твоих целей подойдет методы из Formex
Сервис.ПолучитьСписокПринтеров(); Сервис.ГотовностПринтера(ИмяПринтера); |
|||
3
Злопчинский
18.03.24
✎
21:29
|
а какова специфика задачи?
я сколько не сталкивался всего два варианта: - если неготовность принтера некритичная - то и пофиг, пользователь сам разберется - если неготовность принтера критичная - то принтер всегда должен быть в активном состоянии, не засыпать по таймауту (усбшные любят, надо спецатльно настраивать) итд чтобы было все хорошо... |
|||
4
Волшебник
18.03.24
✎
21:30
|
(2) Плохой совет
|
|||
5
rphosts
19.03.24
✎
04:57
|
(2) разве ветка про клюшки? И да, не на каждых клюшках стоит формекс. В общем решение для частного случая небольшой доли ИБ.
|
|||
6
victuan1
19.03.24
✎
06:01
|
Можно просто формексом ловить факт того, прошла ли успешно печать на принтере.
Подойдет глобальная процедура ПриПечатиТаблицы(Таб,ФлагПредпросмотра,Заголовок,ИмяПринтера)от формекса. |
|||
7
Злопчинский
19.03.24
✎
07:52
|
(6) и какое отношение это имеет к успешности печати на принтере или готовности принтера?
|
|||
8
zelenprog
19.03.24
✎
08:37
|
Ребята, мне нужно для 8-ки.
(3) >> а какова специфика задачи? ... >> - если неготовность принтера критичная - то ... Как нам кажется - критичная. Данный табличный документ имеет некоторые особенности и предназначен для печати на конкретном принтере. Суть команды "ТабДок.Напечатать" в том, что если "целевой" принтер, на который отправляется табличный документ, является недоступным, то ситуация становится неуправляемой. Куда уйдет это задание печати - для пользователя останется загадкой и неизвестностью, до тех пор пока бумага не вылезет на каком-нибудь другом принтере. Вот такая "неуправляемость" очень нежелательна. И ее надо минимизировать. Логичный подход: проверить перед печатью доступность принтера. И в случае недоступности предупредить пользователя. А если уж задание отправлено на конкретный принтер, то оно должно быть отпечатано именно на этом принтере. А если на этом принтере отпечатать это задание невозможно - то надо выдать ошибку, а не посылать его ... куда-то еще. |
|||
9
YFedor
19.03.24
✎
08:40
|
(8) Так если у вас известно на какой принтер нужно печатать - указывайте его в параметрах печати - на него и уйдет
|
|||
10
zelenprog
19.03.24
✎
08:52
|
(9) Выбор принтера осуществляется сразу на форме обработки, а не в параметрах печати.
И отправка табличного документа на принтер выполняется командами:
|
|||
11
zelenprog
19.03.24
✎
08:54
|
ТабличныйДокумент (SpreadsheetDocument)
ИмяПринтера (PrinterName) Использование: Чтение и запись. Описание: Тип: Строка. Содержит имя принтера, известного в системе, на который будет выводиться табличный документ при печати. |
|||
12
H A D G E H O G s
19.03.24
✎
10:31
|
Примерно так
|
|||
13
ProxyInspector
19.03.24
✎
10:35
|
Как то так
Принтеры = Новый СписокЗначений; Состояние("Составляется список принтеров. Подождите."); Попытка Locator = Новый COMОбъект("WbemScripting.SWbemLocator"); Сервисы = Locator.ConnectServer("."); Объекты = Сервисы.InstancesOf("Win32_Printer"); // Теперь переберем все принтеры системы Для Каждого Принтер из Объекты Цикл ТекИмяПринтера = Принтер.Name; Default = Принтер.Default; Пока Найти(ТекИмяПринтера,"\") > 0 Цикл ТекИмяПринтера = Сред(ТекИмяПринтера, Найти(ТекИмяПринтера,"\")+1); КонецЦикла; ТекИмяПринтера = СокрЛП(ТекИмяПринтера); //Если Принтер.Name=ИмяПринтера Тогда Если Default Тогда ИмяПринтераПоУмолчанию = ТекИмяПринтера; КонецЕСли; Принтеры.Добавить(Принтер.Name,ТекИмяПринтера,(Принтер.Name=ИмяПринтера)); КонецЦикла; Исключение КонецПопытки; |
|||
14
ProxyInspector
19.03.24
✎
10:36
|
Здесь наверно можно и состояние принтера получить
|
|||
15
zelenprog
19.03.24
✎
11:00
|
(13),(14) >> Здесь наверно можно и состояние принтера получить
Вот это и интересно как тут состояние получить. |
|||
16
H A D G E H O G s
19.03.24
✎
12:33
|
(15) Можно
|
|||
17
Ёпрст
19.03.24
✎
13:55
|
(0)
Ком = ПолучитьCOMОбъект("winmgmts:\\.\root\cimv2"); КоллекцияПринтёров = Ком.ExecQuery("Select * from Win32_Printer"); Для Каждого Принтёр из КоллекцияПринтёров Цикл Сообщить("name:"+Принтёр.Name+" status:"+Принтёр.Status); КонецЦикла; Остальной хлам смотри тут, например: https://wutils.com/wmi/root/cimv2/win32_printer/#statusinfo_properties |
|||
18
Ёпрст
19.03.24
✎
14:01
|
DetectedErrorState, например, глянуть..
|
|||
19
Ёпрст
19.03.24
✎
14:01
|
Занимайся
|
|||
20
Garykom
гуру
19.03.24
✎
14:37
|
(0) К сожалению принтеры это платформо-операционко зависимая хрень
Так что универсально и легко никак Только дикие костыли |
|||
21
Garykom
гуру
19.03.24
✎
14:39
|
(20)+ У тебя windows (какая версия?), linux или может android или даже macos?
x86/x64 или экзотический arm? |
|||
22
Garykom
гуру
19.03.24
✎
14:42
|
(8) Поставить виртуальный принтер в операционке
Из 1С всегда использовать его Статус виртуального принтера обычно можно получить Куда будет отправлять виртуальный настраивается отдельно |
|||
23
zelenprog
19.03.24
✎
16:01
|
(21) На клиентах Windows
|
|||
24
Garykom
гуру
19.03.24
✎
16:11
|
(23) https://v8.1c.ru/platforma/mnogoplatformennost/
Обрати внимание на строчку "ARM – ОС Android, Windows" :) |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |