gifts2017

Документ с печатью и подписью

Опубликовал Poppy (poppy) в раздел Программирование - Практика программирования

В статье рассматривается вопрос формирования печатных документов с изображением печати организиции и подписями ответственных лиц.

Статья является продолжением цикла статей и разработок:
Внешние печатные формы в восьмерке http://infostart.ru/blogs/157
Обработка для тестирования внешних печатных форм в восьмерке http://infostart.ru/projects/833/
Использование встроенного почтового клиента - http://infostart.ru/blogs/161/
Документ с печатью и подписью - http://infostart.ru/blogs/162/
Внешние печатные формы в восьмерке II - http://infostart.ru/blogs/324/
Заполнение табличных частей документов в восьмерке (внешние обработки) http://infostart.ru/blogs/345/
Обработка для тестирования внешних обработок изменения табличных частей http://infostart.ru/projects/1749/
Использование свойств объектов при доработке типовых конфигураций http://infostart.ru/blogs/692/
При отправке документов по электронной почте http://infostart.ru/articles/161/?ref=4246 клиент справедливо желает, что бы на документе стояла печать и подписи ответственных лиц. Самый простой способ – создать макет печатной формы с отсканированной печатью и подписями. Такой подход хорош тогда, когда работа идет от имени одной организации и ответвленные лица, которые заверяют документ, не меняются в течение длительного времени. В остальных случаях необходимо создавать множество макетов, что совершенно непрактично.

Попробуем решить задачу другим способом. Для начала необходимо организовать место, где будут храниться образцы печатей и подписей.

Для этого создадим новый регистр сведений "Изображения" с измерением "Объект" типа "СправочникСсылка.Организации, СправочникСсылка.ФизическиеЛица" и ресурсом "Изображение" типа "ХранилищеЗначения". Сформируем основную форму записи. Устанавим на ней поле картинки, поле для выбора объекта и кнопку "Загрузить". В модуле формы пишем код:

Процедура ДействияФормыЗагрузить(Кнопка) Диалог = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
	Диалог.Заголовок = "Выберите файл с изображением";
	Диалог.ПолноеИмяФайла = "";
	Диалог.ПредварительныйПросмотр = Истина;
	Диалог.Фильтр = "Все картинки (*.bmp;*.dib;*.rle;*.jpg;*.jpeg;*.tif;*.gif;*.png;*.ico;*.wmf;*.emf)|*.bmp;*.dib;*.rle;*.jpg;*.jpeg;*.tif;*.gif;*.png;*.ico;*.wmf;*.emf|" + "Формат bmp (*.bmp;*.dib;*.rle)|*.bmp;*.dib;*.rle|" + "Формат JPEG (*.jpg;*.jpeg)|*.jpg;*.jpeg|" + "Формат TIFF (*.tif)|*.tif|" + "Формат GIF (*.gif)|*.gif|" + "Формат PNG (*.png)|*.png|" + "Формат icon (*.ico)|*.ico|" + "Формат метафайл (*.wmf;*.emf)|*.wmf;*.emf|"; // картинки Если Диалог.Выбрать() Тогда ВыбранноеФото = Новый Картинка(Диалог.ПолноеИмяФайла,Ложь);
		ЭлементыФормы.Картинка.Картинка = ВыбранноеФото;
		РегистрСведенийМенеджерЗаписи.Изображение = Новый ХранилищеЗначения(ВыбранноеФото);
	КонецЕсли;
	
КонецПроцедуры Процедура ПриОткрытии() Картинка = РегистрСведенийМенеджерЗаписи.Изображение.Получить();
	Если Картинка <> Неопределено Тогда ЭлементыФормы.Картинка = Картинка;
	КонецЕсли;
	
КонецПроцедуры 


В макете добавляем рисунки, называем их "Печать", "РуководительПодпись", "БухгалтерПодпись". В модуле формирования печатной формы добавляем код:

ОбластьМакета = Макет.ПолучитьОбласть("ПодвалСчета");

// Здесь может быть еще какой-нибудь код РегИзображения = РегистрыСведений.Изображения.СоздатьМенеджерЗаписи();

РегИзображения.Объект = Шапка.Организация;
РегИзображения.Прочитать();
Картинка = РегИзображения.Изображение.Получить();
Если ТипЗнч(Картинка) = Тип("Картинка") Тогда ОбластьМакета.Рисунки.Печать.Картинка = Новый Картинка(Картинка.ПолучитьДвоичныеДанные(), Истина);
КонецЕсли;
	
