Если вы работаете с 1С:Предприятие и сталкиваетесь с медленной работой отчётов, долгим формированием данных или перегрузкой сервера — проблема может крыться в отсутствии или неправильной настройке агрегатов. Этот механизм, встроенный в платформу 1С 8.3, позволяет ускорить обработку больших объёмов данных за счёт предварительного расчёта и хранения промежуточных результатов. Однако многие пользователи и даже разработчики не до конца понимают, как агрегаты работают, когда их нужно использовать, а когда они только тормозят систему.
В этой статье мы разберёмся, что такое агрегаты в 1С, какие задачи они решают, как их правильно настраивать и где чаще всего допускаются ошибки. Вы узнаете, почему агрегаты незаменимы для аналитических отчётов, но могут быть избыточными для простых регистров, как они взаимодействуют с регламентными заданиями и что делать, если агрегаты «раздувают» базу данных. Материал будет полезен как бухгалтерам и аналитикам, так и программистам 1С, которые хотят оптимизировать производительность систем.
Особое внимание уделим практическим примерам настройки агрегатов для регистров накопления и расчёта, а также разберём, как избежать типичных ошибок при их использовании. Если вы когда-нибудь видели в конфигураторе пункты «Агрегаты» или «Регламентные операции» и не знали, зачем они нужны — этот гайд для вас.
Что такое агрегаты в 1С и зачем они нужны
Агрегаты в 1С:Предприятие — это механизм предварительной обработки данных, который позволяет ускорить выполнение запросов и отчётов. В основе лежит идея кеширования: вместо того чтобы каждый раз пересчитывать одни и те же данные (например, обороты по счёту за месяц), система сохраняет готовые результаты и обновляет их только при изменении исходных данных.
Проще говоря, агрегаты работают как «умные заметки»: они фиксируют промежуточные итоги (суммы, количества, средние значения) и выдают их по запросу, не пересчитывая всё с нуля. Это особенно важно для:
- 📊 Аналитических отчётов (например, оборотно-сальдовая ведомость по большому количеству счетов).
- 📈 Регистров накопления с высокой детализацией (например, движения товаров по складам).
- ⏳ Долгих операций, где пересчёт данных занимает минуты или часы.
Без агрегатов система каждый раз будет «перелистывать» все документы за период, что при большом объёме данных приводит к замедлению работы и повышенной нагрузке на сервер. С агрегатами же большая часть расчётов выполняется заранее — например, ночью, когда пользователи не работают в базе.
Если в вашей базе есть отчёты, которые формируются дольше 30 секунд, скорее всего, их работу можно оптимизировать с помощью агрегатов.
Виды агрегатов в 1С: регистровые и виртуальные таблицы
В 1С 8.3 существует два основных типа агрегатов, которые решают разные задачи:
- Агрегаты регистров — создаются для регистров накопления и регистров расчёта. Они хранят предварительно рассчитанные итоги (например, остатки товаров или задолженность контрагентов) и обновляются при записи движений в регистр. Настраиваются непосредственно в конфигураторе для каждого регистра.
- Агрегаты виртуальных таблиц — используются для ускорения работы отчётов и запросов, которые обращаются к виртуальным таблицам (например,
Обороты,Остатки). Эти агрегаты создаются автоматически при первом обращении к виртуальной таблице и обновляются по регламенту.
Разница между ними заключается в способе хранения и обновлении:
| Характеристика | Агрегаты регистров | Агрегаты виртуальных таблиц |
|---|---|---|
| Где настраиваются | В свойствах регистра (конфигуратор) | Автоматически при первом запросе |
| Когда обновляются | При записи движений в регистр | По регламентному заданию или вручную |
| Где хранятся | В таблицах базы данных | В специальных служебных таблицах |
| Пример использования | Остатки товаров на складе | Обороты по счёту 60 за квартал |
Важно понимать, что агрегаты виртуальных таблиц не заменяют агрегаты регистров, а дополняют их. Например, если у вас есть регистр накопления с агрегатами, но вы запрашиваете данные через виртуальную таблицу Обороты, система может создать дополнительные агрегаты для ускорения этого конкретного запроса.
Как настроить агрегаты для регистра накопления
Настройка агрегатов для регистра накопления выполняется в конфигураторе и требует прав разработчика. Рассмотрим процесс на примере регистра ТоварыНаСкладах:
- Откройте конфигуратор и найдите нужный регистр в дереве объектов (раздел
Общие → Регистры накопления). - Перейдите на вкладку
Агрегатыв свойствах регистра. - Установите флажок
Использовать агрегаты. - В разделе
Периодичность агрегатоввыберите интервалы, для которых будут храниться итоги (например,День,Месяц,Квартал). - Настройте
Регламентные операциидля автоматического обновления агрегатов (например, ночное обслуживание базы).
Пример настройки периодичности:
// В конфигураторе для регистра ТоварыНаСкладах:
Агрегаты.Периодичность.Добавить(ТипПериодичности.День);
Агрегаты.Периодичность.Добавить(ТипПериодичности.Месяц);
Агрегаты.Периодичность.Добавить(ТипПериодичности.Год);
После настройки агрегатов необходимо обновить конфигурацию базы данных и выполнить полное перестроение агрегатов. Это можно сделать:
- 🔄 Через меню
Администрирование → Обслуживание → Регламентные операции → Перестроить агрегаты. - 🖥️ С помощью командной строки (для больших баз):
Designer.exe /IBName "ИмяБазы" /Execute "ПерестроитьАгрегаты()"
Сделать резервную копию базы|Проверить свободное место на диске|Определить оптимальную периодичность|Настроить регламентные задания для обновления|Протестировать работу на копии базы-->
Когда агрегаты тормозят систему: типичные ошибки
Несмотря на очевидные преимущества, агрегаты могут ухудшить производительность, если их использовать неграмотно. Вот наиболее распространённые ошибки:
- 🚫 Слишком частая периодичность. Если настроить агрегаты по часам для регистра, который обновляется раз в месяц, система будет тратить ресурсы на ненужные пересчёты.
- 🚫 Агрегаты для редко используемых отчётов. Нет смысла кешировать данные, к которым обращаются раз в год.
- 🚫 Отсутствие регламентного обновления. Если агрегаты не перестраиваются автоматически, они устаревают и начинают выдавать неверные данные.
- 🚫 Игнорирование размера базы. Агрегаты занимают дополнительное место на диске. Для больших баз это может стать проблемой.
Признаки того, что агрегаты работают неэффективно:
- ⚠️ Отчёты формируются дольше, чем без агрегатов.
- ⚠️ Размер базы данных неоправданно вырос (проверьте таблицы
_Aggregates*в SQL). - ⚠️ Регламентные задания по обновлению агрегатов выполняются слишком долго.
Как проверить размер агрегатов в базе SQL
Для Microsoft SQL Server выполните запрос:
SELECT
t.NAME AS TableName,
s.Name AS SchemaName,
p.rows AS RowCounts,
SUM(a.total_pages) * 8 AS TotalSpaceKB
FROM
sys.tables t
INNER JOIN
sys.indexes i ON t.OBJECT_ID = i.object_id
INNER JOIN
sys.partitions p ON i.object_id = p.OBJECT_ID AND i.index_id = p.index_id
INNER JOIN
sys.allocation_units a ON p.partition_id = a.container_id
LEFT OUTER JOIN
sys.schemas s ON t.schema_id = s.schema_id
WHERE
t.NAME LIKE '%Aggregates%'
GROUP BY
t.Name, s.Name, p.Rows
ORDER BY
TotalSpaceKB DESC;
Это покажет, какие агрегаты занимают больше всего места.
Если вы обнаружили, что агрегаты мешают работе, их можно:
- 🔧 Отключить для конкретного регистра (снять флажок
Использовать агрегаты). - 🔧 Уменьшить периодичность (например, оставить только месячные итоги).
- 🔧 Настроить ручное обновление вместо автоматического.
Агрегаты эффективны только для часто используемых данных с редкими изменениями. Если данные обновляются каждый час, а запрашиваются раз в неделю — агрегаты только замедлят работу.
Агрегаты и регламентные задания: как автоматизировать обновление
Чтобы агрегаты всегда содержали актуальные данные, их нужно регулярно обновлять. Для этого в 1С предусмотрены регламентные задания — задачи, выполняемые по расписанию. Настройка включает несколько шагов:
- Создайте новое регламентное задание в разделе
Администрирование → Регламентные задания. - Выберите тип задания —
Обновление агрегатовилиПерестроение агрегатов(второе нужно после изменений в конфигурации). - Настройте расписание. Оптимальное время — ночные часы, когда в базе нет пользователей.
- Укажите, для каких регистров или виртуальных таблиц нужно обновлять агрегаты (можно выбрать все или конкретные).
Пример настройки расписания:
- 🕒 Для ежедневных агрегатов: выполнение в
02:00. - 📅 Для месячных: выполнение
1-го числа в 03:00.
Важно учитывать:
- ⚠️ Если агрегаты обновляются во время работы пользователей, это может вызвать блокировки и замедление системы.
- ⚠️ Для больших баз обновление агрегатов может занимать несколько часов. В этом случае стоит разбить процесс на части или использовать фоновые задания.
Если у вас распределённая база (например, с филиалами), настройте регламентные задания так, чтобы они запускались в разное время на разных серверах. Это снизит нагрузку на сеть.
Практические примеры: где агрегаты дают максимальный эффект
Агрегаты наиболее полезны в следующих сценариях:
1. Торговые системы с большим ассортиментом
Если у вас тысячи номенклатурных позиций и ежедневные движения по складам, агрегаты для регистра ТоварыНаСкладах ускорят:
- 📋 Формирование остатков по складам.
- 📊 Отчёты по товарообороту (например,
Анализ продаж). - 🔍 Поиск товаров с нулевыми остатками.
2. Бухгалтерские отчёты с высокой детализацией
Для регистров бухгалтерии (например, Хозрасчетный) агрегаты ускоряют:
- 📑 Оборотно-сальдовую ведомость по всем счётам.
- 💰 Анализ субконто (например, расчёты с контрагентами).
- 📈 Карточку счёта с детализацией по дням.
3. Системы расчёта зарплаты
В модуле Зарплата и Управление Персоналом агрегаты полезны для:
- 👥 Расчёта начислений и удержаний по сотрудникам.
- 📅 Формирования отчётов по фонду оплаты труда.
- 💸 Аналитики по видам расчётов (премии, больничные и т. д.).
В каждом из этих случаев агрегаты сокращают время формирования отчётов в 10–100 раз, особенно если данные запрашиваются за длительные периоды (квартал, год).
Реальный кейс ускорения
В одной из компаний отчёт по остаткам товаров на 50 складах формировался 45 минут. После настройки агрегатов по дням и неделям время сократилось до 2 минут. При этом размер базы увеличился всего на 12 ГБ (при общем объёме 200 ГБ).
Как проверить, работают ли агрегаты в вашей базе
Чтобы понять, используются ли агрегаты и насколько они эффективны, выполните следующие шаги:
- Проверьте настройки регистров:
- Откройте конфигуратор.
- Найдите нужный регистр накопления или расчёта.
- Посмотрите на вкладку
Агрегаты— если флажокИспользовать агрегатыустановлен, агрегаты включены.
- Анализируйте планы запросов:
- Включите отладку запросов (
Отладка → Начать отладку). - Выполните отчёт, который должен использовать агрегаты.
- Посмотрите, есть ли в плане запроса упоминание таблиц с суффиксом
_Aggregates.
- Включите отладку запросов (
- Перейдите в
Администрирование → Регламентные задания. - Найдите задания с типами
Обновление агрегатовилиПерестроение агрегатов.
- В SQL Server Management Studio найдите таблицы с именами, содержащими
_Aggregates. - Посмотрите их размер — если он сопоставим с размером основных таблиц, возможно, агрегаты избыточны.
Если агрегаты настроены, но отчёты всё равно работают медленно, проверьте:
- ⚠️ Актуализированы ли данные (возможно, регламентное задание не выполнялось).
- ⚠️ Правильно ли выбрана периодичность (например, запрашиваются помесячные данные, а агрегаты построены только по дням).
- ⚠️ Нет ли блокировок на таблицы агрегатов (проверьте в
SQL Profiler).
FAQ: Частые вопросы об агрегатах в 1С
🔹 Можно ли использовать агрегаты в базовой версии 1С?
Нет, агрегаты доступны только в клиент-серверных версиях 1С:Предприятие (начиная с 8.2). В файловом варианте или базовой версии этот механизм не работает.
🔹 Сколько места занимают агрегаты?
Объём зависит от количества данных и периодичности. Например, для регистра с 1 млн записей и агрегатами по дням, месяцам и годам может потребоваться 10–30% от размера основных данных. Для точной оценки проверьте таблицы _Aggregates* в SQL.
🔹 Как часто нужно обновлять агрегаты?
Это зависит от частоты изменения данных:
- 📅 Ежедневно — если данные обновляются каждый день (например, продажи).
- 📆 Еженедельно/ежемесячно — для аналитических отчётов с низкой частотой изменений.
- 🔄 Вручную — если данные меняются редко (например, справочники).
Оптимально настраивать обновление на ночное время.
🔹 Можно ли отключить агрегаты для конкретного отчёта?
Да, для этого в тексте запроса отчёта добавьте директиву:
//{ОпцииЗапроса.ИспользоватьАгрегаты = Ложь}
Это заставит систему игнорировать агрегаты и считать данные «с нуля». Полезно для тестирования или если агрегаты устарели.
🔹 Почему после обновления конфигурации агрегаты перестали работать?
При изменении структуры регистра (например, добавлении новых измерений или ресурсов) агрегаты становятся неактуальными. После таких изменений необходимо:
- Обновить конфигурацию базы данных.
- Выполнить
Перестроить агрегатывручную или через регламентное задание.
Иначе система будет игнорировать устаревшие агрегаты.