Skip to main content

Регистры накопления

Регистры накопления — объекты для учета движения и накопления числовых данных в многомерных разрезах (товары, деньги, материалы). Есть два вида: остатков и оборотов.

Ключевые моменты

Измерения — разрезы учета (Склад, Номенклатура, Контрагент). Порядок измерений должен быть таким, чтобы наиболее часто используемые в условиях и соединениях измерения располагались первыми. Это обеспечивает эффективное индексирование, сокращает объем обрабатываемых данных и ускоряет выполнение запросов.

Ресурсы — числовые значения для накопления (Количество, Сумма).

Итоги — предрассчитанные остатки по измерениям с периодичностью месяц (на начало месяца), а также актуальные итоги (на крайнюю дату).

Агрегаты — дополнительные таблицы предрасчетов итогов в нестандартных разрезах для ускорения. Используются только для оборотных регистров. Не обновляются автоматически — их нужно настраивать в обработке «Агрегаты регистров».

Физическая таблица (движения): хранит все записи движений.

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

Актуальные остатки

  • Что это: Остатки на самую позднюю известную дату (крайняя дата).
  • Плюсы: Быстро, только из таблицы итогов.
  • Минусы: Могут быть неактуальны, если есть движения с будущими датами.
  • Использование: Передать Неопределено или пустую дату в параметр Период.

Алгоритм получения остатков

  1. Найдет ближайший рассчитанный итог (например, на 01.12.2023)
  2. Возьмет остатки из таблицы итогов на эту дату
  3. Досчитает по движениям с этой даты до нужной (15.12.2023)
  4. Если итогов нет → считает полностью по движениям

Алгоритм получения оборотов

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

Алгоритм получения остатков и оборотов для таблицы ОстаткиИОбороты

  • Без периодичности: Объединяет результат двух подзапросов — Остатки на начало периода и Обороты за период.
  • С периодичностью: Разбивает период на интервалы (день, месяц), получает остатки на начало каждого и обороты внутри него, затем объединяет.

Виртуальные таблицы и параметры

Параметр "Период"

Типы значений:

  • Дата — остатки на конкретную дату. Если передать пустую дату будут получены актуальные остатки.
  • Граница — объект, позволяющий явно задать, является ли момент времени включающим или исключающим. Это критически важно при точном расчете остатков и оборотов на дату или документ
  • МоментВремени — комбинированное значение даты и времени, включая точность до секунды и ссылку на регистратор (например, документ). По умолчанию при использовании МоментВремени границы интервалов считаются исключающими. Это означает, что движения, произошедшие в момент времени, не попадают в выборку остатков или оборотов
  • Неопределено — актуальные остатки.

Если использовать МоментВремени = 21.11.2003 12:00:00, остатки будут рассчитаны до этого момента (движения в 12:00:00 не учтутся).

Если использовать Граница(МоментВремени, ВидГраницы.Включая), движения в этот момент будут учтены.

Параметр "Периодичность"

Варианты:

  • Период — по умолчанию
  • Запись — развернуть по движениям (медленно, без итогов)
  • Авто — автоматически по используемым полям
  • День/Неделя/Месяц/Квартал — группировка по интервалам

Проблема: Периодичность = Запись → не используются итоги, строится по движениям → медленно.

Параметр "МетодДополнения"

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

  • ДвиженияИГраницыПериода (значение по умолчанию): В результат включаются все периоды (например, месяцы) внутри заданного диапазона, даже если в них не было движений (операций). Необходим, чтобы отразить состояние регистра на начало и конец указанного периода.
  • Движения: В результат включаются только те периоды, в которых были движения. "Пустые" граничные периоды отбрасываются.

Что обычно спрашивают?

1. Какие таблицы бывают у регистра накопления?

  • Физическая: Таблица движений.
  • Виртуальные: Остатки, Обороты, ОстаткиИОбороты.
  • Итоги: Таблица предрасчитанных итогов.
  • Агрегаты: Дополнительные таблицы итогов для оборотных регистров в кастомных разрезах.

2. Зачем нужны регистры? Зачем копируются данные из документов?

  • Агрегация данных: Объединение однотипных операций из разных документов в одну таблицу для быстрого получения сводок.
  • Независимость от структуры документа: Отчеты и алгоритмы работают с универсальной структурой регистров, а не с полями конкретных документов.
  • Производительность: Предрасчитанные итоги и индексы ускоряют выборки.

3. Сколько физических таблиц в регистре накопления оборотов?

  • Две: Таблица движений и таблица итогов (оборотов).
  • Плюс: Отдельные физические таблицы для каждого созданного агрегата.

4. Можем ли при создании набора записей установить отбор по измерениям?

  • Нет. Набор записей формируется только по регистратору (документу). Отбор по измерениям невозможен.

5. В чем разница между регистрами остатков и оборотов?

  • Остатки: хранит и остатки, и обороты. Есть таблица итогов для остатков. Позволяет получить остатки на любую дату.
  • Обороты: только обороты, нет остатков. Может иметь агрегаты.

6. Когда создавать агрегаты и сколько таблиц агрегатов можно создавать?

Когда частые запросы в нестандартных разрезах:

  • Группировка по кварталам (а не месяцам)
  • Отчеты по подмножеству измерений
  • Частые отборы по конкретному измерению

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

7. Есть оборотный регистр с измерениями Подразделение, Контрагент. Данные получаем в основном по кварталу и контрагенту. Как ускорить?

  • Основное: Создать агрегат с измерениями Контрагент и периодичностью Квартал.
  • Альтернативы:
    1. Поменять порядок измерений (Контрагент — первым). Изменение порядка — дорогостоящая операция при уже заполненной базе — требует перестройки таблиц из-за того что влияет на структуру индексов в СУБД.
    2. Создать индекс по измерению Контрагент.

8. Для чего могут отключать итоги?

Когда нужно провести много документов по регистру. Так как в этом случае при проведении документа не будут пересчитываться итоги, операция выполнится быстрее.

Материалы