При работе с маркетплейсами, такими как Ozon, пользователи часто сталкиваются с необходимостью печати штрихкодов, содержащих не только цифры, но и латинские буквы (например, префиксы OZN, BP, BX). Попытка вывести такое значение через стандартные механизмы печати этикеток часто приводит к появлению надписи «invalid barcode» вместо графического изображения. Рассмотрим подробно, почему это происходит и как настроить корректную печать в системе 1С.
Для начала проанализируем ситуацию: почему 1С выдает ошибку при попытке печати. В большинстве типовых конфигураций (таких как «Управление торговлей», «ERP» или «Розница») по умолчанию для товаров используется стандарт EAN-13. Этот стандарт имеет жесткие ограничения:
Как только в строку штрихкода попадает хотя бы одна буква (например, в значении OZN1468011333), компонента формирования изображения понимает, что данные не соответствуют стандарту EAN-13, и выводит диагностическое сообщение о невалидности кода. Следовательно, для решения проблемы нам необходимо изменить тип используемого штрихкода на буквенно-цифровой.
Разберем основные форматы, которые поддерживают символы латиницы и цифры одновременно. В среде 1С и для нужд складской логистики маркетплейсов чаще всего применяются два типа:
Рекомендация: В большинстве случаев для вывода буквенных идентификаторов следует выбирать именно Code 128, так как он обеспечивает компактность и гарантированное считывание большинством сканеров.
Если вы используете внешнюю компоненту 1C:BarCode (ActiveX или Native), необходимо изменить свойство объекта, отвечающее за тип кода. В программном коде формирования печатной формы это выглядит следующим образом. Рассмотрим пример настройки параметров штрихкода перед выводом в табличный документ:
// Предположим, что ОбластьМакета.Рисунки.Штрихкод - это наш объект штрихкода
ОбъектШК = ОбластьМакета.Рисунки.Штрихкод.Объект;
// Устанавливаем тип кода 128
// В компоненте 1С:Печать штрихкодов значение 4 обычно соответствует Code 128
ОбъектШК.ТипКода = 4;
// Передаем наше буквенно-цифровое значение
ОбъектШК.Сообщение = "OZN1468011333";
// Дополнительные настройки для корректного отображения
ОбъектШК.ОтображатьТекст = Истина;
ОбъектШК.АвтоТип = Ложь;
Проанализируем этот код: установка свойства ТипКода в значение 4 переключает внутреннюю логику генерации картинки. Если оставить АвтоТип = Истина, компонента может попытаться сама определить формат, но при наличии букв в начале строки она часто ошибается, поэтому жесткое указание типа предпочтительнее.
Разберем нюанс, упомянутый в документации маркетплейсов. Ozon не рекомендует продавцам самостоятельно генерировать штрихкоды, начинающиеся на OZN, BP, PL и так далее, если они не являются системными идентификаторами самого Ozon. Однако, если ваша задача — распечатать код, уже присвоенный системой маркетплейса, то использование Code 128 обязательно.
Важно понимать, что при печати длинных строк в формате Code 128 штрихи могут становиться очень узкими. Чтобы сканер на складе смог их распознать, придерживайтесь следующих правил:
Если стандартная компонента по каким-то причинам не устанавливается или продолжает выдавать ошибки на специфических серверах, рассмотрим альтернативный вариант — использование шрифтов (например, Code128.ttf). Посмотрим на алгоритм действий:
Code 128.Пример формирования строки для шрифта в 1С (упрощенно):
// Для шрифтов нельзя просто передать текст "OZN123"
// Требуется преобразование в спецсимволы шрифта
Функция СформироватьСтрокуДляШрифтаCode128(ЗначениеШК)
// Здесь должен быть алгоритм расчета контрольного разряда
// и добавление спецсимволов начала и конца строки
Возврат СтартовыйСимвол + ЗначениеШК + КонтрольныйСимвол + СтопСимвол;
КонецФункции
Этот метод считается более отказоустойчивым, так как не зависит от регистрации COM-объектов или AddIn в системе, однако требует более сложной программной подготовки данных перед печатью.
Проанализируем ситуацию, когда штрихкод выводится без ошибки, но не считывается сканером. В современных версиях платформы 1С (8.3.10+) рекомендуется использовать свойство РисунокТабличногоДокумента с типом ТипРисункаТабличногоДокумента.Штрихкод. Это встроенный механизм платформы, который работает без внешних компонент.
При использовании этого метода настройка в коде выглядит так:
Рисунок = Область.Рисунки.Добавить(ТипРисункаТабличногоДокумента.Штрихкод);
Рисунок.Объект.ТипКода = ТипШтрихкода.Code128;
Рисунок.Объект.Текст = "OZN1468011333";
Такой подход позволяет платформе самостоятельно отрисовывать векторную картинку, которая идеально масштабируется под любое разрешение принтера без потери четкости штрихов. Мы настоятельно рекомендуем использовать именно встроенные средства платформы 1С:Предприятие 8.3, если ваша конфигурация это позволяет.
Подведем итог: Чтобы убрать надпись invalid barcode, нужно переключить тип кода с EAN-13 на Code 128. Это позволит системе корректно обрабатывать буквы и символы, обеспечивая надежную работу с маркировкой товаров для любых маркетплейсов.