Почему изменения расположения элементов управляемой формы не отображаются в режиме 1С:Предприятие?

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

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

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

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

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

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

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

Разберем самый простой и быстрый способ сбросить устаревшие параметры непосредственно в сеансе пользователя:

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

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

Решение 2. Централизованная очистка настроек через Библиотеку стандартных подсистем (БСП)

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

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

Решение 3. Программная очистка настроек через встроенный язык

В ситуациях, когда необходимо автоматизировать процесс очистки при обновлении информационной базы или выполнить удаление через внешнюю обработку, воспользуемся объектом ХранилищеСистемныхНастроек.

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


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

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


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

Нюансы компоновки: когда группировка не срабатывает из-за свойств элементов

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

  1. Значение свойства «Группировка» родительской группы: если у группы установлено значение Горизонтальная если возможно, платформа автоматически перенесет вложенные элементы на новую строку (друг под друга), как только посчитает, что они не помещаются в видимую область по ширине. Чтобы жестко зафиксировать расположение колонок в одну строку, изменим значение свойства на Горизонтальная всегда.
  2. Командные панели таблиц: стандартные командные панели табличных частей и динамических списков имеют большую минимальную ширину из-за обилия кнопок («Создать», «Скопировать», «Изменить», «Удалить» и т. д.). Из-за этого платформа не может уместить две таблицы рядом. Для оптимизации ширины рекомендуется отключить автозаполнение командных панелей, скрыть неиспользуемые стандартные кнопки или установить свойство таблицы ПоложениеКоманднойПанели в значение Нет, перенеся только критически важные команды в общую панель формы.
  3. Ширина и растягивание: для таблиц динамических списков рекомендуется явно задать числовое значение свойства Ширина (например, одинаковое для обоих списков) и проверить активность флага РастягиватьПоГоризонтали, чтобы платформа пропорционально распределила рабочее пространство экрана.

Влияние кэша и динамического обновления конфигурации

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

  1. Перезапустить клиентское приложение с параметром командной строки /ClearCache.
  2. При сохранении проблемы очистить каталоги временных файлов пользователя на локальном компьютере (папки AppData\Local\1C\1cv8 и AppData\Roaming\1C\1cv8).

Как предотвратить сбои структуры формы в будущем

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

  1. На уровне ролей пользователей отключим право Изменение настроек форм, чтобы убрать доступ к пункту «Изменить форму».
  2. В свойствах критически важных групп и элементов формы в конфигураторе настроим свойство ПользовательскаяВидимость, сняв флаги изменения для конкретных ролей или профилей групп доступа.
← На главную