При организации работы с крупными торговыми сетями (например, «Тандер» / «Магнит», X5 Group и др.) возникает необходимость маркировки транспортных паллет и коробок специальными логистическими этикетками со штрихкодом SSCC (Serial Shipping Container Code). Разработчики, работающие с платформой 1С 7.7, часто сталкиваются с трудностями при формировании этого кода, так как встроенные и устаревшие внешние компоненты печати штрихкодов не всегда поддерживают спецификацию GS1-128 «из коробки».
Разберем подробно, что представляет собой код SSCC, как правильно сформировать его структуру в 1С 7.7, вычислить контрольную цифру и вывести готовый штрихкод на печатную форму.
Для понимания задачи проанализируем структуру кода SSCC-18. Код SSCC — это 18-значный номер, используемый для уникальной идентификации грузовой единицы. На самом деле SSCC — это не отдельная графическая кодировка, а специфика применения символики GS1-128 (ранее известной как EAN-128).
Структура полного кода включает в себя следующую последовательность:
(00). Она указывает сканеру, что считываемый код является именно серийным номером транспортной упаковки.Важный технический нюанс: стандарт GS1-128 отличается от обычного Code 128 наличием специального непечатаемого служебного символа FNC1 сразу после стартового символа кодировки. Именно символ FNC1 сообщает сканеру, что за ним следуют стандартизированные идентификаторы GS1, а не просто случайная строка текста. Поэтому обычный Code 128 без префикса FNC1 сканеры на распределительных центрах торговых сетей не распознают как валидный SSCC.
Перед тем как сформировать графическое изображение штрихкода, проанализируем алгоритм вычисления контрольной цифры. В типовых конфигурациях 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-значную строку.
Рассмотрим два основных практических способа вывода штрихкода SSCC на печать в платформе 1С 7.7.
Если в системе зарегистрирована внешняя ActiveX-компонента (например, ActiveBarcode, BARCODE.OCX или StrokeScribe), вывод штрихкода выполняется напрямую на печатную форму табличного документа.
ШтрихКодSSCC.
// Сформируем 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 цифр номера.
Если штатные ActiveX-компоненты 1С 7.7 сбоят, не умеют проставлять символ FNC1 или некорректно отображают скобки в подписи, наилучшим решением является использование консольной утилиты Zint.
Проанализируем алгоритм работы через Zint:
zint.exe и помещаем его в каталог базы данных или системную папку.Посмотрим на пример реализации генерации через 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, напечатанный на этикетке паллеты, должен точно совпадать с номером SSCC, передаваемым в соответствующем теге иерархии упаковки в документе DESADV через вашего EDI-провайдера (Edisoft, Kontur, CISLINK и др.). При приемке товара на распределительном центре кладовщик сканирует штрихкод SSCC с паллеты, и система автоматизации торговой сети мгновенно сопоставляет напечатанный код с составом коробов и товаров из электронного DESADV.
Мы проанализировали процесс работы с логистическим кодом SSCC в платформе 1С 7.7. Для успешного решения задачи достаточно:
(00) и служебного символа FNC1.