Почему штрихкод весового товара в 1С:УТ 11.4 содержит нижние подчеркивания и как это работает?

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

При работе с весовым товаром в конфигурации «1С:Управление торговлей» версии 11.4 разработчики и администраторы часто сталкиваются со странным поведением системы. При генерации штрихкода для весового товара программа выдает строку вида 2_0000100000_. На первый взгляд это кажется программной ошибкой или недоработкой конфигуратора: вместо привычного числового кода EAN-13 мы видим нижние подчеркивания на месте префикса узла и контрольного символа.

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

Анализ программного кода генерации штрихкода

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


Функция ПолучитьШтрихкодВесовогоТовараПоКоду(Код, ПрефиксУзлаШтрихкода = "_", Загрузка = Ложь) Экспорт
    Если Загрузка Тогда
        КодТовара = Формат(Код, "ЧЦ=5; ЧВН=; ЧГ=");
    Иначе
        КодТовара = Строка(ПрефиксУзлаШтрихкода) + Формат(Код, "ЧЦ=4; ЧВН=; ЧГ=");
    КонецЕсли;
    
    Штрихкод = "2_" + КодТовара + "00000";
    
    КонтрольныйСимволEAN = "_";
    Штрихкод = Штрихкод + КонтрольныйСимволEAN;
    Возврат Штрихкод;
КонецФункции

Давайте разберем по шагам, что происходит в данном фрагменте кода:

  1. Параметр ПрефиксУзлаШтрихкода по умолчанию принимает значение одиночного символа подчеркивания "_".
  2. Если это не режим загрузки данных, переменная КодТовара собирается из префикса узла и самого кода товара, приведенного к 4-символьному формату с заполнением лидирующими нулями (например, код 1 превращается в "0001").
  3. Формируется тело штрихкода: к первому символу "2" добавляется символ подчеркивания, затем идет КодТовара, а следом — жестко прописанные пять нулей "00000", которые служат шаблоном (резервным местом) под будущую массу товара.
  4. В качестве контрольного символа КонтрольныйСимволEAN также жестко прописывается символ подчеркивания "_".

В результате работы этой функции мы получаем шаблон вида 2_0000100000_. Рассмотрим подробнее, зачем это нужно платформе 1С.

Сакральный смысл символов подчеркивания (Работа с СУБД)

Символ подчеркивания в штрихкоде весового товара — это не баг, а специализированный шаблон (маска) для поиска в базе данных SQL. Дело в том, что весовой товар в момент его создания в информационной базе еще не имеет конкретного веса. Вес появится только тогда, когда покупатель положит товар на весы, и весы распечатают этикетку.

Давайте выясним, как система сопоставляет отсканированный на кассе реальный штрихкод с шаблоном в базе данных:

  1. Формирование штрихкода весами: Покупатель взвешивает яблоки. Весы считывают внутренний код (PLU) товара (например, 00001) и определяют его вес (например, 150 граммов). На этикетке печатается штрихкод: 2200001001506. Здесь первая двойка — признак штучного/весового штрихкода внутреннего использования, вторая двойка — префикс магазина (узла РИБ), 00001 — код товара, 00150 — вес товара в граммах, а 6 — контрольное число.
  2. Сканирование на кассе: Кассир считывает штрихкод 2200001001506 сканером.
  3. Нормализация штрихкода в 1С: Платформа понимает, что считан весовой штрихкод. Она программно «зануляет» блок, предназначенный для веса (с 8-го по 12-й символы), и заменяет последний символ контрольной суммы на подчеркивание. В итоге реальный штрихкод превращается в строку: 220000100000_.
  4. Поиск по маске (SQL LIKE): В СУБД (MS SQL, PostgreSQL и др.) символ подчеркивания "_" при использовании оператора LIKE означает «любой один символ». 1С выполняет запрос к регистру сведений ШтрихкодыНоменклатуры, используя условие: ГДЕ "220000100000_" ПОДОБНО Штрихкоды.Штрихкод База данных сравнивает строку 220000100000_ с шаблоном 2_0000100000_. Первый символ подчеркивания в шаблоне успешно сопоставляется со второй двойкой (префиксом узла), а последний символ подчеркивания — с символом маски. СУБД мгновенно находит точное совпадение и возвращает конкретную номенклатуру.
  5. Выделение веса: После того как номенклатура найдена, система берет исходный штрихкод 2200001001506, вырезает из него символы веса 00150 и подставляет в чек количество — 0.150 кг.

Такой элегантный механизм позволяет избежать сложных алгоритмов разбора строк при каждом сканировании и задействует всю мощь индексов СУБД для быстрого поиска.

Настройка префиксов весовых штрихкодов в УТ 11.4

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

  1. Перейдем в раздел НСИ и администрирование, далее выберем пункт Настройка НСИ и разделов и откроем подраздел Номенклатура.
  2. Развернем группу настроек Настройки создания и перейдем по ссылке Настройка префиксов внутренних штрихкодов EAN 13.
  3. Убедимся, что диапазоны для штучных и весовых товаров четко разделены. Традиционно в розничной торговле штучные штрихкоды начинаются на 20, а весовые — на 22, 24 или другие выделенные префиксы из диапазона внутренних штрихкодов.

Обратим внимание на карточку самой номенклатуры. Для того чтобы система генерировала именно шаблон весового товара, у номенклатуры в поле «Единица хранения» должна быть указана единица измерения, относящаяся к типу измеряемой величины «Вес» (например, килограмм, грамм), и у товара должен быть установлен признак весового в настройках весов.

Особенности интеграции с внешним оборудованием

Хотя внутри платформы 1С шаблон 2_0000100000_ обрабатывается корректно, при выгрузке данных во внешние системы могут возникнуть сложности. Проанализируем две типичные ситуации:

Выгрузка во фронт-офис (например, Frontol, SetRetail)

Внешнее кассовое ПО не понимает структуру штрихкодов 1С с символами подчеркивания. При попытке выгрузить шаблон «как есть», кассовая программа выдаст ошибку или проигнорирует запись. Для решения этой проблемы специализированные обработки обслуживания при выгрузке конвертируют шаблон 1С в формат маски, принятый в конкретном кассовом софте (например, переводят его в формат 22NNNNNWWWWWK, где N — код товара, W — вес, K — контрольный символ), либо выгружают только чистый код PLU для весов.

Интеграция с Терминалами Сбора Данных (ТСД)

Если на складе или в торговом зале используются ТСД под управлением Mobile SMARTS (Клеверенс) или DataMobile, то для успешного сканирования весового товара на самом терминале необходимо настроить разбор весовых штрихкодов. В настройках складского ПО на ТСД обязательно укажем префикс весового товара (например, 22). Тогда мобильное приложение сможет самостоятельно отделить вес от кода товара и сопоставить позицию в локальной базе данных ТСД.

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

← На главную