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

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

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

Причина возникновения проблемы

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

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

Вариант 1. Возврат режима совместимости

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

  1. Откроем конфигуратор и перейдем к свойствам корня конфигурации.
  2. Найдем свойство РежимСовместимости.
  3. Установим значение Версия 8.3.6.
  4. Сохраним и обновим конфигурацию БД.

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

Вариант 2. Ручная настройка свойств элементов в Конфигураторе

Рассмотрим, как исправить поведение конкретных проблемных форм вручную непосредственно в редакторе форм Конфигуратора.

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

Вариант 3. Программный обход элементов формы

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

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


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

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
	
	// Вызов рекурсивного обхода для текущей формы
	СнятьОграничениеШириныЭлементов(Элементы);
	
КонецПроцедуры

Вариант 4. Массовое изменение файлов конфигурации через XML

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

  1. Выполним выгрузку конфигурации в файлы (меню Конфигурация -> Выгрузить конфигурацию в файлы...).
  2. С помощью текстового редактора с поддержкой поиска по регулярным выражениям (например, VS Code или Notepad++) выполним массовую замену по всей папке выгрузки.
  3. Найдем все вхождения тега <AutoMaxWidth>true</AutoMaxWidth> и заменим их на <AutoMaxWidth>false</AutoMaxWidth>.
  4. Загрузим обновленную конфигурацию из файлов обратно через меню Конфигурация -> Загрузить конфигурацию из файлов....

Использование этого подхода позволяет мгновенно восстановить правильное растягивание элементов во всех формах приложения при сохранении высокого режима совместимости платформы.

← На главную