Задача: пакетная печать деклараций с сайта "Новой Почты" (украинский перевозчик). Стандартный способ отправить текущую страницу браузера на печать - вызов функции "parentWindow.Print()". Но эта функция открывает стандартный диалог выбора принтера, что для пакетной печати совсем не удобно. Поиск способов обойти эту проблему привел к следующему решению:
На форме обработки размещен элемент "ПолеHTMLДокумента".
Модуль формы обработки:
Процедура ПечатьСтраницыНаФорме()
Скрипт = "
|Sub PrintPage()
//| MsgBox ""test""
| OLECMDID_PRINT = 6
| OLECMDEXECOPT_DONTPROMPTUSER = 2
| OLECMDEXECOPT_PROMPTUSER = 1
| call WB.ExecWB(OLECMDID_PRINT, OLECMDEXECOPT_DONTPROMPTUSER,1)
|End Sub";
Документ = ЭлементыФормы.ПолеHTMLДокумента.Документ;
УзелСкрипта = Документ.createElement("script");
УзелСкрипта.type = "text/VBScript";
УзелСкрипта.text = Скрипт;
Документ.getElementsByTagName("head").Item(0).appendChild(УзелСкрипта);
УзелОбъекта = Документ.createElement("object");
УзелОбъекта.id = "WB";
УзелОбъекта.CLASSID = "CLSID:8856F961-340A-11D0-A96B-00C04FD705A2";
Документ.getElementsByTagName("body").Item(0).appendChild(УзелОбъекта);
Документ.parentWindow.PrintPage();
КонецПроцедуры
Процедура ПолеHTMLДокументаДокументСформирован(Элемент)
ПечатьСтраницыНаФорме();
Закрыть();
КонецПроцедуры
Процедура ПриОткрытии()
ЭлементыФормы.ПолеHTMLДокумента.Документ.URL = АдресСтраницы;
КонецПроцедурыМодуль объекта обработки:
Процедура Печать(Адрес) Экспорт
АдресСтраницы = Адрес;
Форма = ПолучитьФорму("Форма");
Форма.ОткрытьМодально();
КонецПроцедурыВызвать печать можно следующим образом (пример):
ОбработкаПечати = Обработки.ПечатьHTML.Создать(); Для Каждого АдресСтраницы Из МассивАдресов Цикл ОбработкаПечати.Печать(АдресСтраницы); КонецЦикла;
Обработка печатает на принтер по умолчанию (можно обойти через WMI).
Работоспособность обработки проверялась на ОС Windows 7.
В браузере Internet Explorer в настройках безопасности нужно разрешить запуск скриптов и ActiveX. Это можно сделать, например, так:
1. Для группы "Надежные узлы" установить уровень безопасности "Низкий".
2. Добавить URL сайта, с которого будет печать, в группу "Надежные узлы".
Вступайте в нашу телеграмм-группу Инфостарт