Мы, как разработчики и пользователи 1С, часто сталкиваемся с необходимостью построения гибких и информативных отчетов. Одним из типовых требований является вывод агрегированных данных — итогов — по определенным группам значений, причем не просто где-нибудь, а строго в конце отчета или в конце каждой крупной секции. Именно такая задача была поставлена: вывести итоги по группируемому полю в конце отчета СКД, например, по статусам документов, суммируя данные для каждого статуса отдельно, но в общем итоговом блоке.
Давайте вместе подробно разберем, как эффективно настроить Систему Компоновки Данных (СКД) в 1С для решения этой задачи. Мы рассмотрим несколько подходов, которые позволят нам вывести как общие итоги по всему отчету, так и специфические агрегированные данные по определенным условиям, таким как "итог создан", "итог ошибка", "итог оплачен" для статусов документов.
Прежде чем погрузиться в пошаговые инструкции, нам необходимо четко понимать три ключевых инструмента СКД, которые мы будем использовать:
Ресурсы: Это поля, по которым будут выполняться агрегирующие функции (сумма, количество, среднее, максимум, минимум и т.д.). Без определения ресурсов СКД не сможет посчитать никакие итоги.
Группировки: Они определяют структуру отчета и уровни, по которым будут агрегироваться данные. Итоги всегда рассчитываются относительно определенной группировки.
Вычисляемые поля: Мощный инструмент, позволяющий создавать новые поля на основе уже существующих, используя различные выражения. Мы можем использовать их для создания условных значений, которые затем будут агрегироваться как ресурсы.
Грамотное комбинирование этих элементов позволит нам добиться желаемого результата.
Первый и наиболее фундаментальный шаг — это определение, какие данные мы хотим агрегировать. Мы должны указать СКД, по каким числовым или счетным полям необходимо выполнять расчеты. Давайте разберем этот процесс по шагам:
Откроем схему компоновки данных: Перейдите в конфигуратор, найдите нужную схему компоновки данных (обычно это в макете отчета) и откройте ее.
Перейдите на вкладку "Ресурсы": Это центральное место для управления агрегированными данными. Здесь вы увидите два списка: слева — доступные поля из запроса, справа — поля, которые уже определены как ресурсы.
Добавьте необходимые поля в ресурсы: Из левого списка перетащите или добавьте кнопкой те поля, по которым вы хотите видеть итоги. Например, если у нас есть поле СуммаДокумента, мы перемещаем его в правый список.
Определите выражение для ресурса: Для каждого добавленного ресурса в столбце "Выражение" мы должны указать, какую агрегирующую функцию СКД должна применить. Наиболее частые функции:
Сумма(Поле): Суммирует значения поля.
Количество(Поле): Подсчитывает количество записей (без учета уникальности).
КоличествоРазличных(Поле): Подсчитывает количество уникальных значений поля.
Среднее(Поле): Вычисляет среднее значение.
Максимум(Поле): Находит максимальное значение.
Минимум(Поле): Находит минимальное значение.
Например, для поля СуммаДокумента мы напишем Сумма(СуммаДокумента). Если нам нужно посчитать количество документов, мы можем использовать Количество(Ссылка) или Количество(Документ.Ссылка), если поле так называется в запросе.
Сумма(СуммаДокумента)
Количество(ДокументСсылка)
Опционально: Укажите "Рассчитывать по...": Если мы хотим, чтобы данный ресурс рассчитывался только по определенным группировкам (например, только по контрагентам, но не по детализации), мы можем выбрать эти группировки в поле "Рассчитывать по...". Если оставить это поле пустым, ресурс будет рассчитываться по всем группировкам, включая общие итоги по всему отчету.
Определив, что мы хотим посчитать, нам теперь нужно сказать СКД, где именно отображать эти подсчеты. Для вывода итогов в конце отчета мы обращаемся к настройкам расположения итогов.
Откройте настройки отчета: В режиме конструктора СКД перейдите на вкладку "Настройки" или в режиме предприятия нажмите кнопку "Настройка отчета" для перехода в расширенные настройки.
Перейдите к свойствам группировок или отчета в целом: Обычно расположение общих итогов настраивается для корневой (самой верхней) группировки отчета или для объекта "Отчет" в структуре настроек. В дереве структуры отчета выберите самую верхнюю строку (часто она называется "Отчет" или "Детальные записи").
Найдите параметр "Расположение общих итогов по вертикали": В свойствах выбранного элемента структуры найдите этот параметр.
Установите значение "Конец": Чтобы общие итоги по всему отчету отображались после всех детальных записей и промежуточных группировок, установите для этого параметра значение Конец. По умолчанию для верхнего уровня может стоять "Авто", что часто также приводит к выводу в конце, но явное указание Конец гарантирует желаемый результат.
Если у вас есть несколько уровней группировок и вы хотите, чтобы итоги по каждой из них также выводились в конце своей секции, то для каждой такой группировки необходимо аналогично установить параметр Расположение общих итогов по вертикали в значение Конец.
Вернемся к примеру пользователя: "хочу вывести итог по трем статусам документов создан оплачен ошибка". Если нам нужно получить не только общую сумму, но и суммы, сгруппированные по конкретным значениям поля (например, по статусу), а затем показать эти итоги в конце, мы можем использовать отдельную группировку. Сообщение на форуме "Сделать отдельную группировку по статусу" и "сделай просто ниже еще одну группировку, не подчиненную, а добавь в сам отчет" как раз на это указывает.
Добавьте новую группировку на вкладке "Настройки" -> "Структура": В дереве структуры отчета добавьте новую группировку на том же уровне, что и детальные записи, или на верхнем уровне, если это самостоятельный блок итогов. Для задачи вывода итогов в конце отчета, скорее всего, эта группировка будет создана после основной детальной группировки, чтобы визуально итоги шли в конце.
Укажите поле для новой группировки: В свойствах этой новой группировки укажите поле СтатусДокумента (или как оно называется у вас в запросе). СКД автоматически сгруппирует данные по уникальным значениям этого поля.
Выберите поля и ресурсы для этой группировки: На вкладке "Выбранные поля" для этой группировки выберите поле СтатусДокумента и те ресурсы (например, Сумма(СуммаДокумента) или Количество(ДокументСсылка)), которые вы хотите видеть в итогах по каждому статусу.
Настройте расположение итогов для этой группировки: Для самой группировки по статусу также можно установить Расположение общих итогов по вертикали: Конец, чтобы общие итоги по статусам появлялись в конце отчета. В этом случае для каждого статуса будет свой подраздел с итогом в конце.
Этот подход удобен, если вам нужна полная структура: сначала детальные записи, затем итоги по каждому статусу, а затем, возможно, общий итог по всем статусам.
Что делать, если мы хотим получить несколько специфичных итогов, которые зависят от определенных условий (например, "итог создан", "итог ошибка", "итог оплачен"), и вывести их в одном блоке в конце отчета, без создания отдельных группировок для каждого статуса? В этом случае нам помогут вычисляемые поля в комбинации с ресурсами. Это наиболее гибкий и мощный способ для решения такой задачи.
Перейдите на вкладку "Вычисляемые поля": Это находится в настройках схемы компоновки данных.
Создайте новые вычисляемые поля для каждого типа итога: Для каждого статуса, по которому нужен итог, создайте отдельное вычисляемое поле. Выражение для такого поля будет использовать оператор ВЫБОР КОГДА:
Имя поля: СуммаСозданных, Выражение:
ВЫБОР
КОГДА Статус = "Создан"
ТОГДА СуммаДокумента
ИНАЧЕ 0
КОНЕЦ
Здесь Статус — это поле из вашего запроса, содержащее статус документа, а СуммаДокумента — сумма, которую нужно агрегировать.
Имя поля: СуммаОплаченных, Выражение:
ВЫБОР
КОГДА Статус = "Оплачен"
ТОГДА СуммаДокумента
ИНАЧЕ 0
КОНЕЦ
Имя поля: СуммаОшибок, Выражение:
ВЫБОР
КОГДА Статус = "Ошибка"
ТОГДА СуммаДокумента
ИНАЧЕ 0
КОНЕЦ
Таким образом, для каждой строки данных, если статус соответствует условию, поле будет содержать СуммаДокумента, иначе — 0.
Переведите вычисляемые поля в ресурсы: После создания вычисляемых полей, они становятся доступными для использования как обычные поля. Теперь нам нужно сделать их ресурсами, чтобы СКД могла их суммировать:
Вернитесь на вкладку "Ресурсы".
Добавьте созданные вычисляемые поля (СуммаСозданных, СуммаОплаченных, СуммаОшибок) в список ресурсов.
Для каждого из них в столбце "Выражение" укажите функцию Сумма(). Например: Сумма(СуммаСозданных), Сумма(СуммаОплаченных), Сумма(СуммаОшибок).
Сумма(СуммаСозданных)
Сумма(СуммаОплаченных)
Сумма(СуммаОшибок)
Настройте отображение этих ресурсов в структуре отчета:
Перейдите на вкладку "Настройки" и выберите основной элемент структуры отчета (например, "Отчет" или "Детальные записи").
На вкладке "Выбранные поля" (для этого элемента структуры) добавьте созданные ресурсы (Сумма(СуммаСозданных), Сумма(СуммаОплаченных) и т.д.) в список выбранных полей.
Важно: Для этих ресурсов можно использовать параметр "Итоги по..." на вкладке "Ресурсы", чтобы они рассчитывались и отображались только в общих итогах отчета, а не в каждой детальной строке или промежуточной группировке. Это позволит нам получить желаемый блок итогов в конце отчета.
Убедитесь, что для корневой группировки отчета или для самого отчета установлено Расположение общих итогов по вертикали: Конец (как мы рассматривали в пункте 2).
Используя этот подход, мы получим отдельные итоговые строки или столбцы для каждого статуса в конце отчета, что полностью соответствует запросу пользователя.
Иногда нам нужно, чтобы ресурс отображался только в итоговых строках, но не в строках детализации. Для этого используется механизм "Итоги по..." на вкладке "Ресурсы".
Выберите ресурс: На вкладке "Ресурсы" выберите ресурс, для которого вы хотите настроить отображение.
Настройте поле "Итоги по": В этом поле вы можете выбрать конкретные группировки, по которым данный ресурс должен рассчитываться и выводиться. Например, если вы выберете только корневую группировку (представляющую весь отчет), то ресурс будет отображен только в общих итогах отчета.
Особенности использования: Если вы оставите поле "Итоги по..." пустым, ресурс будет рассчитываться по всем группировкам. Если вы хотите, чтобы ресурс был виден только в общих итогах по всему отчету, но не в промежуточных группировках, вы можете указать здесь "Общие итоги" или самую верхнюю группировку в структуре отчета.
Комбинация этого параметра с настройкой расположения итогов (Конец) является ключом к выводу итогов именно там, где они нужны.
При работе с СКД всегда стоит помнить о некоторых нюансах, которые могут существенно повлиять на результат:
Типы данных полей: Мы должны понимать, что нечисловые поля (например, строки или булевы значения) не могут быть просуммированы или для них не может быть рассчитано среднее значение. Для таких полей доступны только функции Количество() и КоличествоРазличных(). Всегда убеждайтесь, что вы используете корректные типы данных для агрегирования.
Роли полей: Правильное назначение ролей полям на вкладке "Наборы данных" также очень важно. Например, если поле используется для группировки, ему должна быть назначена роль Измерение. Если поле является частью иерархической структуры, ему нужно назначить соответствующие роли для иерархии. СКД использует эти роли для корректного построения отчета и расчета итогов.
Расчет вычисляемых полей в иерархических группировках: Иногда вычисляемые поля могут некорректно рассчитываться в сложных иерархических группировках. В таких случаях мы можем попробовать скорректировать выражение ресурса на вкладке "Ресурсы", возможно, явно указав уровни расчета. В особо сложных сценариях более надежным решением может быть перенос логики расчета этих полей непосредственно в текст запроса на вкладке "Наборы данных", используя агрегирующие функции SQL.
Кастомизация макетов: Если стандартные настройки СКД не позволяют достичь желаемого визуального оформления итоговых строк (например, нужно вывести произвольный текст, применить специфическое форматирование или вывести итоги в особом порядке), мы всегда можем прибегнуть к использованию пользовательских макетов. Макеты позволяют нам вручную определить внешний вид заголовков, полей и итоговых строк для определенных группировок или для всего отчета. Это мощный, но более сложный инструмент, требующий детального изучения.
Анализ запроса СКД: Если результаты отчета или расчет итогов вызывают вопросы, всегда полезно проанализировать SQL-запрос, который генерирует СКД. Для этого можно использовать "Консоль запросов" или "Консоль СКД" (поможет инструментарий разработчика с консолью СКД), где есть возможность просмотреть сгенерированный запрос. Это поможет нам понять, как данные выбираются и агрегируются на уровне СУБД, и выявить возможные ошибки в логике СКД.
Объединение отчетов для произвольной итоговой строки: В редких случаях, когда требуется вывести абсолютно произвольную строку с итогами или текстом после стандартных итогов (например, "Всего по всем документам: X"), может потребоваться создание дополнительной группировки с собственным макетом, а иногда даже объединение двух разных отчетов СКД, где один выводит основные данные, а второй — специальный итоговый блок.
Таким образом, мы видим, что СКД предоставляет множество инструментов для гибкой настройки вывода итогов. Для вывода итогов по группируемому полю в конце отчета наиболее часто используются комбинации настройки ресурсов, установки параметра Расположение общих итогов по вертикали: Конец для основной группировки, а также применения вычисляемых полей для специфичных условных итогов. Экспериментируйте с этими настройками, и вы сможете добиться любого желаемого вида отчета.
Мы надеемся, что этот подробный разбор поможет вам в решении задач по построению отчетов в 1С СКД. Не бойтесь углубляться в детали и пробовать разные подходы — именно так рождаются самые эффективные и функциональные решения.