Как в 1С 7.7 реализовать печать штрихкода EAN13+5 (Addon 5) для маркировки продукции

Программист 1С v7.7 Управленческий учет Промышленность, строительство и АПК
← На главную

В современной торговле, особенно в сегменте скоропортящихся продуктов (мясопереработка, молочная отрасль), федеральные сети (X5 Group, Магнит) всё чаще требуют маркировки этикеток штрихкодом формата EAN13+5 (Addon 5). Этот код позволяет компактно передать не только идентификатор товара, но и критически важную информацию — дату окончания срока реализации. В данной статье мы разберем по шагам, как реализовать печать штрихкода EAN-13 + Addon 5 в устаревшей, но все еще актуальной платформе 1С 7.7, используя современные инструменты, такие как улучшенная обработка внешних печатных форм.

Зачем нужен формат EAN13+5?

Прежде чем переходить к коду, проанализируем ситуацию: почему нельзя обойтись обычным EAN13? Стандартный EAN13 содержит только код товара. В то же время дополнительный блок из 5 цифр (аддон) позволяет закодировать дату. Чаще всего используется формат DDDYY, где:

  1. DDD — порядковый номер дня в году (от 001 до 366).
  2. YY — две последние цифры года.

Например, дата 15 марта 2024 года превратится в 07524 (75-й день года, 24-й год). Это позволяет сканерам на кассах автоматически проверять срок годности товара.

Решение проблемы с помощью компоненты Formex

Наиболее современным и эффективным способом решения задачи в 1С 7.7 является использование внешней компоненты Formex. В последние версии этой компоненты интегрирован мощный движок генерации штрихкодов Zint. Как выяснилось в ходе обсуждения, основная сложность заключается в синтаксисе передачи данных.

Для того чтобы система поняла, что нужно напечатать именно EAN13 с пятизначным дополнением, необходимо использовать символ + в качестве разделителя. Рассмотрим пример формирования строки штрихкода:


// Пример формирования строки: ОсновнойКод + Дополнение
ШКод = "2513900030025" + "+" + "23324";

Теперь посмотрим на пример кода для вывода этого значения в объект "Картинка" на печатной форме. Тем, кто привык к классическим методам, может быть полезна также печать штрих-кодов из 1С: 7.7 Комплексная конфигурация, где описаны стандартные подходы. Предположим, что у нас уже создана глобальная переменная глСервис, инициализированная объектом Сервис из Formex:


// В процедуре печати этикетки
ТипШК = 13; // Соответствует EANX или автоматическому определению в Zint
ШК_Для_Печати = "2513900030025+23324";

// Объект — это имя картинки в таблице печатной формы
Результат = глСервис.НарисоватьШтрихкод(Объект, ТипШК, ШК_Для_Печати);

Если Результат = 0 Тогда
    Сообщить("Ошибка генерации штрихкода! Проверьте корректность данных.");
КонецЕсли;

Важный нюанс: при использовании типа 13 (EANX) библиотека автоматически распознает наличие плюса и отрисовывает основной блок EAN13 и дополнительный блок EAN5 с соблюдением всех необходимых отступов.

Альтернативный вариант: Использование StrokeScribe

Если в вашей организации используется ActiveX-компонента StrokeScribe, механизм будет схожим, но с настройкой дополнительных свойств. В этой библиотеке за EAN13 отвечает свойство Alphabet = 1. Для вывода аддона также используется символ + в тексте штрихкода. Разберем по шагам настройку объекта:

  1. Установите тип кода (Alphabet) в значение 1.
  2. Передайте в свойство Text строку формата "1234567890123+12345".
  3. При необходимости отрегулируйте расстояние между блоками через свойство AddOnGap.

Для специализированных задач иногда применяется прямая печать этикеток на принтерах Zebra с использованием языка EPL2, что позволяет обойтись без графических компонент.

Ручное формирование штрихкодов (Code 128)

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


Функция БарКод(Вход, БазаМодеС=6)
    // Строка символов-заменителей для отрисовки штрихов шрифтом
    АскиБар = "15551555144948584545849485454858..."; 
    
    Дл = СтрДлина(СокрЛП(Вход));
    Если Дл = 0 Тогда Возврат(""); КонецЕсли;
    
    // Логика выбора режима кодирования (A, B или C)
    // ...
    
    // Расчет контрольного числа по модулю 103
    Сум = 0;
    // ... цикл расчета контрольной суммы ...
    
    Возврат(Вых + Сред(АскиБар, (Сум + 1) * 3 - 2, 3) + "@");
КонецФункции

Однако стоит помнить, что для EAN13+5 такой "ручной" подход крайне сложен. Рекомендуется использовать готовые библиотеки.

Настройка оборудования для работы с EAN13+5

Часто программисты сталкиваются с тем, что код напечатан верно, но терминал сбора данных (ТСД) или сканер его "не видит". Выясним причину такого поведения:

Большинство сканеров по умолчанию игнорируют аддоны. Чтобы система заработала, нужно настроить оборудование. Например, выполняя выгрузку в терминал сбора данных CipherLab, убедитесь, что в настройках сканирующего модуля включено распознавание EAN Addon.

Подведем итог: для успешной печати EAN13+5 в 1С 7.7 лучше всего использовать Formex с передачей строки через +. Это гарантирует соответствие стандартам ГОСТ и GS1, а также экономит место на этикетке по сравнению с форматом GS1-128.

← На главную