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