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