Итоги регистров 1С: пересчёт, разделение итогов, агрегаты
Регистр накопления быстро отвечает на вопрос об остатке, потому что хранит готовые итоги, а не складывает все движения с начала времён. На собесе спрашивают, как устроена таблица итогов, что делать, когда итоги разошлись, и зачем разделение итогов и агрегаты.
// Так спрашивают: «Как платформа считает остаток на дату?» «Что делать, если итоги разошлись с движениями?» «Зачем разделение итогов?» «Есть ли агрегаты у регистра остатков?»
Остаток от ближайшего итога
Таблица итогов хранит остатки по месяцам и текущие остатки. Остаток на произвольную дату платформа считает от ближайшего итога и прибавляет или вычитает движения между итогом и датой.
Остатки() без даты берёт текущие итоги напрямую и ничего не досчитывает. Поэтому контроль остатков при проведении текущим днём проверяют без даты, это самый быстрый запрос к регистру.
Период рассчитанных итогов
Итоги по месяцам хранятся только до периода рассчитанных итогов. Если он остался далеко в прошлом, остатки на даты после него платформа досчитывает по большому объёму движений, и запросы тормозят. Регламентное обслуживание сдвигает период рассчитанных итогов вперёд.
Если итоги разошлись с движениями, например после сбоя, перепроводить документы не нужно: движения в порядке, испорчена только таблица итогов. Её собирают заново методом ПересчитатьИтоги() или из конфигуратора.
Для массовой загрузки движений итоги выключают УстановитьИспользованиеИтогов(Ложь), грузят и включают обратно. Иначе каждая запись обновляет итоги, и загрузка идёт в разы дольше.
Разделение итогов
Без разделения итогов два документа, которые пишут движения по одному товару и складу, обновляют одну строку итогов и ждут друг друга. С разделением у строки итогов появляется служебный разделитель, и параллельные записи попадают в разные строки. При чтении платформа складывает части.
Разделение помогает скорости записи, но мешает контролю остатков по новой методике: блокировка при записи учитывает разделитель, и два документа по одному товару проходят параллельно. Для контроля у набора движений включают БлокироватьДляИзменения, тогда блокировка ставится без разделителя.
Агрегаты
Агрегаты есть только у оборотных регистров. Это заранее посчитанные обороты в разрезе части измерений и периодов, например продажи по товару и месяцу без склада. Регистр работает либо в режиме итогов, либо в режиме агрегатов, вместе они не используются. Отчёт по продажам за год по месяцам с агрегатами читает двенадцать готовых строк на товар вместо всех продаж.
Как отвечать: «Остатки в отчёте разошлись с движениями. Что делаешь?»
Сначала проверяю, что дело в итогах: сравниваю остаток из виртуальной таблицы с суммой движений запросом по физической таблице. Если движения правильные, а итоги нет, перепроводить документы не нужно, достаточно пересчитать итоги методом ПересчитатьИтоги или из конфигуратора. А потом ищу причину: массовая загрузка с выключенными итогами без включения, сбой при записи.
Ответ отделяет движения от итогов и предлагает дешёвое лечение вместо перепроведения, которое занимает часы. Поиск причины в конце показывает, что кандидат не ограничивается симптомом.
На чём валят
- −Перепроводят все документы, когда разошлись итоги. Движения в порядке. Достаточно ПересчитатьИтоги.
- −Включают агрегаты регистру остатков. Агрегаты есть только у оборотных регистров.
- −Грузят миллион движений с включёнными итогами. Каждая запись обновляет итоги. Итоги выключают на загрузку и включают после.
- −Включают разделение итогов и не меняют контроль остатков. Документы по одному товару пишут параллельно. Нужен БлокироватьДляИзменения у набора.
Проверь себя
Пять вопросов из банка по этой подтеме. Всего их 12, остальные разбираются в тренажёре.
- Что значит «период рассчитанных итогов» регистра?A)Дата, после которой запрещено проводить документыB)Граница хранимых итоговC)Дата последнего пересчёта итогов по расписаниюD)Период хранения движений
показать ответ и разбор
+B)Граница хранимых итогов// разбор: Итоги хранятся до периода рассчитанных итогов. Остаток на дату позже этого периода платформа вычисляет от последнего рассчитанного итога и движений после него. Сдвигают период в «Управлении итогами». Запрет проведения задним числом — это дата запрета изменения, другой механизм.
- Что делает «Разделение итогов» регистра накопления?A)Параллельная запись без ожиданияB)Делит итоги по организациям учётаC)Хранит итоги в отдельной базе данныхD)Отключает итоги на время записи движений
показать ответ и разбор
+A)Параллельная запись без ожидания// разбор: Без разделения два документа по одному товару и складу обновляют одну строку итогов и ждут друг друга. С разделением платформа добавляет служебный разделитель, и параллельные записи попадают в разные строки, а при чтении они суммируются. Плата — чуть больше строк в итогах.
- У каких регистров есть агрегаты?A)У регистров бухгалтерииB)У регистров остатковC)У регистров сведенийD)У оборотных регистров
показать ответ и разбор
+D)У оборотных регистров// разбор: Агрегаты — заранее посчитанные обороты по выбранным измерениям и периодичностям, они ускоряют отчёты по оборотам. Есть только у оборотных регистров накопления, и включаются в режиме агрегатов вместо режима итогов. Регистр остатков использует таблицу итогов.
- Загружают 5 млн движений из старой системы. Как ускорить загрузку?A)Добавить индексы на все измеренияB)Включить разделение итогов регистраC)Загружать с клиента, а не на сервереD)Выключить итоги, потом пересчитать
показать ответ и разбор
+D)Выключить итоги, потом пересчитать// разбор: При включённых итогах каждая запись движения обновляет таблицу итогов. Если на время загрузки выключить использование итогов (УстановитьИспользованиеИтогов(Ложь)), движения пишутся быстрее, а итоги потом пересчитываются одним проходом. Пока итоги выключены, остатки запрашивать нельзя.
- Что дают текущие итоги регистра остатков?A)Итоги, пересчитанные каждую минутуB)Остатки по текущему пользователюC)Быстрый остаток на сейчас, без даты в запросеD)Итоги только за текущий месяц
показать ответ и разбор
+C)Быстрый остаток на сейчас, без даты в запросе// разбор: Текущие итоги — итог на последний момент учёта, их платформа поддерживает при каждой записи движений. Запрос Остатки() без параметра даты берёт их напрямую, без сложения движений. Поэтому для «сколько сейчас на складе» дату не передают, если не нужен конкретный момент.
дальше
Теорию прочитал. Навык ставится повторением
В Сеньорчике эта подтема идёт в ежедневных сессиях: движок возвращает её, пока ответы не станут уверенными, и ведёт прогресс отдельно по каждой подтеме. Теория внутри тоже бесплатна, бесплатная часть практики — одна сессия дня в сутки.