Как исправить проблему со сканером штрихкодов при открытии отложенного чека в 1С?

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

В процессе автоматизации рабочих мест кассиров (РМК) в конфигурациях 1С:УНФ или 1С:Розница часто возникает задача реализации функционала отложенных чеков. Однако при стандартной реализации — открытии нового окна с данными чека и закрытии текущего — пользователи сталкиваются с критической проблемой: сканер штрихкодов перестает работать без нажатия клавиши F7 или перезапуска системы. Разберем, почему это происходит и как устранить данную ошибку.

Техническая причина сбоя сканера

Проблема кроется в специфике работы управляемых форм 1С и механизма захвата событий внешнего оборудования. Когда мы закрываем текущую форму и открываем новую, происходит разрыв контекста обработки событий ВнешнееСобытие.

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

Решение 1: Перезаполнение текущего документа вместо открытия нового

Наиболее профессиональный и правильный подход — отказаться от открытия новых окон. Вместо того чтобы закрывать текущую форму, рассмотрим алгоритм «подмены» данных в уже открытом документе. Это позволит сохранить целостность сессии работы со сканером.

  1. Создадим серверную процедуру в модуле текущей формы РМК.
  2. Передадим в эту процедуру ссылку на отложенный документ ЧекККМ.
  3. Используем программное считывание данных из объекта ссылки и перезаполним табличную часть текущего документа Товары.
  4. Вызовем метод Модифицированность = Истина, чтобы форма «поняла», что данные изменились и потребовала обновления интерфейса.

Пример логики обновления данных на сервере:


&НаСервере
Процедура ЗаполнитьЧекИзОтложенного(СсылкаНаОтложенныйЧек)
    ОбъектДокумента = СсылкаНаОтложенныйЧек.ПолучитьОбъект();
    Объект.Товары.Загрузить(ОбъектДокумента.Товары.Выгрузить());
    Объект.Клиент = ОбъектДокумента.Клиент;
    // Обновляем прочие реквизиты
    Модифицированность = Истина;
КонецПроцедуры

При таком подходе форма остается активной, контекст ВнешнееСобытие не разрывается, и сканер продолжает работать в штатном режиме без вмешательства оператора.

Решение 2: Программная установка фокуса ввода

Если архитектурное изменение логики кажется слишком объемным, попробуем принудительно возвращать фокус в поле ввода сканера. Для этого в событии ПриОткрытии новой формы добавим код, который принудительно переводит курсор в поле поиска.


&НаКлиенте
Процедура ПриОткрытии(Отказ)
    // Устанавливаем фокус на поле ввода штрихкода
    ЭтаФорма.ТекущийЭлемент = Элементы.ПолеВводаШтрихкода;
КонецПроцедуры

Однако стоит учитывать, что данный метод не всегда решает проблему с самим подключением компоненты, поэтому первый вариант является более предпочтительным.

Решение 3: Инициализация торгового оборудования

Так как 1С:УНФ базируется на БСП (Библиотеке стандартных подсистем), необходимо проверить, корректно ли вызывается процедура подключения оборудования при открытии формы. Возможно, при создании нового окна не срабатывает процедура инициализации ПодключитьОборудование.

Убедимся, что в процедуре ПриСозданииНаСервере или ПриОткрытии выполняется проверка на наличие активного сканера, и при необходимости принудительно вызываем метод подключения для обеспечения захвата событий.

Рекомендации по реализации

Проанализировав ситуацию, можно сделать вывод: закрытие форм — это антипаттерн для РМК при работе с периферийным оборудованием. Чтобы избежать проблем:

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

← На главную