Почему штрих-код в 1С считывается только со второго раза и как это исправить?

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

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

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

Почему первый раз возникает ошибка, а со второго раза все работает?

Для того чтобы понять суть проблемы, нам необходимо обратиться к международным стандартам формирования штрих-кодов EAN-13 и логике их обработки внутри конфигураций 1С. Диапазон штрих-кодов, начинающийся с цифры 2 (от 20 до 29), зарезервирован для внутреннего использования предприятиями. Это означает, что данные коды не могут использоваться для маркировки товаров во внешней торговой сети, но идеально подходят для внутреннего учета на складе или в магазине.

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

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

Почему «отваливается» драйвер сканера и пишет «Версия не определена»?

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

Выясним причину этого поведения. При использовании встроенных компонент (например, 1С:Сканер штрихкода или устаревших COM-библиотек типа ScanOpos.dll) любое необработанное исключение в коде конфигурации в момент обработки внешнего события приводит к прерыванию связи между платформой и внешней компонентой. COM-объект или NativeApi-библиотека блокируется в памяти, и платформа теряет к ней доступ в текущей сессии. Перезапуск конфигурации принудительно выгружает зависшие библиотеки и инициализирует подключение сканера заново.

Как выйти из ситуации с заблокированными префиксами?

Основное решение проблемы заключается в устранении конфликта префиксов в настройках вашей базы данных 1С. Если система не дает вам интерактивно удалить или изменить настройку префикса весового товара из-за ограничений интерфейса или связанных данных, рассмотрим три эффективных способа решения этой задачи.

Способ 1. Изменение префиксов на неиспользуемые значения

Самый простой и безопасный способ, не требующий написания программного кода. Если вам не удается просто удалить строку с конфликтующим префиксом (например, 21 или 22), мы можем перенастроить ее на диапазон, который гарантированно никогда не будет использоваться в вашей организации.

Для этого выполните следующие действия:

  1. Перейдите в раздел Администрирование (или Настройки номенклатуры в зависимости от вашей конфигурации).
  2. Найдите пункт Штрихкодирование или Настройка весовых товаров.
  3. В табличной части найдите строку с префиксом, который совпадает с первыми цифрами ваших проблемных штрих-кодов.
  4. Вместо удаления дважды кликните по значению префикса и измените его на заведомо неиспользуемый (например, на двухзначное число 99).
  5. Сохраните настройки и перезапустите сеанс 1С.

Способ 2. Использование обработки «Групповое изменение реквизитов»

Если настройки префиксов хранятся в справочниках или константах, доступ к которым напрямую ограничен интерфейсом, мы можем воспользоваться стандартным инструментом администратора:

  1. Откройте обработку Групповое изменение реквизитов (в разделе "Администрирование" — "Обслуживание" — "Корректировка данных").
  2. В поле "Выбрать элементы для изменения" укажите справочник или регистр настроек параметров штрихкодирования (например, справочник ПравилаОбменаСПодключаемымОборудованием).
  3. Найдите реквизит, отвечающий за префикс весового товара, и установите для него новое пустое или нейтральное значение.
  4. Нажмите кнопку Изменить реквизиты.

Способ 3. Программное удаление записей через регистр сведений

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


// Создаем набор записей для регистра настроек штрихкодирования
НаборЗаписей = РегистрыСведений.НастройкиШтрихкодирования.СоздатьНаборЗаписей();

// Если требуется удалить конкретную настройку префикса, устанавливаем отбор
НаборЗаписей.Отбор.Префикс.Установить("21");

// Записываем пустой набор записей, тем самым удаляя конфликтующую настройку из базы данных
НаборЗаписей.Записать();

Сообщить("Конфликтующий префикс успешно удален из настроек системы!");

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

Рекомендации по настройке сканера Symbol (Zebra) LS1203

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

  1. Перевод сканера в режим эмуляции COM-порта: По умолчанию большинство сканеров работают в режиме эмуляции клавиатуры (USB HID). В этом режиме данные передаются со скоростью ручного ввода, что при работе в терминальных сессиях (RDP) часто приводит к потере первых символов штрих-кода. Рекомендуем перевести сканер в режим эмуляции COM-порта (USB CDC). Для этого необходимо отсканировать управляющий штрих-код "USB CDC Host" из оригинальной инструкции к сканеру и установить соответствующий виртуальный драйвер в операционной системе. В настройках 1С при этом тип подключения сканера нужно изменить с "Клавиатура" на соответствующий порт (например, "COM3").
  2. Настройка суффикса возврата каретки (CR/LF): Убедитесь, что в сканере запрограммирован суффикс отправки окончания штрих-кода. Обычно это символ возврата каретки (код 13). Без этого суффикса драйвер 1С не сможет корректно определить границу считывания штрих-кода, что также приводит к сбоям при обработке внешнего события с первого раза. Настройка суффикса производится путем последовательного сканирования системных штрих-кодов "Set Suffix", "1" (для ввода первой цифры кода суффикса), "3" (для ввода второй цифры) и "Enter" из руководства пользователя Zebra/Symbol.

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

← На главную