СписокПоказателей = Новый СписокЗначений;
СписокПоказателей.Добавить("","ФИОРук");
СписокПоказателей.Добавить("","ФИОБух");
мСведенияОбОрганизации = ПолучитьСведенияОбОрганизации(Шапка.Организация, Шапка.Дата, СписокПоказателей);
	
РегИзображения.Объект = мСведенияОбОрганизации.ФИОРук;
РегИзображения.Прочитать();
Картинка = РегИзображения.Изображение.Получить();
Если ТипЗнч(Картинка) = Тип("Картинка") Тогда ОбластьМакета.Рисунки.РуководительПодпись.Картинка = Новый Картинка(Картинка.ПолучитьДвоичныеДанные(), Истина);
КонецЕсли;
	
РегИзображения.Объект = мСведенияОбОрганизации.ФИОБух;
РегИзображения.Прочитать();
Картинка = РегИзображения.Изображение.Получить();
Если ТипЗнч(Картинка) = Тип("Картинка") Тогда ОбластьМакета.Рисунки.БухгалтерПодпись.Картинка = Новый Картинка(Картинка.ПолучитьДвоичныеДанные(), Истина);
КонецЕсли;
	
ТабДокумент.Вывести(ОбластьМакета);


Если у нас нет возможности изменить макет табличного документа, тогда добавляем рисунки сразу в табличный документ:

РегИзображения = РегистрыСведений.Изображения.СоздатьМенеджерЗаписи();

РегИзображения.Объект = Шапка.Организация;
РегИзображения.Прочитать();
Картинка = РегИзображения.Изображение.Получить();
Если ТипЗнч(Картинка) = Тип("Картинка") Тогда Рисунок = ТабДокумент.Рисунки.Добавить(ТипРисункаТабличногоДокумента.Картинка);
	Рисунок.Картинка = Новый Картинка(Картинка.ПолучитьДвоичныеДанные(), Истина);
	Рисунок.Имя = "Печать";
	Рисунок.Высота = 30;
	Рисунок.Ширина = 30;
	Рисунок.Верх = 110 + 4 * ТабДокумент.ВысотаТаблицы;
	Рисунок.Лево = 7;
	Рисунок.ГраницаСверху = Ложь;
	Рисунок.ГраницаСнизу = Ложь;
	Рисунок.ГраницаСправа = Ложь;
	Рисунок.ГраницаСлева = Ложь;
	Рисунок.Узор = ТипУзораТабличногоДокумента.БезУзора;
	
КонецЕсли; 

См. также

Подписаться Добавить вознаграждение
Комментарии
1. Владимир (NewNick) 15.04.07 18:11
>Для этого создадим новый регистр сведений "Изображения" с измерением "Объект" >типа "СправочникСсылка.Организации, СправочникСсылка.ФизическиеЛица" и >ресурсом "Изображение" типа "ХранилищеЗначения". Сформируем основную форму записи. >Устанавим на ней поле картинки, поле для выбора объекта и кнопку "Загрузить". В модуле формы >пишем код:
А если не секрет чем нас не устраивает справочник "ХранилищеДополнительнойИнформации" ? Вроде он есть во всех типовых конфигурациях, и ненадо лишний раз тормошить метаданные.
2. Сhe Burashka (CheBurator) 13.04.07 03:49
Н-дя... а пользы от этого?
М.б. ЭЦП подписывать письмо?
3. Poppy (poppy) 13.04.07 09:00
> Н-дя... а пользы от этого?

Это замена передачи документов по факсу. ЭЦП здесь точно не при чем...
4. Poppy (poppy) 16.04.07 00:43
> А если не секрет чем нас не устраивает справочник "ХранилищеДополнительнойИнформации" ?
> Вроде он есть во всех типовых конфигурациях, и ненадо лишний раз тормошить метаданные.

Всем устраивает. С точки зрения "тормошения метаданных" - использование справочника "ХранилищеДополнительнойИнформации" решение более грамотное. Для такого решения придется немного подправить мой код.

