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

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

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

Выясняем причину: почему платформа растягивает колонки

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

Кроме того, на итоговую ширину влияют три критических фактора:

  1. Минимальная ширина заголовка: Текст в шапке колонки задает жесткий нижний порог. Если в заголовке написано «Количество», колонка никогда не станет уже, чем это слово.
  2. Свойства растягивания: Флаги автоматического определения ширины могут перекрывать ручные настройки.
  3. Хранилище настроек пользователя: Если пользователь хоть раз менял ширину колонки мышкой, его настройки сохраняются в системе и имеют приоритет над тем, что программист написал в коде при создании формы.

Метод 1. Управление текстом заголовка

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

Решение: либо максимально укоротить заголовок (использовать одну точку или пробел), либо полностью отключить отображение текста в шапке для конкретного элемента.

Программно это выглядит так:


// Убираем заголовок, чтобы он не мешал сужать колонку
ЭлементКолонка = Элементы.СписокТоваровКартинка;
ЭлементКолонка.Заголовок = "";
ЭлементКолонка.ОтображатьВШапке = Ложь;

Метод 2. Тонкая настройка свойств «Растягивать» и «Максимальная ширина»

Посмотрим на свойства, которые часто забывают отключить. Одной установки свойства Ширина недостаточно. В современных версиях платформы (8.3.10+) появилось свойство МаксимальнаяШирина, которое работает гораздо надежнее.

Разберем по шагам правильную последовательность установки свойств для узкой колонки:

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

Пример программной настройки:


НоваяКолонка = Элементы.Добавить("Индикатор", Тип("ПолеФормы"), Элементы.Таблица);
НоваяКолонка.Вид = ВидПоляФормы.ПолеКартинки;
НоваяКолонка.ПутьКДанным = "Объект.Товары.ИндексКартинки";

// Блокируем растягивание
НоваяКолонка.АвтоМаксимальнаяШирина = Ложь;
НоваяКолонка.МаксимальнаяШирина = 2;
НоваяКолонка.Ширина = 2;
НоваяКолонка.РастягиватьПоГоризонтали = Ложь;

Метод 3. Использование технической «пустой» колонки

Это, пожалуй, самый эффективный «хак», упомянутый в сообщениях форума. Проблема в том, что если все колонки имеют фиксированную ширину, платформа все равно будет растягивать какую-то из них (обычно первую или последнюю), чтобы заполнить пустоту справа.

Алгоритм действий:

  1. Добавляем в самый конец таблицы колонку без данных (пустую).
  2. Убираем у неё заголовок.
  3. Устанавливаем для неё РастягиватьПоГоризонтали = Истина.
  4. Для всех остальных колонок (включая ту, которую мы хотим сделать узкой) устанавливаем РастягиватьПоГоризонтали = Ложь.

В этом случае «пустышка» заберет на себя всё свободное пространство формы, выступая в роли демпфера, а наши важные колонки останутся ровно той ширины, которую мы задали.

Метод 4. Свойства самой Таблицы формы

Проанализируем ситуацию, когда настройки колонок верны, но они все равно растягиваются. Часто причина кроется в свойствах самого родительского элемента — объекта ТаблицаФормы.

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

Метод 5. Фиксация колонок (Fixation)

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

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

Элементы.ТаблицаСписок.ФиксацияСлева = 1; // Фиксируем первую колонку

Борьба с сохраненными настройками пользователя

Если вы применили все вышеперечисленные методы, но колонка в режиме «Предприятие» всё равно остается широкой, значит, вступили в силу сохраненные настройки пользователя. 1С запоминает, что когда-то (возможно, еще на этапе разработки) эта колонка была растянута вручную.

Рассмотрим, как это победить:

  1. Сброс настроек: Зайдите в меню «Еще» — «Изменить форму» и выполните команду «Установить стандартные настройки».
  2. Программный сброс: В коде можно попробовать изменить имя элемента. Если вы измените имя колонки с КолонкаЦена на КолонкаЦена_Новая, платформа воспримет её как новый элемент, для которого еще нет сохраненных пользовательских настроек ширины, и применит ваши программные установки.

Итоги

Чтобы гарантированно сделать колонку узкой, мы рекомендуем использовать комбинацию методов: отключение текста заголовка, жесткую установку МаксимальнаяШирина и добавление растягиваемой пустой колонки в конец таблицы. Такое сочетание настроек позволяет полностью контролировать визуальное представление таблицы вне зависимости от разрешения экрана пользователя.

← На главную