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