Текущие остатки регистров 1С: как платформа хранит актуальные итоги и что делать, если они разошлись

· 9 мин

Содержание

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

Механизм общий для платформы 8.3 и не зависит от конфигурации. Он работает одинаково в Бухгалтерии 3.0, ЗУП 3.1, УТ 11 и самописных базах. Касается регистров накопления вида «Остатки» и регистров бухгалтерии.

Как платформа хранит итоги регистров

У каждого регистра с итогами в базе данных минимум две таблицы:

  • 📄 таблица движений — все записи, которые сделали документы;
  • 📊 таблица итогов — остатки, свёрнутые по месяцам и по комбинациям измерений.

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

Где лежат актуальные итоги

Кроме помесячных строк в таблице итогов есть строки «на сейчас». Платформа записывает их с условной датой далеко в будущем: 3999-11-01. В MS SQL при смещении дат 2000 вы увидите 5999-11-01. Именно эти строки и называют актуальными, или текущими, итогами.

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

Период рассчитанных итогов

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

Дата движенияЧто обновляет платформа при записи
Раньше периода рассчитанных итоговВсе помесячные итоги от месяца движения до периода + актуальные итоги
Позже периода рассчитанных итоговТолько актуальные итоги

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

Три настройки регистра

НастройкаЧто делаетМетод менеджера регистра
Использование итоговВключает или выключает хранение итогов целикомУстановитьИспользованиеИтогов()
Использование текущих итоговОтдельно управляет строками «на сейчас»УстановитьИспользованиеТекущихИтогов()
Разделение итоговРазносит итоги по нескольким строкам для параллельной записиУстановитьРазделениеИтогов()

Зачем обновлять актуальные итоги

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

Типичные поводы:

  • 💥 аварийное завершение — сервер СУБД перезагрузился посреди массовой записи, файловая база закрылась при сбое питания;
  • 🔌 итоги отключали — для загрузки данных, свёртки базы, переноса остатков;
  • 🛠 правки в обход платформы — кто-то менял таблицы движений SQL-запросом или внешней обработкой с прямым доступом к СУБД;
  • 🔁 восстановление из копии средствами СУБД после частичного отката;
  • 📉 странные остатки — отчёт на текущую дату показывает одно, а тот же отчёт на конец сегодняшнего дня с явной датой — другое.

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

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

Способы обновить итоги в режиме Предприятия

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

Нужна роль с правом «Управление итогами». Обычно оно есть у полного администратора.

Через стандартную обработку «Управление итогами»

  1. Включите команду «Все функции»: Главное меню → Сервис и настройки → Параметры, флажок «Отображать команду “Все функции”».
  2. Откройте Главное меню → Все функции → Стандартные → Управление итогами.
  3. Форма откроется в упрощённом режиме с часто используемыми командами. Для работы с отдельными регистрами переключитесь на полные возможности — ссылка внизу формы.
  4. На вкладке итогов выделите нужный регистр. Если не знаете, какой сломан, выделите все.
  5. Выполните пересчёт текущих итогов. Если расхождение и в отчётах на прошлые даты — полный пересчёт итогов.
  6. Повторите сверку из предыдущего раздела.

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

Через администрирование типовой конфигурации

В конфигурациях на БСП (Бухгалтерия 3.0, ЗУП 3.1, УТ 11, КА, ERP) есть своя форма «Управление итогами и агрегатами». Она лежит в разделе Администрирование, в группе обслуживания базы. Удобнее всего найти её поиском по слову «итоги» в этом разделе.

Форма делает то же, что стандартная обработка, плюс показывает расписание регламентных заданий по итогам.

Программно: для загрузок и обработок

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

Менеджер = РегистрыНакопления.ТоварыНаСкладах;
Менеджер.УстановитьИспользованиеТекущихИтогов(Ложь);
Попытка
    // массовая запись документов
    ЗагрузитьДокументы();
Исключение
    Менеджер.УстановитьИспользованиеТекущихИтогов(Истина);
    ВызватьИсключение;
КонецПопытки;
Менеджер.УстановитьИспользованиеТекущихИтогов(Истина);

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

Для точечного пересчёта есть методы ПересчитатьТекущиеИтоги(), ПересчитатьИтоги() и ПересчитатьИтогиЗаПериод(Начало, Конец).

Пересчёт итогов в Конфигураторе

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

  1. Сделайте резервную копию: выгрузку .dt или копию средствами СУБД.
  2. Попросите всех выйти из базы. Тестирование и исправление требует монопольного доступа — работающие сеансы будут прерваны или не дадут запустить проверку.
  3. Откройте Администрирование → Тестирование и исправление.
  4. Оставьте флажок «Пересчёт итогов». Остальные проверки включайте по необходимости.
  5. Нажмите «Выполнить» и дождитесь протокола.

