Почему не отображаются общие итоги в отчете СКД на основе таблицы значений?

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

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

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

Разберем по шагам: Типизация колонок внешней таблицы значений

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

Рассмотрим пример правильного создания таблицы значений в программном коде. Чтобы итоги гарантированно считались, необходимо использовать ОписаниеТипов:


// Подготовим описание типов для числовых колонок
КвалификаторыЧисла = Новый КвалификаторыЧисла(15, 2);
ОписаниеТипаЧисло = Новый ОписаниеТипов("Число", , , КвалификаторыЧисла);

// Создаем таблицу с четкой типизацией
ТЗ_Данные = Новый ТаблицаЗначений;
ТЗ_Данные.Колонки.Добавить("Покупатель", Новый ОписаниеТипов("СправочникСсылка.Контрагенты"));
ТЗ_Данные.Колонки.Добавить("Номенклатура", Новый ОписаниеТипов("СправочникСсылка.Номенклатура"));
ТЗ_Данные.Колонки.Добавить("Количество", ОписаниеТипаЧисло);
ТЗ_Данные.Колонки.Добавить("Сумма", ОписаниеТипаЧисло);

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

Настройка ресурсов и ошибка в колонке «Рассчитывать по...»

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

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

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

Особенности расположения итогов в кросс-таблицах

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

Разберем, какие настройки нужно проверить на вкладке «Настройки» -> «Прочие настройки»:

Часто разработчики ищут проблему в коде или в самом запросе, в то время как решение кроется в одном переключателе «Прочих настроек» компоновщика.

Работа с NULL и выражениями ресурсов

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

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

Сумма(ЕСТЬNULL(СуммаОборот, 0))

Это гарантирует, что наличие пустых строк не «сломает» расчет общей суммы по отчету. Также убедитесь, что в поле набора данных на закладке «Наборы данных» для числовых полей не стоит ограничение на использование в итогах.

Принудительное добавление группировки «Общий итог»

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

Попробуем следующий прием:

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

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

Проверка макета оформления

Напоследок проанализируем ситуацию с макетами. Если вы используете собственный (нестандартный) макет для отчета, проверьте, заданы ли в нем области для типов «Подвал» или «Общий итог подвал».

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

Таким образом, для восстановления общих итогов нам необходимо пройти по чек-листу: проверить типизацию колонок ТаблицыЗначений, очистить поле «Рассчитывать по...» в ресурсах, включить горизонтальные и вертикальные итоги в прочих настройках и убедиться в отсутствии NULL в данных. Совокупность этих действий позволяет решить проблему в 99% случаев.

← На главную