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