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

В этой статье разберём все доступные методы настройки порядка обхода: от стандартных свойств элементов до программного управления через УправляемаяФорма. Особое внимание уделим типичным ошибкам, которые приводят к "зацикливанию" фокуса или пропуску критичных полей. Материал актуален для платформы 1С:Предприятие 8.3 (включая последние релизы 2026 года) и применим ко всем конфигурациям на её основе — от Бухгалтерии 3.0 до ERP 2.5.

📊 Какой метод настройки порядка обхода вы используете чаще?
Свойство "ПорядокОбхода" в конструкторе
Программное управление через обработчики
Автоматическая расстановка по координатам
Не настраиваю — использую порядок по умолчанию

1. Стандартное свойство "ПорядокОбхода" в конструкторе формы

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

Чтобы настроить порядок:

  • 📌 Откройте форму в режиме редактирования (Конфигуратор → Объекты → Управляемые формы).
  • 🔧 Выделите нужный элемент (поле ввода, кнопку, таблицу) и в панели свойств найдите параметр ПорядокОбхода.
  • 📝 Задайте уникальные числовые значения для всех элементов, которые должны участвовать в обходе. Например: 10 для поля "Контрагент", 20 для "Договор", 30 для таблицы товаров.
  • 🔄 Используйте шаг в 10 единиц — это позволит впоследствии вставлять промежуточные элементы без пересчёта всех значений.

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

💡

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

2. Программное управление порядком через методы формы

Когда стандартных средств недостаточно (например, порядок обхода должен динамически меняться в зависимости от ролей пользователя или заполненности полей), на помощь приходит программное управление. Основные методы:

  • 🖥️ УстановитьПорядокОбхода() — позволяет переопределить порядок для конкретного элемента в рантайме.
  • 🔄 ПолучитьЭлементыПорядкаОбхода() — возвращает массив элементов в текущем порядке обхода.
  • 📋 ОбновитьПорядокОбхода() — принудительно пересчитывает порядок после динамических изменений.

Пример кода для динамического изменения порядка в обработчике события ПриСозданииНаСервере:

Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)

// Меняем порядок обхода в зависимости от роли пользователя

Если ТекущийПользователь().Роли.Найти("МенеджерПоПродажам") <> Неопределено Тогда

ЭлементыФормы.Контрагент.ПорядокОбхода = 10;

ЭлементыФормы.ТаблицаТоваров.ПорядокОбхода = 20;

ЭлементыФормы.УсловияОплаты.ПорядокОбхода = 30;

Иначе

// Для других ролей другой порядок

ЭлементыФормы.УсловияОплаты.ПорядокОбхода = 10;

КонецЕсли;

// Принудительно обновляем порядок

ОбновитьПорядокОбхода();

КонецПроцедуры

Обратите внимание: программные изменения порядка обхода не сохраняются при повторном открытии формы — их нужно применять при каждом создании экземпляра формы. Также избегайте частых вызовов ОбновитьПорядокОбхода() в циклах — это может привести к зависанию интерфейса.

Что делать если порядок обхода сбрасывается после обновления конфигурации?

При обновлении конфигурации через Конфигуратор все программные настройки порядка обхода, сделанные в модуле формы, сохранятся. Однако если вы изменяли порядок непосредственно в свойствах элементов (через конструктор), эти изменения могут быть перезаписаны, если форма была модифицирована в новой версии конфигурации. Всегда фиксируйте критичные настройки в коде модуля формы.

3. Автоматическая расстановка по координатам элементов

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

Чтобы включить автоматическую расстановку:

  1. Откройте форму в конструкторе.
  2. В свойствах формы найдите параметр АвтоПорядокОбхода и установите значение Истина.
  3. Убедитесь, что у элементов не задано явное значение ПорядокОбхода (или оно равно 0).

Система будет обходить элементы в следующем порядке:

  1. Слева направо в пределах одной строки.
  2. Сверху вниз по строкам.
  3. Для вложенных контейнеров (например, групп) сначала обходятся элементы контейнера, затем сам контейнер.

Убедиться, что у элементов не задан явный ПорядокОбхода|Проверить визуальное расположение элементов (слева-направо, сверху-вниз)|Отключить свойство АвтоПорядокОбхода для элементов, которые должны обходиться вручную|Протестировать переход по Tab в пользовательском режиме-->

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

4. Особенности обхода в группах и таблицах

