Почему в управляемой форме меняется порядок элементов в горизонтальной группе и как это исправить?

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

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

Выясним причину нарушения порядка элементов

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

Также на позиционирование влияют и другие факторы:

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

Способ 1. Интерактивный сброс настроек формы пользователем

Разберем по шагам самое быстрое решение, когда с проблемой сталкивается конкретный разработчик или пользователь в процессе тестирования:

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

Способ 2. Централизованная очистка настроек пользователей администратором

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

  1. Перейдем в раздел Администрирование — Настройки пользователей и прав.
  2. Откроем пункт Очистка настроек.
  3. В открывшемся окне переключим тумблер в режим очистки настроек для выбранных пользователей или для всех сразу.
  4. В списке объектов найдем требуемую форму документа и выполним очистку.

Для автоматизации этой процедуры (например, при выполнении обработчиков обновления информационной базы) применим программную очистку через объект ХранилищеСистемныхНастроек:


// Очистка настроек конкретной формы для всех пользователей
КлючОбъекта = "Документ.ОтчетОРозничныхПродажах.Форма.ФормаДокумента/НастройкиФормы";
ХранилищеСистемныхНастроек.Удалить(КлючОбъекта, "", Неопределено);

Способ 3. Программная фиксация расположения элементов формы

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


&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    
    // Принудительно перемещаем левую подгруппу в начало родительской группы перед правой
    Элементы.Переместить(Элементы.ГруппаЛевая, Элементы.ГруппаРодительская, Элементы.ГруппаПравая);
    
КонецПроцедуры

Метод коллекции Элементы.Переместить() принимает три параметра: перемещаемый элемент, целевую группу-родителя и элемент, перед которым необходимо расположить перемещаемый объект. Это позволяет зафиксировать порядок элементов при каждом открытии окна.

Способ 4. Корректировка свойств компоновки и защита от изменений

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

  1. Свойство «Группировка»: убедимся, что у родительской группы установлено строгое значение Горизонтальная, а не Горизонтальная если возможно, чтобы исключить адаптивный перенос блоков по вертикали.
  2. Свойство «Изменение состава и порядка»: установим у родительской группы значение Запретить. Это заблокирует пользователям возможность перетаскивать или менять местами колонки через меню «Изменить форму».
  3. Выравнивание и растягивание: для левой группы зададим свойство ГоризонтальноеПоложениеВГруппе в значение Лево, для правой — Право, а для родительской группы включим флаг РастягиватьПоГоризонтали. Это обеспечит предсказуемое распределение ширины между списком и областью просмотра изображения.
← На главную