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

Документы и Печать · 9 мин

Как в 1С создать QR-код: настройка, код и печать

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

QR-код в 1С чаще всего нужен для печати на документах: счётах, накладных, этикетках, чеках и объявлениях об оплате. Типовой способ — использовать встроенную компоненту формирования изображения штрихкода, которая входит в состав платформы 1С:Предприятие 8.3 начиная с версии 8.3.6 и не требует сторонних программ. Компонента поддерживает двумерные коды QRCode, DataMatrix, PDF417 и линейные штрихкоды.

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

Что понадобится перед началом работы

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

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

Версия платформы8.3.6 и выше

Компонента печати штрихкода входит в поставку платформы

Тип кодаQRCode (значение 16)

Компонента поддерживает и другие типы, но для QR нужен именно этот

Место выводаМакет, форма, отчёт

От этого зависит способ отображения картинки

Создание общего модуля для генерации QR-кода

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

Типовой код функции выглядит так:

Функция ПолучитьQRКод(СтрокаДанных, Ширина = 200, Высота = 200) Экспорт

Компонента = Обработки.ПечатьQRКода.Создать();

Компонента.Ширина = Ширина;

Компонента.Высота = Высота;

Компонента.ТипКода = 16; // QRCode

Компонента.ЗначениеКода = СтрокаДанных;

Компонента.УровеньКоррекции = 1;

Возврат Компонента.ПолучитьДанныеQRКода();

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

Обратите внимание: имя обработки «ПечатьQRКода» должно совпадать с именем обработки, добавленной в конфигурацию. В типовых конфигурациях (например, в БСП) уже есть готовый программный интерфейс — модуль «ГенерацияШтрихкода» с функцией «ДанныеQRКода», и писать свою обёртку не нужно.

Добавление обработки печати QR-кода в конфигурацию

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

Компонента подключается автоматически при первом обращении с клиентского или серверного вызова. На сервере под Linux компонента также доступна, но в редких случаях требует отдельной установки пакета из дистрибутива платформы — проверьте это заранее, если сервер не на Windows.

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

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

Содержимое QR-кода — обычная строка, но её формат зависит от назначения. Для платёжных QR-кодов по стандарту ЦБ РФ (СБП) используется специальная структура с полями получателя, суммы и назначения платежа. Для ссылок достаточно передать URL, для произвольного текста — сам текст.

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

Кириллица в строке поддерживается, но при кодировании платёжных данных проверяйте требования конкретного стандарта: некоторые форматы предписывают определённую кодировку символов, иначе банковское приложение не распознает код.

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

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

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

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

Картинка.Картинка = Новый Картинка(

ПолучитьQRКод(СтрокаОплаты, 200, 200));

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

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

Вывод на форму объекта

Для показа QR-кода на форме документа добавьте реквизит формы типа «Строка» (адрес во временном хранилище) и элемент формы «Поле картинки». На сервере сформируйте картинку и поместите её во временное хранилище: ПоместитьВоВременноеХранилище(Новый Картинка(ДанныеQR), УникальныйИдентификатор), затем присвойте адрес реквизиту. Картинка отобразится на форме без сохранения в базе.

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

Проверка результата и типичные ошибки

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

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

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

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

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

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

Код не читается или данные обрезаны/искажены

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

Картинка чёткая, без размытия и обрезки краёв

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

Код растянут, сплющен или частично за пределами области

Вызов компоненты
Норма

Двоичные данные возвращаются без исключений

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

Ошибка «Не удалось подключить компоненту»

Типичные ошибки
01
Неверный тип кода: вместо 16 (QRCode) указан другой тип — получается линейный штрихкод, а не QR
02
Слишком маленький размер картинки на печати — камеры телефонов не считывают плотный код
03
Попытка присвоить двоичные данные напрямую рисунку без обёртки в объект «Картинка» — возникает ошибка несоответствия типов
04
Кодирование слишком длинной строки — код становится нечитаемым при стандартном размере
05
Использование клиентского вызова на тонком клиенте без установленной компоненты — генерация падает, переносите вызов на сервер

Альтернативные способы получения QR-кода

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

Сравнение способов генерации

Штатная компонента платформы

Подходит почти всегда: работает офлайн, поддерживается 1С. Ограничение — нужна платформа 8.3.6+

Функции БСП (ГенерацияШтрихкода)

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

Веб-сервисы генерации

Быстро без доработок, но данные уходят наружу и нужен интернет — не для платёжных кодов

Сторонние внешние компоненты

Дополнительные форматы и настройки, но риск несовместимости при обновлении платформы

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

Итог

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

QR-код в 1С создаётся штатной компонентой печати штрихкода: задайте тип кода 16, строку данных и размер, получите двоичные данные и выведите их через объект «Картинка» в макет или на форму. В типовых конфигурациях используйте готовый модуль «ГенерацияШтрихкода». Результат обязательно проверяйте сканированием с телефона.

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

Работает ли генерация QR-кода на тонком клиенте?

Компонента может работать и на клиенте, но надёжнее формировать код на сервере и передавать на клиент только готовую картинку. Это избавляет от необходимости устанавливать компоненту на каждое рабочее место.

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

Да, если разработать внешнюю обработку или расширение конфигурации. Расширение позволяет добавить свою печатную форму с QR-кодом, не снимая конфигурацию с поддержки.

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

Чаще всего причина в слишком маленьком размере картинки на печати, недостаточном контрасте или повреждении краёв кода при обрезке области макета. Увеличьте размер до 2–3 см и убедитесь, что вокруг кода есть светлое поле.

Как закодировать ссылку для оплаты через СБП?

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

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

Да. Поместите двоичные данные картинки в реквизит типа «ХранилищеЗначения» справочника или документа. Однако обычно хранить код не требуется: его дешевле генерировать заново при каждой печати, чтобы данные всегда были актуальными.