В практике разработки на управляемых формах 1С:Предприятие 8.3 встречается крайне неприятный визуальный эффект: при каждом повторном открытии формы один из элементов (обычно динамический список или табличная часть) постепенно уменьшается по высоте («схлопывается»). Это происходит до тех пор, пока от элемента не остается узкая полоска в одну строку, что делает работу пользователя невозможной. Проанализируем ситуацию, выясним причины такого поведения платформы и разберем по шагам все доступные способы решения.
Данная проблема является следствием специфического бага платформы, который проявляется в режимах интерфейса «В закладках» или при использовании «Режима совместимости с версией 8.2». Рассмотрим подробнее механизм возникновения ошибки. Когда пользователь закрывает управляемую форму, платформа автоматически сохраняет настройки ее геометрии (ширину, высоту, положение разделителей) в системное хранилище настроек.
В старых режимах отрисовки интерфейса (до появления «Такси») алгоритм расчета высоты при наличии нескольких растягиваемых элементов работает некорректно. При восстановлении формы платформа считывает сохраненную высоту, но из-за особенностей компоновки групп элементов ошибочно «отрезает» несколько пикселей. При следующем закрытии сохраняется уже этот уменьшенный размер. Таким образом, мы получаем прогрессирующую ошибку, которая с каждым циклом открытия-закрытия делает элемент все ниже и ниже.
Самый быстрый и эффективный «костыль», который помог автору темы, — это жесткое ограничение прав платформы на управление размером элемента. Разберем, как это настроить:
ДинамическийСписок (или таблицу), который ведет себя некорректно.Высота в конкретное значение (например, 10 или 15 строк).РастягиватьПоВертикали.Проанализируем этот метод: отключая РастягиватьПоВертикали, мы запрещаем платформе динамически изменять размер элемента в зависимости от размера окна и сохраненных настроек. Элемент всегда будет иметь фиксированную высоту 10, что предотвратит его схлопывание.
Если нам необходимо сохранить возможность растягивания, но при этом гарантировать минимальную высоту при открытии, мы можем принудительно устанавливать параметры в коде. Посмотрим на пример реализации в модуле формы:
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
// Принудительно задаем высоту элемента, игнорируя настройки пользователя
Элементы.ИмяВашегоСписка.Высота = 10;
// В некоторых случаях полезно переключить вариант управления высотой
// (доступно в последних релизах платформы 8.3)
Элементы.ИмяВашегоСписка.ВариантУправленияВысотой = ВариантУправленияВысотой.ИспользоватьСвойствоВысота;
КонецПроцедуры
Использование этого кода в процедуре ПриСозданииНаСервере заставляет интерфейсный движок пересчитывать высоту элемента заново при каждом открытии, игнорируя «испорченные» данные из кэша настроек.
Часто проблема возникает из-за того, что на форме расположены два крупных элемента (например, Табличная часть сверху и Динамический список снизу), и оба имеют свойство РастягиватьПоВертикали = Истина. Платформа в режиме совместимости 8.2 не всегда может корректно распределить доли между ними.
Рассмотрим рекомендации по переработке структуры формы:
ГруппаФормы с видом «Обычная группа» и жестко задать ей высоту.Группировка = Вертикальная.Если вы уже внесли правки в конфигуратор, но у пользователей форма по-прежнему открывается «схлопнутой», это означает, что в их профиле сохранились старые некорректные настройки. Проанализируем, как их очистить:
Это действие удалит записи из системной таблицы настроек, и при следующем открытии форма примет вид, заданный программистом в конфигураторе.
Как отмечают участники обсуждения, режим работы «В закладках» официально считается устаревшим. В новых версиях платформы основные усилия разработчиков направлены на стабилизацию интерфейса «Такси». Если ваша конфигурация позволяет, рекомендуется изменить режим совместимости интерфейса.
Посмотрим, где это настраивается:
РежимСовместимостиИнтерфейса. Для использования современного движка отрисовки следует установить значение «Такси. Разрешить управление» или просто «Такси».Важно: переход на «Такси» может значительно изменить внешний вид всех форм конфигурации, поэтому это решение требует предварительного тестирования и согласования с пользователями.
Мы рассмотрели проблему самопроизвольного уменьшения элементов формы и выяснили, что это системная ошибка старых интерфейсных режимов платформы 1С. Для исправления ситуации лучше всего использовать комбинацию фиксации высоты элемента в свойствах и программной установки высоты в коде формы. Это гарантирует стабильное поведение интерфейса независимо от того, какие настройки сохранились в кэше пользователя.