Почему динамический список становится меньше при каждом открытии формы и как это исправить

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

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

Выясним причину: почему это происходит?

Данная проблема является следствием специфического бага платформы, который проявляется в режимах интерфейса «В закладках» или при использовании «Режима совместимости с версией 8.2». Рассмотрим подробнее механизм возникновения ошибки. Когда пользователь закрывает управляемую форму, платформа автоматически сохраняет настройки ее геометрии (ширину, высоту, положение разделителей) в системное хранилище настроек.

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

Решение 1: Фиксация свойств высоты в конфигураторе

Самый быстрый и эффективный «костыль», который помог автору темы, — это жесткое ограничение прав платформы на управление размером элемента. Разберем, как это настроить:

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

Проанализируем этот метод: отключая РастягиватьПоВертикали, мы запрещаем платформе динамически изменять размер элемента в зависимости от размера окна и сохраненных настроек. Элемент всегда будет иметь фиксированную высоту 10, что предотвратит его схлопывание.

Решение 2: Программная установка высоты при создании формы

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


&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    
    // Принудительно задаем высоту элемента, игнорируя настройки пользователя
    Элементы.ИмяВашегоСписка.Высота = 10;
    
    // В некоторых случаях полезно переключить вариант управления высотой
    // (доступно в последних релизах платформы 8.3)
    Элементы.ИмяВашегоСписка.ВариантУправленияВысотой = ВариантУправленияВысотой.ИспользоватьСвойствоВысота;
    
КонецПроцедуры

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

Решение 3: Оптимизация иерархии групп (Группировка элементов)

Часто проблема возникает из-за того, что на форме расположены два крупных элемента (например, Табличная часть сверху и Динамический список снизу), и оба имеют свойство РастягиватьПоВертикали = Истина. Платформа в режиме совместимости 8.2 не всегда может корректно распределить доли между ними.

Рассмотрим рекомендации по переработке структуры формы:

Решение 4: Очистка настроек формы у пользователей

Если вы уже внесли правки в конфигуратор, но у пользователей форма по-прежнему открывается «схлопнутой», это означает, что в их профиле сохранились старые некорректные настройки. Проанализируем, как их очистить:

  1. Запустите программу в режиме «1С:Предприятие».
  2. Перейдите в меню «Администрирование» — «Настройки пользователей и прав».
  3. Выберите пункт «Очистка настроек».
  4. Найдите нужного пользователя и конкретную форму в списке.
  5. Нажмите «Очистить».

Это действие удалит записи из системной таблицы настроек, и при следующем открытии форма примет вид, заданный программистом в конфигураторе.

Решение 5: Переход на интерфейс «Такси»

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

Посмотрим, где это настраивается:

  1. В конфигураторе выделите корень дерева метаданных (название вашей конфигурации).
  2. В палитре свойств найдите раздел «Совместимость».
  3. Проверьте свойство РежимСовместимостиИнтерфейса. Для использования современного движка отрисовки следует установить значение «Такси. Разрешить управление» или просто «Такси».

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

Итоги

Мы рассмотрели проблему самопроизвольного уменьшения элементов формы и выяснили, что это системная ошибка старых интерфейсных режимов платформы 1С. Для исправления ситуации лучше всего использовать комбинацию фиксации высоты элемента в свойствах и программной установки высоты в коде формы. Это гарантирует стабильное поведение интерфейса независимо от того, какие настройки сохранились в кэше пользователя.

← На главную