Как реализовать обработку нажатия клавиши F7 и работу со сканером штрихкодов в 1С

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

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

Способ 1. Использование команд формы и «горячих клавиш»

Если ваша задача заключается именно в том, чтобы по нажатию F7 открывалось модальное окно или запускалась конкретная процедура, самым простым и правильным методом для управляемых форм будет использование команд. В отличие от систем низкого уровня (например, .NET), где вы перехватываете событие нажатия клавиши KeyPress или KeyDown, в 1С логика строится вокруг команд интерфейса.

Рассмотрим пошагово, как это реализовать:

  1. Откроем форму вашей внешней обработки в конфигураторе.
  2. Перейдем на закладку Команды.
  3. Создадим новую команду, назовем ее, например, ОбработатьНажатиеF7.
  4. В свойствах команды найдем пункт Сочетание клавиш. Нажмем на кнопку выбора и нажмем F7 на клавиатуре.
  5. Назначим команде действие (создадим процедуру на клиенте).
  6. Перетащим созданную команду на панель действий формы или в любое удобное место. Если кнопка на форме не нужна визуально, ее можно разместить в командной панели и установить свойство Видимость в значение Ложь (но будьте осторожны: в некоторых версиях платформы невидимые кнопки не обрабатывают горячие клавиши, поэтому лучше использовать размещение в подменю "Еще").

Проанализируем пример кода, который может вызываться этой командой:


&НаКлиенте
Процедура ОбработатьНажатиеF7(Команда)
    // Описываем логику открытия окна ввода
    ПараметрыФормы = Новый Структура("Заголовок", "Введите штрихкод");
    ОткрытьФорму("ОбщаяФорма.ВводШтрихкода", ПараметрыФормы, ЭтаФорма);
КонецПроцедуры

Способ 2. Обработка внешнего события сканера штрихкодов

Теперь рассмотрим более профессиональный подход. Нажатие F7 для ввода штрихкода обычно требуется тогда, когда сканер работает в режиме эмуляции клавиатуры (Keyboard Wedge). В этом режиме сканер просто "выплевывает" символы в активное поле ввода. Однако в 1С реализован гораздо более мощный механизм — ВнешнееСобытие.

Разберем ситуацию: если настроить сканер на работу через драйвер (в режиме эмуляции COM-порта или Native API), нам вообще не придется нажимать никаких клавиш. Как только сканер "пикнет", 1С сама перехватит данные, где бы ни находился фокус. Для этого у формы существует специальный обработчик.

Выясним, как программно обработать такое событие:


&НаКлиенте
Процедура ВнешнееСобытие(Источник, Событие, Данные)
    
    // Источник — это имя устройства, настроенного в системе
    // Событие — тип события (например, "Barcode")
    // Данные — сам считанный штрихкод
    
    Если Событие = "Barcode" Тогда
        Штрихкод = СокрЛП(Данные);
        ПоискТовараПоШтрихкоду(Штрихкод);
    КонецЕсли;
    
КонецПроцедуры

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

Способ 3. Использование программных префиксов

Иногда возникают ситуации, когда мы не можем перевести сканер в режим COM-порта, но хотим автоматизации. В этом случае мы можем запрограммировать сам сканер (с помощью специальных штрихкодов из инструкции к устройству) так, чтобы перед каждым считанным кодом он посылал префикс F7.

Проанализируем, что произойдет в системе:

  1. Пользователь сканирует товар.
  2. Сканер имитирует нажатие клавиши F7.
  3. 1С, перехватив нажатие через команду формы (как в Способе 1), открывает окно ввода.
  4. Сканер передает цифры штрихкода в открывшееся окно.
  5. Сканер передает символ завершения (Suffix), например Enter, и окно закрывается, передавая данные в обработку.

Это надежный "гибридный" метод, который часто спасает в облачных сервисах или при работе через RDP, где проброс портов затруднен.

Сравнение режимов работы: Keyboard vs COM-port

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

1. Режим разрыва клавиатуры:

2. Режим COM-порта (Native API):

Рекомендации по интеграции с БСП

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

  1. В процедуре ПриОткрытии на клиенте вызываем метод подключения сканера:
    
    МенеджерОборудованияКлиент.ПодключитьОборудованиеПоТипу(УникальныйИдентификатор, "СканерШтрихкода");
    
  2. В процедуре ПриЗакрытии обязательно отключаем:
    
    МенеджерОборудованияКлиент.ОтключитьОборудованиеПоТипу(УникальныйИдентификатор, "СканерШтрихкода");
    
  3. Данные будут приходить в процедуру ОповеститьОШтрихкоде, если это предусмотрено логикой БСП вашей версии.

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

← На главную