Как сгенерировать штрихкод EAN-13 в 1С и закодировать в нем данные о товаре?

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

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

Миф и реальность: что на самом деле хранит штрихкод EAN-13?

Среди пользователей и начинающих разработчиков распространено заблуждение, что в штрихкоде EAN-13 зашифрована вся информация о товаре: наименование, наименование производителя, страна, состав, сорт и прочие характеристики. Проанализируем, так ли это на самом деле.

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

Рассмотрим стандартную структуру глобального кода EAN-13 (он же GTIN):

  1. Префикс национальной организации GS1 (первые 2–3 цифры): указывает на регистрационную палату, выдавшую код (например, 460–469 — GS1 Russia, 690–699 — Китай). Важно учитывать: префикс обозначает страну регистрации компании-владельца бренда, а не страну фактического изготовления товара.
  2. Регистрационный номер предприятия (4–5 цифр): уникальный код производителя или импортера в системе GS1.
  3. Порядковый номер товара (3–4 цифры): внутренний номер номенклатурной позиции, присвоенный самим предприятием.
  4. Контрольная цифра (13-й символ): рассчитывается по специальному алгоритму на основе первых 12 цифр и служит для проверки корректности считывания сканером.

Генерация внутренних и весовых штрихкодов в 1С

Если для продаваемой продукции не требуется выходить на международный или мелкооптовый рынок с зарегистрированным кодом GS1, предприятие имеет право использовать диапазон внутренних префиксов. Согласно международному стандарту, префиксы с 20 по 29 зарезервированы для внутреннего использования внутри одной организации. Эти коды не могут пересекаться с товарами из внешнего мира.

Выясним, как формируются структуры внутренних штрихкодов для штучных и весовых товаров:

  1. Штучный внутренний товар (префикс 20):

    Формат: 20 + XXXXXXXXXX (10 цифр кода товара в базе 1С) + C (контрольный символ).

  2. Весовой товар (префиксы 21–29):

    Формат: PP (префикс веса, например 22 или 28) + XXXXX (5 цифр PLU или кода товара) + WWWWW (5 цифр массы товара в граммах) + C (контрольный символ).

    Например, код 220012301500C будет означать: весовой товар с кодом 00123 и весом 1,500 кг (1500 грамм).

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

Чтобы сгенерированный штрихкод был валидным и успешно считывался оборудованием, необходимо правильно вычислить 13-й контрольный символ. Рассчитаем его по шагам:

  1. Суммируем все цифры, стоящие на четных позициях (2, 4, 6, 8, 10, 12).
  2. Умножаем полученную сумму на 3.
  3. Суммируем все цифры, стоящие на нечетных позициях (1, 3, 5, 7, 9, 11).
  4. Складываем результаты шагов 2 и 3.
  5. Находим минимальное число, которое нужно прибавить к итоговой сумме, чтобы получилось число, кратное 10. Это число и есть контрольная цифра. Если сумма уже кратна 10, контрольная цифра равна 0.

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


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

Теперь разберем практическую функцию для создания готового 13-значного внутреннего штрихкода для номенклатуры в 1С:


Функция СформироватьВнутреннийШтрихкод(КодНоменклатуры) Экспорт
    
    // Префикс внутреннего штучного товара - 20
    Префикс = "20";
    
    // Приводим код номенклатуры к 10 цифрам, дополняя нулями слева
    КодЧисло = СокрЛП(КодНоменклатуры);
    Пока СтрДлина(КодЧисло) < 10 Цикл
        КодЧисло = "0" + КодЧисло;
    КонецЦикла;
    
    Первые12 = Префикс + КодЧисло;
    КонтрольнаяЦифра = РассчитатьКонтрольныйСимволEAN13(Первые12);
    
    Возврат Первые12 + КонтрольнаяЦифра;
    
КонецФункции

Способы печати штрихкодов в 1С

После того как строка штрихкода сформирована, ее требуется вывести в печатную форму (наклейку, ценник или накладную). В платформах 1С применяются два основных подхода:

  1. Использование специализированных внешних компонент (Native API / ActiveX):

    В конфигурациях 1С (например, «Торговля и Склад 7.7» или современная «Управление торговлей») применяется внешняя компонента печати штрихкодов (например, 1C:BarCode или barcode.ocx). В табличный документ добавляется рисунок типа «ActiveX объект». Этому объекту передается сформированное значение штрихкода, а компонента самостоятельно рассчитывает ширину полос, отображает цифры и прорисовывает графическое изображение.

  2. Использование TrueType-шрифтов (например, EAN13.ttf):

    При данном подходе вывод штрихкода выполняется в обычную ячейку таблицы 1С с установленным шрифтом EAN13. Однако выгрузить напрямую 13 цифр нельзя: шрифт использует специфическую таблицу символов для кодирования левой и правой частей штрихкода, а также стартовых, центральных и стоповых защитных полос. Предварительно необходимо перекодировать 13 цифр в специальную текстовую строку символов по таблице паритета EAN-13.

Альтернативные варианты: как действительно закодировать подробную информацию?

Если специфика вашего бизнеса требует наносить на упаковку информацию о товаре (наименование, серийный номер, дату производства, срок годности или вес) непосредственно в штрихкод без обращения к базе данных, стандарт EAN-13 не подойдет. Проанализируем двумерные (2D) варианты решений:

  1. GS1 DataMatrix:

    Современный стандарт, активно используемый в государственной системе маркировки «Честный ЗНАК». При небольших физических размерах позволяет кодировать GTIN товара, серийный номер, партии и коды проверки. Легко считывается 2D-сканерами и терминалами сбора данных.

  2. QR-код:

    Позволяет зашифровать произвольный объем текстовой информации на русском и английском языках (включая наименование, состав, артикул, дату и URL-ссылку на сайт). Поддерживается большинством современных сканеров и мобильных устройств.

Подводя итог: для работы с обычными товарами в 1С достаточно генерировать валидный внутренний код формата EAN-13 с префиксом 20 и правильным контрольным символом. Если же требуется передать в коде текстовые атрибуты номенклатуры, следует использовать двумерные штрихкоды QR или DataMatrix.

← На главную