Печать 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 году ушел из офиса на вольные хлеба фриланса. Принимаю заказы.

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

комментариев 6

  1. Виталий:

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

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

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

  2. Константин:

    Круть! А можно вывести штрихкод товара в табличную часть документа word?

  3. Константин:

    Получилось, поменял функцию ПолучитьQRДокумента, но выводит только для первой строки номенклатуры. Не пойму как сделать для всех строк

    Видимо вызывать нужно её где-то в другом месте

    Функция ПолучитьQRДокумента(ДокументСсылка) Экспорт

    Ном = ДокументСсылка.Запасы[0].Номенклатура;

    ШК = РегистрыСведений.ШтрихкодыНоменклатуры.ПолучитьШтрихкодСМаксимальнымНомером(Ном);
    Если ЗначениеЗаполнено(ШК) Тогда
    ПараметрыШтрихкода = Новый Структура;
    ПараметрыШтрихкода.Вставить(«Ширина», 25);
    ПараметрыШтрихкода.Вставить(«Высота», 25);
    ПараметрыШтрихкода.Вставить(«УровеньКоррекцииQR», 0);
    ПараметрыШтрихкода.Вставить(«Штрихкод», ШК);
    ПараметрыШтрихкода.Вставить(«ТипКода», 99); //1 EAN13
    ПараметрыШтрихкода.Вставить(«ОтображатьТекст», Ложь);

    Возврат ГенерацияШтрихкода.ИзображениеШтрихкода(ПараметрыШтрихкода).Картинка;//ART 27.10.2024
    Иначе
    Возврат «»;
    КонецЕсли;

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

    • так в счете только один QR, в шапке. Понятно, что он может быть заменен только на одну картинку.
      Если надо в каждой строке выводить, этот метод не годится. Надо лезть в код и добавлять картинку для каждой строки.

  4. Константин:

    удалось!! выводит ШК заказа и ШК товаров — https://disk.yandex.ru/i/1PPixT1wETguUQ

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

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