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

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

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

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

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

Готового универсального способа нет: многое зависит от конфигурации (УТ, ERP, Бухгалтерия, самописная), от того, типовая это форма или внешняя, и от того, какой тип штрихкода требуется — EAN-13, Code39, Code128 или QR-код. Ниже разобраны оба сценария с конкретным кодом и проверкой результата.

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

Какие способы вывода штрихкода существуют в 1С 8.3

Первый способ — типовой механизм «Печать этикеток и ценников», который есть в торговых конфигурациях (УТ 11, Розница, КА, ERP). Он умеет печатать штрихкоды товаров по шаблонам без программирования: достаточно настроить шаблон этикетки в редакторе и выбрать товары. Подходит, если задача — печатать этикетки со штрихкодами номенклатуры.

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

Третий вариант — шрифтовые штрихкоды (например, шрифт EanGnivc или Code39). В макет ставится обычное текстовое поле со специальным шрифтом, и строка отображается как штрихкод. Способ простой, но работает только если шрифт установлен на компьютере, где формируется или печатается форма, что часто ломается при серверной печати.

Сравнение вариантов

Типовая печать этикеток

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

Программный вывод картинки

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

Шрифтовой штрихкод

Самый простой в реализации, но зависит от установленного шрифта на каждом рабочем месте. Ненадежен при серверной печати и выгрузке в PDF.

Установка компоненты печати штрихкодов

Большинство типовых конфигураций используют внешнюю компоненту «1С:Библиотека печати штрихкодов» (Barcode.dll / Barcode.so). Без неё функция формирования картинки штрихкода вернет ошибку или пустой результат. Проверить наличие компоненты можно, открыв в конфигурации раздел администрирования с настройками оборудования или просто попробовав сформировать штрихкод.

В типовых конфигурациях на базе БСП (Библиотека стандартных подсистем) компонента обычно поставляется в виде макета внутри конфигурации и подключается автоматически при первом обращении. Если конфигурация самописная или старая, компоненту нужно зарегистрировать вручную: на Windows — через regsvr32, либо подключить программно методом ПодключитьВнешнююКомпоненту.

На Linux-сервере 1С потребуется Linux-версия компоненты, размещенная в каталоге сервера. Это частая причина ситуации «на клиенте штрихкод печатается, а на сервере — пустое место»: генерация идет на сервере, а компонента там не установлена.

Настройка макета печатной формы

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

Ключевой момент: для вывода картинки в табличный документ ячейка должна содержать рисунок. В свойствах ячейки установите тип «Рисунок» (через табличный документ: выделите ячейки, затем в палитре свойств задайте содержимое). Альтернатива — вставить рисунок через «Таблица → Рисунки» и задать ему имя, тогда к нему можно обратиться из кода как к элементу рисунка табличного документа.

Задайте размеры области с запасом: штрихкод EAN-13 при слишком маленькой высоте перестает читаться сканером. Рекомендуется высота не менее 10–15 мм и тихие зоны (пустые поля) слева и справа от кода. Проверить читаемость можно только тестовой печатью и сканированием, а не визуально на экране.

Код для формирования и вывода штрихкода

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

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

// Формирование картинки штрихкода через компоненту

Попытка

ПодключитьВнешнююКомпоненту("ОбщийМакет.КомпонентаПечатиШтрихкодов", "BarCode", ТипВнешнейКомпоненты.Native);

Генератор = Новый("AddIn.BarCode.Barcode");

Исключение

Сообщить("Не удалось подключить компоненту печати штрихкодов");

Возврат;

КонецПопытки;

Генератор.ТипКода = 1; // EAN-13

Генератор.Ширина = 200;

Генератор.Высота = 80;

Генератор.Сообщение = СтрокаШтрихкода; // например, "4601234567890"

ДвоичныеДанные = Генератор.ПолучитьШтрихкод();

Картинка = Новый Картинка(ДвоичныеДанные);

// Вывод в табличный документ

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

Рисунок = Область.Рисунки.Добавить(ТипРисункаТабличногоДокумента.Картинка);

Рисунок.Картинка = Картинка;

Рисунок.Расположить(Область.Область("R1C1"));

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

Обратите внимание: код типа штрихкода в компоненте задается числом, а не строкой (0 — EAN-8, 1 — EAN-13, 4 — Code39 и т.д. в зависимости от версии компоненты). Точное соответствие кодов смотрите в документации к используемой версии библиотеки — оно менялось между релизами.

Если штрихкод нужно вывести в каждом экземпляре документа (например, на каждой странице накладной), поместите вывод области в цикл или в секцию колонтитула. Для QR-кодов логика аналогична, меняется тип кода и допустимая длина строки.

bsl
// Типовой вызов в конфигурациях на БСП
ПараметрыШтрихкода = Новый Структура;
ПараметрыШтрихкода.Вставить("Ширина", 200);
ПараметрыШтрихкода.Вставить("Высота", 100);
ПараметрыШтрихкода.Вставить("ТипКода", 1);
ПараметрыШтрихкода.Вставить("Штрихкод", "4601234567890");
Результат = МенеджерОборудованияВызовСервера.ПолучитьКартинкуШтрихкода(ПараметрыШтрихкода);
Если Результат.Результат Тогда
    Картинка = Новый Картинка(Результат.ДвоичныеДанные);
КонецЕсли;

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

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

Внешняя форма — это файл .epf (внешняя обработка) с экспортной функцией СведенияОВнешнейОбработке в модуле объекта и процедурой Печать, которая формирует табличный документ. Макет со штрихкодом и весь код генерации кладутся внутрь обработки, типовая конфигурация не меняется.

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

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

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

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

Отображение на форме
Норма

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

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

Картинка пустая, сжата или перекрыта текстом

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

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

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

Сканер молчит или выдает другую строку

Печать на принтере
Норма

Линии четкие, без размытия и пропусков

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

Полосы сливаются, код не читается с бумаги

Пакетная печать
Норма

Штрихкод выводится на каждом документе со своим значением

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

На всех документах одинаковый или пустой штрихкод

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

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

Ограничения и альтернативы

Компонента печати штрихкодов от 1С бесплатна, но поддерживает ограниченный набор типов кодов. Если нужны DataMatrix (например, для маркировки «Честный знак») или сложные QR-коды с кириллицей, проверяйте поддержку в конкретной версии компоненты — в старых версиях DataMatrix отсутствовал или работал с ограничениями.

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

FAQ

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

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

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

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

Какой тип штрихкода выбрать для номера документа?

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

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

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

Как вывести QR-код вместо линейного штрихкода?

Механизм тот же: меняется тип кода в параметрах компоненты (для QR задается соответствующий код типа) и область макета делается квадратной. Учтите, что QR-код с длинной строкой требует большей площади, иначе плотность модулей станет слишком высокой для камеры сканера.

Пропадет ли доработка после обновления конфигурации?

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

Итог

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

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