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

Отчеты и Аналитика · 11 мин

Как добавить штрихкод в отчет 1С

Как добавить штрихкод в отчет 1С: подключение компоненты печати, вставка в макет СКД и табличный документ, настройка типа кода и проверка читаемости сканером.

Штрихкод в отчете 1С нужен, когда документ или печатная форма должны быстро идентифицироваться сканером: накладные на складе, этикетки, билеты на мероприятие, регистрационные листы. В типовых конфигурациях для этого уже есть встроенный механизм — компонента печати штрихкодов, которую можно вызвать как из макета табличного документа, так и из схемы компоновки данных (СКД).

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

Материал ориентирован на конфигурации на управляемых формах (Управление торговлей, ERP, Комплексная автоматизация, Бухгалтерия предприятия), где используется библиотека стандартных подсистем. В старых конфигурациях на обычных формах подход отличается, о чем сказано отдельно.

Какие виды штрихкодов поддерживает 1С и что выбрать

Прежде чем добавлять код в отчет, определите его тип. Линейные коды EAN-13 и Code128 подходят для идентификации документов и товаров: EAN-13 — стандарт розничной торговли, Code128 — универсальный формат для внутренних номеров, допускающий буквы и цифры. Двумерный QR-код используют, когда нужно закодировать много данных: ссылку, реквизиты документа, строку оплаты.

Выбор типа влияет на требования к данным. EAN-13 принимает строго 12 или 13 цифр и сам рассчитывает контрольный разряд. Code128 менее требователен, но при большой длине строки штрих-картинка становится широкой и может не поместиться в область макета. QR-код устойчив к повреждениям, но требует больше места по высоте.

Сравнение типов штрихкодов

EAN-13

Стандарт для товаров розницы. Только цифры, фиксированная длина. Не подходит для произвольных номеров документов.

Code128

Универсальный линейный код для внутренних номеров, букв и цифр. Ширина растет с длиной строки.

QR-код

Вмещает длинные строки, ссылки и структурированные данные. Требует квадратной области и большего размера для надежного сканирования.

Проверка наличия компоненты печати штрихкодов

В конфигурациях на базе Библиотеки стандартных подсистем формирование картинки штрихкода выполняет функция общего модуля МенеджерОборудованияВызовСервера.ПолучитьКартинкуШтрихкода(). Она возвращает объект типа «Картинка», который можно вставить в табличный документ. Убедитесь, что этот модуль присутствует в конфигурации: откройте конфигуратор и найдите его через глобальный поиск.

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

Добавление штрихкода в макет табличного документа

Это самый прямой способ, когда отчет формируется программно или печатная форма построена на макете. Откройте макет в конфигураторе, добавьте в нужную область элемент «Рисунок» и задайте ему имя, например «Штрихкод». Размер рисунка должен соответствовать пропорциям кода: для линейного — широкая и невысокая область, для QR — квадрат.

В модуле, где формируется табличный документ, после вывода области присвойте рисунку сформированную картинку. Логика такая: сначала готовится структура параметров штрихкода (тип, строка данных, ширина, высота), затем вызывается функция генерации, результат помещается в рисунок области.

ПараметрыШтрихкода = МенеджерОборудованияКлиентСервер.ПараметрыШтрихкода();

ПараметрыШтрихкода.Штрихкод = НомерДокумента;

ПараметрыШтрихкода.ТипКода = 1; // Code128

ПараметрыШтрихкода.Ширина = 300;

ПараметрыШтрихкода.Высота = 80;

Результат = МенеджерОборудованияВызовСервера.ПолучитьКартинкуШтрихкода(ПараметрыШтрихкода);

Если Результат.Результат Тогда

Рисунок = ОбластьМакета.Рисунки.Штрихкод;

Рисунок.Картинка = Результат.Картинка;

КонецЕсли;

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

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

Добавление штрихкода в отчет на СКД

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

Функция должна быть размещена в общем модуле с признаками «Сервер» и «Вызов сервера», принимать строку штрихкода и возвращать объект «Картинка». В ресурсах или настройках отчета выведите это поле в нужную колонку. Учтите, что табличный документ отобразит картинку только если формат поля это допускает — проверьте, что для поля не задано текстовое оформление.

