При работе с отраслевыми и доработанными конфигурациями на обычных формах разработчики и пользователи нередко сталкиваются с ситуацией, когда окно документа или справочника открывается с нарушенной геометрией. Поля ввода уезжают за пределы видимости, табличные части сжимаются или, наоборот, оставляют огромные пустые пространства. При этом в конфигураторе форма может выглядеть абсолютно корректно. Разберем по шагам причины такого поведения платформы 1С:Предприятие и рассмотрим способы устранения проблемы.
Проанализируем механику работы обычных форм толстого клиента. Некорректное отображение интерфейса возникает в следующих случаях:
ПриОткрытии) программно создаются новые кнопки, поля или панели через метод ЭлементыФормы.Добавить(), платформа рассчитывает их координаты на лету. Если для нового элемента не заданы жесткие или пропорциональные привязки ко всем четырем сторонам, при первом же изменении размеров окна сетка всей формы разрушается.Панель их границы должны привязываться строго к соответствующей странице этой панели. Привязка к границам самой формы приводит к наложению слоев и сбоям при переключении вкладок.Первое действие, которое необходимо выполнить при обнаружении проблемы на рабочем месте пользователя, — вернуть исходные параметры отображения окна. Рассмотрим, как это сделать:
Если после сброса форма восстановила нормальный вид, проблема была вызвана некорректным кэшем настроек. Если же форма по-прежнему разъезжается при изменении размера окна, причина кроется в коде и привязках элементов.
Для выявления проблемных элементов выполним проверку в среде разработки:
Ctrl + R для перехода в режим предварительного просмотра формы.Если элементы создаются программно в модуле формы или в общем модуле, необходимо явно определить их связи с соседними элементами и границами окна с помощью метода УстановитьПривязку(). Разберем правильный подход к добавлению нового контрола на форму.
Посмотрим на пример корректного создания поля ввода и переопределения привязки зависимой табличной части:
// Добавляем новое поле ввода программно
НовоеПоле = ЭлементыФормы.Добавить(Тип("ПолеВвода"), "ОтраслевойРеквизит", Истина);
НовоеПоле.Лево = ЭлементыФормы.СуществующееПоле.Лево;
НовоеПоле.Ширина = ЭлементыФормы.СуществующееПоле.Ширина;
НовоеПоле.Высота = 19;
НовоеПоле.Верх = ЭлементыФормы.СуществующееПоле.Верх + ЭлементыФормы.СуществующееПоле.Высота + 6;
// Жестко фиксируем границы нового элемента
НовоеПоле.УстановитьПривязку(ГраницаЭлементаУправления.Верх, ЭлементыФормы.СуществующееПоле, ГраницаЭлементаУправления.Низ);
НовоеПоле.УстановитьПривязку(ГраницаЭлементаУправления.Лево, ГраницаЭлементаУправления.Лево);
НовоеПоле.УстановитьПривязку(ГраницаЭлементаУправления.Право, ГраницаЭлементаУправления.Право);
// Корректируем верхнюю привязку элемента, расположенного ниже (например, табличного поля)
ЭлементыФормы.ТабличнаяЧастьТовары.УстановитьПривязку(ГраницаЭлементаУправления.Верх, НовоеПоле, ГраницаЭлементаУправления.Низ);
Разберем параметры метода УстановитьПривязку():
ГраницаЭлементаУправления.Верх, ГраницаЭлементаУправления.Низ, ГраницаЭлементаУправления.Лево, ГраницаЭлементаУправления.Право).Видимость и Доступность.Разделитель. Если на форме присутствуют две связанные динамические таблицы или панели, изменение их пропорций следует организовывать через стандартный разделитель с настроенными режимами свертки.