К статье
Практический материал

Разработка и Конфигурация · 11 мин

Как сформировать QR-код в 1С

Как сформировать QR-код в 1С: способы генерации — типовые механизмы, библиотека генерации, внешние компоненты и API. Примеры кода, ошибки и проверка результата.

QR-код в 1С чаще всего нужен для платёжных документов, чеков, накладных, маркировки и печатных форм с быстрым переходом на страницу оплаты или проверки. В типовых конфигурациях (Бухгалтерия, Управление торговлей, ERP) часть этих задач уже решена штатно, но для нестандартных сценариев код приходится формировать самостоятельно — через встроенные механизмы платформы, библиотеку стандартных подсистем или внешние сервисы.

Выбор способа зависит от трёх факторов: версии платформы и конфигурации, того, где должен появиться код (печатная форма, форма документа, картинка в базе), и допустимости обращения к интернету с сервера 1С. Ниже разобраны рабочие варианты с примерами кода, ограничениями и способами проверки результата.

Какие способы генерации QR-кода доступны в 1С

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

Каждый вариант имеет ограничения. Типовые механизмы работают только в предусмотренных документах. БСП генерирует штрихкоды, но в ряде редакций поддержка двумерных кодов зависит от установленной компоненты печати штрихкодов. Веб-сервисы требуют доступа в интернет с сервера и не подходят для конфиденциальных данных. Внешние компоненты нужно устанавливать на каждое рабочее место или сервер.

Сравнение вариантов

Типовой механизм конфигурации

Подходит для платёжных QR в счетах на оплату. Ограничение: работает только там, где предусмотрен разработчиком.

БСП и компонента печати штрихкодов

Универсальный локальный способ без интернета. Ограничение: требуется БСП и установленная компонента.

HTTP-запрос к онлайн-генератору

Быстро внедрить, не нужны компоненты. Ограничение: нужен интернет, данные уходят на сторонний сервер.

Внешняя компонента или обработка

Полный контроль над форматом. Ограничение: установка и сопровождение на каждом рабочем месте.

Проверка типовой возможности: QR-код в счёте на оплату

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

Порядок проверки: откройте счёт на оплату, нажмите «Печать» и посмотрите состав доступных форм. Если в макете присутствует область с QR-кодом, но на печати он пустой — чаще всего не заполнены банковские реквизиты организации (счёт, БИК, ИНН получателя) или не включена соответствующая настройка. Заполните реквизиты и сформируйте печатную форму повторно.

Порядок действий
  1. 1
    Откройте карточку организации и проверьте заполнение ИНН, расчётного счёта и банка
  2. 2
    Откройте счёт на оплату и убедитесь, что указаны сумма и назначение платежа
  3. 3
    Сформируйте печатную форму и проверьте наличие QR-кода
  4. 4
    Отсканируйте код камерой телефона и сверьте реквизиты платежа

Генерация QR-кода программно через БСП

Если конфигурация построена на Библиотеке стандартных подсистем, используйте механизм генерации штрихкодов. В типовых поставках применяется функция формирования изображения штрихкода с типом «QRCode», которая возвращает картинку в двоичных данных. Полученную картинку можно вывести в табличный документ (печатную форму) или на форму.

Типичный фрагмент кода выглядит так: формируются параметры штрихкода (тип — QR-код, строка данных, ширина, высота, уровень коррекции ошибок), затем вызывается функция генерации, результат помещается в область рисунка табличного документа. Если функция возвращает ошибку вида «компонента не установлена», нужно установить компоненту печати штрихкодов, поставляемую вместе с конфигурацией или дистрибутивом.

// Упрощённый пример вызова генерации QR-кода через БСП

ПараметрыШтрихкода = ГенерацияШтрихкода.ПараметрыГенерацииШтрихкода();

ПараметрыШтрихкода.ТипКода = ГенерацияШтрихкода.ТипКодаQR();

ПараметрыШтрихкода.Штрихкод = "ST00012|Name=ООО Ромашка|PersonalAcc=40702810000000000001|Sum=100000";

ПараметрыШтрихкода.Ширина = 200;

ПараметрыШтрихкода.Высота = 200;

Результат = ГенерацияШтрихкода.ИзображениеШтрихкода(ПараметрыШтрихкода);

Если Результат.Свойство("ДвоичныеДанные") Тогда

Картинка = Новый Картинка(Результат.ДвоичныеДанные);

КонецЕсли;

Точные имена функций и структура параметров зависят от версии БСП — сверяйтесь с кодом общего модуля генерации штрихкодов в вашей конфигурации. Не копируйте примеры из чужих версий без проверки: сигнатуры функций между редакциями отличаются.

Формирование строки данных для платёжного QR-кода

Для платёжных QR-кодов содержимое строки регламентировано стандартом (ГОСТ на двумерные символы штрихового кода для платежей физических лиц). Строка начинается с идентификатора формата и содержит поля, разделённые вертикальной чертой: наименование получателя, расчётный счёт, БИК, ИНН, сумму в копейках, назначение платежа и другие реквизиты.

Критичные моменты: сумма указывается в копейках без разделителя, поля разделяются символом «|», лишние пробелы и переносы строк недопустимы, кодировка должна поддерживать кириллицу. Ошибка в любом поле приведёт к тому, что банковское приложение либо не распознает код, либо подставит неверные реквизиты — а это уже риск отправки платежа не тому получателю.

Генерация через внешний сервис по HTTP

Когда БСП нет, а установка компонент невозможна, можно запросить картинку QR-кода у публичного веб-сервиса. Из 1С выполняется HTTP-запрос с закодированной строкой данных, в ответ приходит изображение, которое сохраняется в двоичные данные и вставляется в печатную форму.

