Разработка и Конфигурация · 11 мин
Что такое агрегация в 1С и как она используется на практике
Что такое агрегация в 1С: агрегатные объекты, итоги регистров, свертка данных и группировка в отчетах. Разбираем виды агрегации, настройку и типичные ошибки.
Термин «агрегация» в контексте 1С используется в нескольких разных значениях, и это часто путает начинающих разработчиков и пользователей. В одних случаях речь идет об агрегатных объектах метаданных — устаревшем механизме платформы 1С 7.7. В других — о хранении итогов по регистрам, свертке базы или группировке данных в отчетах и запросах. Общий смысл у всех этих понятий один: агрегация — это объединение детальных данных в обобщенные показатели для ускорения анализа и снижения объема хранимой информации.
Понимание того, какая именно агрегация имеется в виду, важно для практической работы. От этого зависит, где искать настройку: в конфигураторе, в режиме предприятия, в запросе или в обработке свертки. Ниже разобраны все основные значения термина, механизмы, которые за ними стоят, и конкретные действия для каждого сценария.
Что означает термин «агрегация» в разных контекстах 1С
В экосистеме 1С сложилось несколько устойчивых значений этого слова. Первое — историческое: в платформе 1С:Предприятие 7.7 существовали «агрегатные объекты» — документы и справочники, встроенные в другие объекты и недоступные отдельно от владельца. Классический пример — документ «Счет-фактура», существовавший только внутри другого документа. В платформе 8.x этот механизм отменен, и вместо него используются обычные объекты со связями и подчиненностью.
Второе значение — агрегация данных как процесс. Сюда относятся накопление итогов по регистрам, свертка информационной базы, группировка строк в запросах с функциями СУММ, КОЛИЧЕСТВО, МАКСИМУМ и построение сводных отчетов. Именно это значение чаще всего встречается в задачах разработки и администрирования.
Третье значение встречается в смежных системах: в механизмах обмена, витринах данных и BI-надстройках агрегацией называют подготовку сводных таблиц для выгрузки. Логика та же — детальные записи заменяются обобщенными строками по заданным измерениям.
Агрегатные объекты: наследие 1С 7.7
В версии 7.7 агрегатный объект не имел самостоятельного журнала и не мог существовать без объекта-владельца. Типичная ситуация: счет-фактура создавалась только «внутри» расходной накладной, и отдельно в списках она не отображалась. Такой подход упрощал структуру, но создавал проблемы: сложно было строить отчеты по агрегатным объектам, настраивать права и организовывать обмены.
В платформе 8.x концепция агрегатных объектов полностью убрана. Любой документ или справочник — самостоятельный объект, а связь между ними реализуется через реквизиты, критерии отбора и подчиненность. Если при миграции с 7.7 или в старой документации встречается термин «агрегатный объект», правильная стратегия — заменить его обычным объектом со ссылкой на владельца или документ-основание.
Признак того, что вы столкнулись именно с этим значением термина: речь идет о конфигурациях на платформе 7.7, о конвертации данных из старых систем или о документации, где упоминаются «компоненты» и «агрегатные типы».
Итоги регистров как основной механизм агрегации
Самый массовый рабочий механизм агрегации в 1С 8.x — хранение итогов по регистрам накопления и сведений. Регистр хранит детальные движения (каждый документ добавляет строки), а платформа параллельно поддерживает таблицу итогов: обороты и остатки в разрезе измерений за период. Благодаря этому отчет «Остатки товаров на складах» строится мгновенно, даже если движений миллионы.
Ключевая настройка — периодичность итогов. Для регистра остатков итоги обычно хранятся помесячно: чем больше периодов с рассчитанными итогами, тем быстрее строятся отчеты, но тем больше места занимает база и дольше идет проведение документов. Управление итогами выполняется в режиме предприятия через раздел администрирования («Управление итогами» в типовых конфигурациях) или программно методами объекта регистра.
Типовая практическая задача — сдвинуть дату рассчитанных итогов после загрузки архивных данных или, наоборот, рассчитать итоги заново после массовых исправлений. Перед такими операциями обязательно делается резервная копия, потому что пересчет итогов на большом объеме может занять часы и нагрузить сервер.
- 1Сделайте резервную копию базы или убедитесь в наличии актуальной копии
- 2Откройте управление итогами: в типовых конфигурациях это раздел «Администрирование» → «Обслуживание» → «Регламентные операции» или аналог
- 3Выберите нужный регистр и установите период, по который нужно рассчитать итоги
- 4Запустите расчет и дождитесь завершения, не прерывая процесс
- 5Проверьте результат: сравните остатки в отчете с контрольными значениями до пересчета
Агрегация в запросах: группировка и итоговые функции
В языке запросов 1С агрегация реализуется через секцию СГРУППИРОВАТЬ ПО и агрегатные функции: СУММ, КОЛИЧЕСТВО, МИНИМУМ, МАКСИМУМ, СРЕДНЕЕ. Запрос выбирает детальные строки, а затем сворачивает их по указанным полям. Например, чтобы получить сумму продаж по каждому контрагенту, группировка делается по полю «Контрагент», а сумма вычисляется функцией СУММ(СуммаОборот).
Дополнительно существует конструкция ИТОГИ ПО, которая возвращает иерархический результат с промежуточными и общими итогами. Это удобно для отчетов вида «группа товаров → товар → документ», где на каждом уровне нужны свои суммы. Однако запросы с ИТОГИ тяжелее обычных группировок: на больших таблицах их следует использовать осознанно и с отбором по периоду.
Частая ошибка разработчиков — группировать данные в коде перебором выборки вместо группировки в запросе. Такой подход на порядки медленнее: сервер базы данных выполняет агрегацию оптимальнее, чем цикл на встроенном языке. Правило простое: если данные можно свернуть в запросе — сворачивайте их в запросе.
ВЫБРАТЬ
Продажи.Контрагент КАК Контрагент,
СУММА(Продажи.СуммаОборот) КАК СуммаПродаж,
КОЛИЧЕСТВО(РАЗЛИЧНЫЕ Продажи.Регистратор) КАК ЧислоДокументов
ИЗ
РегистрНакопления.Продажи.Обороты(&НачалоПериода, &КонецПериода, , ) КАК Продажи
СГРУППИРОВАТЬ ПО
Продажи.КонтрагентСвертка базы: агрегация как способ уменьшить объем данных
Отдельный прикладной сценарий — свертка информационной базы. Смысл операции: все документы и движения до выбранной даты заменяются документами ввода начальных остатков, которые содержат агрегированные значения по каждому разрезу учета. Детальная история за старые периоды при этом удаляется из рабочей базы.
Свертку применяют, когда база выросла настолько, что страдает скорость работы, резервное копирование и обновление. В типовых конфигурациях есть штатная обработка свертки, но она требует подготовки: нужно закрыть период, сверить взаиморасчеты, остатки склада и регистры, снять копии и протестировать процедуру на копии базы. Ошибки при свертке приводят к расхождению остатков, а откат возможен только из резервной копии.
Альтернатива полной свертке — установка даты запрета изменения данных и перенос архива в отдельную базу. Такой вариант сохраняет доступ к истории и не требует сложной процедуры, но не уменьшает объем рабочей базы так радикально.
Агрегация в отчетах и СКД
В системе компоновки данных (СКД) агрегация настраивается на вкладке «Ресурсы»: для каждого числового показателя выбирается функция (Сумма, Количество, Среднее, Максимум, Минимум) и указывается, по каким группировкам он рассчитывается. Пользователь отчета может менять структуру группировок в настройках, и платформа автоматически пересчитает агрегаты под новый уровень детализации.
Важный нюанс: если ресурс не добавлен в список или для него не указано выражение, на верхних уровнях группировки поле окажется пустым. Это одна из самых частых причин «пропадающих сумм» в самодельных отчетах. Проверяется просто: откройте настройки отчета, вкладку ресурсов, и убедитесь, что показатель рассчитывается по всем нужным группировкам, включая общие итоги.
Для нетривиальных показателей — например, среднего остатка за период или доли в процентах — используются выражения ресурсов и вычисляемые поля. Здесь действует то же правило, что и в запросах: по возможности агрегируйте на уровне источника данных, а не в выражениях СКД, чтобы не терять производительность.
Как выбрать подходящий механизм агрегации
Выбор зависит от задачи. Если нужен быстрый отчет по остаткам и оборотам — используйте виртуальные таблицы регистров и следите за актуальностью итогов. Если нужен произвольный срез по нестандартному набору измерений — пишите запрос с группировкой. Если цель — уменьшить объем базы — рассматривайте свертку или архивацию старых периодов.
Для интеграционных сценариев, когда 1С отдает данные во внешнюю аналитическую систему, часто выгоднее отдавать детальные данные и агрегировать их на стороне приемника: витрины и BI-инструменты справляются с этим эффективнее и не нагружают учетную систему.
Как выбрать действие
Частые вопросы об агрегации в 1С
Чем агрегация отличается от группировки?
По сути это одно действие, но термины используются в разных контекстах. Группировка — операция в запросе или отчете (СГРУППИРОВАТЬ ПО), а агрегацией чаще называют сам процесс получения обобщенных показателей, включая хранение итогов и свертку данных.
Почему отчет по регистру стал строиться медленно?
Частая причина — итоги рассчитаны не на текущий период или регистр используется без виртуальных таблиц. Проверьте дату рассчитанных итогов в управлении итогами и убедитесь, что запрос обращается к таблицам «Остатки» или «Обороты», а не к полной таблице движений.
Можно ли отменить свертку базы?
Нет, штатной отмены не существует. Восстановить детальные данные можно только из резервной копии, сделанной до свертки. Поэтому процедуру всегда сначала выполняют на копии и сверяют остатки по всем разделам учета.
Что делать, если в отчете СКД пустые итоги по группам?
Откройте настройки отчета и проверьте вкладку ресурсов: для каждого показателя должно быть задано выражение и указаны группировки, по которым он считается. Также проверьте, что в запросе поле не отсутствует на верхних уровнях из-за соединений таблиц.
Нужно ли хранить итоги по всем прошлым годам?
Обычно нет. Итоги нужны там, где регулярно строятся отчеты. Для закрытых периодов, которые анализируются редко, хранение итогов можно отключить — отчеты за эти периоды будут считаться дольше, но база станет компактнее и проведение ускорится.
Сохранились ли агрегатные объекты в 1С 8.3?
Нет, механизм агрегатных объектов существовал только в платформе 7.7. В 8.x любой объект самостоятелен, а связи реализуются через реквизиты, подчиненные документы и критерии отбора.
Что важно запомнить
Агрегация в 1С — это обобщение детальных данных: итоги регистров, группировки в запросах и СКД, свертка базы. Агрегатные объекты остались в 7.7. Агрегируйте на уровне запроса, следите за актуальностью итогов, а свертку выполняйте только после теста на копии базы.