Альтернатива — собственный макет СКД: на вкладке «Макеты» создается макет области, куда можно вставить рисунок, а в модуле объекта отчета переопределить формирование. Этот путь сложнее и оправдан, только когда штрихкод должен стоять в шапке или подвале отчета, а не в строках данных.

Настройка внешнего вида и размеров

Читаемость штрихкода зависит от размера области и разрешения картинки. Слишком маленькая область сожмет код, и сканер его не распознает; слишком большая — размоет при масштабировании. Ориентируйтесь на ширину линейного кода не менее 4–5 см на печатном листе и тестируйте на реальном принтере, а не только на экране.

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

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

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

Чтение сканером
Норма

Сканер считывает код с первого раза с распечатанного листа

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

Код читается только с экрана или не читается вовсе

Содержимое кода
Норма

Сканированная строка совпадает с исходными данными (номером документа, артикулом)

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

Лишние символы, обрезанная строка или неверная кодировка

Внешний вид на печати
Норма

Штрихи четкие, без размытия, свободные поля вокруг кода

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

Сжатые или растянутые штрихи, код упирается в текст

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

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

Вторая группа ошибок связана с данными: попытка закодировать буквы в EAN-13, слишком длинная строка для Code128, недопустимые символы. Перед генерацией очищайте строку от пробелов и проверяйте её соответствие требованиям выбранного типа кода. Третья типичная ситуация — отчет работает у разработчика и не работает у пользователя: причина обычно в том, что проверка велась на толстом клиенте, а пользователь работает через веб-клиент или тонкий клиент без установленной компоненты.

Типичные ошибки
01
Не обрабатывать результат генерации — в отчете появляется пустое место вместо штрихкода без какого-либо сообщения
02
Кодировать в EAN-13 строку с буквами — компонента возвращает ошибку или обрезает данные
03
Делать область рисунка слишком маленькой — сканер не читает код с распечатки
04
Дорабатывать типовой отчет напрямую в конфигурации — изменения теряются при обновлении
05
Проверять только на экране — на бумаге код может оказаться нечитаемым из-за разрешения принтера

Альтернативы: внешние обработки и готовые решения

Если доработка конфигурации невозможна (нет доступа к конфигуратору или конфигурация на полной поддержке), используйте внешний отчет. Внешний отчет подключается через «Дополнительные отчеты и обработки» и может содержать собственный макет со штрихкодом, не затрагивая типовую конфигурацию. Это самый безопасный путь для продуктивной базы.

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

Маршрут решения

Как выбрать действие

Отчет типовой, конфигурация на поддержкеСоздайте внешний отчет или расширение конфигурации, не меняя типовой объект
Отчет собственный, формируется программноДобавьте рисунок в макет и формируйте картинку в модуле
Отчет на СКД, штрихкод нужен в строках данныхИспользуйте вычисляемое поле с вызовом функции генерации картинки
Нет доступа к конфигуратору вовсеСформируйте штрихкод внешним генератором и вставьте картинку в макет вручную

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

Можно ли добавить штрихкод в отчет без доработки конфигурации?

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

Почему штрихкод виден на экране, но сканер его не читает?

Чаще всего причина в размере или качестве печати: область рисунка слишком мала, принтер печатает с низким разрешением или штрихи размыты. Увеличьте область, проверьте настройки качества печати и оставьте свободные поля вокруг кода. Проверяйте читаемость именно с распечатки.

Как закодировать номер документа, если в нем есть буквы и префикс?

Используйте Code128 или QR-код — они допускают буквы и специальные символы. EAN-13 для этого не подходит, так как принимает только цифры фиксированной длины.

Работает ли формирование штрихкода через веб-клиент?

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

Что делать, если функция ПолучитьКартинкуШтрихкода не найдена в конфигурации?

Значит, конфигурация не содержит подсистему печати штрихкодов из БСП. Варианты: перенести подсистему из типовой конфигурации, использовать внешнюю компоненту формирования штрихкодов или формировать картинку внешним сервисом и загружать её в отчет.

Можно ли вывести штрихкод в шапке отчета на СКД?

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

Итог

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

Штрихкод в отчет 1С добавляется через компоненту печати: рисунок в макете табличного документа плюс программная генерация картинки, либо вычисляемое поле в СКД. Выбирайте тип кода под данные (Code128 или QR для произвольных строк), дорабатывайте типовые отчеты только через расширения и внешние отчеты, а результат всегда проверяйте сканером на распечатке.