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

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

Как сгенерировать QR-код в 1С: пошаговое руководство

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

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

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

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

Существует четыре практических подхода. Первый — штатный механизм отображения штрихкодов в табличных документах: он не требует ничего, кроме самой платформы, и подходит для печатных форм. Второй — внешняя компонента генерации штрихкодов (например, компонента из состава БСП или сторонние Native API/VCL-компоненты), которая возвращает картинку в виде двоичных данных. Третий — обращение к внешнему HTTP-сервису генерации QR-кодов с получением готового изображения. Четвёртый — формирование кода на стороне клиента через JavaScript в поле HTML-документа.

Штатный способ оптимален для печати: QR-код рисуется векторно, не теряет качества при масштабировании и не требует установки дополнительного ПО на рабочие места. Внешняя компонента нужна, когда картинку требуется сохранить в базу, прикрепить к письму или вывести в управляемую форму. HTTP-сервис — самый быстрый для прототипа, но создаёт зависимость от интернета и передаёт данные третьей стороне, что недопустимо для персональных и платёжных данных без согласования с политикой безопасности.

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

Штатный штрихкод табличного документа

Подходит для печатных форм и отчётов. Не даёт картинку в виде файла, только вывод в табличный документ.

Внешняя компонента

Возвращает двоичные данные картинки — можно сохранять, прикреплять, выводить в формы. Требует установки компоненты на сервере или клиенте.

HTTP-сервис генерации

Быстро внедрить, но нужен интернет и нельзя передавать конфиденциальные данные стороннему сервису.

JavaScript в поле HTML

Гибкое оформление, работает только в тонком и веб-клиенте, сложнее в отладке.

QR-код в печатной форме: штатный механизм

Штатный путь начинается с макета. Откройте макет печатной формы (табличный документ) в конфигураторе, вставьте в нужную область рисунок через меню «Таблица — Рисунки — Штрихкод» (в новых версиях — «Вставить рисунок» с типом «Штрихкод»). В свойствах рисунка установите тип штрихкода QRCode и задайте имя, по которому к нему обратится код, например «QRКод».

Дальше данные подставляются программно при выводе области. Минимальный пример:

ОбластьМакета = Макет.ПолучитьОбласть("Подвал");

Рисунок = ОбластьМакета.Рисунки.QRКод;

Рисунок.ТипКода = 16; // QR-код

Рисунок.ЗначениеКода = СтрокаДляКодирования;

ТабличныйДокумент.Вывести(ОбластьМакета);

Числовое значение типа кода для QR — 16. Содержимое свойства «ЗначениеКода» — произвольная строка: URL, текст платежа, серийный номер. Платформа сама построит матрицу. Учтите, что размер рисунка в макете влияет на читаемость: при большом объёме данных слишком маленькая картинка перестанет сканироваться. Практически безопасный минимум для печати — около 20×20 мм при короткой строке и больше при длинной.

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

Для оплаты по QR-коду в России применяется стандарт Системы быстрых платежей: строка имеет формат ST00012 с набором полей, разделённых символом «|». Поля включают наименование получателя, ИНН, расчётный счёт, БИК банка, назначение платежа и сумму в копейках. Пример структуры:

СтрокаQR = "ST00012|Name=ООО Ромашка"

+ "|PersonalAcc=40702810100000000001"

+ "|BankName=ПАО Банк"

+ "|BIC=044525225"

+ "|CorrespAcc=30101810000000000225"

+ "|PayeeINN=7707083893"

+ "|Purpose=Оплата по счету № 15"

+ "|Sum=150000";

Сумма указывается в копейках без разделителя: 150000 — это 1500 рублей. Регистр символов и точность реквизитов критичны: ошибка в ИНН или счёте приведёт к тому, что банковское приложение либо не распознает код, либо сформирует платёж с неверными реквизитами. Перед промышленным использованием проверяйте сформированный код сканированием в реальном банковском приложении на тестовой сумме.

Получение QR-кода как картинки через внешнюю компоненту

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

Общий шаблон работы с компонентой выглядит так:

ПодключитьВнешнююКомпоненту(

"ОбщийМакет.КомпонентаПечатиШтрихкодов",

"ГенераторШтрихкодов",

ТипВнешнейКомпоненты.Native);

Генератор = Новый("AddIn.ГенераторШтрихкодов.Barcode");

Генератор.ТипКода = 16; // QR-код

Генератор.Ширина = 200;

Генератор.Высота = 200;

