Внешняя компонента для перехвата печати в 1С (Native API, 8.2, 8.3)
Представляю вашему вниманию внешнюю компоненту для перехвата события "Печать" в 1С.
Перед печатью компонента генерирует внешнее событие, которое можно обработать.
Для использования:
В модуле управляемого приложения
Перем Hooklib; //обязательно после создания хранить контекст компоненты в глоб. переменной
Процедура ОбработкаВнешнегоСобытия(Источник, Событие, Данные)
Если Источник = "PrintHook" И Событие = "PrintStarting" Тогда
СохранитьТабДок();
КонецЕсли;
КонецПроцедуры
Процедура ПриНачалеРаботыСистемы()
//в общем макете(двоичные данные) компонента в виде zip-архива (hooklib.dll и MANIFEST.xml)
Если ПодключитьВнешнююКомпоненту("ОбщийМакет.HookLib", "Hooklib", AddInType.Native) Тогда
Hooklib = Новый("AddIn.Hooklib.PrintHook");
//Hooklib.ЗапретПечати = Истина;
Hooklib.Перехват();
Иначе
Сообщить("Компонента не подключена");
КонецЕсли;
КонецПроцедуры
Возможен запрет на распечатывание установкой свойства Hooklib.ЗапретПечати = Истина;
В архиве компонента с исходниками(Delphi7) и конфигурация с ее использованием(8.3). В конфигурации в качестве примера использования компоненты реализовано сохранение копии распечатываемого документа (табличный документ, mxl).
Ай, спасибо!!!! Ай, молодца!!! Обязательно попробую! Очень нужна для лечения моей параноии
ВОТ ОГРОМНОЕ СПАСИБИЩЕ
тыщу лет подобное на клюшках формексом реализовано.
хорошо что и здесь появилось.
Нужная вещь.
Не очень понятно, откуда берётся информация для сохранения печатаемого табличного документа?
(12) wolfsoft, Через АктивноеОкно() и перебор элементов управляемой формы. Ничего лучшего, к сожалению, пока не придумал…
Т.е. в обычных формах работать не будет?
(13) да-да! Должно работать в обычных формах. А то как-то не очень правильно получится!
(0) А не пробовали перехватывать то что фактически выводят, т.е. в момент отрисовки документа для устройства? и сохранять например в JPG, PNG или PDF?
(16) BorovikSV, Пробовал. Если знакомы с WinAPI то вывод идет на PDC(Printer Device Context), просто так скопировать этот контекст невозможно, он write-only. Только разве перехватом собственно функций вывода(DrawText и проч.). Вообщем проблем там масса.
(14) script, Если 1С разродится и сделает АктивноеОкно() в обычном приложении то заработает.
andboss, имеет смысл перекачать компоненту, или она просто подешевела, поэтому дата публикации 27 июля?
Кстати, на почту упало сообщение, что Вы мне что-то отвечали в комментариях, но этого нет и не видно всего сообщения: «efin, перехват сохранения уже есть. Точнее была. Её поче…»
Модеры чудят.
(19) efin, просто сделал дешевле. компонента та же. сейчас экспериментирую с перехватом записи в файлы (например сделать запрет сохранения через файл/сохранить как)
Ну хоть так….
Для УТ 10 90% печ. форм выводится через общую форму ПечатьДокумента.
Вставил процедуру обработки внешнего события в нее, и получил подобие активного окна…. очень не нравиться, но не знаю что еще можно здесь поделать.
Правда теперь можно получить ссылку на печатаемый документ.
(20)
а еще бы перехватить событие «Сохранить как» и «Сохранить копию». Дождемся?
(22) script, сейчас экспериментирую с этим… и еще с буфером обмена
Как подключить компоненту. Судя по коду должна подключится сама, но она не подключается?
Показать
(24) izofen, в примере конфигурации подключается из макета. можете попробовать из файла
У меня нормально подключилась из макета и работает в обычном приложении.
(21) может какая другая внешняя компонента для перебора активных окон в 1с?
Подключить из макета не удалось. Подключилась только с диска. Рушит 1с при отправке на печать. Обычное приложение.
(28) slauter77, !обязательно после создания хранить контекст компоненты в глобальной переменной
Можете ее пересобрать для 64-bit платформы?