Документы и Печать · 9 мин
Как в 1С создать QR-код: настройка, код и печать
Пошаговая инструкция: как создать QR-код в 1С через компоненту печати, вывести его в макет, на форму или в отчёт. Примеры кода, ошибки и проверка результата.
QR-код в 1С чаще всего нужен для печати на документах: счётах, накладных, этикетках, чеках и объявлениях об оплате. Типовой способ — использовать встроенную компоненту формирования изображения штрихкода, которая входит в состав платформы 1С:Предприятие 8.3 начиная с версии 8.3.6 и не требует сторонних программ. Компонента поддерживает двумерные коды QRCode, DataMatrix, PDF417 и линейные штрихкоды.
Вся работа сводится к трём действиям: сформировать строку данных для кодирования, передать её компоненте и получить картинку в формате двоичных данных, а затем вывести картинку в макет печатной формы или на форму объекта. Ниже разобраны все шаги с примерами кода, типичными ошибками и способами проверки результата.
Что понадобится перед началом работы
Для генерации QR-кода нужна платформа 1С:Предприятие 8.3.6 или новее — именно с этой версии компонента печати штрихкода поставляется вместе с платформой и устанавливается автоматически. На более ранних версиях компоненту придётся подключать вручную из макета конфигурации или использовать внешние решения.
Также потребуются права на изменение конфигурации или хотя бы на работу с внешними обработками, если доработку планируется делать без снятия конфигурации с поддержки. Для вывода кода на печать нужен доступ к макету печатной формы соответствующего документа.
Компонента печати штрихкода входит в поставку платформы
Компонента поддерживает и другие типы, но для QR нужен именно этот
От этого зависит способ отображения картинки
Создание общего модуля для генерации QR-кода
Удобнее всего оформить генерацию в общем серверном модуле, чтобы вызывать её из любых печатных форм. Модуль должен быть серверным, вызов сервера — разрешён, привилегированный режим не обязателен. Ключевая функция формирует компоненту и возвращает двоичные данные картинки.
Типовой код функции выглядит так:
Функция ПолучитьQRКод(СтрокаДанных, Ширина = 200, Высота = 200) Экспорт
Компонента = Обработки.ПечатьQRКода.Создать();
Компонента.Ширина = Ширина;
Компонента.Высота = Высота;
Компонента.ТипКода = 16; // QRCode
Компонента.ЗначениеКода = СтрокаДанных;
Компонента.УровеньКоррекции = 1;
Возврат Компонента.ПолучитьДанныеQRКода();
КонецФункции
Обратите внимание: имя обработки «ПечатьQRКода» должно совпадать с именем обработки, добавленной в конфигурацию. В типовых конфигурациях (например, в БСП) уже есть готовый программный интерфейс — модуль «ГенерацияШтрихкода» с функцией «ДанныеQRКода», и писать свою обёртку не нужно.
Добавление обработки печати QR-кода в конфигурацию
Если конфигурация самописная или в ней нет БСП, обработку нужно добавить вручную. В конфигураторе откройте ветку «Обработки», создайте новую обработку с именем «ПечатьQRКода». В свойствах обработки найдите пункт «Внешняя компонента» и укажите использование компоненты печати штрихкода, которая поставляется с платформой.
Компонента подключается автоматически при первом обращении с клиентского или серверного вызова. На сервере под Linux компонента также доступна, но в редких случаях требует отдельной установки пакета из дистрибутива платформы — проверьте это заранее, если сервер не на Windows.
- 1Откройте конфигуратор, ветка «Обработки», создайте обработку «ПечатьQRКода»
- 2В свойствах обработки укажите использование внешней компоненты печати штрихкода
- 3Сохраните и обновите конфигурацию базы данных
- 4Проверьте вызов компоненты тестовым кодом в консоли кода или внешней обработке
Формирование строки данных для QR-кода
Содержимое QR-кода — обычная строка, но её формат зависит от назначения. Для платёжных QR-кодов по стандарту ЦБ РФ (СБП) используется специальная структура с полями получателя, суммы и назначения платежа. Для ссылок достаточно передать URL, для произвольного текста — сам текст.
Учитывайте ограничение по объёму: чем длиннее строка, тем плотнее и мельче получается код, и тем хуже он считывается камерами телефонов при печати малого размера. Практическое правило — не кодировать больше нескольких сотен символов и не уменьшать картинку ниже примерно 2×2 см на бумаге.
Кириллица в строке поддерживается, но при кодировании платёжных данных проверяйте требования конкретного стандарта: некоторые форматы предписывают определённую кодировку символов, иначе банковское приложение не распознает код.
Вывод QR-кода в макет печатной формы
В макете документа (табличный документ) создайте область для картинки. Добавьте в макет рисунок типа «Картинка», задайте ему имя, например «КартинкаQR». В модуле менеджера документа при формировании печатной формы получите двоичные данные и присвойте их рисунку:
ОбластьМакета = Макет.ПолучитьОбласть("Подвал");
Картинка = ОбластьМакета.Рисунки.КартинкаQR;
Картинка.Картинка = Новый Картинка(
ПолучитьQRКод(СтрокаОплаты, 200, 200));
ТабДок.Вывести(ОбластьМакета);
Конструктор «Новый Картинка» принимает двоичные данные напрямую, сохранять файл на диск не нужно. Размер рисунка в макете задайте с запасом: компонента формирует картинку заданной ширины и высоты в пикселях, а при печати она масштабируется под размер области.
Вывод на форму объекта
Для показа QR-кода на форме документа добавьте реквизит формы типа «Строка» (адрес во временном хранилище) и элемент формы «Поле картинки». На сервере сформируйте картинку и поместите её во временное хранилище: ПоместитьВоВременноеХранилище(Новый Картинка(ДанныеQR), УникальныйИдентификатор), затем присвойте адрес реквизиту. Картинка отобразится на форме без сохранения в базе.
АдресКартинки = ПоместитьВоВременноеХранилище(Новый Картинка(ДанныеQR), УникальныйИдентификатор);Проверка результата и типичные ошибки
После внедрения обязательно проверьте код реальным сканированием, а не только визуально. Откройте печатную форму, распечатайте тестовый документ и отсканируйте код камерой телефона. Содержимое должно точно совпадать с исходной строкой, включая спецсимволы и кириллицу.
Как проверить результат
Код считывается сразу, содержимое совпадает со строкой
Код не читается или данные обрезаны/искажены
Картинка чёткая, без размытия и обрезки краёв
Код растянут, сплющен или частично за пределами области
Двоичные данные возвращаются без исключений
Ошибка «Не удалось подключить компоненту»
Альтернативные способы получения QR-кода
Штатная компонента — не единственный вариант. Существуют внешние генераторы через веб-сервисы, но они требуют доступа в интернет и передают данные третьей стороне, что неприемлемо для платёжной и конфиденциальной информации. Другой вариант — внешние компоненты сторонних разработчиков, но они добавляют зависимость и риски при обновлении платформы.
Сравнение способов генерации
Подходит почти всегда: работает офлайн, поддерживается 1С. Ограничение — нужна платформа 8.3.6+
Оптимально для типовых конфигураций: готовая обёртка с обработкой ошибок. Требует наличия БСП
Быстро без доработок, но данные уходят наружу и нужен интернет — не для платёжных кодов
Дополнительные форматы и настройки, но риск несовместимости при обновлении платформы
В большинстве сценариев достаточно штатной компоненты: она формирует коды на сервере, не зависит от внешних сервисов и одинаково работает в файловых и клиент-серверных базах.
Что важно запомнить
QR-код в 1С создаётся штатной компонентой печати штрихкода: задайте тип кода 16, строку данных и размер, получите двоичные данные и выведите их через объект «Картинка» в макет или на форму. В типовых конфигурациях используйте готовый модуль «ГенерацияШтрихкода». Результат обязательно проверяйте сканированием с телефона.
Частые вопросы
Работает ли генерация QR-кода на тонком клиенте?
Компонента может работать и на клиенте, но надёжнее формировать код на сервере и передавать на клиент только готовую картинку. Это избавляет от необходимости устанавливать компоненту на каждое рабочее место.
Можно ли создать QR-код без изменения конфигурации?
Да, если разработать внешнюю обработку или расширение конфигурации. Расширение позволяет добавить свою печатную форму с QR-кодом, не снимая конфигурацию с поддержки.
Почему QR-код формируется, но не сканируется телефоном?
Чаще всего причина в слишком маленьком размере картинки на печати, недостаточном контрасте или повреждении краёв кода при обрезке области макета. Увеличьте размер до 2–3 см и убедитесь, что вокруг кода есть светлое поле.
Как закодировать ссылку для оплаты через СБП?
Нужно сформировать строку по официальному стандарту формата платёжной ссылки СБП с параметрами получателя, суммы и назначения, а затем передать её компоненте как обычную строку. Саму структуру строки берите из актуальной документации оператора — формат периодически уточняется.
Можно ли сохранить QR-код в базу данных?
Да. Поместите двоичные данные картинки в реквизит типа «ХранилищеЗначения» справочника или документа. Однако обычно хранить код не требуется: его дешевле генерировать заново при каждой печати, чтобы данные всегда были актуальными.