С помощью регистра сведений обеспечивается уникальность "изображения" для каждого объекта.
5. Владимир (NewNick) 16.04.07 02:54
>С помощью регистра сведений обеспечивается уникальность "изображения" для каждого объекта.
Хм ?)
6. Drock (d.snissarenko) 04.05.07 15:31
мда на самом деле ЭЦП - как более лучший вариант
7. registration (registration) 05.02.08 10:25
Ваша ЭЦП Ваших партнеров мало инетресует ;) Работаем по старинке :(
8. Александр Кузин (sashocq) 13.02.09 00:09
Давно и я такое задумал, да все как-то не довелось. Довольно изящно реализовано. Респект!
9. ineoosaki (ineoosaki) 13.02.09 00:38
в свое время написал конфу - "Создание левых сертефикатов качества".
С базой данных сертификационных центров, засветившихся в реальных сертах работников, сканами печатей и т.п.
очень помагает в работе... :)
жаль, что такие вещи выкладывать нельзя...
10. Андрей Лапутин (Dadjbog) 19.02.09 18:59
Такая проблемка. При выводе на принтер катинка с печатью теряет прозрачность и выводится в белом прямоугольнике. Что я делаю не так? :'(
tatyana_123456; retif; +2 Ответить 1
11. Poppy (poppy) 19.02.09 19:05
(10)
У тебя на экране картинка прозрачная?
12. Андрей Лапутин (Dadjbog) 19.02.09 19:06
13. Poppy (poppy) 19.02.09 19:24
(12) Не знаю чем помочь. Вероятно, платформа неправильно взаимодействует с драйвером принтера.
14. Василий Демидов (Душелов) 19.02.09 23:58
Можно попоровать мою html2image ;) Как бы работает у ряда клиентов..
15. Denis Kolebakin (thorben) 22.02.09 00:24
Подскажите! У меня что-то не работает. Ошибок никаких нет, вот только печать и подпись остается одна и таже, которую я ввел на макет. Или я как-то по-другому должен был вводить рисунки?
16. Poppy (poppy) 05.03.09 22:27
(15) Присылай свою обработку. Посмотрю.
17. Denis Kolebakin (thorben) 08.03.09 19:41
Спасибо, разобрался уже. Только теперь другая проблема. На экран все выводится прекрасно. Только когда я сохраняю документ в формате PDF, то все картинки gif становятся с черной заливкой. Если же беру jpg, то из прозрачных они превращаются в непрозрачные. Был бы благодарен за интересную подсказку.
18. Poppy (poppy) 29.03.09 15:33
(17) Может проблема в программе, которая сохраняет в формате PDF?
19. Vik (madvik) 16.09.09 23:34
(17) У меня была та же проблема. Как оказалось, виновна не платформа, а драйвер принтера. Методом перебора установили, что на ХП лазерджет 1100 и на каком-то Коника печатает нормально, а вот на Ксероксе - черная заливка.
20. Alexander . (manlak) 17.09.09 12:01
21. Светлана Мих (alina-aud) 20.02.10 19:35
(18) Подскажите, почему такая ошибка вылезает ..

{РегистрСведений.Изображения.Форма.ФормаСписка(20,3)}: Переменная не определена (РегистрСведенийМенеджерЗаписи)
<<?>>РегистрСведенийМенеджерЗаписи.Изображение = Новый ХранилищеЗначения(ВыбранноеФото);
{РегистрСведений.Изображения.Форма.ФормаСписка(27,13)}: Переменная не определена (РегистрСведенийМенеджерЗаписи)
Картинка = <<?>>РегистрСведенийМенеджерЗаписи.Изображение.Получить();
22. Poppy (poppy) 23.02.10 11:00
(21) РегистрСведенийМенеджерЗаписи - это реквизит формы типа РегистрСведенийМенеджерЗаписи.Изображения.

У тебя такого реквизита нет, либо он имеет другой идентификатор.
23. Александр Прилуцкий (pam71) 12.05.10 23:20
(22) А можно по подробнее, а то у меня такая же ошибка. Помгите, напишите подробнее что мне делать.
24. logdog (logdog) 22.06.10 19:38
(22) А под 8.2 для БУХ 2.0 данная статья будет адаптирована?
25. Haos Bespredel (ccproxy) 19.08.10 22:45
Подскажите уважаемый poppy, почему после отправки счета с вставленной подписью и печатью из УТ 10.3 она приходит получателю с "невозможно отобразить рисунок" Подпись и печать вставлены в формате .jpeg :?:
26. vlad (vladuser) 28.02.11 14:55
Добрый день!
Помогите разобраться новичку...

Выдает следующую ошибку

