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