IE 2017

Перехват печати (Native API)

Программирование - Внешние компоненты

Внешняя компонента для перехвата печати в 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).

Скачать файлы

Наименование Файл Версия Размер
КомпонентаСПримером
.7z 115,14Kb
27.07.15
36
.7z 115,14Kb 36 Скачать

См. также

Комментарии
1. Александр Медведев (anig99) 2553 21.07.15 13:01 Сейчас в теме
Ай, спасибо!!!! Ай, молодца!!! Обязательно попробую! Очень нужна для лечения моей параноии
9. script Мальчинко (script) 200 21.07.15 17:44 Сейчас в теме
10. Сергей Коцюра (CheBurator) 3403 21.07.15 19:25 Сейчас в теме
тыщу лет подобное на клюшках формексом реализовано.
хорошо что и здесь появилось.
11. Максим Кузнецов (Makushimo) 151 22.07.15 08:25 Сейчас в теме
12. Антон Рощин (wolfsoft) 2416 22.07.15 08:52 Сейчас в теме
Не очень понятно, откуда берётся информация для сохранения печатаемого табличного документа?
13. Андрей (andboss) 146 22.07.15 10:20 Сейчас в теме
(12) wolfsoft, Через АктивноеОкно() и перебор элементов управляемой формы. Ничего лучшего, к сожалению, пока не придумал...
14. script Мальчинко (script) 200 22.07.15 12:23 Сейчас в теме
Через АктивноеОкно() и перебор элементов управляемой формы

Т.е. в обычных формах работать не будет?
15. Александр Медведев (anig99) 2553 22.07.15 16:15 Сейчас в теме
(13) andboss, да-да! Должно работать в обычных формах. А то как-то не очень правильно получится!
16. Сергей Боровик (BorovikSV) 1118 24.07.15 10:03 Сейчас в теме
(0) А не пробовали перехватывать то что фактически выводят, т.е. в момент отрисовки документа для устройства? и сохранять например в JPG, PNG или PDF?
17. Андрей (andboss) 146 24.07.15 10:36 Сейчас в теме
(16) BorovikSV, Пробовал. Если знакомы с WinAPI то вывод идет на PDC(Printer Device Context), просто так скопировать этот контекст невозможно, он write-only. Только разве перехватом собственно функций вывода(DrawText и проч.). Вообщем проблем там масса.
18. Андрей (andboss) 146 24.07.15 10:38 Сейчас в теме
(14) script, Если 1С разродится и сделает АктивноеОкно() в обычном приложении то заработает.
19. Алексей Шачнев (efin) 28.07.15 17:44 Сейчас в теме
andboss, имеет смысл перекачать компоненту, или она просто подешевела, поэтому дата публикации 27 июля?

Кстати, на почту упало сообщение, что Вы мне что-то отвечали в комментариях, но этого нет и не видно всего сообщения: "efin, перехват сохранения уже есть. Точнее была. Её поче..."

Модеры чудят.
20. Андрей (andboss) 146 28.07.15 20:24 Сейчас в теме
(19) efin, просто сделал дешевле. компонента та же. сейчас экспериментирую с перехватом записи в файлы (например сделать запрет сохранения через файл/сохранить как)
21. script Мальчинко (script) 200 31.07.15 00:55 Сейчас в теме
Ну хоть так....

Для УТ 10 90% печ. форм выводится через общую форму ПечатьДокумента.
Вставил процедуру обработки внешнего события в нее, и получил подобие активного окна.... очень не нравиться, но не знаю что еще можно здесь поделать.

Правда теперь можно получить ссылку на печатаемый документ.
22. script Мальчинко (script) 200 31.07.15 01:19 Сейчас в теме
(20) andboss,

а еще бы перехватить событие "Сохранить как" и "Сохранить копию". Дождемся?
23. Андрей (andboss) 146 31.07.15 08:06 Сейчас в теме
(22) script, сейчас экспериментирую с этим... и еще с буфером обмена
24. Вадим Купинов (izofen) 12 31.07.15 10:56 Сейчас в теме
Как подключить компоненту. Судя по коду должна подключится сама, но она не подключается?


Процедура ПриНачалеРаботыСистемы()
	//в общем макете(двоичные данные) компонента в виде zip-архива (hooklib.dll и MANIFEST.xml)
	Если ПодключитьВнешнююКомпоненту("ОбщийМакет.HookLib", "Hooklib", AddInType.Native) Тогда
		Hooklib = Новый("AddIn.Hooklib.PrintHook");
		//Hooklib.ЗапретПечати = Истина;
		Hooklib.Перехват(); 
	Иначе
		Сообщить("Компонента не подключена");
	КонецЕсли; 
			                          
КонецПроцедуры
...Показать Скрыть
25. Андрей (andboss) 146 31.07.15 13:14 Сейчас в теме
(24) izofen, в примере конфигурации подключается из макета. можете попробовать из файла
 ПодключитьВнешнююКомпоненту("d:\...\hooklib.dll", "Hooklib", AddInType.Native) 
26. script Мальчинко (script) 200 04.08.15 00:18 Сейчас в теме
У меня нормально подключилась из макета и работает в обычном приложении.
27. Александр Медведев (anig99) 2553 18.08.15 10:54 Сейчас в теме
(21) может какая другая внешняя компонента для перебора активных окон в 1с?
28. Иванов Иван (slauter77) 28 18.09.15 17:38 Сейчас в теме
Подключить из макета не удалось. Подключилась только с диска. Рушит 1с при отправке на печать. Обычное приложение.
Прикрепленные файлы:
29. Андрей (andboss) 146 18.09.15 20:25 Сейчас в теме
(28) slauter77, !обязательно после создания хранить контекст компоненты в глобальной переменной
Оставьте свое сообщение