Как перехватить данные сканера штрихкода в конфигураторе 1С

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

При работе с торговым оборудованием в 1С, особенно в таких конфигурациях, как «1С:Розница», «Управление торговлей» или «ERP», часто возникает необходимость вмешаться в процесс обработки считанного штрихкода. Это может понадобиться для добавления проверки товара, изменения логики поиска в базе или реализации специфических алгоритмов подбора. Рассмотрим подробно, как найти «ту самую» точку входа в коде, где программа получает данные от драйвера сканера.

Метод 1: Использование процедур обработки внешних событий

Исторически и технически работа сканера (если он настроен в режиме эмуляции COM-порта или Native HID) завязана на генерации платформенного события. Разберем, как это работает на уровне программного кода формы. В большинстве случаев первичная обработка происходит в процедуре ВнешнееСобытие.

Проанализируем стандартную структуру этой процедуры. Если вы откроете форму списка номенклатуры или форму чека ККМ, вы наверняка найдете там следующий обработчик:


Процедура ВнешнееСобытие(Источник, Событие, Данные)
    // Параметр "Данные" содержит считанный штрихкод
    // Параметр "Событие" обычно имеет значение "Barcode" или "Штрихкод"
    
    Если Источник = "BarCodeScaner" Тогда // Условие может зависеть от настроек драйвера
        // Здесь начинается логика обработки
        ОбработатьШтрихкод(Данные);
    КонецЕсли;
КонецПроцедуры

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

ВнешнееСобытиеОборудования(Форма, Источник, Событие, Данные)

Эта функция обычно находится в общем модуле МенеджерОборудованияКлиент. Она является универсальным «диспетчером», который принимает сигнал от любого устройства и перенаправляет его в нужную форму. Если вы хотите перехватить штрихкод глобально для всей системы, начинать поиск стоит именно с этого модуля.

Метод 2: Отладка через «Паузу» (Самый быстрый способ)

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

Разберем по шагам алгоритм действий:

  1. Запустите сеанс «1С:Предприятие» и откройте форму, в которой вы собираетесь сканировать штрихкод.
  2. Переключитесь в Конфигуратор.
  3. В верхнем меню выберите пункт Отладка —> Приостановить. Теперь конфигуратор перешел в режим ожидания следующего действия в пользовательском сеансе.
  4. Вернитесь в окно «1С:Предприятие» и просто отсканируйте любой штрихкод.
  5. В этот момент выполнение кода 1С остановится, и Конфигуратор автоматически откроет модуль и строку кода, которая начала обрабатывать данные от сканера.

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

Метод 3: Анализ через Замер производительности

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

Рассмотрим порядок работы с замером:

  1. В Конфигураторе выберите Отладка —> Замер производительности (включите его).
  2. В режиме «Предприятие» выполните одно сканирование штрихкода.
  3. Вернитесь в Конфигуратор и выключите замер тем же пунктом меню.
  4. Перед вами откроется список всех процедур и функций, которые были выполнены. Отсортируйте их по колонке «Количество вызовов» или просто просмотрите список модулей.

Обычно в топе списка вы увидите вызовы из модулей МенеджерОборудованияКлиент, ПодключаемоеОборудованиеРТКлиент или обработчики внутри самой формы. Это самый надежный способ найти скрытую логику в сложных конфигурациях типа «Розница».

Метод 4: Механизм оповещений (ОбработкаОповещения)

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

Цепочка выглядит так: драйвер посылает сигнал -> общий модуль БПО его принимает -> модуль рассылает оповещение всем открытым формам командой Оповестить("ScanData", ПараметрыШтрихкода). В этом случае в форме нужно искать не внешнее событие, а процедуру:


Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник)
    Если ИмяСобытия = "ScanData" Тогда
        // Здесь осуществляется перехват данных
        // Параметр обычно содержит структуру с кодом и типом штрихкода
    КонецЕсли;
КонецПроцедуры

Проблемы с режимом эмуляции клавиатуры

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

Совет: Если ваш сканер работает в режиме клавиатуры, перехватить его через ВнешнееСобытие невозможно. В таких случаях программисты 1С используют свойство формы АвтоматическоеСохранениеДанныхВНастройках или специализированные обработчики ожидания, но правильнее будет перенастроить сканер в режим эмуляции COM-порта с помощью специальных сервисных штрихкодов из инструкции к устройству.

Глобальный поиск для локализации кода

Если вы все еще не уверены, где именно происходит обработка, проанализируем конфигурацию через глобальный поиск (Ctrl+Shift+F). Попробуем поискать следующие ключевые слова:

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

← На главную