Как правильно конвертировать штрихкод EAN-13 в ITF-14 для складского учета в 1С?

Программист Управленческий учет Торговля и дистрибуция
← На главную

При переходе на автоматизированный складской учет или начале работы с крупными торговыми сетями часто возникает задача кодирования транспортной упаковки (коробок, паллет). Стандартом для таких целей является штрихкод ITF-14. Если у вас уже есть база штрихкодов для штучного товара в формате EAN-13, мы можем использовать их как основу для генерации кодов упаковок. Рассмотрим детально процесс конвертации, алгоритмы расчета и особенности реализации в системе 1С.

Структура штрихкода ITF-14 и его отличия от EAN-13

Для начала проанализируем, из чего состоит код ITF-14. В отличие от 13-значного кода розничного товара, логистический код содержит 14 разрядов:

  1. Индикатор логистического варианта (1-я цифра): определяет уровень упаковки.
  2. Основа кода (со 2-й по 13-ю цифру): это первые 12 цифр кода EAN-13 (без его контрольного числа).
  3. Контрольное число (14-я цифра): рассчитывается заново для всей последовательности из 13 знаков.

Выбор первой цифры (логистического индикатора)

Разберем, какую цифру следует ставить в начало кода. Согласно стандартам GS1, выбор зависит от специфики товара:

Алгоритм расчета контрольной цифры (Modulo 10)

Поскольку контрольная цифра в EAN-13 (13-й знак) не совпадает с контрольной цифрой ITF-14 (14-й знак), нам необходимо реализовать алгоритм пересчета. Рассмотрим пошагово, как это сделать программно в 1С:

  1. Возьмем первые 13 цифр нового кода (Индикатор + 12 цифр EAN-13).
  2. Справа налево присвоим каждой позиции вес: нечетным позициям — 3, четным — 1.
  3. Суммируем произведения цифр на их веса.
  4. Вычисляем остаток от деления суммы на 10.
  5. Вычитаем полученный остаток из 10. Если результат 10, контрольное число равно 0.

Рассмотрим пример реализации функции на языке 1С для расчета контрольного символа произвольной строки цифр:


Функция РассчитатьКонтрольныйСимволITF14(Знач Штрихкод13) Экспорт
    Сумма = 0;
    Для Индекс = 1 По 13 Цикл
        Цифра = Число(Сред(Штрихкод13, 14 - Индекс, 1));
        Если Индекс % 2 = 1 Тогда
            Сумма = Сумма + Цифра * 3;
        Иначе
            Сумма = Сумма + Цифра * 1;
        КонецЕсли;
    КонецЦикла;
    
    КонтрольныйРазряд = (10 - (Сумма % 10)) % 10;
    Возврат Строка(КонтрольныйРазряд);
КонецФункции

Автоматизация процесса в базе 1С

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

  1. При сканировании кода длиной 14 символов система сначала ищет прямое соответствие в регистре штрихкодов.
  2. Если код не найден, программа «отрезает» первую цифру (индикатор) и последнюю (контрольную).
  3. По полученным 12 цифрам выполняется поиск в базе среди кодов EAN-13.
  4. Если товар найден, система предлагает пользователю создать новую единицу измерения (например, «Коробка») и автоматически записывает в нее отсканированный 14-значный код.

Посмотрим, как может выглядеть фрагмент кода для выделения базового кода из ITF-14:


// Извлекаем базу EAN-13 из ITF-14
ТекстITF14 = "99009861552486"; // Пример из обсуждения
БазаEAN = Сред(ТекстITF14, 2, 12); 
// Далее ищем в базе штрихкод, который начинается на БазаEAN

Важные нюансы использования ITF-14

Выясним причины, по которым нельзя просто «налепить» любой сгенерированный код. Проанализируем технические ограничения:

Таким образом, мы рассмотрели механизм преобразования кодов. При автоматизации в 1С наиболее надежным способом будет сочетание алгоритмической генерации и гибкой настройки поиска при первом сканировании новой упаковки. Это позволит избежать ручного ввода и минимизировать ошибки, связанные с человеческим фактором.

← На главную