При работе с управляемыми формами 1С программисты и пользователи часто сталкиваются с нюансами навигации между полями ввода. Один из самых частых вопросов: существует ли комбинация клавиш, которая является «антиподом» клавиши Enter? Если Shift + Tab возвращает нас назад при использовании Tab, то что делать, если мы перемещаемся по полям с помощью Enter?
В этой статье мы подробно разберем, как работает механизм перехода по элементам, выясним, почему прямого аналога «обратного Enter» не существует, и проанализируем, как правильно настроить форму для удобства пользователя.
Для начала проанализируем ситуацию: почему Shift + Tab не всегда возвращает нас именно в то поле, из которого мы только что ушли нажатием Enter? Разберем по шагам внутреннюю логику платформы 1С:
ПропускатьПриВводе (SkipOnInput).Рассмотрим подробнее: если у элемента формы установлено свойство «Пропускать при вводе», то при нажатии Enter фокус «перепрыгнет» через это поле, чтобы пользователь не тратил время на неважные данные. Однако клавиша Tab проигнорирует эту настройку и все равно зайдет в это поле. Именно здесь возникает диссонанс: если вы перешли из Поля А в Поле В нажатием Enter (пропустив Поле Б), то нажатие Shift + Tab вернет вас в Поле Б, а не в Поле А.
Вывод: Технического «анти-Enter», который бы учитывал флаг пропуска элементов при движении назад, в платформе 1С не существует. Shift + Tab всегда работает как антипод Tab.
Выясним причину, по которой элементы могут обходиться в «странном» порядке. В обычных формах (7.7 или 8.2) существовал визуальный инструмент настройки порядка обхода. В управляемых формах 1С 8.3 подход изменился.
Рассмотрим, как определяется последовательность перехода:
Порядок обхода в управляемой форме жестко привязан к дереву элементов формы. Фокус перемещается сверху вниз по структуре дерева. Если элементы сгруппированы в группы «Горизонтальная» или «Вертикальная», платформа обходит их слева направо или сверху вниз соответственно, исходя из их положения в иерархии дерева.
Чтобы изменить порядок обхода, выполним следующие действия:
Важный момент: Если вы хотите, чтобы определенное поле никогда не мешало при быстром вводе через Enter, обязательно установите флаг ПропускатьПриВводе в свойствах этого элемента. Это позволит «пролетать» второстепенные поля (например, поясняющие надписи или декоративные элементы).
Проанализируем свойство самой управляемой формы, которое часто забывают разработчики. У корня формы есть свойство «Поведение клавиши Enter» (EnterKeyBehavior). Оно определяет, как будет вести себя форма при нажатии этой клавиши.
Существует два основных режима:
Посмотрим на пример работы с многострочными текстовыми полями. Если фокус находится в поле, где разрешено вводить несколько строк текста, нажатие Enter просто перенесет курсор на новую строку. В этом случае для перехода к следующему полю пользователю придется использовать либо Ctrl + Enter, либо клавишу Tab.
В табличных частях (списках) поведение также специфично:
Иногда разработчики пытаются программно перехватить нажатие клавиш Tab или Shift + Tab, чтобы реализовать свою логику «обратного хода». К сожалению, стандартными средствами встроенного языка 1С (без использования WinAPI или внешних компонент) сделать это невозможно. У элементов формы нет события ПриНажатииКлавиши.
Единственный способ управлять фокусом программно — это использование свойства формы ТекущийЭлемент. Посмотрим на пример кода, как можно принудительно перекинуть фокус при изменении значения:
&НаКлиенте
Процедура ИмяПоляПриИзменении(Элемент)
// Если введено определенное значение, перекидываем пользователя в конкретное поле
Если Объект.ВажноеСвойство = Истина Тогда
ТекущийЭлемент = Элементы.НужноеПолеДляПерехода;
КонецЕсли;
КонецПроцедуры
Однако помните, что такое поведение может раздражать пользователей, если оно нарушает стандартные ожидания от работы интерфейса. Старайтесь придерживаться системной логики 1С: настраивать дерево элементов и флаги пропуска полей.
Подведем итог нашему разбору:
ПропускатьПриВводе.Правильная настройка этих параметров сделает работу пользователя в управляемых формах максимально комфортной и быстрой без необходимости искать скрытые комбинации клавиш.