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

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

При работе с типом данных ДанныеФормыДерево программисты 1С часто сталкиваются с эстетической и функциональной проблемой: текст в строках-группировках (верхних уровнях дерева) обрезается по ширине колонки. Это происходит из-за того, что дерево в управляемой форме жестко следует структуре колонок, и даже если в группировочной строке заполнено только одно поле (например, «Агрегация» или «Наименование»), соседние пустые ячейки все равно «отъедают» пространство.

В этой статье мы подробно разберем, как сделать строку группировки визуально длиннее и информативнее, используя штатные механизмы платформы 8.3.

Метод 1. Использование Условного Оформления (УО) для скрытия колонок

Проанализируем ситуацию: почему текст обрезается? Потому что справа от него стоят другие колонки, которые имеют свою ширину. Если мы скроем эти колонки только для строк определенного уровня, основная ячейка визуально растянется (если настроены соответствующие свойства растяжения).

Рассмотрим по шагам, как настроить Условное Оформление:

  1. Определим признак группировки. Нам нужно знать, какая строка является группой. В дереве значений это можно определить по уровню (например, Уровень() = 0 для корня) или по наличию дочерних элементов. Часто в данные дерева добавляют специальную колонку ЭтоГруппа (Булево).
  2. Настроим правило оформления. Перейдем в свойства таблицы на форме, откроем «Условное оформление».
  3. Установим отбор. Укажем условие, при котором оформление будет действовать (например, Объект.Дерево.ЭтоГруппа Равно Истина).
  4. Выберем оформляемые поля. Отметим ВСЕ колонки, кроме той, в которой должен отображаться длинный текст.
  5. Установим свойство. Выберем свойство Видимость и установим значение Ложь.

Важно отметить: если свойство Видимость не дает нужного визуального эффекта (колонки все равно «бронируют» место), попробуйте использовать свойство Отображение (если доступно в вашей версии платформы) или комбинировать этот метод с группировкой колонок.

Метод 2. Программная установка Условного Оформления

Иногда интерактивной настройки недостаточно, особенно если состав колонок меняется динамически. Разберем пример кода, который реализует скрытие «лишних» ячеек для строк верхнего уровня:


// В процедуре ПриСозданииНаСервере или ПриОткрытии
ЭлементОформления = УсловноеОформление.Элементы.Добавить();

// Устанавливаем оформляемые поля (все, кроме основного)
ОформляемоеПоле = ЭлементОформления.Поля.Элементы.Добавить();
ОформляемоеПоле.Поле = Новый ПолеКомпоновкиДанных("ДеревоЦена");
ОформляемоеПоле = ЭлементОформления.Поля.Элементы.Добавить();
ОформляемоеПоле.Поле = Новый ПолеКомпоновкиДанных("ДеревоКоличество");

// Устанавливаем условие: уровень строки 0 (корень)
ЭлементОтбора = ЭлементОформления.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.Дерево.УровеньСтроки"); 
ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ЭлементОтбора.ПравоеЗначение = 0;

// Устанавливаем видимость в Ложь
ЭлементОформления.Оформить.УстановитьЗначениеПараметра("Видимость", Ложь);

Обратите внимание: Чтобы этот код работал по УровнюСтроки, необходимо при заполнении дерева на сервере явно вычислять уровень и записывать его в скрытую колонку данных формы, так как метод Уровень() объекта ДанныеФормыДерево недоступен напрямую в полях компоновки данных оформления.

Метод 3. Группировка колонок в режиме «В ячейке»

Если нам нужно, чтобы данные в группировочной строке выводились сплошным текстом, проанализируем возможность объединения колонок. В управляемых формах 1С нельзя объединять ячейки как в Excel, но можно сгруппировать элементы формы (колонки).

  1. Выделите в дереве элементов формы несколько колонок.
  2. Нажмите правую кнопку мыши — «Сгруппировать».
  3. У созданной группы установите свойство Отображение в значение В ячейке.

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

Метод 4. Вычисляемое представление и многострочный режим

Выясним причину, почему текст кажется коротким. Часто проблема не в ширине колонки как таковой, а в ограничении высоты. Посмотрим на альтернативное решение:

Для колонки, в которой выводится текст группировки, установите свойство МногострочныйРежим в значение Да. В свойствах самой таблицы (элемента формы) установите ВысотаСтрок равную 0 (автовысота) или 2. В этом случае, если текст не поместится в ширину, он перенесется на вторую строку, и информация не будет потеряна.

Рассмотрим также создание специальной колонки ПредставлениеДляФормы:

Метод 5. Свойства «Растягивать по горизонтали» и «Автомаксимальная ширина»

Иногда проблема кроется в базовых настройках элемента. Проанализируем свойства колонки:

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

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

← На главную