Как обработать нажатие клавиши Enter в управляемой форме 1С без изменения поля ввода?

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

При разработке интерфейсов для терминалов сбора данных (ТСД) или форм быстрого ввода в платформе 1С:Предприятие часто возникает задача: форма открывается с уже заполненным значением (например, количеством товара), поле делается активным, а оператору нужно лишь подтвердить данные нажатием клавиши Enter.

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

Причина поведения платформы

Разберем логику работы платформы 1С при обработке ввода:

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

Решение 1. Использование кнопки по умолчанию (Рекомендуемый способ)

Проанализируем наиболее простое и эффективное решение. Чтобы перехватить нажатие клавиши Enter на форме, создадим команду формы, поместим её кнопкой на форму и сделаем кнопкой по умолчанию.

Выполним следующие шаги:

  1. В редакторе формы перейдем на вкладку Команды и создадим новую команду, например, ПодтвердитьВвод.
  2. Назначим для команды обработчик событий Действие на клиенте.
  3. Перетащим созданную команду в элементы формы (например, в командную панель или непосредственно на форму).
  4. В свойствах созданной кнопки установим флаг КнопкаПоУмолчанию в значение Истина.

Пример кода обработки действия команды:


&НаКлиенте
Процедура ПодтвердитьВвод(Команда)
    
    // Выполняем необходимые действия и закрываем форму с передачей введенного значения
    Закрыть(ЭтаФорма.ВведенноеКоличество);
    
КонецПроцедуры

Важное замечание о видимости элементов:

Нельзя скрывать кнопку с помощью установки свойства Видимость = Ложь. Если кнопка невидима на форме, платформа 1С отключает её обработку, и нажатие клавиши Enter отрабатывать не будет. Если кнопку необходимо сделать незаметной для пользователя, можно разместить её в командной панели формы или настроить минимальные размеры и компактный лаконичный дизайн.

Решение 2. Использование режима выбора из списка

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

Для поля ввода можно включить режим выбора из списка. В этом случае при нажатии Enter платформа активирует выбор, что инициирует событие ОбработкаВыбора.

  1. В свойствах поля ввода установим параметр РежимВыбораИзСписка в значение Истина.
  2. При открытии формы закроем или заполним СписокВыбора нужным значением.
  3. Назначим обработчик события ОбработкаВыбора для поля ввода.

Пример программного заполнения при открытии формы:


&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    
    Если Параметры.Свойство("Количество") Тогда
        ЭтаФорма.ВведенноеКоличество = Параметры.Количество;
        
        // Добавляем значение в список выбора элемента формы
        Элементы.ВведенноеКоличество.СписокВыбора.Очистить();
        Элементы.ВведенноеКоличество.СписокВыбора.Добавить(Параметры.Количество);
    КонецЕсли;
    
КонецПроцедуры

Пример клиентского обработчика выбора:


&НаКлиенте
Процедура ВведенноеКоличествоОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка)
    
    СтандартнаяОбработка = Ложь;
    Закрыть(ВыбранноеЗначение);
    
КонецПроцедуры

Решение 3. Использование горячих клавиш (Сочетания клавиш)

Если работа выполняется на специализированных устройствах (ТCД) или стандартной клавиатуре, для команды подтверждения можно установить свойство СочетаниеКлавиш (например, Ctrl + Enter или Shift + Enter).

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

← На главную