Внедрение QR-кода в печатные формы конфигурации «1С:Управление торговлей 10.3» — это актуальная задача, которая позволяет клиентам быстро оплачивать счета через мобильные приложения банков. Основная сложность заключается в том, что УТ 10.3 базируется на обычных формах и не содержит встроенных механизмов «Библиотеки стандартных подсистем» (БСП) для генерации двухмерных штрихкодов. В этой статье мы подробно разберем, как решить эту задачу, используя внешние компоненты и современные возможности платформы. При переходе на современную версию программы используется перенос документов и остатков из УТ 10.3 в УТ 11.
Прежде чем выводить QR-код, мы должны правильно подготовить данные. Банковские приложения ожидают строку строго определенного формата. Рассмотрим структуру этой строки. Она состоит из заголовка и набора реквизитов, разделенных символом |. Проанализируем основные поля:
Разберем пример кода для формирования такой строки в модуле объекта документа или во внешней печатной форме:
Функция СформироватьСтрокуДляQR(ДанныеСчета)
Разделитель = "|";
СтрокаГОСТ = "ST00011" + Разделитель;
СтрокаГОСТ = СтрокаГОСТ + "Name=" + СокрЛП(ДанныеСчета.Организация.Наименование) + Разделитель;
СтрокаГОСТ = СтрокаГОСТ + "PersonalAcc=" + СокрЛП(ДанныеСчета.Организация.ОсновнойБанковскийСчет.НомерСчета) + Разделитель;
СтрокаГОСТ = СтрокаГОСТ + "BankName=" + СокрЛП(ДанныеСчета.Организация.ОсновнойБанковскийСчет.Банк.Наименование) + Разделитель;
СтрокаГОСТ = СтрокаГОСТ + "BIC=" + СокрЛП(ДанныеСчета.Организация.ОсновнойБанковскийСчет.Банк.Код) + Разделитель;
СтрокаГОСТ = СтрокаГОСТ + "CorrespAcc=" + СокрЛП(ДанныеСчета.Организация.ОсновнойБанковскийСчет.Банк.КоррСчет) + Разделитель;
СтрокаГОСТ = СтрокаГОСТ + "Sum=" + Формат(ДанныеСчета.СуммаДокумента * 100, "ЧГ=0") + Разделитель;
СтрокаГОСТ = СтрокаГОСТ + "Purpose=" + "Оплата по счету № " + ДанныеСчета.Номер;
Возврат СтрокаГОСТ;
КонецФункции
Поскольку в УТ 10.3 нет встроенного метода генерации QR-кода, нам потребуется внешняя библиотека. Наиболее надежный вариант — использование официальной компоненты от 1С под названием 1CBarCode.dll. Выясним, как ее правильно подключить.
В современных реалиях лучше использовать Native API версию компоненты, так как она не требует регистрации в реестре Windows через regsvr32 и корректно работает без прав администратора. Посмотрим на алгоритм подключения компоненты, которую мы предварительно можем поместить в макет конфигурации или внешней обработки с типом ДвоичныеДанные.
Рассмотрим процедуру инициализации:
Функция ПодключитьКомпонентуГенерации()
ИмяМакета = "МакетКомпонентыQR";
Результат = ПодключитьВнешнююКомпоненту("ОбщийМакет." + ИмяМакета, "Barcode", ТипВнешнейКомпоненты.Native);
Если Результат Тогда
Компонента = Новый("AddIn.Barcode.Barcode");
Возврат Компонента;
Иначе
Сообщить("Не удалось загрузить компоненту печати штрихкодов!");
Возврат Неопределено;
КонецЕсли;
КонецФункции
Если вы берете компоненту из современных версий 1С (например, из УТ 11), обратите внимание на метод ПодключитьКомпонентуИзМакета. Это позволяет избежать проблем с путями к файлам на разных компьютерах пользователей.
После создания объекта компоненты нам необходимо настроить его параметры, чтобы он генерировал именно QR-код, а не обычный штрихкод. Проанализируем ключевые свойства объекта AddIn.Barcode.Barcode:
ТипКода — для QR-кода обычно используется значение 16.Текст — сюда передается наша сформированная строка по ГОСТ.Ширина и Высота — размеры получаемого изображения.УровеньКоррекцииОшибок — определяет избыточность данных для считывания при повреждении кода.Пример настройки объекта:
Процедура НастроитьОбъектQR(Компонента, ТекстДанных)
Компонента.ТипКода = 16; // QR
Компонента.АвтоТип = Ложь;
Компонента.Текст = ТекстДанных;
Компонента.УровеньКоррекцииОшибок = 1; // Medium
КонецПроцедуры
В УТ 10.3 печатные формы строятся на основе табличных документов. Нам нужно добавить в макет объект типа Рисунок. Разберем по шагам, как программно поместить сгенерированное изображение в этот рисунок:
РисунокQR.Посмотрим, как это выглядит в коде:
ОбластьМакета = Макет.ПолучитьОбласть("ОбластьQR");
КартинкаQR = Компонента.ПолучитьШтрихкод(); // Получаем двоичные данные картинки
Если КартинкаQR <> Неопределено Тогда
ОбластьМакета.Рисунки.РисунокQR.Картинка = КартинкаQR;
КонецЕсли;
ТабДок.Вывести(ОбластьМакета);
Если ваша база УТ 10.3 запущена на достаточно свежей версии платформы (8.3.10+), мы можем значительно упростить задачу и обойтись без внешних компонент. Платформа 1С теперь умеет генерировать штрихкоды самостоятельно через свойства рисунка в табличном документе. Для реализации такого подхода можно использовать готовый вариант печатной формы счёта на оплату с QR-кодом без внешних компонент.
Проанализируем этот метод. Мы просто добавляем рисунок в макет, но при программном заполнении указываем его тип:
Область = Макет.ПолучитьОбласть("ОбластьQR");
Рисунок = Область.Рисунки.Добавить(ТипРисункаТабличногоДокумента.Штрихкод);
Рисунок.Объект.ТипКода = ТипШтрихкода.QR;
Рисунок.Объект.Текст = СтрокаГОСТ;
ТабДок.Вывести(Область);
Важный момент: Этот способ работает только на платформе 8.3. Если пользователи работают в режиме совместимости с 8.2 или на старых клиентах, этот код вызовет ошибку. Поэтому всегда проверяйте версию платформы перед использованием встроенных средств. Для автоматизации обслуживания и контроля версий применяется программа для тихого обновления и архивирования баз 1С.
Выясним, с какими проблемами чаще всего сталкиваются разработчики при внедрении этой функции в УТ 10.3:
ActiveX компоненту, убедитесь, что она зарегистрирована на сервере (для серверных вызовов) и на всех клиентских местах. Именно поэтому мы рекомендуем переходить на Native API.Подводя итог, можно сказать, что наиболее стабильным решением для 1С:Управление торговлей 10.3 является использование внешней компоненты 1CBarCode.dll, встроенной в макет обработки. Это гарантирует работу кода независимо от версии платформы и настроек прав доступа пользователей в операционной системе. При необходимости можно использовать готовую внешнюю печатную форму счёта на оплату с генерацией QR-кода.