В современной практике автоматизации на платформе 1С:Предприятие 8.3 часто возникает задача вывода QR-кодов на печатные формы документов. Это может быть необходимо для формирования ссылок на оплату (СБП), когда требуется счет с QR-кодом для УТ, ERP или Бухгалтерии, кодирования данных для государственных информационных систем или просто для быстрого доступа к электронной версии документа. В данной статье мы проанализируем наиболее эффективные способы решения этой задачи, опираясь на возможности современных релизов платформы, и разберем по шагам процесс внедрения этого функционала.
Прежде всего, нам необходимо определиться с методом формирования кода. Раньше программистам приходилось использовать внешние компоненты (ActiveX, DLL) или специализированные шрифты, что создавало сложности при обновлении платформы или работе в веб-клиенте. Начиная с версии платформы 8.3.15, компания 1С добавила встроенные средства для работы со штрихкодами. Рассмотрим основной алгоритм: мы будем генерировать картинку QR-кода и программно вставлять ее в объект ТабличныйДокумент. Для типовых решений часто удобнее использовать готовые расширения, например, чтобы реализовать счет на оплату с QR-кодом, печатью и подписями без изменения основной конфигурации.
Перед тем как вызвать функцию генерации, нам нужно подготовить строку, которая будет зашита в QR-код. Это может быть URL-адрес, JSON-объект или структурированная строка по ГОСТ (для банковских платежей). Выясним причину, по которой важно следить за длиной строки: чем больше данных мы кодируем, тем плотнее будет рисунок QR-кода. Это особенно критично, когда реализуется вывод данных договора в QR-код, где объем информации может быть значительным. Проанализируем ситуацию на примере подготовки ссылки на оплату:
ТекстДляКодирования = "https://mysite.ru/pay?id=" + Объект.Номер;
ПараметрыКР = ОбработкаШтрихкодов.ПараметрыГенерацииQRКода();
ПараметрыКР.УровеньКоррекцииОшибок = 1; // 0-3 (L, M, Q, H)
ПараметрыКР.Ширина = 150;
ПараметрыКР.Высота = 150;
В типовых конфигурациях существует специальный общий модуль ГенерацияШтрихкода. Разберем, как получить двоичные данные картинки QR-кода. Этот механизм универсален, будь то стандартная печать или специализированный QR-код оплаты для любого типа контрагента в УТ 11 — поможет автоматическое добавление QR-кодов на печатные формы. Мы обратимся к методу, который возвращает картинку в формате PNG или BMP.
Посмотрим на пример программного кода, который формирует двоичные данные:
ПараметрыШтрихкода = Новый Структура;
ПараметрыШтрихкода.Вставить("ТипКода", 16); // Тип 16 соответствует QR-коду
ПараметрыШтрихкода.Вставить("Текст", ТекстДляКодирования);
ПараметрыШтрихкода.Вставить("Ширина", 200);
ПараметрыШтрихкода.Вставить("Высота", 200);
ПараметрыШтрихкода.Вставить("УровеньКоррекцииОшибок", 2);
РезультатГенерации = МенеджерОборудованияВызовСервера.СформироватьШтрихкод(ПараметрыШтрихкода);
Если РезультатГенерации.Результат Тогда
КартинкаQR = РезультатГенерации.Картинка;
КонецЕсли;
Теперь, когда у нас есть объект типа Картинка, нам нужно поместить его в ТабличныйДокумент. В макете желательно заранее подготовить область с объектом "Рисунок". Рассмотрим подробнее, как программно найти этот рисунок. Подобный подход часто применяется, когда создается квитанция ПД-4 с QR-кодом для счета покупателю, где важна точная посадка кода в сетку документа — для этого подойдёт счет на оплату с QR-кодом из заказа и реализации.
ОбластьМакета = Макет.ПолучитьОбласть("Заголовок");Рисунок = ОбластьМакета.Рисунки.QRКод;Рисунок.Картинка = КартинкаQR;Если же в макете нет заранее созданного рисунка, мы можем создать его полностью программно. Разберем по шагам этот процесс:
Область = Макет.ПолучитьОбласть("Подвал");
Рисунок = Область.Рисунки.Добавить(ТипРисункаТабличногоДокумента.Картинка);
Рисунок.Верх = 5;
Рисунок.Лево = 5;
Рисунок.Ширина = 40;
Рисунок.Высота = 40;
Рисунок.Картинка = КартинкаQR;
Рисунок.РазмерКартинки = РазмерКартинки.АвтоРазмер;
В некоторых случаях (самописные конфигурации) может потребоваться прямое использование объекта СистемаПечати. Проанализируем, как вызвать генерацию через платформенные методы. Это решение подходит для задач интеграции, таких как генерация QR-кодов для УПД с целью передачи идентификаторов во внешние сервисы.
Рассмотрим пример использования метода ГенерацияШтрихкода.СформироватьШтрихкод(), который стал доступен в последних обновлениях платформы:
ДанныеQR = ПолучитьДанныеQRКода(ТекстСообщения, 200, 200);
// Здесь используется внутренняя функция, возвращающая ДвоичныеДанные
КартинкаОбъект = Новый Картинка(ДанныеQR);
Часто программисты сталкиваются с тем, что QR-код "размывается". Выясним причину: это происходит из-за некорректного масштабирования. Рекомендуется устанавливать свойство РазмерКартинки в значение Пропорционально или РеальныйРазмер. Также стоит обратить внимание на УровеньКоррекцииОшибок. Если вы планируете печатать код на термопринтере, установите высокий уровень коррекции (H), чтобы код оставался читаемым даже при низком качестве печати.
Мы рассмотрели современные способы интеграции QR-кодов в экосистему 1С. Использование встроенных механизмов платформы 8.3 позволяет отказаться от сторонних библиотек. Помните, что перед массовым выводом на печать необходимо протестировать считывание кода реальными устройствами, чтобы убедиться в правильности подобранных параметров.