Каждый специалист по автоматизации розничной или оптовой торговли хотя бы раз сталкивался с загадочным поведением программы 1С, когда при сканировании штрихкода штучного товара в табличную часть документа (например, «Реализация товаров и услуг» или «Чек ККМ») подставляется странное дробное количество — например, 7,68 или 0,768 вместо ожидаемой единицы. На первый взгляд это кажется программным сбоем или ошибкой релиза, однако за таким поведением системы скрывается четкая и вполне логичная работа алгоритмов распознавания штрихкодов. В этой статье мы подробно разберем, почему возникает эта проблема, как устроены механизмы работы с весовым товаром в 1С:Управление торговлей 11 (УТ 11) и как по шагам исправить ситуацию.
Для того чтобы понять суть проблемы, нам необходимо проанализировать стандарты кодирования товаров, используемые в торговле. Международная организация GS1 резервирует определенные диапазоны префиксов для внутреннего использования предприятиями. Штрихкоды стандарта EAN-13, начинающиеся с цифр от 20 до 29, не закреплены за конкретными производителями мирового уровня — их может использовать любая организация для маркировки собственной продукции внутри своего склада или магазина. Именно этот диапазон в 1С зарезервирован под внутренние штучные и весовые штрихкоды.
Давайте подробно рассмотрим структуру стандартного шаблона весового штрихкода в системе 1С:
2 + П + ХХХХХ + ВВВВВ + К
Разберем назначение каждого символа в этой маске:
2, то все штрихкоды, начинающиеся на 22..., система будет автоматически воспринимать как весовые.07680, система преобразует его в 7,68 кг (или 0,768 кг при другой разрядности маски) и подставит это значение в поле «Количество».Проанализируем типичную ситуацию: компания переносит справочники номенклатуры и штрихкоды из старой конфигурации (например, «Управление торговлей 10.3» или сторонней учетной системы) в новую базу 1С:УТ 11. В старой базе штучным товарам могли быть присвоены внутренние штрихкоды, начинающиеся, к примеру, на 22... или 23....
При этом в новой базе 1С:УТ 11 по умолчанию в настройках префиксов весовых товаров может быть установлена цифра 2 или 3. В результате возникает конфликт: при сканировании штучного товара, имеющего штрихкод типа 2201452076805, система сверяется с настройками префиксов и видит совпадение со структурой весового кода. Программа «думает», что перед ней весовая этикетка, распечатанная на весах с печатью этикеток, находит штучный товар с кодом 01452 и вычленяет из штрихкода вес — 07680, что в пересчете дает ровно 7,68 единиц товара.
Если вы столкнулись с ситуацией, когда сканер подставляет неверное количество, выполните следующие диагностические шаги вместе с нами:
22..., 23..., 24...), мы имеем дело с внутренним штрихкодом.Если ваш магазин или склад занимается исключительно штучной продукцией, и весов с печатью этикеток у вас нет, самым простым и надежным решением будет отключение весовых префиксов в настройках 1С. Разберем по шагам, как это сделать:
22, 23), не указаны в качестве весовых префиксов.Обратите внимание: в некоторых релизах конфигурации 1С, если к системе подключено оборудование в режиме offline, префиксы весового товара могут настраиваться непосредственно в правилах обмена. Для проверки перейдите в раздел РМК и оборудование (или Продажи), откройте Обмен с подключаемым оборудованием Offline и проверьте настройки используемых правил обмена.
В ситуациях, когда на предприятии продаются и штучные, и весовые позиции (например, продуктовый супермаркет), просто отключить префиксы не удастся. Здесь имеет место наложение диапазонов кодов, и нам необходимо развести их в разные стороны.
Рассмотрим два варианта решения этого конфликта:
Вариант А: Перегенерация штрихкодов для штучных товаров
Это наиболее правильный с точки зрения методологии 1С подход. Общепринятым стандартом в 1С считается настройка префикса 20 для штучных внутренних штрихкодов, а префиксов от 21 до 29 — для весовых. Нам нужно настроить систему так, чтобы при генерации новых штрихкодов для штучного товара им присваивался код вида 20xxxxxxxxxxc. Все старые конфликтующие штрихкоды штучных товаров придется перегенерировать и распечатать новые этикетки.
Вариант Б: Корректировка префиксов весовых товаров
Если штрихкоды штучного товара пришли напрямую от производителя (такое случается, когда локальные фабрики маркируют штучный товар кодами из диапазона 22... или 23...) и перемаркировать их невозможно физически, придется пойти на компромисс в настройках программы. Вам потребуется изменить префиксы весовых товаров в 1С и на самих весах на те цифры, которые гарантированно не пересекаются со штрихкодами штучных товаров производителей. Например, если производители штучного товара используют коды на 22 и 23, настройте весовые префиксы на цифры 24, 25 или 28. Для гибкой настройки чтения кодов от поставщиков можно использовать модуль распознавания весовых штрихкодов с произвольными префиксами и масками.
Для программистов и системных администраторов, желающих глубже понять логику работы системы, проанализируем пример кода на встроенном языке 1С. Программа выполняет разбор штрихкода в специализированных общих модулях работы с торговым оборудованием. Ниже приведен концептуальный пример функции, которая определяет, является ли штрихкод весовым, и извлекает из него количество:
Функция ПолучитьДанныеШтрихкода(Штрихкод, НастройкиПрефиксов) Экспорт
Результат = Новый Структура("ЭтоВесовой, НоменклатураКод, Количество", Ложь, Неопределено, 1);
// Проверяем длину штрихкода EAN-13
Если СтрДлина(Штрихкод) <> 13 Тогда
Возврат Результат;
КонецЕсли;
ПервыйСимвол = Лев(Штрихкод, 1);
ВторойСимвол = Сред(Штрихкод, 2, 1);
// Если код внутренний (начинается на 2)
Если ПервыйСимвол = "2" Тогда
// Проверяем, зарегистрирован ли второй символ как префикс весового товара
Если НастройкиПрефиксов.ВесовыеПрефиксы.Найти(ВторойСимвол) <> Неопределено Тогда
Результат.ЭтоВесовой = Истина;
// Извлекаем код товара (символы с 3 по 7)
Результат.НоменклатураКод = Сред(Штрихкод, 3, 5);
// Извлекаем вес в граммах (символы с 8 по 12)
СтрокаВеса = Сред(Штрихкод, 8, 5);
ВесЧислом = Число(СтрокаВеса) / 1000; // перевод в килограммы
Результат.Количество = ВесЧислом;
КонецЕсли;
КонецЕсли;
Возврат Результат;
КонецФункции
Этот простой алгоритм наглядно показывает, почему штучный товар со штрихкодом 2201452076805 при установленном весовом префиксе 2 превращается в товар с кодом 01452 и количеством 7,68. Система просто берет подстроку 07680, преобразует ее в число и делит на 1000.
Мы выяснили причину столь необычного поведения программы 1С:Управление торговлей 11 при сканировании штрихкодов. Проблема кроется исключительно в области пересечения диапазонов внутренних штрихкодов и некорректно настроенных весовых префиксов после переноса данных. Своевременное разделение диапазонов кодирования штучной и весовой номенклатуры позволит вашему предприятию избежать досадных ошибок при оформлении продаж и обеспечит корректный учет товарных остатков.