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

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

При разработке интерфейсов на платформе 1С часто возникает задача визуального объединения нескольких колонок под одним общим заголовком — так называемой «шапкой». В обычных формах (8.2 и режим совместимости в 8.3) эта задача решается не через свойства самой ТаблицыЗначений, а через настройки элемента управления ТабличноеПоле. Разберем подробно, как реализовать иерархическую структуру колонок и как справиться с распространенными проблемами отображения данных.

Различие между данными и представлением

Прежде всего, нам необходимо четко разделять два понятия: объект ТаблицаЗначений и элемент формы ТабличноеПоле. Сама по себе таблица значений — это структура в памяти, которая содержит только строки и колонки с данными. У неё нет визуальных свойств, таких как «группировка» или «высота ячейки».

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

Способ 1: Создание групп колонок в конфигураторе

Самый простой и надежный способ создать многоуровневую шапку — это использование механизма групп колонок непосредственно в редакторе формы. Рассмотрим этот процесс по шагам:

  1. Откроем нужную форму в конфигураторе и выберем элемент ТабличноеПоле.
  2. Зайдем в свойства колонок (через контекстное меню или палитру свойств).
  3. Добавим новую колонку, которая будет служить «шапкой». Важно понимать, что она может не иметь связи с данными (пустое поле Данные).
  4. В дереве колонок перетащим те колонки, которые должны находиться «внутри» группы, под нашу новую колонку.
  5. Для родительской колонки (шапки) установим текст заголовка, а для подчиненных колонок настроим их заголовки.

Важный нюанс: если вы хотите, чтобы в шапке отображалось название группы, а под ней — названия конкретных полей (например, группа «Приходы» и подзаголовки «Дата» и «Сумма»), проверьте свойство ОтображатьВШапке у всех уровней иерархии.

Способ 2: Программное управление структурой шапки

Иногда состав колонок заранее неизвестен, и таблицу нужно строить динамически кодом. Для этого мы используем коллекцию Колонки табличного поля. Проанализируем пример логики создания колонок:


// Добавляем основную колонку-группу
НоваяКолонкаГруппа = ЭлементыФормы.ТаблицаПланирование.Колонки.Добавить("ГруппаПриходы");
НоваяКолонкаГруппа.ТекстШапки = "Приходы в текущем месяце";

// Добавляем подчиненные колонки
КолонкаДата = ЭлементыФормы.ТаблицаПланирование.Колонки.Добавить("ДатаПрихода");
КолонкаДата.ТекстШапки = "Дата";
КолонкаДата.Данные = "Дата";

// Чтобы создать визуальную иерархию кодом в обычных формах, 
// необходимо использовать свойство "Группа" или перестроить коллекцию.

Рассмотрим ситуацию, когда нам нужно скрыть данные в определенных ячейках, сохранив при этом саму шапку. Часто программисты пытаются установить ВысотаЯчейки = 0, однако платформа 1С накладывает ограничение: высота строки не может быть меньше 1. Если мы хотим «схлопнуть» данные, оставив только заголовок, нам потребуется другой подход.

Способ 3: Настройка видимости через ОформлениеСтрок

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

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


Процедура ТаблицаПланированиеПриПолученииДанных(Элемент, ОформленияСтрок)
    // Проходим циклом по всем строкам, которые в данный момент отрисовываются
    Для каждого ОформлениеСтроки Из ОформленияСтрок Цикл
        // Обращаемся к ячейкам, которые хотим скрыть
        // Группа1 и Группа2 - это имена ваших колонок в табличном поле
        ОформлениеСтроки.Ячейки.Группа1.Видимость = Ложь;
        ОформлениеСтроки.Ячейки.Группа2.Видимость = Ложь;
    КонецЦикла;
КонецПроцедуры

Важно: этот метод не удаляет данные и не скрывает колонку целиком из шапки. Он делает содержимое ячеек «невидимым» для пользователя в области строк, сохраняя при этом структуру заголовков таблицы.

Особенности работы с высотой ячеек

Рассмотрим подробнее проблему с высотой ячеек, затронутую в обсуждении. Платформа 1С:Предприятие 8 рассчитывает высоту строки таблицы исходя из максимальной высоты всех видимых ячеек в этой строке. Если у вас в строке 10 колонок, и вы у 9 из них поставите ВысотаЯчейки = 0, но у одной останется стандартная высота, вся строка сохранит свой размер.

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

Различия для Управляемых форм (8.3)

Хотя мы рассматривали обычные формы, полезно проанализировать, как эта же задача решается в современном интерфейсе «Такси» на управляемых формах. Там процесс значительно упрощен:

  1. В дереве элементов формы создается объект типа Группа - Группа колонок.
  2. В свойствах группы выбирается Группировка: Горизонтальная (колонки рядом) или Вертикальная (колонки друг под другом).
  3. Реквизиты таблицы просто перетаскиваются внутрь этой группы.
  4. Заголовок группы автоматически становится «общей шапкой».

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

Заключение

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

← На главную