К статье
Практический материал

Разработка и Конфигурация · 10 мин

Как 1С:Предприятие 8 хранит итоги для оборотного регистра накопления

Как платформа 1С:Предприятие 8 хранит итоги оборотного регистра накопления: таблицы итогов, периодичность, режимы получения данных, настройка и типичные ошибки.

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

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

Какие таблицы создаёт платформа для оборотного регистра

При создании оборотного регистра накопления платформа формирует в базе данных минимум две физические таблицы. Первая — таблица движений, в которой каждая строка соответствует одной записи проведённого документа: регистратор, период, измерения, ресурсы и реквизиты. Вторая — таблица итогов (оборотов), где строки уже агрегированы: на каждую комбинацию «период + набор значений измерений» хранится сумма ресурсов за этот период.

Ключевое отличие от регистра остатков: у оборотного регистра нет таблицы остатков и нет признака вида движения (приход/расход). Ресурсы здесь всегда накапливаются как сумма оборота. Поэтому получить «остаток на дату» из оборотного регистра штатной виртуальной таблицей нельзя — для этого регистр и не предназначен.

Как платформа обновляет итоги при проведении документов

При проведении документа платформа записывает строки в таблицу движений и в той же транзакции корректирует таблицу итогов: к существующим агрегированным значениям прибавляются суммы новых движений по соответствующим комбинациям периода и измерений. Если комбинации ещё не было, создаётся новая строка итогов.

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

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

Роль периодичности регистра в хранении итогов

Свойство «Периодичность» оборотного регистра определяет, с какой детализацией по времени группируются итоги: в пределах месяца, квартала, года или с точностью до позиции документа. Чем крупнее период, тем меньше строк в таблице итогов и тем быстрее типовые отчёты, но тем меньше гибкости при построении произвольных выборок.

Если периодичность установлена «В пределах месяца», таблица итогов содержит одну строку на комбинацию измерений за каждый месяц. Запрос оборотов за день при этом будет вынужден обращаться к таблице движений и группировать её — на больших объёмах это заметно медленнее. Если аналитика строится по дням, имеет смысл выбирать периодичность «В пределах секунды» (по позиции документа) или пересмотреть структуру отчётов.

Маршрут решения

Как выбрать периодичность

Отчёты строятся только помесячно или поквартальноОставьте периодичность «В пределах месяца» — таблица итогов будет компактной
Нужны обороты по дням или произвольным интервалам внутри месяцаУстановите периодичность «В пределах секунды» и получайте обороты через группировку движений
Регистр большой, а детальная аналитика нужна редкоОставьте крупную периодичность и для редких запросов группируйте таблицу движений напрямую

Как состав измерений влияет на объём хранимых итогов

Каждое измерение оборотного регистра входит в ключ группировки таблицы итогов. Количество строк итогов примерно равно произведению числа периодов на число реально встречающихся комбинаций значений измерений. Лишнее измерение с высокой кардинальностью — например, «Документ» или «Номенклатура» там, где достаточно группы — способно увеличить таблицу итогов в разы без практической пользы.

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

Типичные ошибки
01
Добавление измерения с высокой кардинальностью — таблица итогов разрастается, запись движений замедляется
02
Ожидание остатков от оборотного регистра — виртуальной таблицы «Остатки» у него нет, нужен регистр остатков или суммирование оборотов
03
Мелкая периодичность при помесячных отчётах — избыточный объём итогов без выигрыша в скорости
04
Запросы к таблице движений вместо виртуальной таблицы «Обороты» там, где достаточно итогов — лишнее сканирование миллионов строк

Как запросы используют хранимые итоги

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

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

bsl
ВЫБРАТЬ Обороты.Номенклатура, Обороты.КоличествоОборот ИЗ РегистрНакопления.Продажи.Обороты(&НачалоМесяца, &КонецМесяца, Месяц, ) КАК Обороты

Что происходит с итогами при изменении структуры регистра

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

Удаление измерения необратимо теряет соответствующий разрез в движениях: сгруппировать исторические данные по удалённому измерению после реструктуризации уже нельзя. Если разрез может понадобиться в будущем, безопаснее оставить измерение или перенести данные в архивный регистр до изменения структуры.

Проверка корректности итогов и диагностика проблем

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

Косвенный признак проблем с итогами — резкая деградация скорости отчётов по оборотам без роста объёма данных. В этом случае проверяют фрагментацию индексов на уровне СУБД, актуальность статистики и план запроса: возможно, запрос перестал использовать таблицу итогов из-за несовместимой периодичности или отсутствия отборов.

Контрольные точки

Как проверить результат

Сравнение оборотов из виртуальной таблицы с группировкой движений
Норма

Суммы совпадают по всем измерениям

Тревожный признак

Есть расхождения — требуется тестирование и исправление базы

План запроса к таблице «Обороты» на стороне СУБД
Норма

Читается компактная таблица итогов

Тревожный признак

Сканируется таблица движений при совместимой периодичности

Скорость типового отчёта по оборотам
Норма

Время отклика стабильно по мере роста данных

Тревожный признак

Резкое замедление без роста объёма

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

Можно ли получить остатки из оборотного регистра накопления?

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

Нужно ли вручную пересчитывать итоги оборотного регистра?

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

Что выгоднее: одно измерение с детальной аналитикой или несколько укрупнённых?

Зависит от сценариев отчётности. Каждое измерение входит в ключ таблицы итогов, поэтому измерение с высокой кардинальностью резко увеличивает её объём. Если детальный разрез нужен редко, выгоднее держать его в реквизитах и группировать таблицу движений по требованию, а итоги хранить по укрупнённым измерениям.

Почему запрос по оборотам работает медленно, хотя итоги хранятся?

Частые причины: запрошенная периодичность детальнее хранимой, отсутствуют отборы по измерениям, широкий диапазон дат на большом регистре, устаревшая статистика или фрагментация индексов на стороне СУБД. Начните с анализа плана запроса и приведите периодичность запроса в соответствие с периодичностью регистра.

Меняется ли хранение итогов при периодичности «в пределах секунды»?

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

Что произойдёт с итогами при удалении измерения из регистра?

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

Итог

Что важно запомнить

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