Документы и Печать · 10 мин
Как вывести штрихкод в печатную форму 1С
Как добавить штрихкод в печатную форму 1С: подключение компоненты, использование библиотеки подключаемого оборудования, настройка макета и типичные ошибки.
Штрихкод на печатной форме нужен для быстрой идентификации документа сканером: накладных, счетов, этикеток, складских ордеров. В типовых конфигурациях 1С (Управление торговлей, ERP, Бухгалтерия предприятия, Комплексная автоматизация) механизм вывода штрихкодов уже встроен — он входит в Библиотеку стандартных подсистем (БСП) и Библиотеку подключаемого оборудования (БПО). Поэтому в большинстве случаев не нужно писать алгоритм рисования штрихкода с нуля — достаточно правильно вызвать готовую функцию и разместить картинку в макете.
Задача решается в несколько шагов: определить, какой тип штрихкода нужен (EAN-13, Code128, QR-код), получить картинку штрихкода программным вызовом, добавить в макет печатной формы область с рисунком и вывести туда сформированное изображение. Ниже разобран каждый этап с примерами кода и типичными ошибками.
Какие типы штрихкодов поддерживаются и какой выбрать
Перед настройкой важно понять, какой именно код нужно печатать, потому что от этого зависит длина данных, размер картинки и совместимость со сканерами. В 1С через БПО доступны основные линейные форматы: EAN-8, EAN-13, Code39, Code128, а также двумерный QR-код.
Для товаров в рознице стандарт — EAN-13 (13 цифр, последняя — контрольная). Для внутренних документов, где нужно закодировать буквы и цифры произвольной длины, удобнее Code128. QR-код применяют, когда нужно вместить много данных: ссылку, реквизиты платежа, состав заказа.
Сравнение форматов штрихкодов
Только 13 цифр с контрольным разрядом. Подходит для товаров и маркировки, читается любым торговым сканером. Не вмещает буквы.
Буквы, цифры и служебные символы произвольной разумной длины. Стандарт для внутренних документов и складских этикеток.
Двумерный код, вмещает сотни символов, читается камерой телефона. Требует больше места на форме и корректной плотности печати.
Проверка доступности компоненты генерации штрихкода
Формирование картинки штрихкода выполняет внешняя компонента, которая поставляется в составе БПО. Если конфигурация типовая и обновляется, компонента обычно уже есть в информационной базе. Проверить её наличие можно программно: вызвать функцию генерации с тестовыми данными и посмотреть, вернулась ли картинка или описание ошибки.
Если компоненты нет (например, конфигурация самописная или сильно урезанная), есть три пути: добавить компоненту из дистрибутива БПО, использовать шрифтовой метод (специальный штрихкодовый шрифт, где символы отображаются как штрихи) или формировать картинку внешним средством и вставлять её как готовый файл. Шрифтовой метод проще всего развернуть, но он требует установки шрифта на каждом компьютере, где печатают документы, и корректного расчёта контрольной цифры для EAN-13.
Программное получение картинки штрихкода
В типовых конфигурациях на базе БСП и БПО картинка получается вызовом одной функции. Ниже пример для серверного контекста, который подходит для процедуры печати:
Функция ПолучитьШтрихкодДляПечати(ДанныеШтрихкода)
ПараметрыШтрихкода = Новый Структура;
ПараметрыШтрихкода.Вставить("Ширина", 50); // мм
ПараметрыШтрихкода.Вставить("Высота", 20); // мм
ПараметрыШтрихкода.Вставить("ТипКода", 1); // 1 - EAN-13
ПараметрыШтрихкода.Вставить("ОтображатьТекст", Истина);
ПараметрыШтрихкода.Вставить("Штрихкод", ДанныеШтрихкода);
Возврат МенеджерОборудованияВызовСервера.ПолучитьКартинкуШтрихкода(ПараметрыШтрихкода);
КонецФункции
Функция возвращает объект типа «Картинка», либо структуру с описанием ошибки — в зависимости от версии библиотеки. Поэтому после вызова полезно проверить результат: если картинка не сформирована, вывести в журнал регистрации причину и не прерывать печать всего документа из-за одного штрихкода.
Обратите внимание на параметры ширины и высоты. Слишком маленькая картинка при печати на обычном офисном принтере даст нечитаемые штрихи, особенно для Code128 с длинной строкой. Практическое правило: чем длиннее кодируемая строка, тем шире должен быть штрихкод, иначе тонкие штрихи сольются.
Перед встраиванием в реальную форму вызовите функцию генерации из внешней обработки или консоли кода с тестовой строкой и сохраните картинку в файл. Так вы сразу увидите, работает ли компонента и как выглядит результат при выбранных размерах, без многократной перепечатки документов.
Добавление штрихкода в макет печатной формы
Макет печатной формы в 1С — это табличный документ. Чтобы вывести в него картинку, в макете создают именованную область, а внутри неё — элемент с типом «Рисунок». Порядок действий в конфигураторе:
- 1Откройте макет печатной формы (общий макет или макет в составе объекта документа).
- 2Создайте отдельную именованную область, например «Штрихкод», в нужном месте макета.
- 3Добавьте в область рисунок: меню «Таблица — Рисунки — Вставить рисунок», в свойствах задайте имя, например «РисунокШтрихкод».
- 4В модуле менеджера печати после вывода основных областей получите область «Штрихкод», присвойте рисунку картинку и выведите область в табличный документ.
- 5Распечатайте тестовый документ и проверьте чтение сканером.
Код вывода в процедуре печати выглядит примерно так:
ОбластьШтрихкод = Макет.ПолучитьОбласть("Штрихкод");
КартинкаШтрихкода = ПолучитьШтрихкодДляПечати(ШтрихкодСтрокой);
Если КартинкаШтрихкода <> Неопределено Тогда
ОбластьШтрихкод.Рисунки.РисунокШтрихкод.Картинка = КартинкаШтрихкода;
КонецЕсли;
ТабличныйДокумент.Вывести(ОбластьШтрихкод);
Если форма выводится в цикле (например, этикетки для каждой строки товара), получайте область заново на каждой итерации — иначе все рисунки будут ссылаться на одну и ту же картинку последнего элемента.
Вывод штрихкода в этикетках и ценниках
Отдельный частый сценарий — печать этикеток и ценников через обработку «Печать этикеток и ценников» в торговых конфигурациях. Там штрихкод обычно уже предусмотрен шаблоном: в редакторе шаблона этикетки есть поле с типом «Штрихкод», которое автоматически заполняется из карточки номенклатуры.
Если штрихкод в этикетке не выводится, проверьте три вещи: заполнен ли штрихкод в карточке товара, присутствует ли поле штрихкода в текущем шаблоне этикетки и не выбран ли шаблон «Ценник», где штрихкод не предусмотрен по замыслу. Для товаров без собственного штрихкода конфигурации умеют генерировать внутренние коды с префиксом — этот механизм включается в настройках номенклатуры или обмена с оборудованием.
Типичные ошибки и их устранение
Если штрихкод на экране выглядит корректно, но сканер его не берёт, причина почти всегда в качестве печати: бледный тонер, низкое разрешение принтера, сжатие картинки. Попробуйте увеличить размер штрихкода на 20–30% и распечатать на максимальном качестве. Для этикеток на термопринтерах проверьте, что печать идёт через драйвер принтера этикеток, а не через масштабирование обычного офисного драйвера.
Как проверить результат
Сканер мгновенно считывает код, значение совпадает с исходной строкой
Сканер молчит или читает код с ошибками — увеличьте размер, проверьте контрольную цифру
Штрихи чёткие, белые промежутки чистые, пропорции сохранены
Штрихи размыты, сливаются или растянуты по вертикали/горизонтали
На всех рабочих местах форма выглядит одинаково
У части пользователей штрихкод заменяется цифрами — не установлен шрифт или недоступна компонента
Альтернативы: QR-код и внешняя печать
Если линейного штрихкода недостаточно — например, нужно закодировать ссылку на электронный документ или полные реквизиты счёта для оплаты — используйте QR-код. В БПО он поддерживается тем же механизмом, меняется только тип кода в параметрах. Учтите, что QR-коду нужна квадратная область и поля вокруг, иначе камеры будут плохо его распознавать.
Для потоковой печати этикеток на промышленных принтерах иногда выгоднее отдать формирование штрихкода самому принтеру: многие модели умеют строить штрихкоды встроенной командой языка принтера (например, через шаблон этикетки с типом поля «штрихкод принтера»). Это снижает требования к качеству передаваемой картинки и ускоряет печать больших партий.
Что важно запомнить
В типовых конфигурациях штрихкод на печатную форму выводится через готовую функцию БПО, которая возвращает картинку; картинка помещается в рисунок именованной области макета. Критичны три вещи: корректные данные (особенно контрольная цифра EAN-13), достаточный размер картинки и проверка чтения реальным сканером после настройки.
Частые вопросы
Можно ли вывести штрихкод без изменения конфигурации?
Да, если использовать механизм дополнительных печатных форм (внешние печатные формы через подсистему «Дополнительные отчеты и обработки»). Внешняя обработка содержит собственный макет и код формирования, конфигурация при этом не снимается с поддержки.
Почему на форме пустое место вместо штрихкода?
Чаще всего функция генерации вернула ошибку: неверный тип кода для переданных данных, недоступна компонента или пустая строка штрихкода. Добавьте в код проверку результата и запись ошибки в журнал регистрации — это сразу покажет причину.
Как напечатать штрихкод документа, чтобы потом находить его сканером?
Закодируйте в Code128 уникальную строку — например, номер и дату документа или его GUID. В типовых конфигурациях есть и готовый механизм штрихкодирования документов, который позволяет по отсканированному коду открывать документ в базе.
Штрихкод читается на одном принтере и не читается на другом — в чём дело?
Различие в разрешении и качестве печати. Принтер с низким качеством печати размывает тонкие штрихи. Увеличьте ширину штрихкода в параметрах генерации и выключите масштабирование страницы при печати.
Можно ли использовать шрифт со штрихкодом вместо компоненты?
Можно: данные выводятся обычным текстом, но шрифтом, где символы отрисованы штрихами. Способ прост, но требует установки шрифта на каждом рабочем месте и ручного расчёта контрольных символов для EAN и Code128, поэтому для типовых конфигураций предпочтительнее компонента БПО.