Разработка и Конфигурация · 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Подготовьте строку данных: текст, ссылку или платёжную строку по стандарту
- 2В коде создайте объект ГенераторQRКода и вызовите Создать(Данные, УровеньКоррекции, Размер)
- 3Проверьте, что метод не вернул Неопределено — иначе сократите данные или повысьте ёмкость
- 4Создайте в макете табличного документа область с рисунком и присвойте ему картинку
- 5Выведите область в табличный документ и распечатайте тестовый экземпляр
- 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. Для платёжных строк используйте только символы, прямо разрешённые стандартом, а для произвольных данных тестируйте чтение на целевых устройствах. Третья типичная ошибка — вывод картинки через Новый Картинка с указанием файла на сервере вместо двоичных данных: на клиенте файла нет, и картинка оказывается пустой.
Альтернативы штатному генератору
Если штатного объекта не хватает — например, нужен Data Matrix для Честного ЗНАКа или код Aztec — встроенный генератор не подойдёт: он создаёт только QR. Для других форматов используют внешние компоненты по технологии Native API или COM, либо формируют картинку на стороннем сервисе и загружают её в 1С по HTTP. Компонентный путь надёжнее для производственной печати, сервисный — проще для разовых задач, но зависит от доступности интернета и не подходит для конфиденциальных данных.
Для маркировки товаров коды Data Matrix обычно вообще не генерируются в 1С вручную: типовые конфигурации получают готовые коды из системы маркировки через обмен, а печать выполняют штатными средствами обработок маркировки. Прежде чем писать собственную генерацию, проверьте, нет ли готового механизма в вашей конфигурации — это сэкономит время и убережёт от ошибок соответствия требованиям.
Сравнение вариантов
Подходит для QR-кодов любого содержимого без внешних зависимостей; не поддерживает Data Matrix и другие форматы
Нужна для Data Matrix, Aztec и тонкой настройки; требует установки и сопровождения на каждом рабочем месте или сервере
Готовые QR-коды в счетах и маркировке; ограничены заложенными сценариями, сложно кастомизировать без доработки
FAQ
Работает ли генерация QR-кода в файловой базе без сервера 1С?
Да. Объект ГенераторQRКода — часть платформы, он работает и в файловом, и в клиент-серверном варианте, на тонком и толстом клиенте. Никаких дополнительных лицензий и компонентов не требуется.
Почему метод Создать возвращает Неопределено?
Чаще всего строка данных слишком длинная для QR-кода при выбранном уровне коррекции. Сократите данные или понизьте уровень коррекции. Реже причина — недопустимые управляющие символы в строке: очистите её от служебных символов перед генерацией.
Можно ли вывести QR-код в печатную форму без изменения конфигурации?
Да, через внешнюю печатную форму. Механизм дополнительных отчётов и обработок (БСП) позволяет подключить свою печатную форму с макетом и кодом генерации, не снимая конфигурацию с поддержки.
Какой размер картинки задавать при генерации?
Минимальный размер в параметрах — это нижняя граница, реальный размер зависит от объёма данных. Задавайте 200–400 пикселей: этого достаточно и для экрана, и для печати. Слишком маленькое значение даст мыльную картинку при масштабировании в макете.
Почему телефон не сканирует напечатанный код, хотя на экране читается?
Обычно дело в физическом размере или качестве печати: код меньше 2 см, размытые модули, бледный тонер. Увеличьте рисунок в макете, повысьте уровень коррекции ошибок и проверьте печать на другом принтере.
Можно ли закодировать ссылку на документ 1С для сканирования?
Да, но сканирующее устройство получит просто текст ссылки. Практичнее кодировать короткую HTTP-ссылку на веб-сервис или публикацию базы, которая откроет документ в браузере, — прямые навигационные ссылки 1С телефон не обработает.
Что важно запомнить
QR-код в 1С создаётся штатным объектом ГенераторQRКода без внешних компонент: метод Создать возвращает картинку, которую вставляют в макет или форму. Всегда проверяйте результат на Неопределено, печатайте код не меньше 2 см и тестируйте платёжные коды в реальном банковском приложении до тиражирования документов.