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