Как реализовать печать QR-кода на счете на оплату в 1С:Управление торговлей 10.3

Программист 1С v8.3 (Обычные формы) 1С:Управление торговлей Управленческий учет Торговля и дистрибуция
← На главную

Внедрение QR-кода в печатные формы конфигурации «1С:Управление торговлей 10.3» — это актуальная задача, которая позволяет клиентам быстро оплачивать счета через мобильные приложения банков. Основная сложность заключается в том, что УТ 10.3 базируется на обычных формах и не содержит встроенных механизмов «Библиотеки стандартных подсистем» (БСП) для генерации двухмерных штрихкодов. В этой статье мы подробно разберем, как решить эту задачу, используя внешние компоненты и современные возможности платформы. При переходе на современную версию программы используется перенос документов и остатков из УТ 10.3 в УТ 11.

Шаг 1: Формирование текстовой строки по стандарту ГОСТ Р 56042-2014

Прежде чем выводить QR-код, мы должны правильно подготовить данные. Банковские приложения ожидают строку строго определенного формата. Рассмотрим структуру этой строки. Она состоит из заголовка и набора реквизитов, разделенных символом |. Проанализируем основные поля:

Разберем пример кода для формирования такой строки в модуле объекта документа или во внешней печатной форме:


Функция СформироватьСтрокуДляQR(ДанныеСчета)
    Разделитель = "|";
    СтрокаГОСТ = "ST00011" + Разделитель;
    СтрокаГОСТ = СтрокаГОСТ + "Name=" + СокрЛП(ДанныеСчета.Организация.Наименование) + Разделитель;
    СтрокаГОСТ = СтрокаГОСТ + "PersonalAcc=" + СокрЛП(ДанныеСчета.Организация.ОсновнойБанковскийСчет.НомерСчета) + Разделитель;
    СтрокаГОСТ = СтрокаГОСТ + "BankName=" + СокрЛП(ДанныеСчета.Организация.ОсновнойБанковскийСчет.Банк.Наименование) + Разделитель;
    СтрокаГОСТ = СтрокаГОСТ + "BIC=" + СокрЛП(ДанныеСчета.Организация.ОсновнойБанковскийСчет.Банк.Код) + Разделитель;
    СтрокаГОСТ = СтрокаГОСТ + "CorrespAcc=" + СокрЛП(ДанныеСчета.Организация.ОсновнойБанковскийСчет.Банк.КоррСчет) + Разделитель;
    СтрокаГОСТ = СтрокаГОСТ + "Sum=" + Формат(ДанныеСчета.СуммаДокумента * 100, "ЧГ=0") + Разделитель;
    СтрокаГОСТ = СтрокаГОСТ + "Purpose=" + "Оплата по счету № " + ДанныеСчета.Номер;
    
    Возврат СтрокаГОСТ;
КонецФункции

Шаг 2: Выбор и подключение внешней компоненты

Поскольку в УТ 10.3 нет встроенного метода генерации QR-кода, нам потребуется внешняя библиотека. Наиболее надежный вариант — использование официальной компоненты от 1С под названием 1CBarCode.dll. Выясним, как ее правильно подключить.

В современных реалиях лучше использовать Native API версию компоненты, так как она не требует регистрации в реестре Windows через regsvr32 и корректно работает без прав администратора. Посмотрим на алгоритм подключения компоненты, которую мы предварительно можем поместить в макет конфигурации или внешней обработки с типом ДвоичныеДанные.

Рассмотрим процедуру инициализации:


Функция ПодключитьКомпонентуГенерации()
    ИмяМакета = "МакетКомпонентыQR";
    Результат = ПодключитьВнешнююКомпоненту("ОбщийМакет." + ИмяМакета, "Barcode", ТипВнешнейКомпоненты.Native);
    Если Результат Тогда
        Компонента = Новый("AddIn.Barcode.Barcode");
        Возврат Компонента;
    Иначе
        Сообщить("Не удалось загрузить компоненту печати штрихкодов!");
        Возврат Неопределено;
    КонецЕсли;
КонецФункции

Если вы берете компоненту из современных версий 1С (например, из УТ 11), обратите внимание на метод ПодключитьКомпонентуИзМакета. Это позволяет избежать проблем с путями к файлам на разных компьютерах пользователей.

