При автоматизации складской логистики и маркировки транспортных упаковок программисты 1С часто сталкиваются с необходимостью генерации штрихкодов формата ITF-14 (Interleaved Two of Five). В отличие от привычного EAN-13, этот код имеет свои специфические особенности как в структуре, так и в алгоритме расчета контрольного знака. В данной статье мы подробно разберем, как правильно подготовить строку данных, рассчитать контрольное число и настроить печать, чтобы избежать распространенной ошибки Invalid при сканировании.
Штрихкод ITF-14 предназначен исключительно для маркировки транспортных упаковок (коробок, паллет). Он не используется для розничной продажи на кассах. Его главное преимущество — высокая устойчивость к качеству печати, что позволяет наносить код прямо на грубый гофрокартон.
Рассмотрим структуру 14-значного кода:
EAN-13 (без его собственного контрольного знака).Проанализируем ситуацию: если у вас есть код организации (2 символа) и номер документа (10 символов), их необходимо дополнить индикатором логистики в начале, чтобы в сумме до контрольного знака получилось 13 цифр. Если символов не хватает, они дополняются лидирующими нулями.
Самая частая ошибка при реализации ITF-14 — неверный расчет 14-го символа. В системе 1С нам необходимо реализовать алгоритм "по модулю 10". Важно помнить: расчет ведется справа налево, начиная с позиции контрольного знака.
Разберем алгоритм по шагам для строки из 13 цифр (например, 0001000032728):
Шаг 1: Пронумеруем разряды справа налево, где 1-я позиция — это пустая ячейка для контрольного числа, 2-я позиция — последняя цифра наших данных, и так далее до 14-й позиции.
Шаг 2: Сложим все цифры, стоящие на четных позициях (2, 4, 6, 8, 10, 12, 14). В нашем случае это цифры, стоящие на позициях 2, 4, 6... если считать справа.
Шаг 3: Полученную сумму умножим на 3.
Шаг 4: Сложим все цифры, стоящие на нечетных позициях (3, 5, 7, 9, 11, 13), пропуская 1-ю позицию (ее мы ищем).
Шаг 5: Сложим результаты, полученные в Шаге 3 и Шаге 4.
Шаг 6: Контрольный разряд — это минимальное число, которое нужно добавить к сумме из Шага 5, чтобы получилось число, кратное 10. Если сумма уже кратна 10, то контрольный разряд равен 0.
Выясним, как реализовать этот расчет на встроенном языке 1С. Мы напишем универсальную функцию, которая принимает 13-значную строку и возвращает полный 14-значный штрихкод.
Функция СформироватьШтрихкодITF14(ИсходныеДанные) Экспорт
// ИсходныеДанные должны содержать 13 цифр
Строка13 = СокрЛП(ИсходныеДанные);
Если СтрДлина(Строка13) <> 13 Тогда
Возврат "Ошибка: Длина строки должна быть 13 символов";
КонецЕсли;
ЧетнаяСумма = 0;
НечетнаяСумма = 0;
// Идем по строке справа налево
// Позиция 1 (контрольная) - пропускаем
// Позиция 2 (последний символ строки) - четная
// Позиция 3 - нечетная и т.д.
Для Индекс = 1 По 13 Цикл
Символ = Сред(Строка13, 13 - Индекс + 1, 1);
Цифра = Число(Символ);
// Индекс 1 соответствует 2-й позиции в алгоритме GS1 (четной)
Если Индекс % 2 <> 0 Тогда
ЧетнаяСумма = ЧетнаяСумма + Цифра;
Иначе
НечетнаяСумма = НечетнаяСумма + Цифра;
КонецЕсли;
КонецЦикла;
ОбщаяСумма = (ЧетнаяСумма * 3) + НечетнаяСумма;
КонтрольныйРазряд = (10 - (ОбщаяСумма % 10)) % 10;
Возврат Строка13 + Строка(КонтрольныйРазряд);
КонецФункции
Обратите внимание на использование функции % 10 (остаток от деления). Это позволяет элегантно вычислить дополнение до ближайшего десятка.
Даже если контрольное число рассчитано верно, внешняя компонента печати (например, 1CBarCode) или мобильное приложение могут выдавать ошибку Invalid barcode. Рассмотрим основные причины этой ситуации:
ITF14, а не Interleaved2of5. Хотя они похожи, ITF14 накладывает строгие требования к длине (ровно 14 знаков) и контрольному символу.Проанализируем требования к печати. Поскольку ITF-14 предназначен для логистики, его размеры обычно больше, чем у потребительских кодов. Рекомендуемая ширина узкого штриха составляет около 1.016 мм. Это делается для того, чтобы даже при растекании краски на ворсистом картоне просветы между штрихами оставались читаемыми.
Если вы используете специальные шрифты (например, IDAutomation) вместо компонент, помните, что ITF-14 кодирует цифры парами. Это значит, что программная подготовка строки для шрифта будет значительно сложнее, чем просто расчет контрольного числа. В 1С рекомендуется использовать именно визуальные компоненты, так как они автоматически формируют пары штрихов и пробелов.
Мы рассмотрели полный цикл создания штрихкода ITF-14: от понимания его структуры до программной реализации в 1С. Помните, что залогом успешного считывания является не только правильный математический расчет контрольного числа, но и соблюдение физических параметров печати: наличие рамок Bearer Bars и соблюдение свободных зон. При тестировании всегда используйте реальный сканер или специализированное ПО для проверки соответствия стандартам GS1.