Как сканировать и обрабатывать штрихкоды длиной более 13 символов в 1С

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

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

Шаг 1. Анализ типа штрихкода

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

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

Шаг 2. Изменение метаданных в Конфигураторе

Выясним причину обрезки данных в самой базе. В типовых конфигурациях (особенно старых версий, таких как 7.7 или ранние 8.2) длина поля «Штрихкод» часто ограничена 13 символами. Рассмотрим, как это исправить:

  1. Откроем Конфигуратор и найдем объект, где хранятся штрихкоды. Обычно это РегистрСведений.Штрихкоды (в 1С 8) или справочник/таблица (в 1С 7.7).
  2. Найдем ресурс или реквизит Штрихкод.
  3. Увеличим длину поля до необходимого значения (например, до 25 или 50 символов). Важно: тип данных должен быть Строка. Если использовать числовой тип, ведущие нули в длинных кодах будут удалены, что сделает штрихкод невалидным.
  4. Проверим формы ввода. Убедимся, что ширина элемента управления на форме позволяет отобразить длинную строку, а ограничение на количество вводимых символов в свойствах поля ввода снято или увеличено.

Шаг 3. Настройка сканера штрихкодов

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

Шаг 4. Программная обработка и расчет контрольного символа

Проанализируем алгоритм проверки корректности штрихкода. В сообщении 10 автор упоминает функцию глКонтрольныйСимволEAN. При работе с кодами разной длины (8, 13, 14 знаков) важно понимать, что все они используют алгоритм Modulo 10.

Разберем пример реализации универсального расчета контрольного знака. Вместо жестких условий Если Тип = 13, лучше использовать цикл, который считает сумму справа налево. Посмотрим на пример кода:


Функция глУниверсальныйКонтрольныйСимвол(ШтрКод) Экспорт
    Длина = СтрДлина(ШтрКод);
    Сумма = 0;
    Множитель = 3;
    
    // Идем с конца кода (без учета последнего символа, если мы его проверяем)
    Для Индекс = 1 По Длина Цикл
        Цифра = Число(Сред(ШтрКод, Длина - Индекс + 1, 1));
        Сумма = Сумма + Цифра * Множитель;
        
        // Чередуем множители 3 и 1
        Если Множитель = 3 Тогда
            Множитель = 1;
        Иначе
            Множитель = 3;
        КонецЕсли;
    КонецЦикла;
    
    Остаток = Сумма % 10;
    Если Остаток = 0 Тогда
        Возврат 0;
    Иначе
        Возврат (10 - Остаток);
    КонецЕсли;
КонецФункции

Важный нюанс: при расчете контрольной цифры для EAN-13 позиции считаются справа налево. Первая позиция (справа) имеет множитель 3, вторая — 1 и так далее. Этот же принцип применим и к ITF-14. Поэтому универсальный цикл — наиболее правильное решение.

Шаг 5. Поиск по штрихкоду в коде конфигурации

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


Процедура ОбработкаВнешнегоСобытия(Источник, Событие, Данные)
    // ОШИБКА: Жесткая проверка длины
    Если СтрДлина(Данные) <> 13 Тогда
        Предупреждение("Неверный формат штрихкода!");
        Возврат;
    КонецЕсли;
    
    // Поиск товара...
КонецПроцедуры

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

Практические рекомендации

При внедрении поддержки длинных штрихкодов учитывайте следующее:

  1. Если вы используете штрихкоды для маркировки «Честный ЗНАК» (DataMatrix), помните, что это 2D-коды. Для их чтения необходим соответствующий сканер, и логика обработки там существенно отличается от линейных ШК.
  2. Для транспортных упаковок (ITF-14) всегда проверяйте наличие ведущего нуля. Иногда сканеры его отсекают, что приводит к несовпадению кода в базе и на этикетке.
  3. В режиме эмуляции клавиатуры длинные коды могут передаваться с ошибками из-за высокой скорости ввода. Если перевод в режим COM-порта невозможен, попробуйте увеличить «задержку между символами» (Inter-character delay) в настройках самого сканера.

Таким образом, решив проблему комплексно — от физических настроек луча сканера до длины реквизитов в 1С и алгоритмов проверки — мы обеспечим стабильную работу склада с любыми типами маркировки.

← На главную