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