Печать 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 час.




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