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

Опубликовал Андрей (andboss) в раздел Программирование - Внешние компоненты

Внешняя компонента для перехвата печати в 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
34
.7z 115,14Kb 34 Скачать

См. также

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

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

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

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

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

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

а еще бы перехватить событие "Сохранить как" и "Сохранить копию". Дождемся?
23. Андрей (andboss) 141 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) 141 31.07.15 13:14 Сейчас в теме
(24) izofen, в примере конфигурации подключается из макета. можете попробовать из файла
 ПодключитьВнешнююКомпоненту("d:\...\hooklib.dll", "Hooklib", AddInType.Native) 
26. script Мальчинко (script) 195 04.08.15 00:18 Сейчас в теме
У меня нормально подключилась из макета и работает в обычном приложении.
27. Александр Медведев (anig99) 2513 18.08.15 10:54 Сейчас в теме
(21) может какая другая внешняя компонента для перебора активных окон в 1с?
28. Иванов Иван (slauter77) 26 18.09.15 17:38 Сейчас в теме
Подключить из макета не удалось. Подключилась только с диска. Рушит 1с при отправке на печать. Обычное приложение.
Прикрепленные файлы:
29. Андрей (andboss) 141 18.09.15 20:25 Сейчас в теме
(28) slauter77, !обязательно после создания хранить контекст компоненты в глобальной переменной
Оставьте свое сообщение