Для ночного запуска то же самое делается из командной строки пакетного режима Конфигуратора:

"C:\Program Files\1cv8\8.3.24.1586\bin\1cv8.exe" DESIGNER /F "D:\Bases\Buh" /N "Администратор" /P "пароль" /IBCheckAndRepair -RecalcTotals /Out "D:\Logs\recalc.log"

Путь к 1cv8.exe и номер версии подставьте свои. Для серверной базы вместо /F укажите /S "сервер\имя_базы".

Утилита chdbfl.exe для файловых баз проверяет физическую целостность файла 1Cv8.1CD. Итоги она не пересчитывает — путать её с тестированием и исправлением не стоит.

Как итоги влияют на скорость работы базы

Итоги — это компромисс. Чтение остатков ускоряется, запись движений замедляется. Каждая настройка сдвигает баланс.

Актуальные итоги и блокировки

Строка актуальных итогов — «горячая точка». Десять менеджеров проводят реализацию с одного склада, и каждая проводка хочет изменить одну и ту же строку остатка. Транзакции выстраиваются в очередь.

Отсюда ошибки блокировок в часы пик. Лечение — не отключение актуальных итогов, а их разделение.

Разделение итогов

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

РежимПлюсыМинусы
Без разделенияБыстрое чтение остатковОчереди при одновременной записи
С разделениемПараллельная запись без ожиданияЧуть медленнее чтение, больше таблица итогов

Разделение имеет смысл в клиент-серверной базе с активной одновременной работой. В файловой базе на 3–5 пользователей выигрыша нет.

Когда текущие итоги отключают

На каждый день отключать их не нужно. Без актуальных итогов запрос остатков на текущий момент досчитывается от последнего рассчитанного периода — отчёты и проведение замедляются.

Диагностика и типовые ошибки с итогами

Диагностика: выберите симптом

Как найти регистр-виновник

Если отчёт показывает подозрительные остатки, определите, на каком регистре он построен. В типовых отчётах это видно в настройках: «Остатки товаров» в УТ 11 берут данные из регистра товаров на складах, ОСВ в Бухгалтерии — из регистра бухгалтерии «Хозрасчетный».

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

Профилактика и автоматизация контроля итогов

Сбои итогов почти всегда — следствие аварии или кривой загрузки. Профилактика сводится к трём вещам.

Регламентное задание по периоду итогов

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

  1. Откройте Администрирование, найдите в группе обслуживания «Регламентные и фоновые задания».
  2. Найдите задание про период рассчитанных итогов.
  3. Убедитесь, что оно включено и выполняется без ошибок.

В серверной базе задания выполняются сами. В файловой — только пока открыт хотя бы один сеанс или настроен отдельный запуск.

Правила для загрузок

  • ✅ обработка, которая отключает итоги, обязана включить их обратно — даже при ошибке;
  • ✅ никаких прямых правок таблиц движений через SQL;
  • ✅ после большой загрузки — сверка остатков по контрольным позициям.

Плановый контроль

Раз в квартал полезно запускать Тестирование и исправление с пересчётом итогов на копии базы. Если на копии протокол чистый — на рабочей базе делать ничего не надо. Если нашлись ошибки — повторите на рабочей базе в окно обслуживания.

Перед закрытием месяца проверьте итоги
Выполнено: 0 / 5

Частые вопросы

Можно ли пересчитать итоги, пока пользователи работают?
В режиме Предприятия — да, монопольный доступ не нужен. Но пересчёт блокирует таблицы итогов регистра, и проведение по нему будет ждать. Лучше выбрать время с минимальной нагрузкой.
Чем актуальные итоги отличаются от агрегатов?
Актуальные итоги относятся к регистрам остатков и регистрам бухгалтерии. Агрегаты — механизм для оборотных регистров накопления: заранее свёрнутые обороты по выбранным измерениям и периодичности.
Сколько идёт пересчёт итогов?
Зависит от числа движений. Регистр с сотнями тысяч записей пересчитывается за минуты, регистр бухгалтерии крупной компании за 5–7 лет — часами. Пересчёт только текущих итогов быстрее полного.
Изменятся ли данные в документах после пересчёта?
Нет. Пересчёт заново строит только таблицы итогов из движений. Документы и сами движения не меняются.
Нужно ли пересчитывать итоги после обновления конфигурации?
Обычно нет. Если обновление изменило структуру регистра, платформа сама перестроит его таблицы при реструктуризации.