Элементы, размещённые внутри групп (ГруппаФормы) или страниц (Страница), обходятся по специальным правилам:

  • 📁 Группы: сначала обходятся все элементы внутри группы в порядке их ПорядокОбхода, затем фокус переходит к следующему элементу за пределами группы.
  • 📄 Страницы: каждая страница имеет свой независимый порядок обхода. Переход между страницами осуществляется только программно или через элементы управления (например, кнопки "Далее/Назад").
  • 📊 Таблицы: ячейки таблицы обходятся построчно слева направо. Чтобы перейти к следующему элементу формы после таблицы, используйте свойство ПорядокОбхода для самой таблицы.

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

// В модуле формы

Процедура ПриОткрытии()

// Настраиваем порядок обхода для элементов на первой странице

ЭлементыФормы.Страница1.Элементы.Контрагент.ПорядокОбхода = 10;

ЭлементыФормы.Страница1.Элементы.Договор.ПорядокОбхода = 20;

// На второй странице свой порядок

ЭлементыФормы.Страница2.Элементы.ТаблицаТоваров.ПорядокОбхода = 10;

ЭлементыФормы.Страница2.Элементы.Комментарий.ПорядокОбхода = 20;

ОбновитьПорядокОбхода();

КонецПроцедуры

Для таблиц дополнительно можно управлять порядком обхода внутри ячеек с помощью свойства ПорядокОбходаКолонок, которое задаёт последовательность перехода между колонками при нажатии Tab.

💡

Если в таблице включен режим редактирования (AllowEdit = Истина), порядок обхода колонок будет определяться их визуальным расположением, если не задан явный ПорядокОбходаКолонок.

5. Типичные ошибки и их решения

Даже опытные разработчики сталкиваются с проблемами при настройке порядка обхода. Вот наиболее распространённые ошибки и способы их исправления:

Ошибка Причина Решение
Фокус "зацикливается" на одном элементе У элемента задан одинаковый ПорядокОбхода с предыдущим элементом, или значение не уникально Проверить уникальность значений ПорядокОбхода для всех элементов формы
Элементы пропускаются при обходе Свойство ТолькоПросмотр или Видимость установлено в Ложь Убедиться, что элемент видим и доступен для редактирования
Порядок обхода сбрасывается после обновления формы Изменения сделаны только в конструкторе, а не зафиксированы в коде модуля Перенести настройки в обработчик ПриСозданииНаСервере
Не работает переход между страницами Отсутствуют обработчики для кнопок переключения страниц Добавить программную логику для смены активной страницы

Ещё одна частая проблема — конфликт между ручным и автоматическим порядком обхода. Если у формы включено свойство АвтоПорядокОбхода=Истина, но при этом у некоторых элементов явно задан ПорядокОбхода, система будет использовать явные значения, а остальные элементы обойдёт по координатам. Это может привести к хаотичному переходу между полями.

💡

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

6. Продвинутые сценарии: динамический порядок обхода

В сложных бизнес-процессах порядок обхода может зависеть от:

  • 👤 Роли пользователя (например, менеджеры видят сначала поле "Скидка", а кладовщики — "Место хранения").
  • 📄 Статуса документа (в черновике обходятся одни поля, в проведённом — другие).
  • 🔄 Логики заполнения (если выбрано "Оплата наличными", поле "Банковский счёт" пропускается).

Для реализации таких сценариев используйте комбинацию:

  1. Обработчик ПриСозданииНаСервере для первоначальной настройки.
  2. Обработчики событий элементов (например, ПриИзменении для поля "ТипОплаты") для динамических изменений.
  3. Метод УстановитьДействие() для управления доступностью элементов.

Пример динамического изменения порядка в зависимости от типа оплаты:

Процедура ТипОплатыПриИзменении(Элемент)

Если Элемент.Значение = Перечисления.ТипыОплат.БезналичныйРасчет Тогда

ЭлементыФормы.БанковскийСчет.ПорядокОбхода = 25;

ЭлементыФормы.БанковскийСчет.Видимость = Истина;

Иначе

ЭлементыФормы.БанковскийСчет.ПорядокОбхода = 0; // Пропускаем

ЭлементыФормы.БанковскийСчет.Видимость = Ложь;

КонецЕсли;

ОбновитьПорядокОбхода();

КонецПроцедуры

Для оптимизации производительности избегайте частого вызова ОбновитьПорядокОбхода(). Вместо этого группируйте изменения и применяйте их единовременно, например, в обработчике ПриАктивизацииСтраницы.

