Как убрать дублирующиеся итоги в отчете 1С (СКД) и правильно настроить их расположение?

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

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

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

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

Рассмотрим по шагам, где именно может скрываться ошибка:

  1. Конфликт уровней (Отчет vs Группировка). Если на уровне «Отчет» вы установили Расположение группировок в значение Начало, а внутри конкретной вложенной группировки (например, по полю Номенклатура или Контрагент) случайно осталось значение Конец или Авто, система будет выводить итоги согласно настройке самого вложенного элемента.
  2. Различие между «Общими итогами» и «Итогами группировок». Это разные параметры в СКД. Расположение общих итогов отвечает за самый верхний уровень (итог по всему отчету), а Расположение группировок — за промежуточные итоги по уровням. Часто разработчики меняют один параметр, забывая про второй, что создает визуальную путаницу.

Пошаговое решение проблемы через настройки СКД

Разберем алгоритм действий, который поможет устранить дублирование строк итогов:

Во-первых, перейдем на вкладку Настройки в конструкторе СКД. Выберем в левом дереве самый верхний элемент — Отчет. На вкладке Дополнительные настройки проверим параметры:

Во-вторых (и это самый важный этап), проанализируем каждую группировку в дереве настроек ниже уровня отчета. Выделим по очереди каждую группу и посмотрим в ее Дополнительные настройки (внизу окна). Если там в поле Расположение группировок стоит что-то отличное от Начало или Использовать настройки иерархии, то именно эта настройка и «рисует» лишнюю строку в конце отчета. Установим для всех вложенных группировок значение Авто (чтобы они наследовались от отчета) или принудительно Начало.

Влияние иерархических группировок и ресурсов

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

Также обратим внимание на вкладку Ресурсы. Выясним причину появления пустых строк итогов: иногда они формируются из-за того, что для ресурса не указано, по каким именно группировкам его нужно рассчитывать. В колонке Рассчитывать по... рекомендуется четко определять уровни расчета, чтобы СКД не пыталась «закрыть» структуру итогов там, где данных фактически нет.

Программное управление выводом итогов

Если стандартные настройки не помогают или отчет формируется программно, мы можем вмешаться в процесс компоновки через модуль объекта. Рассмотрим пример кода, который принудительно устанавливает параметры вывода перед формированием результата в процедуре ПриКомпоновкеРезультата:


// В модуле объекта отчета
Процедура ПриКомпоновкеРезультата(ДанныеРасшифровки, СтандартнаяОбработка)
    
    СтандартнаяОбработка = Ложь;
    
    // Получаем текущие настройки компоновщика
    Настройки = КомпоновщикНастроек.ПолучитьНастройки();
    
    // Устанавливаем параметры вывода программно
    ПараметрВывода = Настройки.ПараметрыВывода.НайтиПараметр(Новый ПараметрКомпоновкиДанных("VerticalOverallPlacement"));
    Если ПараметрВывода <> Неопределено Тогда
        ПараметрВывода.Значение = РасположениеИтоговКомпоновкиДанных.Начало;
        ПараметрВывода.Использование = Истина;
    КонецЕсли;

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

Использование условного оформления как обходной путь

В исключительных случаях, когда структура отчета слишком сложна (например, используются вложенные схемы или специфические макеты), и стандартные настройки игнорируются, мы можем прибегнуть к хитрости с Условным оформлением.

Выясним, как скрыть ненужную область визуально:

  1. Создадим элемент условного оформления.
  2. В области оформления выберем В подвале (именно там, где появляются лишние итоги).
  3. В качестве оформления установим Минимальная высота = 0.1 или Цвет текста, совпадающий с цветом фона.

Хотя этот метод не удаляет данные из выборки, он позволяет привести внешний вид отчета в соответствие с требованиями заказчика, когда другие методы оказываются бессильны из-за особенностей платформы.

Таким образом, для решения проблемы «двойных итогов» мы всегда должны начинать с проверки иерархии настроек: от общего уровня Отчет до каждой конкретной Группировки на вкладке Дополнительные настройки. В 99% случаев проблема кроется именно в забытой настройке на уровне отдельного поля группировки.

← На главную