При разработке и доработке интерфейсов в «1С:Предприятие» разработчики нередко сталкиваются с ситуацией: в конфигураторе в управляемую форму добавляется новая группа с горизонтальной группировкой, в нее переносятся элементы (например, таблицы динамических списков), в окне предварительного просмотра все выглядит правильно, однако при запуске программы в пользовательском режиме элементы по-прежнему отображаются друг под другом или в старом порядке.
Проанализируем механику работы платформы с интерфейсом, выясним, почему возникает подобное расхождение, и подробно разберем все способы решения и предотвращения этой проблемы.
Платформа «1С:Предприятие» при закрытии окон автоматически сохраняет персональные настройки каждого пользователя. К таким настройкам относятся видимость полей, порядок колонок, ширина элементов, а также ручные изменения структуры, сделанные через системный диалог настройки формы. Эти сведения записываются в системную таблицу ХранилищеСистемныхНастроек.
Когда форма открывается, платформа сначала строит структуру элементов из метаданных конфигурации, а затем поверх накладывает сохраненные пользовательские настройки. Если форма уже открывалась пользователем ранее, старый сохраненный слой настроек переопределяет новую компоновку, заданную разработчиком в конфигураторе. Именно поэтому созданные горизонтальные группы или измененный порядок элементов могут игнорироваться.
Разберем самый простой и быстрый способ сбросить устаревшие параметры непосредственно в сеансе пользователя:
После выполнения этих шагов индивидуальный слой настроек удаляется, и форма моментально перестраивается в соответствии со структурой, заданной разработчиком в конфигураторе.
Если конфигурация разработана на базе БСП, а обновленную форму открывают десятки или сотни сотрудников, выполнять сброс вручную под каждой учетной записью нерационально. Рассмотрим, как администратор может очистить настройки централизованно:
В ситуациях, когда необходимо автоматизировать процесс очистки при обновлении информационной базы или выполнить удаление через внешнюю обработку, воспользуемся объектом ХранилищеСистемныхНастроек.
Посмотрим на пример кода, позволяющего сбросить сохраненные настройки конкретной формы для текущего пользователя:
КлючОбъекта = "Справочник.Клиенты.Форма.ФормаЭлемента/НастройкиФормы";
ХранилищеСистемныхНастроек.Удалить(КлючОбъекта, "", Неопределено);
Если необходимо выполнить очистку для конкретного пользователя базы данных, передадим его имя третьим параметром:
КлючОбъекта = "Справочник.Клиенты.Форма.ФормаЭлемента/НастройкиФормы";
ИмяПользователя = "ИвановИИ";
ХранилищеСистемныхНастроек.Удалить(КлючОбъекта, "", ИмяПользователя);
Если настройки формы сброшены к стандартным, но две таблицы все равно не встают рядом по горизонтали, причина заключается в правилах компоновки управляемого интерфейса. Проанализируем ключевые свойства элементов:
Горизонтальная если возможно, платформа автоматически перенесет вложенные элементы на новую строку (друг под друга), как только посчитает, что они не помещаются в видимую область по ширине. Чтобы жестко зафиксировать расположение колонок в одну строку, изменим значение свойства на Горизонтальная всегда.ПоложениеКоманднойПанели в значение Нет, перенеся только критически важные команды в общую панель формы.Ширина (например, одинаковое для обоих списков) и проверить активность флага РастягиватьПоГоризонтали, чтобы платформа пропорционально распределила рабочее пространство экрана.Если структура формы была изменена с помощью механизма динамического обновления (без перезапуска сервера и сеансов), платформа может продолжать использовать устаревшее кэшированное описание интерфейса. В таком случае рекомендуется:
/ClearCache.AppData\Local\1C\1cv8 и AppData\Roaming\1C\1cv8).Чтобы пользователи случайно не нарушали заданную разработчиком компоновку формы, можно ограничить возможность интерактивного редактирования интерфейса:
ПользовательскаяВидимость, сняв флаги изменения для конкретных ролей или профилей групп доступа.