Как проверить существующие штрихкоды номенклатуры на корректность в 1С:Управление торговлей?

Программист 1С v8.3 (Управляемые формы) 1С:Управление торговлей Управленческий учет Торговля и дистрибуция
← На главную

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

Какие форматы штрихкодов применяются в 1С

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

  1. EAN-13: международный тринадцатизначный формат, состоящий строго из 13 цифр. Последняя цифра является контрольным числом.
  2. EAN-8: сокращенный восьмизначный формат для малогабаритных товаров, состоящий из 8 цифр.
  3. UPC-A: североамериканский стандарт из 12 цифр, контрольный символ которого рассчитывается аналогично EAN.
  4. ITF-14: четырнадцатизначный код, применяемый для маркировки транспортных упаковок и коробок.
  5. Code 128 и Code 39: буквенно-цифровые коды произвольной длины, часто используемые для внутренних складских задач (серии, ячейки, тара).

Если речь идет о стандартных товарах в розничной и оптовой торговле, в большинстве случаев валидации подлежат именно числовые коды EAN-8, UPC-A, EAN-13 и ITF-14.

Основные причины появления некорректных штрихкодов

Проанализируем типичные ошибки, из-за которых штрихкод становится невалидным:

  1. Наличие невидимых символов и пробелов: при ручном копировании кодов из прайс-листов или электронных накладных в строку могут попасть пробелы в начале, середине или конце, а также символы перевода строк.
  2. Потеря ведущих нулей: если штрихкоды загружались из таблиц Excel, числовой формат ячеек срезает лидирующие нули (например, код 0123456789012 преобразуется в 12 знаков вместо 13).
  3. Неверная контрольная цифра: последний разряд рассчитывается по строгому математическому алгоритму (по модулю 10). При случайном изменении любой цифры контрольный разряд перестает сходиться.
  4. Неверная раскладка клавиатуры: если сканер работает в режиме эмуляции клавиатуры (HID), буквенно-цифровые коды могут считываться с заменой на русские буквы.
  5. Дублирование штрихкодов: один и тот же код ошибочно привязывается к разным карточкам товаров или характеристикам.

Алгоритм проверки штрихкодов на корректность

Разберем по шагам, как построить логику проверки записей в регистре сведений ШтрихкодыНоменклатуры (в УТ 11) или Штрихкоды (в УТ 10.3):

  1. Проверить длину строки: штрихкод должен иметь длину 8, 12, 13 или 14 символов для стандартных форматов.
  2. Убедиться, что строка содержит только цифры без пробелов, дефисов и букв.
  3. Рассчитать контрольную цифру по первым символам кода и сравнить ее с последней цифрой штрихкода.
  4. Проверить уникальность кода по всей базе, чтобы исключить привязку одного кода к разным товарам.

Использование встроенных механизмов 1С

В типовых конфигурациях 1С уже есть готовый расчет контрольного символа. Посмотрим на пример вызова встроенной функции конфигурации в модуле менеджера регистра сведений ШтрихкодыНоменклатуры:


ШтрихкодБазы = СокрЛП(Выборка.Штрихкод);
ДлинаКода = СтрДлина(ШтрихкодБазы);

Если ДлинаКода = 13 Тогда
    ИсходнаяЧасть = Лев(ШтрихкодБазы, 12);
    КонтрольныйСимвол = РегистрыСведений.ШтрихкодыНоменклатуры.КонтрольныйСимволEAN(ИсходнаяЧасть, 13);
    
    Если Прав(ШтрихкодБазы, 1) <> КонтрольныйСимвол Тогда
        // Зафиксирована ошибка контрольной суммы
    КонецЕсли;
КонецЕсли;

Пример программной обработки для массовой проверки

Напишем фрагмент кода внешней обработки, который выбирает все штрихкоды из регистра и проверяет их на состав символов и правильность контрольной суммы:


Запрос = Новый Запрос;
Запрос.Текст = 
    "ВЫБРАТЬ
    |	Штрихкоды.Номенклатура КАК Номенклатура,
    |	Штрихкоды.Штрихкод КАК Штрихкод
    |ИЗ
    |	РегистрСведений.ШтрихкодыНоменклатуры КАК Штрихкоды";

Результат = Запрос.Выполнить();
Выборка = Результат.Выбрать();

Пока Выборка.Следующий() Цикл
    ТекущийШК = СокрЛП(Выборка.Штрихкод);
    Длина = СтрДлина(ТекущийШК);
    
    // Проверка 1: Длина кода
    Если Не (Длина = 8 Или Длина = 12 Или Длина = 13 Или Длина = 14) Тогда
        Сообщить("Неверная длина штрихкода: " + ТекущийШК + " у товара " + Выборка.Номенклатура);
        Продолжить;
    КонецЕсли;
    
    // Проверка 2: Только цифры
    Если Не СтроковыеФункцииКлиентСервер.ТолькоЦифры(ТекущийШК) Тогда
        Сообщить("Штрихкод содержит нецифровые символы: " + ТекущийШК + " у товара " + Выборка.Номенклатура);
        Продолжить;
    КонецЕсли;
    
    // Проверка 3: Контрольный символ
    ИсходнаяЧасть = Лев(ТекущийШК, Длина - 1);
    КонтрольнаяЦифра = РегистрыСведений.ШтрихкодыНоменклатуры.КонтрольныйСимволEAN(ИсходнаяЧасть, Длина);
    
    Если Прав(ТекущийШК, 1) <> КонтрольнаяЦифра Тогда
        Сообщить("Ошибка контрольного символа: " + ТекущийШК + " (ожидался " + КонтрольнаяЦифра + ")");
    КонецЕсли;
КонецЦикла;

Ограничения алгоритмической проверки

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

← На главную