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