Генератор.ЗначениеКода = СтрокаДляКодирования;

ДвоичныеДанные = Генератор.Сформировать();

// ДвоичныеДанные можно записать в файл или поместить во временное хранилище

Точные имена макета, свойств и метода формирования зависят от версии компоненты и БСП — сверяйтесь с документацией к своей конфигурации. В типовых решениях часто есть обёртка: функция вида «ПолучитьДанныеQRКода» в общем модуле, которая принимает строку и размер и возвращает двоичные данные PNG. Ищите её по словам «QRКод» и «Штрихкод» в общих модулях через глобальный поиск конфигуратора.

Вывод QR-кода в управляемую форму

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

ДвоичныеДанные = СформироватьQRКодНаСервере(СтрокаДляКодирования);

АдресКартинки = ПоместитьВоВременноеХранилище(ДвоичныеДанные, УникальныйИдентификатор);

Генерацию выполняйте в серверной процедуре (директива «&НаСервере»), потому что внешние компоненты и файловые операции в тонком клиенте часто недоступны или требуют отдельной установки. После обновления данных не забудьте пересоздать картинку и обновить адрес — поле картинки не перечитывает данные само.

Порядок действий для вывода в форму
  1. 1
    Добавьте строковый реквизит формы для адреса картинки
  2. 2
    Создайте элемент «Поле картинки» и свяжите с реквизитом
  3. 3
    В серверной процедуре сформируйте двоичные данные QR-кода
  4. 4
    Поместите данные во временное хранилище и запишите адрес в реквизит
  5. 5
    Проверьте отображение в тонком клиенте и читаемость сканером

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

Если компоненту подключить нельзя (например, файловая база без возможности установки), допустим вариант с публичным API генерации QR-кодов: 1С отправляет HTTP-запрос с текстом и размером, сервис возвращает PNG. Реализация сводится к объекту HTTPСоединение, HTTPЗапрос с параметрами в строке запроса и чтению ответа как двоичных данных.

У этого способа три жёстких ограничения. Первое — безопасность: содержимое QR-кода уходит на сторонний сервер, поэтому платёжные реквизиты, персональные данные и внутренние идентификаторы так передавать нельзя. Второе — доступность: без интернета или при блокировке сервиса печать встанет. Третье — скорость: сетевой запрос на каждый документ замедлит массовую печать. Используйте этот путь только для некритичных данных и как временное решение.

Типичные ошибки
01
Передача платёжных реквизитов в публичный онлайн-генератор — утечка реквизитов компании третьей стороне
02
Слишком маленький размер QR-кода в макете — сканеры и камеры телефонов не считывают код
03
Сумма в рублях вместо копеек в строке СБП — клиент оплачивает в 100 раз меньше или платёж отклоняется
04
Установка значения кода после вывода области в табличный документ — код остаётся пустым
05
Хранение картинки в виде фиксированного адреса хранилища между сеансами — после перезапуска адрес недействителен

Проверка результата перед запуском в работу

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

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

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

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

Сканирование камерой телефона
Норма

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

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

Код не читается или строка отличается — увеличьте размер, проверьте данные

Банковское приложение для платёжного QR
Норма

Подставились верные получатель, сумма и назначение

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

Ошибка распознавания или неверные реквизиты — проверьте формат ST00012

Печать на принтере
Норма

Код читается с бумажной копии

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

На экране читается, с бумаги нет — увеличьте размер, проверьте качество печати

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

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

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

Почему QR-код в печатной форме выводится пустым?

Чаще всего значение кода присваивается после вывода области в табличный документ либо обращение идёт к рисунку по неверному имени. Проверьте порядок: получить область → установить ЗначениеКода у рисунка → вывести область. Также убедитесь, что тип кода установлен в 16 (QR).

Какой размер QR-кода нужен для надёжного сканирования?

Зависит от объёма данных и условий сканирования. Для короткой строки и печати на документе практический минимум — около 20×20 мм; для длинных платёжных строк лучше 30×30 мм и больше. Ориентируйтесь не на цифру, а на тестовое сканирование с реальной бумажной копии.

Как закодировать кириллицу, чтобы сканеры читали её правильно?

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

Можно ли сохранить QR-код в базу и показывать его потом?

Да: сформируйте картинку внешней компонентой, сохраните двоичные данные в хранилище значений реквизита объекта. При показе помещайте данные во временное хранилище и выводите через поле картинки. Это надёжнее, чем хранить адрес временного хранилища, который действителен только в рамках сеанса.

Итог

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

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