💡

При динамическом изменении порядка обхода не забывайте синхронизировать видимость и доступность элементов. Скрытый элемент (Видимость=Ложь) автоматически исключается из обхода, даже если у него задан ПорядокОбхода.

7. Тестирование и отладка порядка обхода

Перед выпуском формы в продуктивную эксплуатацию обязательно протестируйте порядок обхода в следующих сценариях:

  • 🖥️ Клавиатурный ввод: проверьте переход по Tab и Shift+Tab.
  • 🖱️ Мышь: убедитесь, что клик по элементу не сбивает последовательность.
  • 📱 Тач-интерфейс (если используется): тестируйте на планшетах с 1С:Мобильной платформой.
  • 🔄 Динамические изменения: имитируйте смену ролей или статусов документа.

Для отладки используйте:

  • 🐞 Режим отладки в Конфигураторе: установите точки останова в обработчиках, связанных с порядком обхода.
  • 📝 Журнал регистрации: записывайте события изменения фокуса через ЗаписатьЖурналРегистрации().
  • 🔍 Инспектор формы: в пользовательском режиме нажмите Ctrl+Shift+I для анализа свойств элементов.

Типичная ошибка при тестировании — проверка только "счастливого пути". Обязательно моделируйте:

  • 🚫 Отсутствие прав у пользователя на редактирование отдельных полей.
  • ⚠️ Ошибки валидации (например, некорректный ИНН контрагента).
  • 🔄 Изменение размера формы (проверьте, не ломается ли порядок при масштабировании).
Как проверить порядок обхода без запуска 1С?

В Конфигураторе откройте форму в режиме предварительного просмотра (F5). Нажмите Tab — порядок перехода будет соответствовать текущим настройкам. Однако динамические изменения (через код) в этом режиме не отработают.

FAQ: Частые вопросы по настройке порядка обхода

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

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

Если ТипКлиентскогоПриложения() = ТипКлиентскогоПриложения.ТолстыйКлиент Тогда

// Порядок для десктопа

ЭлементыФормы.Элемент1.ПорядокОбхода = 10;

Иначе

// Порядок для мобильного

ЭлементыФормы.Элемент1.ПорядокОбхода = 20;

КонецЕсли;

Учтите, что в мобильном клиенте могут быть ограничения на количество одновременно видимых элементов.

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

Это может быть связано с изменениями в алгоритме автоматической расстановки порядка (свойство АвтоПорядокОбхода). В новых версиях платформы (начиная с 8.3.20) приоритет отдаётся явным настройкам ПорядокОбхода над координатными. Решение:

  1. Проверьте, не сбросились ли значения ПорядокОбхода у элементов.
  2. Обновите конфигурацию до актуальной версии и пересохраните форму.
  3. Если используете АвтоПорядокОбхода, отключите его и настройте порядок вручную.
Как сделать так, чтобы определенные элементы всегда пропускались при обходе?

Есть три способа:

  1. Установить ПорядокОбхода = 0 (элемент будет пропущен).
  2. Скрыть элемент (Видимость = Ложь).
  3. Сделать элемент неактивным (Доступность = Ложь).

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

Можно ли настроить порядок обхода для элементов внутри таблицы?

Да, для этого используйте свойство ПорядокОбходаКолонок у элемента ТаблицаФормы. Пример:

ЭлементыФормы.ТаблицаТоваров.ПорядокОбходаКолонок.Добавить("Номенклатура", 10);

ЭлементыФормы.ТаблицаТоваров.ПорядокОбходаКолонок.Добавить("Количество", 20);

ЭлементыФормы.ТаблицаТоваров.ПорядокОбходаКолонок.Добавить("Цена", 30);

Если свойство не задано, колонки будут обходиться в порядке их отображения слева направо.

Как отладить порядок обхода в расширении конфигурации?

При работе с расширениями:

  1. Используйте механизм ПереопределениеМодуля для модификации обработчиков формы.
  2. Проверяйте конфликты с основной конфигурацией через СравнитьКонфигурации().
  3. Для динамических изменений порядка обхода используйте обработчик ПриОткрытии в модуле расширения:
&НаКлиенте

Процедура ДокументОбъектПриОткрытии(Форма)

Форма.ЭлементыФормы.МойЭлемент.ПорядокОбхода = 15;

Форма.ОбновитьПорядокОбхода();

КонецПроцедуры

💡

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