К статье
Практический материал

Разработка и Конфигурация · 11 мин

Настройка порядка обхода элементов в управляемой форме 1С

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

Порядок обхода элементов определяет, в какой последовательности пользователь перемещается по полям управляемой формы клавишами Tab и Shift+Tab. От этого напрямую зависит скорость ввода данных: если курсор «прыгает» по экрану в произвольном порядке, операторы ошибаются, тратят время на мышь и пропускают обязательные поля.

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

Ниже разобраны все доступные механизмы: от декларативной настройки в конфигураторе до программного управления обходом из кода формы, а также способы проверить результат и типичные ошибки, которые ломают логику ввода.

Как платформа строит порядок обхода по умолчанию

Автоматический порядок обхода определяется двумя факторами: положением элемента в дереве элементов формы и настройками групп, в которые он входит. Платформа обходит форму сверху вниз, а внутри групп — в соответствии со свойством группы Группировка: вертикально или горизонтально.

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

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

Настройка порядка через структуру дерева элементов

Самый надёжный способ изменить порядок — переставить элементы в дереве формы в конфигураторе. Откройте форму, в панели элементов перетащите поля мышью или используйте кнопки перемещения вверх/вниз. Платформа пересчитает обход автоматически, дополнительных свойств менять не нужно.

Если поля должны визуально располагаться иначе, чем идёт обход, используйте группы. Например, чтобы обход шёл по колонкам «сначала все поля левой колонки, потом правой», создайте горизонтальную группу-контейнер, внутри неё две вертикальные группы и разместите поля в них. Платформа сначала обойдёт всю левую вертикальную группу, затем правую.

При реструктуризации проверяйте, не нарушились ли обработчики ожидания и условное оформление, привязанные к элементам: перемещение в дереве имена элементов не меняет, но меняет родителя, что иногда влияет на наследование свойств доступности и видимости от группы.

Настройка порядка обхода в конфигураторе
  1. 1
    Откройте форму объекта в конфигураторе и перейдите на вкладку с деревом элементов
  2. 2
    Определите желаемую последовательность обхода и нарисуйте её на макете
  3. 3
    Перетащите элементы в нужные позиции дерева или перераспределите их по группам
  4. 4
    Проверьте свойство Группировка у контейнерных групп: вертикальная или горизонтальная
  5. 5
    Запустите форму в режиме предприятия и пройдите все поля клавишей Tab
  6. 6
    Убедитесь, что курсор движется по задуманному маршруту, включая табличные части

Свойство «ПропускатьПриВходе» и исключение полей из обхода

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

Свойство доступно и программно: Элементы.Комментарий.ПропускатьПриВходе = Истина;. Так можно динамически исключать поля из обхода в зависимости от состояния документа — например, пропускать поля доставки, если выбран самовывоз.

Элементы с отключённой доступностью (Доступность = Ложь) и невидимые элементы в обходе не участвуют автоматически. Это второй способ управления маршрутом: управляя доступностью групп, вы фактически переключаете целые ветки обхода.

Программное управление обходом из кода формы

Когда декларативных средств недостаточно, порядком управляют из кода. Основной инструмент — свойство формы ТекущийЭлемент. Присвоив ему нужный элемент, вы принудительно перемещаете фокус: ЭтаФорма.ТекущийЭлемент = Элементы.Контрагент;. Типичный сценарий — после обработки выбора в поле переводить курсор не на следующее по дереву поле, а на логически следующее.

Второй механизм — обработчик ПриАктивизации у полей ввода. В нём можно проверить условие и перенаправить фокус. Однако злоупотреблять этим не стоит: перенаправления внутри ПриАктивизации могут создавать циклы, когда два поля «перекидывают» фокус друг на друга, и форма зависает в бесконечном цикле активаций.

Для табличных частей полезны методы Активизировать и работа с текущей колонкой через ТекущийЭлемент.ТекущийЭлемент — так после добавления строки можно сразу ставить курсор в нужную колонку новой строки, а не в первую по порядку.

Порядок обхода в табличных частях и динамических списках

В таблицах формы обход идёт по колонкам в порядке их следования в дереве элементов. Чтобы изменить последовательность, переставьте колонки в конфигураторе — пользовательские настройки порядка колонок влияют на отображение, но логика обхода при вводе новой строки опирается на структуру формы.

При окончании редактирования последней колонки строки платформа по умолчанию может перейти на следующую строку или завершить ввод — поведение зависит от настроек таблицы и режима редактирования. Если требуется, чтобы после последней колонки создавалась новая строка, это реализуется обработчиком ПриОкончанииРедактирования с программным добавлением строки.

