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

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

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

Причины автоматического изменения ширины колонок

Поведение ширины ячеек в управляемом интерфейсе определяется несколькими ключевыми механизмами платформы:

  1. Длина текста заголовка и высота шапки: Если у таблицы динамического списка свойство ВысотаШапки установлено в значение 1 (по умолчанию), платформа не переносит слова в заголовках. В этом случае длина строки заголовка выступает жестким минимальным ограничением — сделать колонку уже текста в шапке невозможно.
  2. Механизм авторазметки и растягивания: Если у элемента формы включено свойство РастягиватьПоГоризонтали или не задано ограничение МаксимальнаяШирина, форма автоматически пересчитывает ширину колонок под текущее разрешение экрана и свободное пространство окна.
  3. Сохранение пользовательских настроек: Платформа автоматически сохраняет пользовательские изменения геометрии формы в системном хранилище и восстанавливает их при повторном открытии, игнорируя значения по умолчанию из конфигуратора.

Способ 1. Управление высотой шапки и переносом текста заголовка

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

  1. Выделим таблицу динамического списка и в палитре свойств установим свойство ВысотаШапки равным 2 или более строкам.
  2. В тексте заголовка колонки добавим перенос строк с помощью сочетания клавиш Shift + Enter в конфигураторе или программно через Символы.ПС.
  3. Если заголовок состоит из одного длинного неделимого слова, сократим его текст или перенесем подробное описание в свойство Подсказка.

Способ 2. Жесткая фиксация параметров элемента формы

Для предотвращения автоматического изменения размера колонки при изменении размеров формы выполним точную настройку свойств элемента:

  1. Установим свойство Ширина в требуемое число символов.
  2. Снимем флаг РастягиватьПоГоризонтали (значение Ложь).
  3. Отключим свойство АвтоМаксимальнаяШирина и укажем в поле МаксимальнаяШирина то же значение, что и в свойстве Ширина.

Для элементов, не поддерживающих прямое управление шириной (например, колонок с флажками или пиктограммами), поместим поле в элемент ГруппаКолонок с аналогичной настройкой ширины и запретом растягивания.

Способ 3. Программная инициализация и сброс настроек формы для пользователей

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


// Очистка сохраненных настроек окна текущего пользователя
КлючОбъекта = "Документ.Заявка.ФормаСписка/Такси/НастройкиОкна";
ИмяПользователя = ПользователиИнформационнойБазы.ТекущийПользователь().Имя;
ХранилищеСистемныхНастроек.Удалить(КлючОбъекта, "", ИмяПользователя);

// Принудительное обновление ключа геометрии формы
КлючСохраненияПоложенияОкна = Строка(Новый УникальныйИдентификатор);

Разберем работу данного кода: метод ХранилищеСистемныхНастроек.Удалить очищает сохраненные пользовательские изменения положения и размеров элементов, а генерация нового значения для КлючСохраненияПоложенияОкна заставляет платформу перерисовать форму по эталонным настройкам, заданным разработчиком.

Для программной установки размеров колонок при открытии формы применим настройку элементов в обработчике ПриСозданииНаСервере:


&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    ЭлементКолонка = Элементы.СписокНомер;
    ЭлементКолонка.Ширина = 10;
    ЭлементКолонка.АвтоМаксимальнаяШирина = Ложь;
    ЭлементКолонка.МаксимальнаяШирина = 10;
    ЭлементКолонка.РастягиватьПоГоризонтали = Ложь;
КонецПроцедуры

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

← На главную