В процессе работы или после очередного обновления конфигурации разработчики могут столкнуться с неприятным поведением интерфейса «Такси» или управляемых форм в целом: текстовые поля, многострочные комментарии и надписи прекращают растягиваться по ширине. В результате текстовые блоки сжимаются в узкие столбики, а свободное пространство справа остается пустым, хотя вертикальное растягивание продолжают работать корректно. Очистка кэша и перезапуск сервера при этом не дают никакого результата. Проанализируем причину возникновения этого сбоя и рассмотрим рабочие варианты решения задачи.
Выясним причину, почему формы начинают вести себя подобным образом. Все дело в изменении режима совместимости конфигурации в свойствах корня конфигурации. Начиная с версии платформы 1С:Предприятие 8.3.7, разработчики фирмы «1С» существенно переработали алгоритмы расчета компоновки и выравнивания элементов интерфейса.
Когда режим совместимости с версией 8.3.6 и ниже повышается или полностью отключается, для элементов интерфейса (полей ввода, декораций, надписей) начинает действовать обновленное поведение. По умолчанию свойство АвтоМаксимальнаяШирина для полей ввода и надписей принимает значение Истина. Платформа начинает автоматически ограничивать ширину поля исходя из типа данных или допустимого размера строки, не позволяя элементу занимать всю ширину родительской группы или экрана.
Если конфигурация не использует новые программные функции и возможности свежих версий платформы, наиболее быстрым решением является понижение режима совместимости обратно до 8.3.6.
РежимСовместимости.Версия 8.3.6.Важно: Если в конфигурации уже внедрен функционал, завязанный на механизмы более новых версий платформы, понижение режима совместимости вызовет ошибки компиляции. В этом случае следует использовать альтернативные методы ниже.
Рассмотрим, как исправить поведение конкретных проблемных форм вручную непосредственно в редакторе форм Конфигуратора.
Ctrl+A на дереве элементов).АвтоМаксимальнаяШирина и переведем его в значение Ложь.МаксимальнаяШирина — оно должно быть равно 0 (значение 0 снимает ограничения по ширине).РастягиватьПоГоризонтали находится в значении Да или Авто.Если форм в конфигурации много и открывать каждую вручную слишком трудоемко, разберем решение через универсальную программную процедуру. Мы можем вызывать процедуру обхода элементов формы в событии ПриСозданииНаСервере или подключить ее через общий модуль.
Посмотрим на пример кода, который рекурсивно обходит все элементы формы и снимает ограничение максимальной ширины:
&НаСервере
Процедура СнятьОграничениеШириныЭлементов(КоллекцияЭлементов)
Для Каждого Элемент Из КоллекцияЭлементов Цикл
// Проверяем типы элементов, поддерживающих управление шириной
ТипЭлемента = ТипЗнч(Элемент);
Если ТипЭлемента = Тип("ПолеФормы") Или ТипЭлемента = Тип("ДекорацияФормы") Тогда
Элемент.АвтоМаксимальнаяШирина = Ложь;
Элемент.МаксимальнаяШирина = 0;
КонецЕсли;
// Если элемент является группой или страницей, рекурсивно обрабатываем подчиненные элементы
Если ТипЭлемента = Тип("ГруппаФормы") Или ТипЭлемента = Тип("СтраницаФормы") Тогда
СнятьОграничениеШириныЭлементов(Элемент.ПодчиненныеЭлементы);
КонецЕсли;
КонецЦикла;
КонецПроцедуры
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
// Вызов рекурсивного обхода для текущей формы
СнятьОграничениеШириныЭлементов(Элементы);
КонецПроцедуры
Для полного решения проблемы сразу во всей конфигурации без изменения исходного кода каждой формы можно воспользоваться выгрузкой конфигурации в файлы XML.
<AutoMaxWidth>true</AutoMaxWidth> и заменим их на <AutoMaxWidth>false</AutoMaxWidth>.Использование этого подхода позволяет мгновенно восстановить правильное растягивание элементов во всех формах приложения при сохранении высокого режима совместимости платформы.