Почему элементы формы перестали растягиваться по ширине после отключения режима совместимости и как это исправить?

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

При переводе конфигурации на современную версию платформы и отключении режима совместимости (или установке совместимости выше версии 8.3.7) разработчики часто сталкиваются с изменением поведения управляемых форм. Поля ввода, комментарии или нижние панели, которые ранее занимали всю ширину экрана, внезапно сжимаются до фиксированного компактного размера. Разберем детально, почему это происходит и как вернуть элементам корректное масштабирование.

Причина изменения поведения управляемых форм

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

Для строковых реквизитов (особенно полей неограниченной длины и реквизитов вроде Комментарий) включенное по умолчанию свойство АвтоМаксимальнаяШирина устанавливает жесткое системное ограничение (обычно около 40 символов). Пока включен режим совместимости со старыми версиями, платформа применяет прежние правила верстки, но как только режим совместимости снимается, активируются новые правила компоновки.

Пошаговая настройка свойств элементов формы

Рассмотрим по шагам, какие свойства необходимо скорректировать у сжавшегося элемента в конфигураторе:

  1. Откроем нужную управляемую форму в конфигураторе и выделим проблемный элемент.
  2. В палитре свойств найдем параметр АвтоМаксимальнаяШирина и установим его в значение Ложь (снимем флаг).
  3. Проверим свойство МаксимальнаяШирина: установим значение 0 (ноль означает отсутствие верхнего лимита ширины).
  4. Убедимся, что для свойства РастягиватьПоГоризонтали установлено значение Истина или Авто.
  5. Если элементу также требуется динамическое расширение по вертикали (например, для многострочного текста комментария), снимем флаг со свойства АвтоМаксимальнаяВысота, установим МаксимальнаяВысота в 0 и включим РастягиватьПоВертикали = Истина.

Проверка родительских групп и структуры формы

Выясним причину ситуаций, когда сброс свойства АвтоМаксимальнаяШирина у самого поля не решает проблему. Элемент формы физически не может растянуться шире своей родительской группы. Проанализируем структуру дерева элементов:

  1. Проверим все вышестоящие группы, в которые вложен элемент. Убедимся, что у родительской группы свойство РастягиватьПоГоризонтали установлено в Истина или Авто.
  2. Обратим внимание на свойство группы Объединенная группа. Если этот флаг включен, платформа обрабатывает элементы внутри группы как неделимый фиксированный блок, что может препятствовать растяжению соседних строк.
  3. Для горизонтальных групп рекомендуется использовать вид группировки ГоризонтальнаяЕслиВозможно, что обеспечит гибкий перенос элементов при сжатии окна.
  4. Проверим форму на наличие устаревших декораций. Ранее для прижатия кнопок или растяжения полей разработчики вставляли элементы Декорация - Надпись с пустым текстом. В новом механизме такие невидимые распорки вызывают конфликт и блокируют нормальное растяжение основных полей. Лишние декорации следует удалить.

Программное управление размерами элементов

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


&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    
    // Пройдем по элементам формы и снимем ограничения для нужных полей
    Для Каждого ЭлементФормы Из Элементы Цикл
        Если ТипЗнч(ЭлементФормы) = Тип("ПолеФормы") 
            И ЭлементФормы.Вид = ВидПоляФормы.ПолеВвода Тогда
            
            // Снимаем ограничение ширины для длинных текстовых полей
            Если ЭлементФормы.Имя = "Комментарий" Или ЭлементФормы.МногострочныйРежим Тогда
                ЭлементФормы.АвтоМаксимальнаяШирина = Ложь;
                ЭлементФормы.МаксимальнаяШирина = 0;
                ЭлементФормы.РастягиватьПоГоризонтали = Истина;
            КонецЕсли;
            
        КонецЕсли;
    КонецЦикла;
    
КонецПроцедуры

Такой подход позволяет адаптивно скорректировать поведение управляемых форм при постепенном переводе конфигурации на новые версии платформы.

← На главную