Как вывести общий итог по колонке в пользовательском макете СКД

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

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

Анализ проблемы: почему не выводится макет итога

Рассмотрим ситуацию: в схеме компоновки данных настроен отчет, где ресурсы (например, Запланировано, Израсходовано, Остаток) выводятся на нескольких уровнях группировки. Мы создаем макет группировки с типом «Общий итог подвал», назначаем его для верхней группировки, но в результирующем отчете итоговая строка не появляется.

Выясним причину такого поведения. СКД работает по принципу декларативного описания: если поле не включено в состав «Выбранных полей» для конкретной группировки или для всего отчета, компоновщик не будет рассчитывать и передавать данные для этого поля в макет, даже если в самом макете указан параметр типа [Сумма]. Проанализируем основные шаги, которые необходимо выполнить для корректного отображения данных.

Шаг 1. Явное указание ресурсов в выбранных полях

Одной из самых распространенных ошибок является использование только элемента Авто в списке выбранных полей при отключении стандартных итогов. Если мы хотим, чтобы наш пользовательский макет работал независимо от системных настроек оформления, необходимо выполнить следующие действия:

  1. Перейдем на закладку «Настройки» в схеме СКД.
  2. Выберем нужную группировку (или уровень «Отчет» для общего итога).
  3. В окне «Выбранные поля» снимем флажок с элемента Авто.
  4. Вручную перетащим из левого списка те ресурсы, которые должны отображаться в нашем макете (например, Остаток).

Важный момент: если мы оставляем включенным Автополе, СКД выводит итоги по своему алгоритму, игнорируя настройки оформления в макете или дублируя их. Если же мы убираем Автополе, мы должны гарантировать, что каждое поле, используемое в макете, присутствует в списке выбранных полей. Без этого ПроцессорКомпоновкиДанных просто не передаст значения в область макета.

Шаг 2. Правильная настройка типа макета и имени группировки

Разберем, как правильно создать область в макете для общего итога. На закладке «Макеты» при добавлении макета группировки нам предлагается указать два ключевых параметра: «Имя группировки» и «Тип макета». Для этой задачи есть конструктор макетов и печатных форм без программирования.

Проанализируем логику выбора имени группировки:

Выберем тип макета: «Общий итог подвал». В табличном документе макета выделим область, объединим ячейки, если это необходимо, и назначим параметры. Помните, что параметры в макете должны в точности соответствовать именам полей или ресурсов (например, СуммаКонечныйОстаток).

Шаг 3. Использование макета ресурса вместо макета группировки

Существует более гибкий и надежный способ управления итогами — использование макета ресурса. Это позволяет оформить не всю строку итога целиком, а конкретную ячейку для определенного ресурса. Рассмотрим, как это сделать:

  1. На закладке «Макеты» нажмем кнопку «Добавить макет ресурса».
  2. В поле «Поле компоновки» выберем наш ресурс, например, Запланировано.
  3. В поле «Тип макета» выберем «Общий итог подвал».
  4. Укажем область макета. Теперь для этого ресурса в подвале отчета будет использоваться именно эта ячейка.

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

Шаг 4. Управление итогом в структуре «Таблица»

Если ваш отчет построен с использованием структуры «Таблица» (со строками и колонками), стандартные макеты группировок могут вести себя иначе. В таблицах СКД различает итоги по горизонтали и по вертикали.

Посмотрим на настройки пересечений. Чтобы вывести общий итог в нижнем правом углу таблицы, профессиональным подходом считается создание «Макета группировки для пересечения». В настройках такого макета указываются:

Этот метод гарантирует, что на стыке строк и колонок будет выведено именно то значение, которое вы спроектировали в макете, даже если глобальные настройки итогов отключены в параметрах отчета.

Шаг 5. Проверка «Других настроек» отчета

Иногда даже идеально настроенный макет не отображается из-за глобальных ограничений варианта отчета. Выясним, на какие параметры стоит обратить внимание:

  1. Перейдем на закладку «Настройки» -> «Другие настройки».
  2. Найдем параметры «Расположение общих итогов по вертикали» и «Расположение общих итогов по горизонтали».
  3. Убедимся, что они установлены в значение «Конец» (или «Начало и конец»). Если там стоит значение «Нет», СКД полностью подавляет вывод итоговых строк, включая те, для которых заданы пользовательские макеты.

Пример настройки кода для программного вывода (если применимо)

В редких случаях, когда отчет формируется программно, необходимо убедиться, что при инициализации процессора компоновки не происходит подмена макета. Проанализируем типовой фрагмент кода вывода:


// Создаем макет компоновки с помощью компоновщика макета
КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, НастройкиКомпоновки, ДанныеРасшифровки);

// Процессор компоновки данных выполняет компоновку по макету
ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
ПроцессорКомпоновки.Инициализировать(МакетКомпоновки, ВнешниеНаборыДанных, ДанныеРасшифровки);

// Результат выводится в табличный документ
ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
ПроцессорВывода.УстановитьДокумент(Результат);
ПроцессорВывода.Вывести(ПроцессорКомпоновки);

При программном формировании крайне важно, чтобы в НастройкиКомпоновки были переданы актуальные настройки из пользовательского интерфейса, в которых ресурсы включены в выбранные поля, иначе пользовательский макет останется пустым. Для изучения практических реализаций пригодится подборка примеров программной работы с СКД.

Резюме по решению задачи

Для того чтобы успешно вывести общий итог по колонке в макете СКД, придерживаемся следующего алгоритма:

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

← На главную