У этого способа три существенных ограничения. Во-первых, сервер 1С должен иметь доступ в интернет, что не всегда разрешено политикой безопасности. Во-вторых, данные платежа передаются стороннему сервису — для платёжных реквизитов это нежелательно. В-третьих, при недоступности сервиса печать документов остановится. Поэтому веб-генерацию разумно применять только для некритичных данных (ссылки на сайт, каталог, анкету) и обязательно оборачивать вызов в обработку ошибок с запасным сценарием.

Типичные ошибки
01
Передача платёжных реквизитов в сторонний онлайн-генератор — утечка финансовых данных
02
Отсутствие обработки ошибок HTTP-запроса — печать документов падает при недоступности сервиса
03
Неверная кодировка строки данных — кириллица в назначении платежа превращается в нечитаемые символы
04
Слишком маленький размер картинки на печати — сканеры и камеры телефонов не считывают код

Вывод QR-кода в печатную форму и на форму документа

В табличном документе картинка QR-кода размещается в объекте «Рисунок». В макете создаётся область с рисунком, при формировании печатной формы рисунку присваивается сгенерированная картинка. Важно задать размер рисунка с запасом: практика показывает, что для надёжного считывания код на бумаге должен быть не меньше 2–3 см по стороне, с чистым полем вокруг без текста и линий.

На управляемой форме картинку выводят через реквизит типа «Строка» с адресом во временном хранилище: двоичные данные помещаются в хранилище, адрес присваивается реквизиту формы с видом «Поле картинки». При обычных формах используется элемент «Поле картинки» с прямым присвоением объекта «Картинка».

Контрольные точки

Как проверить результат

Считывание кода
Норма

Камера телефона и сканер распознают код с первого раза

Тревожный признак

Код читается нестабильно или не читается вовсе

Содержимое данных
Норма

Распознанная строка совпадает с исходной посимвольно

Тревожный признак

Кириллица искажена, поля сдвинуты, лишние пробелы

Печатная форма
Норма

Код контрастный, размер от 2 см, вокруг свободное поле

Тревожный признак

Код мелкий, размытый, вплотную к тексту или рамке

Типичные проблемы и их устранение

Самая частая жалоба — «QR-код не сканируется». Причины по убыванию частоты: слишком мелкий размер на печати, низкое качество печати (бледный тонер, струйный принтер с полосами), отсутствие свободного поля вокруг кода, избыточный объём данных в коде (чем длиннее строка, тем плотнее матрица и тем сложнее считывание). Решения: увеличить размер рисунка, сократить строку данных до необходимого минимума, повысить уровень коррекции ошибок, проверить печать на другом принтере.

Вторая группа проблем — ошибки генерации: «компонента не найдена», пустая картинка, исключение при вызове функции. Здесь проверяют: установлена ли компонента печати штрихкодов на том компьютере, где выполняется код (на сервере — при серверном вызове, на клиенте — при клиентском), корректен ли тип кода в параметрах, не пуста ли строка данных. Полезно временно вывести текст ошибки в сообщение, чтобы понять, на каком шаге происходит сбой.

Маршрут решения

Как выбрать действие

Нужен платёжный QR в счёте на оплату в типовой конфигурацииПроверьте штатную настройку печатной формы и реквизиты организации — программировать не потребуется
Конфигурация на БСП, нужен произвольный QR-кодИспользуйте функции модуля генерации штрихкодов и установите компоненту печати
Самописная конфигурация без БСП и без интернетаПодключите внешнюю компоненту или готовую обработку генерации QR
Нужен разовый QR со ссылкой, интернет доступенДопустим HTTP-запрос к генератору с обработкой ошибок

Частые вопросы

Можно ли сформировать QR-код в 1С без программирования?

Да, если задача покрывается типовым механизмом: например, QR-код для оплаты в счёте на оплату в актуальных редакциях типовых конфигураций. Для нестандартных сценариев без доработки не обойтись — потребуется либо готовая внешняя обработка, либо свой код.

Почему QR-код формируется, но телефон его не читает?

Чаще всего причина в размере и качестве: код меньше 2 см на бумаге, бледная печать, текст вплотную к коду. Реже — слишком длинная строка данных, из-за которой матрица становится чрезмерно плотной. Увеличьте размер рисунка и сократите данные.

Как закодировать русский текст в QR-коде?

Строка данных должна передаваться в кодировке, которую понимает генератор (обычно UTF-8). Если кириллица после сканирования превращается в нечитаемые символы — проблема в несовпадении кодировки на этапе генерации. Проверьте параметры компоненты или сервиса.

Безопасно ли использовать онлайн-генераторы QR-кодов из 1С?

Для платёжных реквизитов и персональных данных — нет: строка данных полностью передаётся стороннему серверу. Для публичных ссылок (сайт, каталог, анкета) — допустимо, но обязательно предусмотрите поведение при недоступности сервиса.

Что делать, если функция генерации возвращает ошибку «компонента не установлена»?

Установите компоненту печати штрихкодов на том узле, где выполняется код: при серверном вызове — на сервере 1С, при клиентском — на рабочем месте пользователя. Компонента обычно входит в поставку конфигурации или доступна в составе дистрибутива.

Можно ли сохранить QR-код как картинку в базе 1С?

Да. Полученные двоичные данные изображения сохраняются в реквизит типа «Хранилище значения» (например, в присоединённых файлах или справочнике картинок), а при необходимости извлекаются для вывода на форму или в печатную форму.

Итог

Что важно запомнить

Сначала проверьте штатные возможности конфигурации — платёжный QR часто уже встроен. Для своих сценариев используйте БСП с компонентой печати штрихкодов, а онлайн-генераторы оставьте для некритичных данных. Платёжный QR всегда проверяйте сканированием до отправки клиенту.