Шаг 3: Настройка свойств QR-кода

После создания объекта компоненты нам необходимо настроить его параметры, чтобы он генерировал именно QR-код, а не обычный штрихкод. Проанализируем ключевые свойства объекта AddIn.Barcode.Barcode:

Пример настройки объекта:


Процедура НастроитьОбъектQR(Компонента, ТекстДанных)
    Компонента.ТипКода = 16; // QR
    Компонента.АвтоТип = Ложь;
    Компонента.Текст = ТекстДанных;
    Компонента.УровеньКоррекцииОшибок = 1; // Medium
КонецПроцедуры

Шаг 4: Вывод в макет печатной формы

В УТ 10.3 печатные формы строятся на основе табличных документов. Нам нужно добавить в макет объект типа Рисунок. Разберем по шагам, как программно поместить сгенерированное изображение в этот рисунок:

  1. В макете счета создаем область, где будет располагаться код.
  2. Добавляем в эту область объект «Рисунок» (меню Таблица -> Рисунки -> Вставить рисунок). Называем его, например, РисунокQR.
  3. В коде формирования печатной формы получаем картинку из компоненты и передаем ее в макет.

Посмотрим, как это выглядит в коде:


ОбластьМакета = Макет.ПолучитьОбласть("ОбластьQR");
КартинкаQR = Компонента.ПолучитьШтрихкод(); // Получаем двоичные данные картинки
Если КартинкаQR <> Неопределено Тогда
    ОбластьМакета.Рисунки.РисунокQR.Картинка = КартинкаQR;
КонецЕсли;
ТабДок.Вывести(ОбластьМакета);

Альтернативный метод для платформы 8.3.10 и выше

Если ваша база УТ 10.3 запущена на достаточно свежей версии платформы (8.3.10+), мы можем значительно упростить задачу и обойтись без внешних компонент. Платформа 1С теперь умеет генерировать штрихкоды самостоятельно через свойства рисунка в табличном документе. Для реализации такого подхода можно использовать готовый вариант печатной формы счёта на оплату с QR-кодом без внешних компонент.

Проанализируем этот метод. Мы просто добавляем рисунок в макет, но при программном заполнении указываем его тип:


Область = Макет.ПолучитьОбласть("ОбластьQR");
Рисунок = Область.Рисунки.Добавить(ТипРисункаТабличногоДокумента.Штрихкод);
Рисунок.Объект.ТипКода = ТипШтрихкода.QR;
Рисунок.Объект.Текст = СтрокаГОСТ;
ТабДок.Вывести(Область);

Важный момент: Этот способ работает только на платформе 8.3. Если пользователи работают в режиме совместимости с 8.2 или на старых клиентах, этот код вызовет ошибку. Поэтому всегда проверяйте версию платформы перед использованием встроенных средств. Для автоматизации обслуживания и контроля версий применяется программа для тихого обновления и архивирования баз 1С.

Типичные ошибки и способы их исправления

Выясним, с какими проблемами чаще всего сталкиваются разработчики при внедрении этой функции в УТ 10.3:

  1. Ошибка «Метод объекта не обнаружен»: Чаще всего возникает при попытке вызвать методы БСП в старой конфигурации. Помните, что в УТ 10.3 все функции по работе с компонентой нужно писать «с нуля» или копировать вместе с кодом реализации.
  2. QR-код не считывается банком: Проверьте кодировку строки. Банки ожидают кодировку UTF-8. Если в вашей версии компоненты текст передается в другой кодировке, воспользуйтесь функциями преобразования.
  3. Проблема с регистрацией DLL: Если вы используете старую ActiveX компоненту, убедитесь, что она зарегистрирована на сервере (для серверных вызовов) и на всех клиентских местах. Именно поэтому мы рекомендуем переходить на Native API.

Подводя итог, можно сказать, что наиболее стабильным решением для 1С:Управление торговлей 10.3 является использование внешней компоненты 1CBarCode.dll, встроенной в макет обработки. Это гарантирует работу кода независимо от версии платформы и настроек прав доступа пользователей в операционной системе. При необходимости можно использовать готовую внешнюю печатную форму счёта на оплату с генерацией QR-кода.

← На главную