При разработке интерфейсов на управляемых формах разработчики часто сталкиваются с ситуацией, когда явное указание свойства Ширина у колонки динамического списка не приводит к желаемому результату. При открытии формы колонка либо растягивается по длине заголовка, либо восстанавливает ширину из сохраненных пользовательских настроек. Разберем особенности поведения платформы 1С:Предприятие 8.3 и способы управления геометрией колонок таблицы.
Поведение ширины ячеек в управляемом интерфейсе определяется несколькими ключевыми механизмами платформы:
ВысотаШапки установлено в значение 1 (по умолчанию), платформа не переносит слова в заголовках. В этом случае длина строки заголовка выступает жестким минимальным ограничением — сделать колонку уже текста в шапке невозможно.РастягиватьПоГоризонтали или не задано ограничение МаксимальнаяШирина, форма автоматически пересчитывает ширину колонок под текущее разрешение экрана и свободное пространство окна.Если требуется сделать колонку уже текущего заголовка, проанализируем настройки шапки таблицы:
ВысотаШапки равным 2 или более строкам.Символы.ПС.Подсказка.Для предотвращения автоматического изменения размера колонки при изменении размеров формы выполним точную настройку свойств элемента:
Ширина в требуемое число символов.РастягиватьПоГоризонтали (значение Ложь).АвтоМаксимальнаяШирина и укажем в поле МаксимальнаяШирина то же значение, что и в свойстве Ширина.Для элементов, не поддерживающих прямое управление шириной (например, колонок с флажками или пиктограммами), поместим поле в элемент ГруппаКолонок с аналогичной настройкой ширины и запретом растягивания.
Чтобы гарантировать одинаковый внешний вид таблицы у всех пользователей независимо от сохраненных ранее настроек, применим программный сброс кэша геометрии формы. Рассмотрим пример кода для серверного обработчика:
// Очистка сохраненных настроек окна текущего пользователя
КлючОбъекта = "Документ.Заявка.ФормаСписка/Такси/НастройкиОкна";
ИмяПользователя = ПользователиИнформационнойБазы.ТекущийПользователь().Имя;
ХранилищеСистемныхНастроек.Удалить(КлючОбъекта, "", ИмяПользователя);
// Принудительное обновление ключа геометрии формы
КлючСохраненияПоложенияОкна = Строка(Новый УникальныйИдентификатор);
Разберем работу данного кода: метод ХранилищеСистемныхНастроек.Удалить очищает сохраненные пользовательские изменения положения и размеров элементов, а генерация нового значения для КлючСохраненияПоложенияОкна заставляет платформу перерисовать форму по эталонным настройкам, заданным разработчиком.
Для программной установки размеров колонок при открытии формы применим настройку элементов в обработчике ПриСозданииНаСервере:
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
ЭлементКолонка = Элементы.СписокНомер;
ЭлементКолонка.Ширина = 10;
ЭлементКолонка.АвтоМаксимальнаяШирина = Ложь;
ЭлементКолонка.МаксимальнаяШирина = 10;
ЭлементКолонка.РастягиватьПоГоризонтали = Ложь;
КонецПроцедуры
Комплексное применение настройки высоты шапки, ограничения максимальной ширины и сброса кэша настроек обеспечивает стабильное и предсказуемое отображение динамического списка у всех пользователей информационной базы.