Как исправить дублирование шапки при использовании макетов в СКД?

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

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

Почему возникает проблема дублирования областей?

Первым делом выясним причину такого поведения движка СКД. Когда в настройках макета отчета мы привязываем область к определенным элементам структуры, СКД пытается «натянуть» этот макет на результат вывода. Если в настройках отчета ваша «Шапка» по ошибке попала в структуру детальных записей или оказалась ниже уровня, который повторяется для каждой строки результата, система будет исполнять ваш макет столько раз, сколько записей найдено в выборке.

Основная ошибка заключается в неверном сопоставлении областей макета и элементов дерева настроек. СКД воспринимает области не просто как графические элементы, а как логические блоки, привязанные к структуре данных.

Пошаговое решение: перенастройка структуры отчета

Для исправления ситуации выполним следующие шаги, чтобы заставить систему выводить шапку только один раз в самом начале отчета:

  1. Проверка привязки в макетах. Откройте вкладку «Макеты» в СКД. Убедитесь, что ваша область «Шапка» определена корректно. В колонке «Тип макета» желательно использовать Заголовок отчета, так как именно этот тип предназначен для однократного вывода в начале формирования отчета.
  2. Корректировка дерева настроек. Перейдите на вкладку «Настройки». Скорее всего, сейчас ваша область шапки находится в одном уровне с детальными записями. Чтобы исправить это, перенесите вывод макета на верхний уровень иерархии.
  3. Использование группировки. Если вариант с Заголовок отчета не подходит из-за специфики структуры данных, попробуйте сделать шапку отдельной группировкой. Для этого создайте группировку без иерархии (по детализации), и в настройках оформления макета укажите, что именно этот элемент структуры должен использовать вашу область «Шапка».

Методы корректной передачи параметров

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

Если вы хотите, чтобы параметр, который берется из выборки (например, Ответственный), выводился в шапке, вам следует:

Работа с группировками как лучший способ управления

Если вы столкнулись с тем, что шапка все равно дублируется, переведите шапку в формат группировки. Рассмотрим этот процесс подробнее:

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

Посмотрим на пример логики компоновки:


// В коде при необходимости можно программно передать параметр
// если стандартного механизма настроек не хватает:
КомпоновщикНастроек.Настройки.ПараметрыДанных.УстановитьЗначениеПараметра("Ответственный", ВыбранныйОтветственный);

Однако помните, что в большинстве случаев правки в коде не требуются. Всё можно реализовать через грамотную настройку иерархии в дереве Настройки СКД. Если вы видите, что макет выводится не там, где нужно, попробуйте перетащить соответствующий элемент в дереве настроек выше по иерархии. Самый высокий уровень (корень дерева) гарантирует, что макет, привязанный к нему, будет выведен ровно один раз.

Заключение

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

← На главную