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

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

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

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

QR-код в 1С чаще всего требуется для печатных форм: платёжные документы с реквизитами по ГОСТ Р 56042-2014, этикетки товаров, ссылки на электронные накладные, маркировка. Платформа 1С:Предприятие 8.3 умеет генерировать QR-код штатно — без внешних компонент и интернет-сервисов — через объект «ГенераторQRКода» (QRCodeGenerator). Этого достаточно для большинства задач: сформировать картинку, вставить её в макет и вывести на печать.

Есть два рабочих пути. Первый — типовой: во многих конфигурациях (Бухгалтерия предприятия, Управление торговлей, ERP) QR-код для платёжных поручений и счетов уже встроен, нужно только заполнить реквизиты. Второй — программный: написать несколько строк кода на встроенном языке, которые создают изображение из произвольной строки. Оба способа разберём ниже с конкретными примерами.

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

Как устроена штатная генерация QR-кода в платформе

В платформе 8.3 есть встроенный объект ГенераторQRКода (в английском синтаксисе — QRCodeGenerator). Он не требует подключения внешних компонент, работает и на клиенте, и на сервере, и возвращает картинку в формате PNG в виде двоичных данных. Дальше эту картинку можно поместить во временное хранилище, вывести в табличный документ через область-рисунок или показать в элементе формы «Поле картинки».

Метод Создать принимает три параметра: строку данных, уровень коррекции ошибок и минимальный размер картинки в пикселях. Уровень коррекции определяет, какая часть кода может быть повреждена без потери читаемости: значения от 0 (низкий) до 3 (высокий). Чем выше уровень, тем плотнее код при той же строке, но тем устойчивее он к загрязнению и плохой печати.

Программное создание QR-кода: пример кода

Минимальный рабочий пример — сформировать картинку из строки и поместить её в табличный документ. Код выполняется в общем модуле, модуле менеджера объекта или внешней обработке:

Функция СформироватьQRКод(СтрокаДанных)

Генератор = Новый ГенераторQRКода;

ДвоичныеДанные = Генератор.Создать(СтрокаДанных, 1, 200);

Если ДвоичныеДанные = Неопределено Тогда

Возврат Неопределено; // строка не поместилась в QR-код

КонецЕсли;

Возврат Новый Картинка(ДвоичныеДанные);

КонецФункции

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

ТабДок = Новый ТабличныйДокумент;

Макет = ПолучитьМакет("МакетЭтикетки");

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

Область.Рисунки.QRКод.Картинка = СформироватьQRКод(СтрокаДанных);

ТабДок.Вывести(Область);

Если картинка нужна в управляемой форме, двоичные данные помещают во временное хранилище, а адрес присваивают реквизиту формы, связанному с полем картинки. Учтите: при серверном вызове хранилище очищается между вызовами, поэтому адрес нужно обновлять после каждой генерации или использовать ПоместитьВоВременноеХранилище с указанием уникального идентификатора формы.

Порядок действий
  1. 1
    Подготовьте строку данных: текст, ссылку или платёжную строку по стандарту
  2. 2
    В коде создайте объект ГенераторQRКода и вызовите Создать(Данные, УровеньКоррекции, Размер)
  3. 3
    Проверьте, что метод не вернул Неопределено — иначе сократите данные или повысьте ёмкость
  4. 4
    Создайте в макете табличного документа область с рисунком и присвойте ему картинку
  5. 5
    Выведите область в табличный документ и распечатайте тестовый экземпляр
  6. 6
    Отсканируйте код камерой телефона и сверьте содержимое с исходной строкой

QR-код в платёжных документах по стандарту ЦБ

Самый массовый сценарий — QR-код на счетах и квитанциях для оплаты через мобильный банк. Содержимое такого кода формируется по стандарту Стандарт ЦБ РФ (ГОСТ Р 56042-2014): строка вида ST00012|Name=...|PersonalAcc=...|BankName=...|BIC=...|CorrespAcc=...|Sum=..., где сумма указывается в копейках. Вручную собирать эту строку не стоит — легко ошибиться в разделителях и обязательных полях.

В типовых конфигурациях (БП 3.0, УТ 11, ERP, КА) механизм уже реализован: QR-код выводится в печатных формах счёта на оплату, если в карточке организации заполнены расчётный счёт, банк и БИК. Проверьте настройки печатной формы — часто вывод кода включается флажком в параметрах печати или в настройках счёта. Если код не появляется, первым делом проверьте полноту банковских реквизитов: пустое поле БИК или корреспондентского счёта — типичная причина отсутствия картинки.

Для собственных разработок строку стандарта собирайте через конкатенацию с явным контролем каждого поля. Сумма в копейках — частый источник ошибок: 1500 рублей кодируются как Sum=150000. После сборки обязательно протестируйте строку сканированием через приложение банка, а не только через обычный сканер QR — именно банковское приложение покажет, корректно ли распарсились поля.

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

