В экосистеме 1С:Предприятие понятие «агрегаты» часто вызывает путаницу у начинающих разработчиков и администраторов баз данных. Это связано с тем, что термин используется в разных контекстах: как механизм оптимизации платформы для работы с большими объемами данных и как специфические объекты метаданных в конфигурациях. Понимание этой разницы критично для построения производительных систем.

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

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

Системные агрегаты платформы и виртуальные таблицы

Платформа 1С:Предприятие 8 использует механизм агрегатов для ускорения работы с регистрами накопления. Это не объекты, которые разработчик создает вручную в конфигураторе, а внутренняя оптимизация СУБД и платформы. Когда вы обращаетесь к виртуальной таблице, например РегистрНакопления.Продажи.Обороты, система может использовать предварительно рассчитанные данные.

Для работы этого механизма необходимо, чтобы в свойствах регистра накопления была установлена галочка «Использовать агрегаты». Платформа самостоятельно решает, когда выгодно использовать агрегат, а когда делать прямую выборку. Это происходит на основе статистики использования и объема данных в таблицах движения.

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

💡

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

⚠️ Внимание: Агрегаты занимают дополнительное место на диске. Для очень больших баз (сотни ГБ и ТБ) размер таблиц итогов может стать существенным фактором при планировании дискового пространства сервера.

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

Регистры накопления: основа для агрегации данных

Разработчики часто путают системные агрегаты с регистрами накопления типа «Остатки». На самом деле, любой регистр накопления является инструментом для хранения агрегированных данных. Существует два основных вида таких регистров: остатки и обороты. Выбор типа влияет на то, как именно будут храниться и выбираться данные.

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

В отличие от них, регистры вида «Обороты» не хранят остатков. Они фиксируют только приход и расход за период. Для получения текущего состояния системе приходится суммировать все движения с начала времен. Это экономит место, но замедляет получение сальдо на текущую дату.

  • 📊 Вид «Остатки»: Хранит сальдо на каждую дату изменения. Быстрый доступ к текущему состоянию, но медленнее обороты за большие периоды.
  • 🔄 Вид «Обороты»: Хранит только движения. Быстрый расчет оборотов, но медленный расчет остатков на любую дату.
  • ⚙️ Периодичность: Влияет на granularity (зернистость) данных. Может быть внутридневная, день, месяц, квартал или год.

При проектировании информационной системы выбор правильного вида регистра — это уже половина успеха в оптимизации. Ошибка на этом этапе может привести к тому, что самые простые отчеты будут тормозить по мере роста базы.

📊 С каким типом регистров вы работаете чаще всего?
Только Остатки
Только Обороты
Комбинированные схемы
Не использую регистры

Настройка виртуальных таблиц и измерений

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

Измерения в 1С аналогичны группировкам в SQL (GROUP BY). Если вы часто делаете отчеты в разрезе «Склад» и «Номенклатура», эти реквизиты должны быть измерениями регистра. Ресурсы же — это те числовые поля, которые мы суммируем (Количество, Сумма).

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

// Пример запроса к виртуальной таблице с использованием параметров

ВЫБРАТЬ

ПродажиОбороты.Номенклатура,

ПродажиОбороты.КоличествоОборот

ИЗ

РегистрНакопления.Продажи.Обороты(&НачалоПериода, &КонецПериода, , ) КАК ПродажиОбороты

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

Секреты составных измерений

Если в вашем отчете часто группируются данные по иерархии (например, ГруппаНоменклатуры + СамаНоменклатура), настройка иерархических измерений в регистре может ускорить выборку в разы, избавив от сортировки в памяти.

Индексы и их влияние на скорость выборки

Даже при наличии агрегатов, скорость работы зависит от индексов. В 1С индексы строятся автоматически по измерениям регистра. Однако, порядок измерений имеет критическое значение. Индекс работает эффективно только если выборка идет по первым полям ключа.

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

Порядок измерений Эффективный запрос Неэффективный запрос Рекомендация
Склад, Номенклатура Отчет по складу Отчет по товару во всех складах Для складских отчетов
Номенклатура, Склад Карточка товара Инвентаризация склада Для анализа продаж товара
Контрагент, Договор Взаиморасчеты с клиентом Реестр платежей по всем Для работы с клиентами

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

⚠️ Внимание: Изменение состава или порядка измерений в уже работающей базе данных требует полной перепроводки документов или очистки таблиц движения. Делайте это только в нерабочее время!

Отличия агрегатов от регистров сведений

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

Регистр сведений хранит срезы значений. Он отвечает на вопрос «Какая была цена на 15 января?». Он не предназначен для суммирования значений за период. Попытка использовать его для хранения оборотов потребует написания сложного кода на стороне приложения для пересчета итогов.

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

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

💡

Главное правило: если вам нужно суммировать или вычитать значения за период — используйте Регистр Накопления. Если нужно просто хранить значение на дату — Регистр Сведений.

Диагностика и решение проблем производительности

Как понять, что агрегаты работают некорректно или не используются? В 1С есть мощный инструмент — Технологический журнал (ТЖ). Анализ логов ТЖ позволяет увидеть, какие запросы выполняются долго и какие планы выполнения выбирает СУБД.

Частая проблема — «рассинхронизация» итогов. Это случается, если фоновое задание обновления агрегатов было остановлено или упало с ошибкой. В этом случае отчеты показывают данные только по таблицам движений, что очень медленно. Проверить статус можно через консоль администрирования кластера серверов.

  • 🔍 Анализ ТЖ: Ищите события DBMSSQL или DBPostgreSQL с большим временем выполнения.
  • 🛠️ Консоль заданий: Проверьте, активно ли расписание обновления регистров.
  • 🧹 Пересчет итогов: Используйте обработку «Пересчет итогов регистров» для принудительного восстановления данных.

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

⚠️ Внимание: Интерфейсы и точные названия пунктов меню в различных версиях 1С (8.2, 8.3, 8.3.20+) могут отличаться. Всегда сверяйтесь с документацией к вашей конкретной версии платформы или обращайтесь к администратору системы.

FAQ: Часто задаваемые вопросы

Можно ли отключить агрегаты для ускорения записи документов?

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

Почему отчет показывает старые данные, хотя документ проведен?

Скорее всего, не отработал механизм обновления агрегатов. Проверьте расписание фоновых заданий на сервере 1С. Также возможно, что отчет строится по таблицам итогов, а данные еще не попали туда из таблиц движений. Попробуйте выполнить команду «Обновить» в отчете или перепровести документ.

Влияет ли количество измерений на размер базы данных?

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

Что такое «Вид регистра» и можно ли его изменить?

Вид регистра (Остатки, Обороты, Остатки и обороты) задается в конфигураторе при создании объекта. Изменить его для уже заполненного регистра без потери данных невозможно. Придется создавать новый регистр и писать обработку для переноса данных.

Как проверить, используется ли агрегат в конкретном запросе?

Включите логирование SQL-запросов в технологическом журнале. Если в тексте выполняемого SQL-запроса к базе данных вы видите обращение к таблице с суффиксом _AccReg или аналогичным (в зависимости от СУБД), значит, агрегат используется. Если идет обращение к таблице движений _DT, агрегат не задействован.