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

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

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

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

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

Задача решается в несколько шагов: определить, какой тип штрихкода нужен (EAN-13, Code128, QR-код), получить картинку штрихкода программным вызовом, добавить в макет печатной формы область с рисунком и вывести туда сформированное изображение. Ниже разобран каждый этап с примерами кода и типичными ошибками.

Какие типы штрихкодов поддерживаются и какой выбрать

Перед настройкой важно понять, какой именно код нужно печатать, потому что от этого зависит длина данных, размер картинки и совместимость со сканерами. В 1С через БПО доступны основные линейные форматы: EAN-8, EAN-13, Code39, Code128, а также двумерный QR-код.

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

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

EAN-13

Только 13 цифр с контрольным разрядом. Подходит для товаров и маркировки, читается любым торговым сканером. Не вмещает буквы.

Code128

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

QR-код

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

Проверка доступности компоненты генерации штрихкода

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

Если компоненты нет (например, конфигурация самописная или сильно урезанная), есть три пути: добавить компоненту из дистрибутива БПО, использовать шрифтовой метод (специальный штрихкодовый шрифт, где символы отображаются как штрихи) или формировать картинку внешним средством и вставлять её как готовый файл. Шрифтовой метод проще всего развернуть, но он требует установки шрифта на каждом компьютере, где печатают документы, и корректного расчёта контрольной цифры для EAN-13.

Программное получение картинки штрихкода

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

Функция ПолучитьШтрихкодДляПечати(ДанныеШтрихкода)

ПараметрыШтрихкода = Новый Структура;

ПараметрыШтрихкода.Вставить("Ширина", 50); // мм

ПараметрыШтрихкода.Вставить("Высота", 20); // мм

ПараметрыШтрихкода.Вставить("ТипКода", 1); // 1 - EAN-13

ПараметрыШтрихкода.Вставить("ОтображатьТекст", Истина);

ПараметрыШтрихкода.Вставить("Штрихкод", ДанныеШтрихкода);

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

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

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

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

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

Добавление штрихкода в макет печатной формы

Макет печатной формы в 1С — это табличный документ. Чтобы вывести в него картинку, в макете создают именованную область, а внутри неё — элемент с типом «Рисунок». Порядок действий в конфигураторе:

Порядок действий в макете
  1. 1
    Откройте макет печатной формы (общий макет или макет в составе объекта документа).
  2. 2
    Создайте отдельную именованную область, например «Штрихкод», в нужном месте макета.
  3. 3
    Добавьте в область рисунок: меню «Таблица — Рисунки — Вставить рисунок», в свойствах задайте имя, например «РисунокШтрихкод».
  4. 4
    В модуле менеджера печати после вывода основных областей получите область «Штрихкод», присвойте рисунку картинку и выведите область в табличный документ.
  5. 5
    Распечатайте тестовый документ и проверьте чтение сканером.

Код вывода в процедуре печати выглядит примерно так:

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

КартинкаШтрихкода = ПолучитьШтрихкодДляПечати(ШтрихкодСтрокой);

Если КартинкаШтрихкода <> Неопределено Тогда

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

КонецЕсли;

ТабличныйДокумент.Вывести(ОбластьШтрихкод);

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

Вывод штрихкода в этикетках и ценниках

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

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

Типичные ошибки и их устранение

Типичные ошибки
01
Передача в EAN-13 строки с буквами или неверной длиной — компонента возвращает пустую картинку или ошибку, а на форме остаётся пустое место.
02
Слишком маленькие размеры картинки — штрихи сливаются при печати, сканер не читает код, хотя на экране он выглядит нормально.
03
Использование шрифтового метода без установки шрифта на всех рабочих местах — у части пользователей печатаются обычные цифры вместо штрихов.
04
Вывод одной области в цикле без повторного получения — на всех этикетках оказывается штрихкод последнего товара.
05
Растягивание рисунка непропорционально — нарушается соотношение ширины штрихов, код перестаёт читаться.

Если штрихкод на экране выглядит корректно, но сканер его не берёт, причина почти всегда в качестве печати: бледный тонер, низкое разрешение принтера, сжатие картинки. Попробуйте увеличить размер штрихкода на 20–30% и распечатать на максимальном качестве. Для этикеток на термопринтерах проверьте, что печать идёт через драйвер принтера этикеток, а не через масштабирование обычного офисного драйвера.

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

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

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

Сканер мгновенно считывает код, значение совпадает с исходной строкой

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

Сканер молчит или читает код с ошибками — увеличьте размер, проверьте контрольную цифру

Внешний вид на бумаге
Норма

Штрихи чёткие, белые промежутки чистые, пропорции сохранены

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

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

Печать у всех пользователей
Норма

На всех рабочих местах форма выглядит одинаково

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

У части пользователей штрихкод заменяется цифрами — не установлен шрифт или недоступна компонента

Альтернативы: QR-код и внешняя печать

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

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

Итог

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

В типовых конфигурациях штрихкод на печатную форму выводится через готовую функцию БПО, которая возвращает картинку; картинка помещается в рисунок именованной области макета. Критичны три вещи: корректные данные (особенно контрольная цифра EAN-13), достаточный размер картинки и проверка чтения реальным сканером после настройки.

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

Можно ли вывести штрихкод без изменения конфигурации?

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

Почему на форме пустое место вместо штрихкода?

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

Как напечатать штрихкод документа, чтобы потом находить его сканером?

Закодируйте в Code128 уникальную строку — например, номер и дату документа или его GUID. В типовых конфигурациях есть и готовый механизм штрихкодирования документов, который позволяет по отсканированному коду открывать документ в базе.

Штрихкод читается на одном принтере и не читается на другом — в чём дело?

Различие в разрешении и качестве печати. Принтер с низким качеством печати размывает тонкие штрихи. Увеличьте ширину штрихкода в параметрах генерации и выключите масштабирование страницы при печати.

Можно ли использовать шрифт со штрихкодом вместо компоненты?

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