При работе с весовым товаром в конфигурации «1С:Управление торговлей» версии 11.4 разработчики и администраторы часто сталкиваются со странным поведением системы. При генерации штрихкода для весового товара программа выдает строку вида 2_0000100000_. На первый взгляд это кажется программной ошибкой или недоработкой конфигуратора: вместо привычного числового кода EAN-13 мы видим нижние подчеркивания на месте префикса узла и контрольного символа.
В этой статье мы подробно разберем, почему конфигурация генерирует именно такой штрихкод, как устроен этот механизм на уровне базы данных и какие настройки необходимо выполнить в системе, чтобы весовые товары корректно распознавались на кассах и весах самообслуживания.
Для начала давайте обратимся к исходному коду конфигурации, который вызывает столько вопросов у начинающих специалистов. Проанализируем ключевую функцию, отвечающую за формирование строки штрихкода весового товара:
Функция ПолучитьШтрихкодВесовогоТовараПоКоду(Код, ПрефиксУзлаШтрихкода = "_", Загрузка = Ложь) Экспорт
Если Загрузка Тогда
КодТовара = Формат(Код, "ЧЦ=5; ЧВН=; ЧГ=");
Иначе
КодТовара = Строка(ПрефиксУзлаШтрихкода) + Формат(Код, "ЧЦ=4; ЧВН=; ЧГ=");
КонецЕсли;
Штрихкод = "2_" + КодТовара + "00000";
КонтрольныйСимволEAN = "_";
Штрихкод = Штрихкод + КонтрольныйСимволEAN;
Возврат Штрихкод;
КонецФункции
Давайте разберем по шагам, что происходит в данном фрагменте кода:
ПрефиксУзлаШтрихкода по умолчанию принимает значение одиночного символа подчеркивания "_".КодТовара собирается из префикса узла и самого кода товара, приведенного к 4-символьному формату с заполнением лидирующими нулями (например, код 1 превращается в "0001")."2" добавляется символ подчеркивания, затем идет КодТовара, а следом — жестко прописанные пять нулей "00000", которые служат шаблоном (резервным местом) под будущую массу товара.КонтрольныйСимволEAN также жестко прописывается символ подчеркивания "_".В результате работы этой функции мы получаем шаблон вида 2_0000100000_. Рассмотрим подробнее, зачем это нужно платформе 1С.
Символ подчеркивания в штрихкоде весового товара — это не баг, а специализированный шаблон (маска) для поиска в базе данных SQL. Дело в том, что весовой товар в момент его создания в информационной базе еще не имеет конкретного веса. Вес появится только тогда, когда покупатель положит товар на весы, и весы распечатают этикетку.
Давайте выясним, как система сопоставляет отсканированный на кассе реальный штрихкод с шаблоном в базе данных:
00001) и определяют его вес (например, 150 граммов). На этикетке печатается штрихкод: 2200001001506. Здесь первая двойка — признак штучного/весового штрихкода внутреннего использования, вторая двойка — префикс магазина (узла РИБ), 00001 — код товара, 00150 — вес товара в граммах, а 6 — контрольное число.2200001001506 сканером.220000100000_."_" при использовании оператора LIKE означает «любой один символ». 1С выполняет запрос к регистру сведений ШтрихкодыНоменклатуры, используя условие:
ГДЕ "220000100000_" ПОДОБНО Штрихкоды.Штрихкод
База данных сравнивает строку 220000100000_ с шаблоном 2_0000100000_. Первый символ подчеркивания в шаблоне успешно сопоставляется со второй двойкой (префиксом узла), а последний символ подчеркивания — с символом маски. СУБД мгновенно находит точное совпадение и возвращает конкретную номенклатуру.2200001001506, вырезает из него символы веса 00150 и подставляет в чек количество — 0.150 кг.Такой элегантный механизм позволяет избежать сложных алгоритмов разбора строк при каждом сканировании и задействует всю мощь индексов СУБД для быстрого поиска.
Чтобы вся описанная цепочка работала без сбоев, необходимо правильно настроить параметры префиксов в конфигурации. Разберем по шагам, где находятся эти настройки:
20, а весовые — на 22, 24 или другие выделенные префиксы из диапазона внутренних штрихкодов.Обратим внимание на карточку самой номенклатуры. Для того чтобы система генерировала именно шаблон весового товара, у номенклатуры в поле «Единица хранения» должна быть указана единица измерения, относящаяся к типу измеряемой величины «Вес» (например, килограмм, грамм), и у товара должен быть установлен признак весового в настройках весов.
Хотя внутри платформы 1С шаблон 2_0000100000_ обрабатывается корректно, при выгрузке данных во внешние системы могут возникнуть сложности. Проанализируем две типичные ситуации:
Внешнее кассовое ПО не понимает структуру штрихкодов 1С с символами подчеркивания. При попытке выгрузить шаблон «как есть», кассовая программа выдаст ошибку или проигнорирует запись. Для решения этой проблемы специализированные обработки обслуживания при выгрузке конвертируют шаблон 1С в формат маски, принятый в конкретном кассовом софте (например, переводят его в формат 22NNNNNWWWWWK, где N — код товара, W — вес, K — контрольный символ), либо выгружают только чистый код PLU для весов.
Если на складе или в торговом зале используются ТСД под управлением Mobile SMARTS (Клеверенс) или DataMobile, то для успешного сканирования весового товара на самом терминале необходимо настроить разбор весовых штрихкодов. В настройках складского ПО на ТСД обязательно укажем префикс весового товара (например, 22). Тогда мобильное приложение сможет самостоятельно отделить вес от кода товара и сопоставить позицию в локальной базе данных ТСД.
Таким образом, использование символов подчеркивания в штрихкодах весовых товаров — это штатное, задокументированное и крайне эффективное архитектурное решение фирмы «1С». Правильное понимание этого механизма убережет вас от ненужных правок конфигуратора и позволит быстро и качественно настроить торговое оборудование.