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