Печать QR на оплату в шаблоне КП и Договоров Word в УНФ3

Клиент заказал добавление QR-кода в шаблоны офисных документов, чтобы при выгрузке договора с клиентом в Word из документа «Заказ покупателю» печатался QR-код, аналогичный счету на оплату.

Сам QR в виде картинки я получил легко, извлекая картинку из печатной формы «Счет на оплату» документа «Заказ покупателя»:

Функция ПолучитьQRДокумента(ДокументСсылка) Экспорт                            
	
	ИмяМенеджераПечати = "Документ.ЗаказПокупателя";                                            
	ИменаМакетов = "СчетНаОплату";
	ПараметрКоманды = Новый Массив();
	ПараметрКоманды.Добавить(ДокументСсылка);
	ДополнительныеПараметры = Новый Структура(); //ДополнительныеПараметры.ДополнитьКомплектВнешнимиПечатнымиФормами = ложь
	ТипыОбъектовПечати = Неопределено;                                       
	ТекущийЯзык = "";
	
	ПечатныеФормы = УправлениеПечатью.СформироватьПечатныеФормы(ИмяМенеджераПечати, ИменаМакетов,
	ПараметрКоманды, ДополнительныеПараметры, ТипыОбъектовПечати, ТекущийЯзык);  
	
	Попытка
		Возврат	ПечатныеФормы.КоллекцияПечатныхФорм[0].ТабличныйДокумент.Области.РисунокQR.Картинка;
	Исключение
	КонецПопытки;
	

КонецФункции 

Сами шаблоны Word-договоров описываются в справочнике ШаблоныПечатиОфисныхДокументов.

Я создал там тестовый шаблон и добавил туда картинку-шаблон, которую планировал заменять на QR:

Формирование документов идет в ШаблоныПечатиОфисныхДокументов.СформироватьДокумент.

В процедуре ЗаписатьФайлТипыКонтентаДокументаDOCX происходит формирование документа Word. Тут доступны все картинки документа в каталоге картинок:

Я сначала хотел подменять картинки по размеру, но потом решил, что это слишком сложно для пользователя и решил менять их по номеру, благо картинки именуются по порядку сверху вниз: image1, image2, …

В шаблоне добавил поле QRшаб_РазмерФайлаКартинкиQR с номером картинки:

В итоге получился такой вот код:

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

		//Перебираем картинки                                                   
		Файлы = НайтиФайлы(СтруктураДокумента.КаталогКартинок, "*.*", ложь);
		НомерКартинки = 0;
		Для Каждого Файл ИЗ  Файлы Цикл
			НомерКартинки = НомерКартинки + 1;
			//РазмерФайла = Файл.Размер();                   
			//Перешел на номер картинки
			Если НомерКартинки = РазмерИскомойКартинки Тогда 
				//Тут подменить картинку
				ДД = КартинкаQR.ПолучитьДвоичныеДанные();
				ПолноеИмя = Файл.ПолноеИмя;
				УдалитьФайлы(ПолноеИмя);
				ДД.Записать(ПолноеИмя);
				Прервать;
			КонецЕсли;         
		КонецЦикла;
		
	КонецЕсли;
	
	ПродолжитьВызов(ПараметрыПечати, ОписаниеПараметров, СтруктураДокумента, Ошибки);
КонецПроцедуры

Среда: УНФ 3.0.12.226 Объем: 3 час.

image_pdfimage_print

fixin

Программирую на 1С с 1999 года. В 1С просто Гений. В 2020 году ушел из офиса на вольные хлеба фриланса. Принимаю заказы.

Вам может также понравиться...

комментария 2

  1. Виталий:

    Решение интересное, но выглядит хрупко: QR оплаты завязан не на нормальный параметр печатной формы, а на внутренности DOCX — картинки, content types и прочую упаковку Word. Это работает ровно до первого изменения шаблона/обновления/особенности Word.

    QR на оплату — всё-таки не декоративная картинка, а платежные данные. Хотелось бы увидеть не только “как вставили изображение”, но и как контролируется состав реквизитов, сумма, назначение платежа и тестирование в банковских приложениях.

    • насчет того как контролируется не понял. и насчет хрупкости тоже.
      Один раз сделал шабло ни забыл. алгоритм берет первую картинку в документе WORD и подменяет ее на сгенерированный на лету QR код.
      в чем вы видите проблему, не могу понять.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *