Как напечатать штрихкод SSCC (GS1-128) в 1С 7.7?

Программист 1С v7.7 1С:Управление торговлей Торговля и дистрибуция
← На главную

При организации работы с крупными торговыми сетями (например, «Тандер» / «Магнит», X5 Group и др.) возникает необходимость маркировки транспортных паллет и коробок специальными логистическими этикетками со штрихкодом SSCC (Serial Shipping Container Code). Разработчики, работающие с платформой 1С 7.7, часто сталкиваются с трудностями при формировании этого кода, так как встроенные и устаревшие внешние компоненты печати штрихкодов не всегда поддерживают спецификацию GS1-128 «из коробки».

Разберем подробно, что представляет собой код SSCC, как правильно сформировать его структуру в 1С 7.7, вычислить контрольную цифру и вывести готовый штрихкод на печатную форму.

Суть стандарта SSCC и разница между EAN-128, GS1-128 и Code 128

Для понимания задачи проанализируем структуру кода SSCC-18. Код SSCC — это 18-значный номер, используемый для уникальной идентификации грузовой единицы. На самом деле SSCC — это не отдельная графическая кодировка, а специфика применения символики GS1-128 (ранее известной как EAN-128).

Структура полного кода включает в себя следующую последовательность:

  1. Идентификатор применения (AI - Application Identifier): Для SSCC это всегда комбинация (00). Она указывает сканеру, что считываемый код является именно серийным номером транспортной упаковки.
  2. Цифра расширения (Extension digit): 1 цифра (от 0 до 9), устанавливаемая предприятием.
  3. Префикс компании GS1: уникальный код предприятия, выданный национальной организацией GS1.
  4. Серийный номер упаковки: порядковый номер паллеты или короба внутри вашей базы данных.
  5. Контрольная цифра: 1 контрольный символ, рассчитываемый по алгоритму Модуль 10 для предшествующих 17 цифр кода.

Важный технический нюанс: стандарт GS1-128 отличается от обычного Code 128 наличием специального непечатаемого служебного символа FNC1 сразу после стартового символа кодировки. Именно символ FNC1 сообщает сканеру, что за ним следуют стандартизированные идентификаторы GS1, а не просто случайная строка текста. Поэтому обычный Code 128 без префикса FNC1 сканеры на распределительных центрах торговых сетей не распознают как валидный SSCC.

Шаг 1. Расчет контрольного символа SSCC на языке 1С 7.7

Перед тем как сформировать графическое изображение штрихкода, проанализируем алгоритм вычисления контрольной цифры. В типовых конфигурациях 1С 7.7 (например, в «Торговля и Склад 7.7») есть глобальная функция глКонтрольныйСимволEAN(), но она рассчитана на фиксированную длину кодов EAN-8 и EAN-13.

Для SSCC нам необходимо посчитать контрольный символ для 17 значащих цифр (без учета скобок идентификатора (00)). Напишем универсальную функцию расчета контрольного символа для произвольной длины штрихкода:


// Функция вычисляет контрольную цифру по алгоритму "Модуль 10"
// ШтрКод - строка с исходными цифрами (для SSCC - 17 цифр)
// КоличествоЗначащихСимволов - длина передаваемой строки
Функция КонтрольныйСимволПроизвольногоШК(ШтрКод, КоличествоЗначащихСимволов) Экспорт

    Четн = 0;
    Нечетн = 0;

    НечетноеКоличествоСимволов = КоличествоЗначащихСимволов % 2;
    КолвоИтераций = НечетноеКоличествоСимволов + Цел(КоличествоЗначащихСимволов / 2);

    Для Индекс = 1 По КолвоИтераций Цикл
        Четн = Четн + Сред(ШтрКод, 2 * Индекс, 1);
        Нечетн = Нечетн + Сред(ШтрКод, 2 * Индекс - 1, 1);
    КонецЦикла;

    Если НечетноеКоличествоСимволов = 0 Тогда
        Четн = Четн * 3;
    Иначе
        Нечетн = Нечетн * 3;
    КонецЦикла;

    КонтЦифра = 10 - (Четн + Нечетн) % 10;

    Возврат ?(КонтЦифра = 10, "0", Строка(КонтЦифра));

КонецФункции

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

Шаг 2. Вывод штрихкода в печатную форму 1С 7.7

Рассмотрим два основных практических способа вывода штрихкода SSCC на печать в платформе 1С 7.7.

Способ 1. Использование ActiveX-компонент (ActiveBarcode / Barcode.ocx)

Если в системе зарегистрирована внешняя ActiveX-компонента (например, ActiveBarcode, BARCODE.OCX или StrokeScribe), вывод штрихкода выполняется напрямую на печатную форму табличного документа.

  1. Откроем печатную форму (табличный документ) в конфигураторе 1С 7.7.
  2. Вставим объект ActiveX (меню Вставка -> Вставить объект... -> Элемент управления) и выберем установленную компоненту штрихкода.
  3. Зададим имя рисунка в макете, например ШтрихКодSSCC.
  4. В коде модуля сформируем значение и передадим его в свойства компоненты:

// Сформируем 17 цифр кода без контрольного символа
КодБезКС = "0004607012345678"; // Цифра расширения + Префикс GS1 + Номер паллеты
КС = КонтрольныйСимволПроизвольногоШК(КодБезКС, 17);
ПолныйКодSSCC = КодБезКС + КС; // Получили 18 цифр

// Для передачи в компоненту задаем типом GS1-128 / EAN-128
// Символы (00) задают идентификатор применения
ТекстДляШК = "(00)" + ПолныйКодSSCC;

// Обращаемся к объекту на печатной форме
Таб = СоздатьОбъект("Таблица");
Таб.ИсходнаяТаблица("ЭтикеткаSSCC");
Таб.ВывестиСекцию("Шапка");

// Настройка компоненты на форме
ОбъектШК = Таб.Рисунок("ШтрихКодSSCC").Объект;
ОбъектШК.Type = 4; // Код EAN-128 / GS1-128 (индекс типа зависит от компоненты)
ОбъектШК.Text = ТекстДляШК;

Обратим внимание: текстовая подпись под штрихкодом (Human Readable Interpretation) должна содержать скобки (00), а сам штрихкод кодирует символ FNC1 и 18 цифр номера.

Способ 2. Использование бесплатной консольной утилиты Zint Barcode Generator

Если штатные ActiveX-компоненты 1С 7.7 сбоят, не умеют проставлять символ FNC1 или некорректно отображают скобки в подписи, наилучшим решением является использование консольной утилиты Zint.

Проанализируем алгоритм работы через Zint:

  1. Скачиваем консольный утилитный файл zint.exe и помещаем его в каталог базы данных или системную папку.
  2. Из 1С 7.7 через командную строку вызываем генерацию изображения штрихкода во временный файл картинки.
  3. Загружаем полученную картинку в секцию табличного документа 1С 7.7.

Посмотрим на пример реализации генерации через Zint в коде 1С 7.7:


КодБезКС = "0004607012345678";
КС = КонтрольныйСимволПроизвольногоШК(КодБезКС, 17);
ПолныйКодSSCC = КодБезКС + КС;

// Формируем команду для Zint. Передаем тип кода --barcode=72 (GS1-128)
// Используем квадратные скобки [00] для указания AI в Zint
ТекстКодаGS1 = "[00]" + ПолныйКодSSCC;
ПутьККартинке = КаталогВременныхФайлов() + "sscc_barcode.bmp";

КомандаЗапуска = "zint.exe -b 72 -d """ + ТекстКодаGS1 + """ -o """ + ПутьККартинке + """";

// Выполняем команду системы
WshShell = СоздатьОбъект("WScript.Shell");
WshShell.Run(КомандаЗапуска, 0, 1);

// Загружаем сгенерированную картинку в макет
Таб = СоздатьОбъект("Таблица");
Таб.ИсходнаяТаблица("Этикетка");
Таб.ВывестиСекцию("СекцияПалета");
Таб.Рисунок("РисШК").Загрузить(ПутьККартинке);

Преимущество генератора Zint заключается в том, что он строго соблюдает стандарты GS1, корректно формирует графические штрихи с учетом FNC1 и выводит красиво оформленный читаемый текст со скобками (00) под графическим блоком.

Взаимосвязь SSCC на этикетке и EDI-сообщений (DESADV)

Выясним важную деталь, касающуюся передачи данных сетям. Генерация и печать физической этикетки SSCC тесно связана с электронным документооборотом (EDI). При отгрузке товара в торговую сеть (например, «Тандер») формируется электронное уведомление об отгрузке — документ DESADV.

Сформированный номер SSCC, напечатанный на этикетке паллеты, должен точно совпадать с номером SSCC, передаваемым в соответствующем теге иерархии упаковки в документе DESADV через вашего EDI-провайдера (Edisoft, Kontur, CISLINK и др.). При приемке товара на распределительном центре кладовщик сканирует штрихкод SSCC с паллеты, и система автоматизации торговой сети мгновенно сопоставляет напечатанный код с составом коробов и товаров из электронного DESADV.

Итоги

Мы проанализировали процесс работы с логистическим кодом SSCC в платформе 1С 7.7. Для успешного решения задачи достаточно:

  1. Рассчитать 18-значный код SSCC с правильной контрольной цифрой по алгоритму Модуль 10.
  2. Использовать генерацию GS1-128 с включением идентификатора применения (00) и служебного символа FNC1.
  3. Вывести код через внешний ActiveX-элемент или с помощью консольной утилиты Zint с последующей загрузкой картинки в печатную форму.
← На главную