Как вызвать окно сканирования кода маркировки при ручном подборе товара в 1С:Розница 2.3

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

В процессе работы с маркированной продукцией в рабочем месте кассира (РМК) конфигурации 1С:Розница 2.3 пользователи часто сталкиваются с неочевидным поведением системы. При сканировании обычного линейного штрихкода (EAN-13) программа открывает удобное компактное окно для быстрого сканирования кода маркировки (DataMatrix). Однако, если товар выбирается вручную через «Подбор» или «Поиск», открывается тяжеловесная «Форма проверки и подбора», которая требует лишних кликов и не всегда удобна для оперативной работы. В этой статье мы подробно разберем, почему так происходит, и предложим несколько вариантов решения этой проблемы — от настройки данных до программной доработки.

Анализ проблемы: логика работы РМК

Для начала проанализируем ситуацию и выясним причину разного поведения интерфейса. В системе программно заложено два сценария работы с маркировкой:

  1. Сценарий уточнения данных: Когда вы сканируете штрихкод, система уже точно знает, какую номенклатуру вы выбрали. Ей не хватает только серийного номера (марки). В этом случае вызывается упрощенная модальная форма «Уточнение данных маркировки».
  2. Сценарий проверки и подбора: При ручном подборе через интерфейс система переключается в режим работы со списком маркируемой продукции. Предполагается, что вы можете добавить сразу несколько единиц или проверить уже существующие марки в документе. Поэтому открывается полнофункциональная форма проверки.

Если ваша задача — максимально ускорить процесс и вызывать «быстрое» окно даже при ручном выборе, рассмотрим следующие пути решения.

Решение 1: Программная имитация сканирования (через расширение)

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

Разберем алгоритм по шагам:

  1. Добавляем форму РМК в расширение.
  2. Для события ОбработкаВыбора добавляем обработчик с типом вызова «Перед».
  3. Внутри обработчика проверяем, что выбрана номенклатура, получаем её штрихкод из базы (или генерируем временный) и передаем управление стандартной процедуре обработки сканирования.

Рассмотрим пример кода, который реализует данную логику:


&НаКлиенте
Процедура Расш_ОбработкаВыбораПеред(ВыбранноеЗначение, ИсточникВыбора)
    Если ТипЗнч(ВыбранноеЗначение) = Тип("Структура") Тогда
        Если ВыбранноеЗначение.Свойство("ИмяДействия") Тогда
            // Проверяем, что возврат идет именно из формы подбора
            Если ВыбранноеЗначение.ИмяДействия = НСтр("ru = 'Подбор номенклатуры'") Тогда
                // Формируем структуру, имитирующую данные со сканера
                ДанныеСоСканераСтруктура = Новый Структура("Количество, Штрихкод", 1);
                
                // Получаем штрихкод номенклатуры (функция ниже)
                ДанныеСоСканераСтруктура.Штрихкод = Расш_ПолучитьШК(ВыбранноеЗначение.Номенклатура);
                
                // Сбрасываем значение, чтобы стандартный механизм подбора не открыл свое окно
                ВыбранноеЗначение = Неопределено;
                
                // Вызываем стандартную процедуру обработки кода маркировки
                ОбработатьКодМаркировки(ДанныеСоСканераСтруктура);
            КонецЕсли;
        КонецЕсли;
    КонецЕсли;
КонецПроцедуры

&НаСервереБезКонтекста
Функция Расш_ПолучитьШК(Номенклатура)
    Запрос = Новый Запрос;
    Запрос.Текст = 
        "ВЫБРАТЬ ПЕРВЫЕ 1
        |	Штрихкоды.Штрихкод КАК Штрихкод
        |ИЗ
        |	РегистрСведений.Штрихкоды КАК Штрихкоды
        |ГДЕ
        |	Штрихкоды.Владелец = &Номенклатура
        |	И Штрихкоды.ТипШтрихкода = ЗНАЧЕНИЕ(ПланВидовХарактеристик.ТипыШтрихкодов.EAN13)";
    
    Запрос.УстановитьПараметр("Номенклатура", Номенклатура);
    Выборка = Запрос.Выполнить.Выбрать();
    
    Если Выборка.Следующий() Тогда
        Возврат Выборка.Штрихкод;
    КонецЕсли;
    
    // Если штрихкода нет, можно сгенерировать внутренний, 
    // чтобы механизм сопоставления номенклатуры сработал корректно
    НовыйШК = ПодключаемоеОборудованиеРТ.СформироватьШтрихкод();
    РегШК = РегистрыСведений.Штрихкоды.СоздатьМенеджерЗаписи();
    РегШК.Штрихкод = НовыйШК;
    РегШК.Владелец = Номенклатура;
    РегШК.ТипШтрихкода = ПланыВидовХарактеристик.ТипыШтрихкодов.EAN13;
    РегШК.Записать();
    
    Возврат НовыйШК;
КонецФункции

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

Решение 2: Корректная работа с GTIN и поиск по марке

Проанализируем ситуацию, когда штрихкода на товаре нет физически, но есть код маркировки DataMatrix. В каждом коде маркировки зашит GTIN продукта. Система 1С может найти товар в базе напрямую по коду маркировки, минуя этап сканирования EAN-13, если соблюдены следующие условия:

Если вы добавите GTIN из марки в список штрихкодов товара, кассиру вообще не нужно будет пользоваться кнопкой «Подбор». Достаточно просто отсканировать марку в пустом чеке — 1С сама найдет товар и сразу предложит добавить его в документ. Это «золотой стандарт» работы с маркировкой, исключающий лишние действия.

Решение 3: Использование встроенных иконок статуса

Если вы не хотите вносить изменения в код программы, существует стандартный способ вызвать нужное окно. Когда товар уже добавлен в чек через ручной подбор, в строке товара появляется значок маркировки (красная или серая буква [M]).

Рассмотрим порядок действий:

  1. Подберите товар через поиск (клавиша F7).
  2. Товар добавится в таблицу, но без марки (будет гореть красный значок).
  3. Нажмите на этот значок мышкой или используйте горячие клавиши для перехода к редактированию строки.

Это принудительно вызовет ту самую форму «Уточнения данных», которую вы видите при сканировании штрихкода. Хотя это требует лишнего клика, это быстрее и проще, чем работа в большой форме проверки и подбора.

Технические нюансы: Почему сканирование марки выдает ошибку?

Часто в обсуждениях упоминается ошибка «Неправильный штрихкод» при попытке сканировать марку в окне подбора (как в Сообщении 5). Проанализируем возможные причины:

1. Отсутствие символа GS1 (FNC1). Код маркировки — это не просто текст, это структура данных. Если сканер настроен как клавиатура (HID), он может заменять невидимый символ-разделитель на пробел или вовсе его удалять. 1С в этом случае не может распознать структуру марки и выдает ошибку. Рекомендуется перевести сканер в режим NativeAPI или COM-эмуляции.

2. Контроль статусов в ГИС МТ. Если в настройках 1С (Администрирование — Настройка номенклатуры — Маркировка) включен жесткий контроль статусов, система блокирует добавление марки, если не может мгновенно получить ответ от «Честного Знака» или если марка не числится на остатках организации в базе. В условиях розничного магазина это может замедлять работу.

3. Версия ФФД. При переходе на ФФД 1.2 логика работы с марками существенно изменилась. Убедитесь, что ваша версия 1С:Розница актуальна (не ниже 2.3.15), так как в старых релизах многие сценарии работы в РМК содержали ошибки сопоставления типов маркировки.

Резюме

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

← На главную