Почему 1С:Розница 2.3 добавляет лишний ноль к штрихкоду в РМК и как это исправить?

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

При работе в программе 1С:Розница 2.3 пользователи часто сталкиваются с ситуацией, когда при сканировании или ручном вводе заводского штрихкода (состоящего из 12 цифр) система автоматически добавляет к нему ведущий ноль. В результате вместо корректного кода, например, 052742021485, программа ищет 0052742021485. Естественно, такой штрихкод не находится в базе, и система предлагает создать новую карточку или выдает ошибку. Давайте подробно разберем, почему это происходит и как решить проблему типовыми средствами.

Причина возникновения проблемы: конфликт стандартов UPC-A и EAN-13

Для начала проанализируем техническую сторону вопроса. Штрихкод, состоящий из 12 цифр, чаще всего относится к американскому стандарту UPC-A. В то же время европейский стандарт EAN-13 (основной для СНГ) состоит из 13 цифр. По правилам международной спецификации штрихкодирования, код UPC-A является подмножеством EAN-13. Чтобы превратить 12-значный код в 13-значный, к нему просто добавляется ноль в начало.

Проблема в 1С возникает из-за "избыточной заботы" системы о целостности данных. Внутренняя логика Рабочего места кассира (РМК) и Библиотеки стандартных подсистем (БСП) настроена на нормализацию входящих строк. Если программа видит строку из 12 цифр, она интерпретирует её как "неполный" EAN-13 и программно дописывает ноль. Это происходит даже при ручном вводе через Alt+F7, что подтверждает программный характер проблемы, а не только настройки сканера.

Решение 1: Настройка торгового оборудования (сканера)

Первым делом проверим настройки физического оборудования. Большинство современных сканеров (например, Honeywell, Zebra, Datalogic) по умолчанию имеют активную функцию преобразования UPC-A to EAN-13. Рассмотрим, как это исправить на примере сканера Honeywell 7580:

  1. Найдите руководство пользователя (Programming Guide) для вашей модели сканера.
  2. Найдите раздел настроек символик (Symbologies) или конкретно UPC-A.
  3. Считайте управляющий штрихкод, который отключает опцию "Transmit Lead Zero" или "Convert UPC-A to EAN-13".
  4. После этого сканер перестанет добавлять лишний символ при передаче данных в буфер обмена или COM-порт.

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

Решение 2: Корректировка типов штрихкодов в базе данных

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

  1. Откройте карточку номенклатуры, с которой возникает проблема.
  2. Перейдите в список штрихкодов.
  3. Обратите внимание на колонку Тип штрихкода. Если там указано EAN13, а цифр всего 12, система всегда будет пытаться дополнить их до 13.
  4. Попробуйте пересоздать штрихкод, выбрав тип UPC-A (если это позволяет текущая версия конфигурации).

Если товаров с такими кодами много (например, продукция бренда Ahmad Tea), ручная правка неэффективна. В этом случае рекомендуется использовать групповую обработку справочника Штрихкоды, чтобы привести все 12-значные коды к 13-значному виду (добавив ноль в самой базе), так как РМК в любом случае склонен искать 13 цифр.

Решение 3: Программные исправления и патчи

Выясним причину, почему обновление конфигурации иногда не помогает. В релизах 1С:Розница 2.3.10 – 2.3.12 была зафиксирована ошибка в модуле обработки ввода РМК. Алгоритм принудительно проверял длину строки, и если она равнялась 12, вызывалась функция дополнения.

Для исправления ситуации выполним следующие действия:

  1. Зайдите в раздел АдминистрированиеОбслуживаниеОбновление программыУстановленные исправления (патчи).
  2. Проверьте наличие патчей, связанных с "Обработкой штрихкодов в РМК". Рекомендуется установить все актуальные исправления для вашего релиза (например, серия патчей EF_00_xxxx).
  3. Если вы используете расширения для работы с маркировкой (Честный Знак), временно отключите их в копии базы, чтобы проверить, не влияют ли они на перехват событий сканирования.

Технические детали: почему помогает изменение последней цифры?

Многие пользователи замечают, что если изменить последнюю цифру 12-значного кода, проблема исчезает. Разберем, почему это происходит. Последняя цифра в стандартах EAN и UPC — это контрольная сумма, вычисляемая по определенному алгоритму. Когда вы вводите 052742021485, система понимает, что это валидный код, и применяет к нему правила нормализации.

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

Пример программной логики (для ознакомления)

Проанализируем примерный фрагмент кода, который может вызывать подобное поведение в процедурах обработки торгового оборудования. Мы можем увидеть нечто подобное в общем модуле МенеджерОборудованияКлиент:


Процедура ОбработкаШтрихкода(ДанныеШтрихкода)
    Штрихкод = ДанныеШтрихкода.Значение;
    // Если длина 12, система предполагает UPC-A и конвертирует в EAN-13
    Если СтрДлина(Штрихкод) = 12 Тогда
        Штрихкод = "0" + Штрихкод;
    КонецЕсли;
    // Далее следует поиск в справочнике
    РезультатПоиска = ШтрихкодыНоменклатуры.НайтиПоШтрихкоду(Штрихкод);
КонецПроцедуры

Итог: Чтобы решить проблему типовым путем без привлечения программистов для изменения кода конфигурации, наиболее эффективным методом является отключение функции передачи ведущего нуля в самом сканере или массовое добавление ведущего нуля к штрихкодам в справочнике 1С. Это позволит синхронизировать реальные данные с ожиданиями подсистемы РМК.

← На главную