При работе в программе 1С:Розница 2.3 пользователи часто сталкиваются с ситуацией, когда при сканировании или ручном вводе заводского штрихкода (состоящего из 12 цифр) система автоматически добавляет к нему ведущий ноль. В результате вместо корректного кода, например, 052742021485, программа ищет 0052742021485. Естественно, такой штрихкод не находится в базе, и система предлагает создать новую карточку или выдает ошибку. Давайте подробно разберем, почему это происходит и как решить проблему типовыми средствами.
Для начала проанализируем техническую сторону вопроса. Штрихкод, состоящий из 12 цифр, чаще всего относится к американскому стандарту UPC-A. В то же время европейский стандарт EAN-13 (основной для СНГ) состоит из 13 цифр. По правилам международной спецификации штрихкодирования, код UPC-A является подмножеством EAN-13. Чтобы превратить 12-значный код в 13-значный, к нему просто добавляется ноль в начало.
Проблема в 1С возникает из-за "избыточной заботы" системы о целостности данных. Внутренняя логика Рабочего места кассира (РМК) и Библиотеки стандартных подсистем (БСП) настроена на нормализацию входящих строк. Если программа видит строку из 12 цифр, она интерпретирует её как "неполный" EAN-13 и программно дописывает ноль. Это происходит даже при ручном вводе через Alt+F7, что подтверждает программный характер проблемы, а не только настройки сканера.
Первым делом проверим настройки физического оборудования. Большинство современных сканеров (например, Honeywell, Zebra, Datalogic) по умолчанию имеют активную функцию преобразования UPC-A to EAN-13. Рассмотрим, как это исправить на примере сканера Honeywell 7580:
Важно: Если вы используете сканер в режиме эмуляции клавиатуры, проверьте, не добавляет ли драйвер 1С префикс самостоятельно. В справочнике Подключаемое оборудование откройте параметры вашего сканера и убедитесь, что в настройках драйвера "1С:Сканеры штрихкода (NativeApi)" нет активных галочек, связанных с модификацией кода.
Рассмотрим ситуацию, когда сканер настроен верно, но программа все равно "исправляет" код. Это часто связано с тем, как штрихкод зарегистрирован в справочнике. Проанализируем шаги по исправлению данных:
EAN13, а цифр всего 12, система всегда будет пытаться дополнить их до 13.UPC-A (если это позволяет текущая версия конфигурации).Если товаров с такими кодами много (например, продукция бренда Ahmad Tea), ручная правка неэффективна. В этом случае рекомендуется использовать групповую обработку справочника Штрихкоды, чтобы привести все 12-значные коды к 13-значному виду (добавив ноль в самой базе), так как РМК в любом случае склонен искать 13 цифр.
Выясним причину, почему обновление конфигурации иногда не помогает. В релизах 1С:Розница 2.3.10 – 2.3.12 была зафиксирована ошибка в модуле обработки ввода РМК. Алгоритм принудительно проверял длину строки, и если она равнялась 12, вызывалась функция дополнения.
Для исправления ситуации выполним следующие действия:
Администрирование — Обслуживание — Обновление программы — Установленные исправления (патчи).EF_00_xxxx).Многие пользователи замечают, что если изменить последнюю цифру 12-значного кода, проблема исчезает. Разберем, почему это происходит. Последняя цифра в стандартах EAN и UPC — это контрольная сумма, вычисляемая по определенному алгоритму. Когда вы вводите 052742021485, система понимает, что это валидный код, и применяет к нему правила нормализации.
Как только вы меняете последнюю цифру, контрольная сумма перестает совпадать. Алгоритм 1С "отбраковывает" этот код как стандартный штрихкод и начинает воспринимать его как простую последовательность символов. В этом случае автоматическое добавление нуля отключается, и поиск идет "как есть". Однако это не решение, так как заводской штрихкод на товаре вы изменить не можете.
Проанализируем примерный фрагмент кода, который может вызывать подобное поведение в процедурах обработки торгового оборудования. Мы можем увидеть нечто подобное в общем модуле МенеджерОборудованияКлиент:
Процедура ОбработкаШтрихкода(ДанныеШтрихкода)
Штрихкод = ДанныеШтрихкода.Значение;
// Если длина 12, система предполагает UPC-A и конвертирует в EAN-13
Если СтрДлина(Штрихкод) = 12 Тогда
Штрихкод = "0" + Штрихкод;
КонецЕсли;
// Далее следует поиск в справочнике
РезультатПоиска = ШтрихкодыНоменклатуры.НайтиПоШтрихкоду(Штрихкод);
КонецПроцедуры
Итог: Чтобы решить проблему типовым путем без привлечения программистов для изменения кода конфигурации, наиболее эффективным методом является отключение функции передачи ведущего нуля в самом сканере или массовое добавление ведущего нуля к штрихкодам в справочнике 1С. Это позволит синхронизировать реальные данные с ожиданиями подсистемы РМК.