Разработка и Конфигурация · 11 мин
Как сгенерировать QR-код в 1С: пошаговое руководство
Как сгенерировать QR-код в 1С: штатные средства платформы, компонента печати штрихкодов, примеры кода на встроенном языке, внешние библиотеки и типичные ошибки.
QR-код в 1С чаще всего нужен для печати платёжных документов (оплата по QR-коду по стандарту НСПК), маркировки товаров, ссылок на чеки и быстрой идентификации объектов учёта. Платформа 1С:Предприятие умеет выводить двумерные штрихкоды штатно — через механизм отображения штрихкодов в табличных документах, без сторонних компонентов. Для более гибких задач используют внешние компоненты или генерацию картинки через API.
Выбор способа зависит от трёх факторов: где должен появиться код (печатная форма, экран, файл), какая версия платформы используется и есть ли возможность подключать внешние компоненты. Ниже разобраны все рабочие варианты с примерами кода на встроенном языке.
Способы генерации QR-кода в 1С и когда какой выбрать
Существует четыре практических подхода. Первый — штатный механизм отображения штрихкодов в табличных документах: он не требует ничего, кроме самой платформы, и подходит для печатных форм. Второй — внешняя компонента генерации штрихкодов (например, компонента из состава БСП или сторонние Native API/VCL-компоненты), которая возвращает картинку в виде двоичных данных. Третий — обращение к внешнему HTTP-сервису генерации QR-кодов с получением готового изображения. Четвёртый — формирование кода на стороне клиента через JavaScript в поле HTML-документа.
Штатный способ оптимален для печати: QR-код рисуется векторно, не теряет качества при масштабировании и не требует установки дополнительного ПО на рабочие места. Внешняя компонента нужна, когда картинку требуется сохранить в базу, прикрепить к письму или вывести в управляемую форму. HTTP-сервис — самый быстрый для прототипа, но создаёт зависимость от интернета и передаёт данные третьей стороне, что недопустимо для персональных и платёжных данных без согласования с политикой безопасности.
Сравнение вариантов
Подходит для печатных форм и отчётов. Не даёт картинку в виде файла, только вывод в табличный документ.
Возвращает двоичные данные картинки — можно сохранять, прикреплять, выводить в формы. Требует установки компоненты на сервере или клиенте.
Быстро внедрить, но нужен интернет и нельзя передавать конфиденциальные данные стороннему сервису.
Гибкое оформление, работает только в тонком и веб-клиенте, сложнее в отладке.
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Добавьте строковый реквизит формы для адреса картинки
- 2Создайте элемент «Поле картинки» и свяжите с реквизитом
- 3В серверной процедуре сформируйте двоичные данные QR-кода
- 4Поместите данные во временное хранилище и запишите адрес в реквизит
- 5Проверьте отображение в тонком клиенте и читаемость сканером
Генерация через внешний HTTP-сервис
Если компоненту подключить нельзя (например, файловая база без возможности установки), допустим вариант с публичным API генерации QR-кодов: 1С отправляет HTTP-запрос с текстом и размером, сервис возвращает PNG. Реализация сводится к объекту HTTPСоединение, HTTPЗапрос с параметрами в строке запроса и чтению ответа как двоичных данных.
У этого способа три жёстких ограничения. Первое — безопасность: содержимое QR-кода уходит на сторонний сервер, поэтому платёжные реквизиты, персональные данные и внутренние идентификаторы так передавать нельзя. Второе — доступность: без интернета или при блокировке сервиса печать встанет. Третье — скорость: сетевой запрос на каждый документ замедлит массовую печать. Используйте этот путь только для некритичных данных и как временное решение.
Проверка результата перед запуском в работу
Проверку делайте в два этапа. Сначала техническая: отсканируйте код минимум двумя разными устройствами — камерой телефона и, если есть, сканером штрихкодов. Сканер должен вернуть в точности ту строку, которую вы закодировали: сверяйте посимвольно, особенно кириллицу и спецсимволы. Некоторые сканеры передают русские буквы в неверной кодировке — это проблема сканера, а не QR-кода, но её нужно знать заранее.
Затем функциональная проверка: для платёжного кода откройте банковское приложение, отсканируйте код и убедитесь, что подставились правильные получатель, сумма и назначение. Для маркировки и ссылок — что код ведёт на нужный объект. Только после этого включайте QR-код в рабочие печатные формы.
Как проверить результат
Распознанная строка совпадает с исходной посимвольно
Код не читается или строка отличается — увеличьте размер, проверьте данные
Подставились верные получатель, сумма и назначение
Ошибка распознавания или неверные реквизиты — проверьте формат ST00012
Код читается с бумажной копии
На экране читается, с бумаги нет — увеличьте размер, проверьте качество печати
Частые вопросы
Можно ли сгенерировать QR-код в 1С без внешних компонент и интернета?
Да, если код нужен только в печатной форме или отчёте: штатный рисунок «Штрихкод» табличного документа строит QR-код средствами самой платформы. Получить отдельный файл картинки без компоненты или внешнего сервиса штатными средствами нельзя.
Почему QR-код в печатной форме выводится пустым?
Чаще всего значение кода присваивается после вывода области в табличный документ либо обращение идёт к рисунку по неверному имени. Проверьте порядок: получить область → установить ЗначениеКода у рисунка → вывести область. Также убедитесь, что тип кода установлен в 16 (QR).
Какой размер QR-кода нужен для надёжного сканирования?
Зависит от объёма данных и условий сканирования. Для короткой строки и печати на документе практический минимум — около 20×20 мм; для длинных платёжных строк лучше 30×30 мм и больше. Ориентируйтесь не на цифру, а на тестовое сканирование с реальной бумажной копии.
Как закодировать кириллицу, чтобы сканеры читали её правильно?
Сам QR-код хранит данные корректно, но часть сканеров и приложений интерпретирует текст в неправильной кодировке. Надёжнее кодировать кириллицу в UTF-8 и тестировать на целевых устройствах. Для платёжных кодов по стандарту СБП кириллица в полях допустима, но проверка в реальном банковском приложении обязательна.
Можно ли сохранить QR-код в базу и показывать его потом?
Да: сформируйте картинку внешней компонентой, сохраните двоичные данные в хранилище значений реквизита объекта. При показе помещайте данные во временное хранилище и выводите через поле картинки. Это надёжнее, чем хранить адрес временного хранилища, который действителен только в рамках сеанса.
Что важно запомнить
Для печатных форм используйте штатный штрихкод табличного документа (тип кода 16), для файлов и форм — внешнюю компоненту с получением двоичных данных. Платёжные QR-коды формируйте по формату ST00012 и обязательно проверяйте тестовым сканированием и оплатой малой суммы до запуска в работу.