При разработке интерфейсов для терминалов сбора данных (ТСД) или форм быстрого ввода в платформе 1С:Предприятие часто возникает задача: форма открывается с уже заполненным значением (например, количеством товара), поле делается активным, а оператору нужно лишь подтвердить данные нажатием клавиши Enter.
Однако на управляемых формах стандартные события элемента управления, такие как ОбработкаВыбора, ПриИзменении или ОкончаниеВводаТекста, не срабатывают, если пользователь просто нажал клавишу ввода, не меняя значение в поле. Рассмотрим, почему так происходит и как правильно решить эту проблему.
Разберем логику работы платформы 1С при обработке ввода:
ПриСозданииНаСервере), платформа считает, что пользователь не совершал интерактивных действий. Событие ПриИзменении вызывается только при фактическом редактировании текста или числа.ОбработкаВыбора вызывается только тогда, когда выполняется явный выбор из списка или формы выбора. При обычном нажатии клавиши Enter в поле ввода выбор не происходит.Проанализируем наиболее простое и эффективное решение. Чтобы перехватить нажатие клавиши Enter на форме, создадим команду формы, поместим её кнопкой на форму и сделаем кнопкой по умолчанию.
Выполним следующие шаги:
ПодтвердитьВвод.Действие на клиенте.Истина.Пример кода обработки действия команды:
&НаКлиенте
Процедура ПодтвердитьВвод(Команда)
// Выполняем необходимые действия и закрываем форму с передачей введенного значения
Закрыть(ЭтаФорма.ВведенноеКоличество);
КонецПроцедуры
Важное замечание о видимости элементов:
Нельзя скрывать кнопку с помощью установки свойства Видимость = Ложь. Если кнопка невидима на форме, платформа 1С отключает её обработку, и нажатие клавиши Enter отрабатывать не будет. Если кнопку необходимо сделать незаметной для пользователя, можно разместить её в командной панели формы или настроить минимальные размеры и компактный лаконичный дизайн.
Рассмотрим альтернативный вариант, если логика работы требует использования именно событий самого поля ввода.
Для поля ввода можно включить режим выбора из списка. В этом случае при нажатии Enter платформа активирует выбор, что инициирует событие ОбработкаВыбора.
РежимВыбораИзСписка в значение Истина.СписокВыбора нужным значением.ОбработкаВыбора для поля ввода.Пример программного заполнения при открытии формы:
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
Если Параметры.Свойство("Количество") Тогда
ЭтаФорма.ВведенноеКоличество = Параметры.Количество;
// Добавляем значение в список выбора элемента формы
Элементы.ВведенноеКоличество.СписокВыбора.Очистить();
Элементы.ВведенноеКоличество.СписокВыбора.Добавить(Параметры.Количество);
КонецЕсли;
КонецПроцедуры
Пример клиентского обработчика выбора:
&НаКлиенте
Процедура ВведенноеКоличествоОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
Закрыть(ВыбранноеЗначение);
КонецПроцедуры
Если работа выполняется на специализированных устройствах (ТCД) или стандартной клавиатуре, для команды подтверждения можно установить свойство СочетаниеКлавиш (например, Ctrl + Enter или Shift + Enter).
В случаях, когда сканер ТСД настроен на передачу служебных префиксов и суффиксов, рекомендуется переводить обработку подтверждения на стандартное событие формы ВнешнееСобытие, которое принимает данные от драйвера оборудования независимо от фокуса элементов управления.