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

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

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

Метод 1. Использование свойств размещения и служебной колонки

Этот способ считается наиболее корректным и основывается на использовании свойства Положение (или ПоложениеКолонки). Идея заключается в том, чтобы создать структуру, где одна колонка "накрывает" другие своим заголовком. Рассмотрим этот процесс по шагам.

Для начала проанализируем ситуацию: нам нужно, чтобы колонки Количество1 и Количество2 находились на одной строке, но над ними был общий текст "Общее количество".

  1. Откроем форму в конфигураторе и перейдем к свойствам табличной части.
  2. Добавим новую колонку, которая будет выполнять роль "шапки". Назовем ее, например, ЗаголовокГруппы. В поле Текст шапки впишем желаемое общее название.
  3. Установим для этой колонки свойство Положение в значение На следующей строке. Это критически важный момент: такая настройка заставляет платформу считать эту колонку началом нового логического блока в строке таблицы.
  4. Теперь перейдем к рабочим колонкам (тем, что содержат данные). Для первой рабочей колонки установим свойство Положение в значение В той же колонке.
  5. Для второй рабочей колонки также установим Положение — В той же колонке.
  6. Чтобы шапка выглядела единой, у рабочих колонок следует очистить текст заголовка или снять флаг Отображать в шапке.

Проанализируем, что произошло: использование На следующей строке создает новую область, а последующие колонки с признаком В той же колонке "подтягиваются" в эту область. Однако при такой настройке в самих строках данных (в области ячеек) появится пустая ячейка от нашей служебной колонки ЗаголовокГруппы. Чтобы ее убрать, нам потребуется программное вмешательство.

Программная очистка строк через событие ПриПолученииДанных

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

Разберем пример кода, который скрывает видимость ненужной ячейки в данных, оставляя ее только в шапке:


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

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

Метод 2. Использование Поля табличного документа

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

Рассмотрим особенности этого подхода:

  1. Гибкость верстки: В табличном документе вы можете использовать метод Объединить() для любых диапазонов ячеек. Это позволяет нарисовать шапку абсолютно любой сложности.
  2. Оформление: Вы можете задавать разные цвета фона, границы и шрифты для каждой ячейки шапки независимо.
  3. Сложность реализации: Это "ручной" метод. Вам придется самостоятельно описывать вывод данных в таблицу через циклы, а также обрабатывать события изменения данных пользователем.

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

Метод 3. Имитация шапки с помощью декораций (Надписей)

Существует еще один "хитрый" способ, который иногда применяют для экономии места по высоте. Его суть заключается в визуальном обмане.

Выполним следующие действия:

  1. У табличного поля установим свойство ПоказыватьШапку в значение Ложь.
  2. Над табличным полем разместим обычные элементы формы типа Надпись (Label).
  3. Сгруппируем надписи так, чтобы они имитировали структуру колонок. Одну длинную надпись расположим над двумя узкими.
  4. Настроим рамки и цвета надписей так, чтобы они совпадали со стилем системной шапки 1С.

Проанализируем ситуацию: этот метод идеально сохраняет высоту строк таблицы (они остаются однострочными). Однако у него есть критический недостаток — отсутствие динамики. Если пользователь решит изменить ширину колонки мышкой, "рисованная" шапка останется на месте, и соответствие колонок нарушится. Поэтому данный метод применим только тогда, когда у табличного поля отключена возможность изменения ширины колонок пользователем (свойство ИзменениеРазмераКолонок).

Нюансы настройки свойств для бесшовного вида

Чтобы добиться идеального визуального результата при использовании первого (основного) метода, обратите внимание на следующие настройки в конфигураторе:

1. Горизонтальное положение в шапке. Для служебной колонки-заголовка установите значение Центрировать. Это позволит тексту заголовка располагаться ровно посередине над всеми подчиненными колонками данных.

2. Свойство "Отображать в шапке". У рабочих колонок, которые находятся "под" общим заголовком, это свойство лучше выключить. Это уберет лишние горизонтальные разделители, и визуально две колонки будут казаться вышедшими из одного заголовка.

3. Порядок колонок. Помните, что порядок следования колонок в списке (в дереве метаданных формы) имеет значение. Служебная колонка должна идти первой в блоке, за ней — подчиненные. Если перед ними есть другие независимые колонки, убедитесь, что их свойство Положение установлено в На следующей строке (если они начинают новый блок) или они корректно завершают предыдущий.

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

← На главную