Документы и Печать · 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-кодов логика аналогична, меняется тип кода и допустимая длина строки.
// Типовой вызов в конфигурациях на БСП
ПараметрыШтрихкода = Новый Структура;
ПараметрыШтрихкода.Вставить("Ширина", 200);
ПараметрыШтрихкода.Вставить("Высота", 100);
ПараметрыШтрихкода.Вставить("ТипКода", 1);
ПараметрыШтрихкода.Вставить("Штрихкод", "4601234567890");
Результат = МенеджерОборудованияВызовСервера.ПолучитьКартинкуШтрихкода(ПараметрыШтрихкода);
Если Результат.Результат Тогда
Картинка = Новый Картинка(Результат.ДвоичныеДанные);
КонецЕсли;Внешняя печатная форма: безопасный путь для типовых конфигураций
Если конфигурация типовая и находится на поддержке, править её макеты и модули нежелательно: при обновлении изменения затрутся или обновление потребует ручного сопоставления. Внешняя печатная форма решает это — она подключается через «Администрирование → Печатные формы, отчеты и обработки → Дополнительные отчеты и обработки» и заменяет или дополняет типовую печать.
Внешняя форма — это файл .epf (внешняя обработка) с экспортной функцией СведенияОВнешнейОбработке в модуле объекта и процедурой Печать, которая формирует табличный документ. Макет со штрихкодом и весь код генерации кладутся внутрь обработки, типовая конфигурация не меняется.
Проверка результата и типичные ошибки
После внедрения обязательно проверьте не только внешний вид, но и машиночитаемость. Штрихкод, который выглядит нормально на экране, может не читаться из-за сжатия при печати, низкого разрешения принтера или нарушенной контрольной цифры в самой строке кода.
Как проверить результат
Штрихкод виден целиком, не обрезан, есть пустые поля по краям
Картинка пустая, сжата или перекрыта текстом
Сканер считывает код с первого раза, строка совпадает с исходной
Сканер молчит или выдает другую строку
Линии четкие, без размытия и пропусков
Полосы сливаются, код не читается с бумаги
Штрихкод выводится на каждом документе со своим значением
На всех документах одинаковый или пустой штрихкод
Отдельная группа проблем — контрольная цифра EAN-13. Если вы формируете штрихкод из внутреннего кода товара, последняя (тринадцатая) цифра должна рассчитываться по стандартному алгоритму. Многие сканеры и учетные системы отвергают код с неверной контрольной цифрой, хотя картинка при этом выглядит корректно.
Ограничения и альтернативы
Компонента печати штрихкодов от 1С бесплатна, но поддерживает ограниченный набор типов кодов. Если нужны DataMatrix (например, для маркировки «Честный знак») или сложные QR-коды с кириллицей, проверяйте поддержку в конкретной версии компоненты — в старых версиях DataMatrix отсутствовал или работал с ограничениями.
Альтернатива — генерация штрихкода во внешнем сервисе или скрипте и передача готовой картинки в 1С. Это оправдано при нестандартных типах кодов, но добавляет зависимость от внешнего ресурса и задержки. Для массовой печати этикеток такой подход заметно медленнее локальной компоненты.
FAQ
Почему штрихкод выводится на экран, но не печатается на принтере?
Чаще всего причина в слишком маленьком размере области или низком качестве печати: линии сливаются. Увеличьте высоту области до 12–15 мм, проверьте, что в настройках принтера не включено масштабирование страницы, и распечатайте тест на качестве не ниже стандартного. Также проверьте, что картинка вставлена как рисунок табличного документа, а не как фон.
Можно ли вывести штрихкод без конфигуратора и программирования?
Да, если задача ограничивается этикетками и ценниками: в торговых конфигурациях есть типовая обработка «Печать этикеток и ценников» с визуальным редактором шаблонов, где штрихкод добавляется перетаскиванием поля. Для произвольной формы документа без доработки обойтись нельзя.
Какой тип штрихкода выбрать для номера документа?
Для буквенно-цифровых номеров документов подходит Code39 или Code128 — они допускают латиницу и имеют переменную длину. EAN-13 подходит только для 13-значных цифровых кодов с корректной контрольной цифрой, поэтому для номеров документов он неудобен.
Штрихкод формируется у одних пользователей и не формируется у других — в чем причина?
Компонента печати штрихкодов подключается локально на каждом рабочем месте (в тонком и толстом клиенте) или на сервере. Если генерация идет на клиенте, у пользователя без установленной компоненты картинка будет пустой. Решение — перенести генерацию в серверный вызов или обеспечить установку компоненты на всех рабочих местах.
Как вывести QR-код вместо линейного штрихкода?
Механизм тот же: меняется тип кода в параметрах компоненты (для QR задается соответствующий код типа) и область макета делается квадратной. Учтите, что QR-код с длинной строкой требует большей площади, иначе плотность модулей станет слишком высокой для камеры сканера.
Пропадет ли доработка после обновления конфигурации?
Если штрихкод добавлен правкой типового макета или модуля — да, при обновлении изменения будут утеряны или потребуют ручного переноса. Если реализовано как внешняя печатная форма (.epf), подключенная через дополнительные отчеты и обработки, обновление конфигурации её не затрагивает.
Что важно запомнить
Штрихкод на печатной форме 1С 8.3 выводится картинкой: компонента генерирует изображение, которое вставляется в рисунок табличного документа. Убедитесь, что компонента установлена в том контексте, где формируется форма, задайте область макета с запасом по размеру, а для типовых конфигураций используйте внешнюю печатную форму. Финальная проверка — только сканированием напечатанного образца.