Реализация печати QR-кода на платежных документах — это стандартное требование для современных систем автоматизации. Однако в самописных конфигурациях, где не подключена библиотека стандартных подсистем (БСП), эта задача может вызвать затруднения. Особенно остро вопрос стоит в условиях ограниченного доступа к сети Интернет, когда нельзя воспользоваться внешними API-сервисами. В этой статье мы подробно разберем несколько проверенных способов интеграции QR-кодов в печатные формы 1С, работающих полностью автономно.
Начиная с версии платформы 8.3.10, компания «1С» добавила встроенный функционал для работы со штрихкодами непосредственно в объектах табличного документа. Это самый оптимальный и производительный метод, так как он не требует внешних файлов, библиотек или регистрации DLL-компонент. Разберем по шагам, как это реализовать.
Сначала нам необходимо подготовить макет печатной формы. В нужное место макета мы добавим объект Рисунок. Для этого в меню «Таблица» выберем «Рисунки» — «Вставить штрихкод».
После вставки рисунка проанализируем его свойства:
Теперь перейдем к программной части в модуле менеджера или модуле объекта, где формируется печатная форма. Нам нужно передать данные в этот рисунок. Рассмотрим пример кода:
// Получаем область макета, где расположен QR-код
ОбластьМакета = Макет.ПолучитьОбласть("ЗаголовокСчета");
// Обращаемся к рисунку по имени, которое мы задали в макете (например, "РисунокQR")
РисунокQR = ОбластьМакета.Рисунки.РисунокQR;
// Формируем строку по стандарту ГОСТ Р 56042-2014
ТекстДляКода = "ST00012|Name=ООО Наша Компания|PersonalAcc=40702810000000000000|BankName=ПАО СБЕРБАНК|BIC=044525225|CorrespAcc=30101810400000000225";
// Устанавливаем текст кода
РисунокQR.Объект.ТекстКода = ТекстДляКода;
// Выводим область в табличный документ
ТабДок.Вывести(ОбластьМакета);
Важно помнить, что этот метод работает на уровне платформы, поэтому он максимально стабилен и не зависит от обновлений операционной системы или стороннего ПО.
Если по каким-то причинам стандартный механизм платформы не подходит (например, требуется специфический уровень коррекции ошибок или работа на очень старых версиях 8.3), мы можем воспользоваться технологией Native API. Это внешние компоненты (библиотеки .dll), которые 1С умеет подключать и использовать как внутренние объекты.
Проанализируем процесс подключения такой компоненты. Обычно она хранится в конфигурации как ОбщийМакет с типом Двоичные данные. Это позволяет распространять программу без необходимости копировать файлы на каждый компьютер вручную.
Разберем алгоритм работы с компонентой:
// 1. Извлекаем компоненту из макета во временный файл
ИмяФайлаКомпоненты = ПолучитьИмяВременногоФайла("dll");
МакетКомпоненты = УправлениеОтчетами.ПолучитьОбщийМакет("КомпонентаПечатиШтрихкодов");
МакетКомпоненты.Записать(ИмяФайлаКомпоненты);
// 2. Подключаем компоненту
РезультатПодключения = УстановитьВнешнююКомпоненту("ОбщийМакет.КомпонентаПечатиШтрихкодов");
Если РезультатПодключения Тогда
// 3. Создаем объект компоненты
QRОбъект = Новый("AddIn.Barcode.Barcode");
// 4. Настраиваем параметры
QRОбъект.ТипКода = 16; // 16 обычно соответствует QR-коду в популярных библиотеках
QRОбъект.Текст = "Ваши реквизиты";
QRОбъект.Ширина = 150;
QRОбъект.Высота = 150;
// 5. Получаем картинку
ДвоичныеДанныеКартинки = QRОбъект.ПолучитьШтрихкод();
КартинкаQR = Новый Картинка(ДвоичныеДанныеКартинки);
КонецЕсли;
Преимущество этого метода в том, что он полностью автономен. Компонента загружается в память 1С при запуске печатной формы и выгружается после завершения работы, не оставляя лишних следов в системе.
Это достаточно креативный метод, который часто используют разработчики, когда не хотят возиться с регистрацией DLL. Выясним, как это работает: внутри формы 1С создается невидимое ПолеHTMLДокумента. В него загружается локальная библиотека на языке JavaScript (например, qrcode.js), которая генерирует изображение QR-кода прямо в памяти браузера, встроенного в 1С.
Рассмотрим шаги реализации:
Картинка для вывода в печатную форму.Этот метод хорош тем, что он кроссплатформенный и будет работать даже в веб-клиенте без установки дополнительных расширений на сервер.
Рассмотрим еще один надежный вариант — использование консольных генераторов, таких как qrencode. Это небольшие исполняемые файлы (exe), которые принимают на вход текст и сохраняют картинку в указанную папку.
Посмотрим на пример кода, вызывающего такую утилиту:
// Определяем пути
ПутьКПрограмме = "C:\Tools\qrencode.exe";
ПутьКФайлуРезультата = ПолучитьИмяВременногоФайла("png");
ТекстРеквизитов = "ST00012|Name=...|BIC=...";
// Формируем командную строку
Команда = ПутьКПрограмме + " -o " + ПутьКФайлуРезультата + " """ + ТекстРеквизитов + """";
// Запускаем приложение в скрытом режиме
ЗапуститьПриложение(Команда, , Истина);
// Читаем результат
Если ФайлСуществует(ПутьКФайлуРезультата) Тогда
КартинкаQR = Новый Картинка(ПутьКФайлуРезультата);
// Помещаем в макет...
КонецЕсли;
Этот способ крайне прост в отладке, но требует наличия exe-файла на диске пользователя. Мы рекомендуем хранить этот файл внутри конфигурации в двоичных данных и выгружать его во временную папку непосредственно перед использованием.
Проанализируем ситуацию: просто сгенерировать QR-код недостаточно. Чтобы банковское приложение корректно распознало счет, данные внутри кода должны быть структурированы по ГОСТ Р 56042-2014. Выясним основные правила формирования этой строки.
Обязательные требования:
ST00012|.|.Name (Получатель), PersonalAcc (Счет), BankName (Банк), BIC (БИК), CorrespAcc (Корр. счет).Разберем пример функции для сборки такой строки:
Функция СформироватьСтрокуДляQR(ДанныеСчета)
Результат = "ST00012|";
Результат = Результат + "Name=" + СокрЛП(ДанныеСчета.Организация) + "|";
Результат = Результат + "PersonalAcc=" + СокрЛП(ДанныеСчета.НомерСчета) + "|";
Результат = Результат + "BankName=" + СокрЛП(ДанныеСчета.Банк) + "|";
Результат = Результат + "BIC=" + СокрЛП(ДанныеСчета.БИК) + "|";
Результат = Результат + "CorrespAcc=" + СокрЛП(ДанныеСчета.КоррСчет) + "|";
// Дополнительные поля по желанию
Результат = Результат + "Sum=" + Формат(ДанныеСчета.Сумма * 100, "ЧГ=0") + "|"; // Сумма в копейках
Результат = Результат + "Purpose=" + "Оплата по счету №" + ДанныеСчета.Номер;
Возврат Результат;
КонецФункции
Мы рассмотрели четыре различных подхода к генерации QR-кодов без использования БСП. Наиболее современным и рекомендуемым является использование встроенного объекта «Рисунок» с типом «Штрихкод» в платформе 1С 8.3.10+. Если же ваша версия платформы ниже или требуются специфические настройки, использование внешней Native API компоненты, упакованной в макет двоичных данных, станет отличной альтернативой.
Главное при реализации — строго придерживаться формата ГОСТ и следить за кодировкой UTF-8. Это гарантирует, что ваши счета будут без проблем оплачиваться клиентами через любые мобильные приложения банков.