В процессе работы с маркированной продукцией в рабочем месте кассира (РМК) конфигурации 1С:Розница 2.3 пользователи часто сталкиваются с неочевидным поведением системы. При сканировании обычного линейного штрихкода (EAN-13) программа открывает удобное компактное окно для быстрого сканирования кода маркировки (DataMatrix). Однако, если товар выбирается вручную через «Подбор» или «Поиск», открывается тяжеловесная «Форма проверки и подбора», которая требует лишних кликов и не всегда удобна для оперативной работы. В этой статье мы подробно разберем, почему так происходит, и предложим несколько вариантов решения этой проблемы — от настройки данных до программной доработки.
Для начала проанализируем ситуацию и выясним причину разного поведения интерфейса. В системе программно заложено два сценария работы с маркировкой:
Если ваша задача — максимально ускорить процесс и вызывать «быстрое» окно даже при ручном выборе, рассмотрим следующие пути решения.
Самый эффективный технический способ — перехватить событие выбора номенклатуры из формы подбора и заставить систему «думать», что произошел скан штрихкода. Для этого мы создадим расширение и добавим обработчик в форму РМК.
Разберем алгоритм по шагам:
ОбработкаВыбора добавляем обработчик с типом вызова «Перед».Рассмотрим пример кода, который реализует данную логику:
&НаКлиенте
Процедура Расш_ОбработкаВыбораПеред(ВыбранноеЗначение, ИсточникВыбора)
Если ТипЗнч(ВыбранноеЗначение) = Тип("Структура") Тогда
Если ВыбранноеЗначение.Свойство("ИмяДействия") Тогда
// Проверяем, что возврат идет именно из формы подбора
Если ВыбранноеЗначение.ИмяДействия = НСтр("ru = 'Подбор номенклатуры'") Тогда
// Формируем структуру, имитирующую данные со сканера
ДанныеСоСканераСтруктура = Новый Структура("Количество, Штрихкод", 1);
// Получаем штрихкод номенклатуры (функция ниже)
ДанныеСоСканераСтруктура.Штрихкод = Расш_ПолучитьШК(ВыбранноеЗначение.Номенклатура);
// Сбрасываем значение, чтобы стандартный механизм подбора не открыл свое окно
ВыбранноеЗначение = Неопределено;
// Вызываем стандартную процедуру обработки кода маркировки
ОбработатьКодМаркировки(ДанныеСоСканераСтруктура);
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецПроцедуры
&НаСервереБезКонтекста
Функция Расш_ПолучитьШК(Номенклатура)
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ ПЕРВЫЕ 1
| Штрихкоды.Штрихкод КАК Штрихкод
|ИЗ
| РегистрСведений.Штрихкоды КАК Штрихкоды
|ГДЕ
| Штрихкоды.Владелец = &Номенклатура
| И Штрихкоды.ТипШтрихкода = ЗНАЧЕНИЕ(ПланВидовХарактеристик.ТипыШтрихкодов.EAN13)";
Запрос.УстановитьПараметр("Номенклатура", Номенклатура);
Выборка = Запрос.Выполнить.Выбрать();
Если Выборка.Следующий() Тогда
Возврат Выборка.Штрихкод;
КонецЕсли;
// Если штрихкода нет, можно сгенерировать внутренний,
// чтобы механизм сопоставления номенклатуры сработал корректно
НовыйШК = ПодключаемоеОборудованиеРТ.СформироватьШтрихкод();
РегШК = РегистрыСведений.Штрихкоды.СоздатьМенеджерЗаписи();
РегШК.Штрихкод = НовыйШК;
РегШК.Владелец = Номенклатура;
РегШК.ТипШтрихкода = ПланыВидовХарактеристик.ТипыШтрихкодов.EAN13;
РегШК.Записать();
Возврат НовыйШК;
КонецФункции
Важно: При использовании этого метода убедитесь, что вы учитываете характеристики номенклатуры, если они используются в вашем учете. В запрос получения штрихкода в таком случае нужно добавить фильтр по Характеристика.
Проанализируем ситуацию, когда штрихкода на товаре нет физически, но есть код маркировки DataMatrix. В каждом коде маркировки зашит GTIN продукта. Система 1С может найти товар в базе напрямую по коду маркировки, минуя этап сканирования EAN-13, если соблюдены следующие условия:
04601234567890).GS1.Если вы добавите GTIN из марки в список штрихкодов товара, кассиру вообще не нужно будет пользоваться кнопкой «Подбор». Достаточно просто отсканировать марку в пустом чеке — 1С сама найдет товар и сразу предложит добавить его в документ. Это «золотой стандарт» работы с маркировкой, исключающий лишние действия.
Если вы не хотите вносить изменения в код программы, существует стандартный способ вызвать нужное окно. Когда товар уже добавлен в чек через ручной подбор, в строке товара появляется значок маркировки (красная или серая буква [M]).
Рассмотрим порядок действий:
Это принудительно вызовет ту самую форму «Уточнения данных», которую вы видите при сканировании штрихкода. Хотя это требует лишнего клика, это быстрее и проще, чем работа в большой форме проверки и подбора.
Часто в обсуждениях упоминается ошибка «Неправильный штрихкод» при попытке сканировать марку в окне подбора (как в Сообщении 5). Проанализируем возможные причины:
1. Отсутствие символа GS1 (FNC1). Код маркировки — это не просто текст, это структура данных. Если сканер настроен как клавиатура (HID), он может заменять невидимый символ-разделитель на пробел или вовсе его удалять. 1С в этом случае не может распознать структуру марки и выдает ошибку. Рекомендуется перевести сканер в режим NativeAPI или COM-эмуляции.
2. Контроль статусов в ГИС МТ. Если в настройках 1С (Администрирование — Настройка номенклатуры — Маркировка) включен жесткий контроль статусов, система блокирует добавление марки, если не может мгновенно получить ответ от «Честного Знака» или если марка не числится на остатках организации в базе. В условиях розничного магазина это может замедлять работу.
3. Версия ФФД. При переходе на ФФД 1.2 логика работы с марками существенно изменилась. Убедитесь, что ваша версия 1С:Розница актуальна (не ниже 2.3.15), так как в старых релизах многие сценарии работы в РМК содержали ошибки сопоставления типов маркировки.
Мы выяснили, что различие в окнах сканирования обусловлено архитектурой 1С. Для комфортной работы у вас есть три пути: внедрение расширения для автоматизации вызова окна, настройка GTIN в карточках товаров для прямого поиска по марке, или обучение кассиров использованию интерактивных иконок маркировки в чеке. Выбор зависит от квалификации технического специалиста и готовности базы к изменениям.