{Документ.СчетНаОплатуПокупателю(525,33)}: Переменная не определена (Шапка)
РегИзображения.Объект = <<?>>Шапка.Организация; (Проверка: Толстый клиент (обычное приложение))
{Документ.СчетНаОплатуПокупателю(535,64)}: Переменная не определена (Шапка)
мСведенияОбОрганизации = ПолучитьСведенияОбОрганизации(<<?>>Шапка.Организация, Шапка.Дата, СписокПоказателей); (Проверка: Толстый клиент (обычное приложение))
{Документ.СчетНаОплатуПокупателю(535,83)}: Переменная не определена (Шапка)
мСведенияОбОрганизации = ПолучитьСведенияОбОрганизации(Шапка.Организация, <<?>>Шапка.Дата, СписокПоказателей); (Проверка: Толстый клиент (обычное приложение))
{Документ.СчетНаОплатуПокупателю(535,34)}: Процедура или функция с указанным именем не определена (ПолучитьСведенияОбОрганизации)
мСведенияОбОрганизации = <<?>>ПолучитьСведенияОбОрганизации(Шапка.Организация, Шапка.Дата, СписокПоказателей); (Проверка: Толстый клиент (обычное приложение))

Конфигурация торговля 10.3.

что не так?
27. Ийон Тихий (cool.vlad4) 28.02.11 15:03
(26) Черным по белому написано - шапка не определенна, скорее всего это результат запроса, он у тебя есть?
28. Сергей Стащак (SchemeR) 18.05.11 02:11
Есть такая утилита.
http://docland.ru/node/34

Конвертирует доки (счета) в PDF;
По ИНН-у организации подбирает соответствующее изображение подписи печати, которую надо шлепнуть в счет;
Автоматом создает е-mail, куда вставляет адрес клиента, полученный PDF со счетом подписанного документа, типовое обращение.

Работает как внешняя утилита при печати счета на виртуальный принтер.
Соответственно, работает хоть с 1С8, 7.7, SAP или Word.
29. Еlen Jatsenko (alenakrr) 28.10.11 15:54
странная и стремная необходимость печатать печати и подписей бухгалтеров...
ладно бы логотип фирмы и шапку исходящего документа...
и почему не используются стандартная для всех конфигураций схема со справочником "Хранилище дополнительной информации" - был создан подобный регистр?!
30. Брест Беларусь (zhleonid8) 08.11.11 10:27
реально пригодится при формировании актов сверок с 1000 контрагентов:)
31. Павел Ив (si4) 15.11.11 22:13
Очень нужная статья! спасибо!
32. Олег Иванов (oleg_ss) 22.01.12 13:10
Да на данный момент тема актуальна, т.к. сверки надо делать.
Хотя лучше мень вмешиваться в конфу, а то потом замучаешься обновлять, есть печальный опыт.
Хотелось сделать как лучше бухам, а теперь куча проблемм в итоге.
Спасибо.
33. Константин Балаев (Mamakan) 11.11.12 10:52
Очень нужная в данный момент статья! спасибо большое!
34. Asdam (Asdam) 04.09.15 00:18
Если использовать справочник "ХранилищеДополнительнойИнформации", который присутствует в типовых конфигурациях, тогда и снимать с поддержки конфигурацию нет необходимости.

			Картинка = ПолучитьКартинку(Шапка.Поставщик, "Печать");
			
			Если ТипЗнч(Картинка) = Тип("Картинка") Тогда 
				ОбластьМакета.Рисунки.Печать.Картинка = Новый Картинка(Картинка.ПолучитьДвоичныеДанные(), Истина);
			КонецЕсли;
...Показать Скрыть


Функция ПолучитьКартинку(Объект, НаименованиеКартинки)
	
	Картинка = Неопределено;
	
	Запрос = Новый Запрос;
	Запрос.Текст = "ВЫБРАТЬ РАЗРЕШЕННЫЕ ПЕРВЫЕ 1
	|	ХранилищеДополнительнойИнформации.Наименование,
	|	ХранилищеДополнительнойИнформации.Объект,
	|	ХранилищеДополнительнойИнформации.Хранилище,
	|	ХранилищеДополнительнойИнформации.Ссылка
	|ИЗ
	|	Справочник.ХранилищеДополнительнойИнформации КАК ХранилищеДополнительнойИнформации
	|ГДЕ
	|	ХранилищеДополнительнойИнформации.Наименование = &Наименование
	|И ХранилищеДополнительнойИнформации.Объект = &Объект
	|";

	Запрос.УстановитьПараметр("Наименование", НаименованиеКартинки);
	Запрос.УстановитьПараметр("Объект", Объект);

	Выборка = Запрос.Выполнить().Выбрать();
	
	Если Выборка.Следующий() Тогда
		
		Картинка = Выборка.Хранилище.Получить();
		
	КонецЕсли;
	
	Возврат Картинка;
	
КонецФункции
...Показать Скрыть

tatyana_123456; +1 Ответить