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

Программист 1С:Розница Управленческий учет Торговля и дистрибуция
← На главную

При работе в программе 1С:Розница 2.3 пользователи часто сталкиваются с ситуацией: в карточке товара задан SKU, в настройках указаны префиксы весового товара, весы печатают этикетку, но при сканировании в РМК система выдает ошибку "Данные по коду не найдены". В этой статье мы подробно проанализируем причины этой проблемы — от ошибок в настройках до программного бага в типовых релизах — и разберем способы их устранения.

Разберем структуру весового штрихкода EAN-13

Прежде чем приступать к исправлению программного кода, давайте проверим, правильно ли сформирован сам штрихкод. Для весового товара в системе 1С принят стандарт разбора 13-значного кода (например, 2100102015501). Давайте посмотрим, из чего он состоит:

  1. Первая цифра (2): Является признаком того, что это внутренний штрихкод предприятия.
  2. Вторая цифра (Префикс): Определяет тип товара (весовой или штучный фасованный). Если в настройках системы указан префикс весового товара "1", то код должен начинаться на "21".
  3. Следующие 5 цифр (например, 00102): Это SKU (код товара). Важно, чтобы количество знаков здесь соответствовало настройке "Верхняя граница диапазона SKU".
  4. Следующие 5 цифр (например, 01550): Вес товара в граммах. В данном примере это 1 кг 550 г.
  5. Последняя цифра (1): Контрольный разряд EAN-13.

Если структура вашего штрихкода отличается, система просто не сможет выделить из него SKU для поиска в базе.

Проверим настройки в административной панели

Рассмотрим по шагам настройки номенклатуры, которые напрямую влияют на поиск. Перейдем в раздел Администрирование — Настройки номенклатуры — Настройки штрихкодирования.

Проанализируем следующие параметры:

Анализируем программную логику поиска (поиск бага)

Теперь перейдем к технической части. Процесс поиска товара при сканировании происходит в общем модуле ПодключаемоеОборудованиеРТ в функции ДанныеПоискаПоШтрихкоду. Давайте разберем, как система "отрезает" части штрихкода, чтобы найти товар.

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


ПрефиксВнутреннегоШтрихкодаВесовогоТовара = ЗначениеНастроекПовтИсп.ПолучитьЗначениеКонстанты("ПрефиксВнутреннегоШтрихкодаВесовогоТовара");
ДлинаКодаВесовогоТовара = СтрДлина(Формат(ЗначениеНастроекПовтИсп.ПолучитьЗначениеКонстанты("ВерхняяГраницаДиапазонаSKUВесовогоТовара"), "ЧГ = 0"));

ПрефиксКода = Лев(Штрихкод, 2);
ПрефиксВесовой = "2" + ПрефиксВнутреннегоШтрихкодаВесовогоТовара;
ЭтоВесовой = (ПрефиксКода = ПрефиксВесовой);

Если ЭтоВесовой Тогда
    // Выделяем SKU из середины штрихкода
    КодТовара = Число(Сред(Штрихкод, 3, ДлинаКодаВесовогоТовара));
    // Выделяем вес (остаток строки до контрольного символа)
    КоличествоТовара = Число(Сред(Штрихкод, 3 + ДлинаКодаВесовогоТовара, 10 - ДлинаКодаВесовогоТовара));
    КоличествоТовара = КоличествоТовара / 1000; // Переводим граммы в килограммы
КонецЕсли;

В некоторых релизах Розницы 2.3 (например, 2.3.6.17) наблюдается программная ошибка: после того как ТекстЗапроса сформирован, система может не выполнить его или не заполнить таблицу результатов поиска, оставляя переменную НеизвестныеДанныеПО в значении Истина. Это приводит к тому, что 1С сообщает о ненахождении данных, хотя SKU в базе существует.

Решение проблемы: Регистр "Коды товаров SKU"

Важно понимать, что поиск весового товара ведется не по полю "Код" в справочнике Номенклатура, а по регистру сведений КодыТоваровSKU. Выясним причину, по которой товар может не находиться, даже если код кажется верным:

  1. Зайдите в карточку номенклатуры.
  2. Убедитесь, что для товара создан SKU. Если товар ведется по характеристикам, SKU должен быть присвоен каждой конкретной характеристике.
  3. Проверьте, что запись в регистре КодыТоваровSKU действительно существует. Если вы переносили данные из другой программы, этот регистр мог остаться пустым.

Исправление ошибки через официальные патчи и расширения

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

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

2. Использование расширения:
Если оперативное обновление невозможно, мы можем подправить логику поиска через расширение. Нам необходимо перехватить процедуру ДанныеПоискаПоШтрихкоду и убедиться, что запрос к регистру КодыТоваровSKU выполняется корректно. Пример части исправленного запроса, который должен быть выполнен:


Запрос.Текст = 
"ВЫБРАТЬ
|   КодыТоваровSKU.Номенклатура КАК Владелец,
|   КодыТоваровSKU.Характеристика КАК Характеристика,
|   КодыТоваровSKU.Упаковка КАК Упаковка,
|   &КоличествоТовара КАК Количество
|ИЗ
|   РегистрСведений.КодыТоваровSKU КАК КодыТоваровSKU
|ГДЕ
|   КодыТоваровSKU.SKU = &Код";

Запрос.УстановитьПараметр("Код", КодТовара);
Запрос.УстановитьПараметр("КоличествоТовара", КоличествоТовара);
РезультатЗапроса = Запрос.Выполнить();

После выполнения этого запроса необходимо обработать выборку и заполнить структуру ДанныеПоиска. Именно этот этап часто "пропускается" в проблемных релизах.

Дополнительный совет по настройке сканера

Проанализируем ситуацию, когда сканер штрихкодов настроен неверно. Если сканер работает в режиме эмуляции клавиатуры (Keyboard Wedge), он может добавлять лишние символы в начало кода. Попробуйте просканировать штрихкод в обычный текстовый документ (Блокнот). Если перед цифрой "2" появляются какие-то символы или буквы, значит, сканер настроен некорректно и функция 1С Лев(Штрихкод, 2) не может правильно определить префикс.

В таком случае необходимо сбросить настройки сканера до заводских или настроить корректный суффикс (обычно CR - возврат каретки) в драйвере подключаемого оборудования 1С.

← На главную