Для печатных форм документов удобнее всего работать через макет табличного документа. Создайте в конфигураторе макет, добавьте область под код, вставьте в неё рисунок через меню «Таблица — Рисунки» или палитру свойств, задайте рисунку понятное имя — именно по нему к нему обращаются из кода. Размер рисунка в макете определяет физический размер кода на бумаге: для надёжного сканирования не делайте код меньше 2×2 см.

Для этикеток на принтерах этикеток сценарий тот же, но есть нюанс с масштабированием. Принтеры этикеток печатают с фиксированной плотностью точек, и при сильном сжатии картинки модули QR-кода могут сливаться. Формируйте картинку с запасом по размеру (например, 300–400 пикселей) и проверяйте читаемость на реальном отпечатке, а не на экране предпросмотра.

Если этикетки печатаются пачками в цикле, создавайте генератор один раз вне цикла, а внутри цикла только вызывайте Создать и выводите области — так код работает заметно быстрее при больших объёмах.

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

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

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

Код считывается за 1–2 секунды, содержимое совпадает с исходной строкой

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

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

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

QR-код присутствует, банковское приложение распознаёт реквизиты и сумму

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

Кода нет или банк показывает неверные поля — проверяйте реквизиты организации и строку стандарта

Размер кода на бумаге
Норма

Сторона кода не меньше 2 см, модули чёткие, без смазывания

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

Мелкий или размытый код — увеличьте рисунок в макете и разрешение картинки

Типичные ошибки и ограничения

Главное ограничение штатного генератора — ёмкость QR-кода. Если строка слишком длинная, метод Создать вернёт Неопределено. Это не ошибка выполнения, а штатная ситуация: обрабатывайте её проверкой результата. Практически безопасный объём — до нескольких сотен символов; длинные JSON-документы в QR-код не помещаются, для них лучше кодировать короткую ссылку на документ.

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

Типичные ошибки
01
Не проверяется результат метода Создать — при переполнении данных вместо кода выводится пустое место
02
Сумма в платёжной строке указана в рублях вместо копеек — банк подставляет сумму в сто раз меньше
03
Код сжат в макете до 1 см — сканеры не читают его с бумажной формы
04
Создание объекта ГенераторQRКода внутри цикла печати сотен этикеток — лишние тормоза без пользы
05
Тестирование только на экране — на реальном отпечатке код оказывается размытым

Альтернативы штатному генератору

Если штатного объекта не хватает — например, нужен Data Matrix для Честного ЗНАКа или код Aztec — встроенный генератор не подойдёт: он создаёт только QR. Для других форматов используют внешние компоненты по технологии Native API или COM, либо формируют картинку на стороннем сервисе и загружают её в 1С по HTTP. Компонентный путь надёжнее для производственной печати, сервисный — проще для разовых задач, но зависит от доступности интернета и не подходит для конфиденциальных данных.

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

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

Штатный ГенераторQRКода

Подходит для QR-кодов любого содержимого без внешних зависимостей; не поддерживает Data Matrix и другие форматы

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

Нужна для Data Matrix, Aztec и тонкой настройки; требует установки и сопровождения на каждом рабочем месте или сервере

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

Готовые QR-коды в счетах и маркировке; ограничены заложенными сценариями, сложно кастомизировать без доработки

FAQ

Работает ли генерация QR-кода в файловой базе без сервера 1С?

Да. Объект ГенераторQRКода — часть платформы, он работает и в файловом, и в клиент-серверном варианте, на тонком и толстом клиенте. Никаких дополнительных лицензий и компонентов не требуется.

Почему метод Создать возвращает Неопределено?

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

Можно ли вывести QR-код в печатную форму без изменения конфигурации?

Да, через внешнюю печатную форму. Механизм дополнительных отчётов и обработок (БСП) позволяет подключить свою печатную форму с макетом и кодом генерации, не снимая конфигурацию с поддержки.

Какой размер картинки задавать при генерации?

Минимальный размер в параметрах — это нижняя граница, реальный размер зависит от объёма данных. Задавайте 200–400 пикселей: этого достаточно и для экрана, и для печати. Слишком маленькое значение даст мыльную картинку при масштабировании в макете.

Почему телефон не сканирует напечатанный код, хотя на экране читается?

Обычно дело в физическом размере или качестве печати: код меньше 2 см, размытые модули, бледный тонер. Увеличьте рисунок в макете, повысьте уровень коррекции ошибок и проверьте печать на другом принтере.

Можно ли закодировать ссылку на документ 1С для сканирования?

Да, но сканирующее устройство получит просто текст ссылки. Практичнее кодировать короткую HTTP-ссылку на веб-сервис или публикацию базы, которая откроет документ в браузере, — прямые навигационные ссылки 1С телефон не обработает.

Итог

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

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