Для динамических списков ручной ввод недоступен, поэтому порядок обхода там важен только для навигации. Актуальным остаётся расположение самого списка относительно полей отборов: размещайте элементы отбора выше списка в дереве, чтобы пользователь сначала попадал в отборы, а затем в список.

Способы управления порядком обхода

Перестановка в дереве элементов

Основной способ. Надёжен, виден в конфигураторе, не требует кода. Не подходит для динамических сценариев.

Группы с настройкой Группировка

Позволяет разделить визуальную компоновку и маршрут обхода. Требует аккуратного проектирования структуры.

ПропускатьПриВходе

Исключает отдельные поля из обхода, работает и программно. Не защищает поле от правки мышью.

Управление Доступностью

Динамически переключает целые ветки обхода по условиям. Требует продуманной логики включения/отключения.

ТекущийЭлемент в коде

Полный программный контроль переходов. Риск зацикливания, сложнее сопровождать.

Проверка результата и типичные ошибки

Проверяйте порядок обхода только в режиме предприятия, в толстом или тонком клиенте: откройте форму, установите курсор в первое поле и пройдите всю форму клавишей Tab, фиксируя маршрут. Затем повторите в обратную сторону через Shift+Tab — маршруты должны быть зеркальными.

Отдельно проверьте сценарии с динамически меняющейся доступностью: заполните поле-переключатель, убедитесь, что отключённые поля выпали из обхода, а после обратного переключения вернулись на свои позиции. Проверьте добавление строки в табличную часть с клавиатуры без мыши.

Частая ошибка — поле визуально находится в одном месте, а в дереве элементов в другом, потому что его перетащили мышью в редакторе формы без контроля дерева. Вторая типичная ошибка — вложенные горизонтальные группы внутри горизонтальных, из-за чего обход идёт «зигзагом», неожиданным для пользователя. Третья — программная активация элемента, который в этот момент недоступен, что даёт ошибку выполнения.

Типичные ошибки
01
Настройка обхода только мышью в редакторе формы без контроля дерева элементов — визуальный порядок расходится с фактическим обходом
02
Установка ТекущийЭлемент на недоступный или невидимый элемент — ошибка выполнения в момент активации
03
Перенаправление фокуса в ПриАктивизации без защитного условия — зацикливание и зависание формы
04
Исключение обязательных полей из обхода через ПропускатьПриВходе — пользователи забывают их заполнять, документ не проводится
05
Проверка обхода только клавишей Tab без Shift+Tab — обратный маршрут остаётся непротестированным

Ограничения и границы механизма

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

Веб-клиент и мобильный клиент могут обрабатывать фокус с особенностями: на мобильных устройствах классический обход Tab заменяется экранной навигацией, и тонкая настройка порядка теряет смысл. Если форма предназначена для мобильной работы, ориентируйтесь на вертикальную компоновку и автозаполнение, а не на клавиатурный обход.

Изменения порядка обхода — это изменение конфигурации или расширения. Перед правкой типовой формы оцените, не проще ли решить задачу расширением: перестановка элементов в расширении поддерживается и снижает стоимость будущих обновлений.

Итог

Что важно запомнить

Порядок обхода в управляемой форме 1С определяется деревом элементов и группировкой групп; точечные корректировки делаются свойством ПропускатьПриВходе, управлением доступностью и программной установкой ТекущийЭлемент. Результат проверяется проходом формы клавишами Tab и Shift+Tab в режиме предприятия, включая табличные части и сценарии с динамической доступностью.

Частые вопросы

Можно ли задать порядок обхода числовыми индексами, как TabOrder в других средах?

Нет, в управляемых формах 1С такого свойства нет. Порядок определяется положением элемента в дереве формы и настройками групп. Произвольный маршрут, не совпадающий с компоновкой, реализуется только программными перенаправлениями через ТекущийЭлемент.

Почему курсор пропускает нужное поле при нажатии Tab?

Три типовые причины: у поля установлено свойство ПропускатьПриВходе, поле недоступно (Доступность = Ложь) или невидимо. Проверьте эти свойства в конфигураторе и в коде — доступность часто меняется динамически в обработчиках формы.

Как после добавления строки в табличную часть поставить курсор в нужную колонку?

В обработчике после добавления строки установите текущим элементом таблицу, а затем назначьте текущую колонку через свойство ТекущийЭлемент таблицы, указав элемент нужной колонки. Это стандартный приём для ускорения построчного ввода.

Влияет ли пользовательская настройка порядка колонок таблицы на обход при вводе?

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

Можно ли изменить порядок обхода типовой формы без снятия её с поддержки?

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

Как проверить, что перенаправление фокуса не создало цикл?

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