Текущие остатки регистров 1С: как платформа хранит актуальные итоги и что делать, если они разошлись
Содержание
Актуальные итоги в 1С — это заранее посчитанные остатки регистра на текущий момент. Платформа хранит их отдельной строкой в таблице итогов и обновляет при каждой записи движений. Обновить их вручную можно в режиме Предприятия: Все функции → Стандартные → Управление итогами, команда пересчёта текущих итогов. Второй путь — Конфигуратор, Администрирование → Тестирование и исправление с флажком пересчёта итогов.
Механизм общий для платформы 8.3 и не зависит от конфигурации. Он работает одинаково в Бухгалтерии 3.0, ЗУП 3.1, УТ 11 и самописных базах. Касается регистров накопления вида «Остатки» и регистров бухгалтерии.
Как платформа хранит итоги регистров
У каждого регистра с итогами в базе данных минимум две таблицы:
- 📄 таблица движений — все записи, которые сделали документы;
- 📊 таблица итогов — остатки, свёрнутые по месяцам и по комбинациям измерений.
Когда отчёт просит остаток на 15 марта, платформа не суммирует все движения с начала учёта. Она берёт итог на ближайшую границу месяца и досчитывает движения за несколько дней. Поэтому отчёты по остаткам работают быстро даже в базе за 10 лет.
Где лежат актуальные итоги
Кроме помесячных строк в таблице итогов есть строки «на сейчас». Платформа записывает их с условной датой далеко в будущем: 3999-11-01. В MS SQL при смещении дат 2000 вы увидите 5999-11-01. Именно эти строки и называют актуальными, или текущими, итогами.
Если в запросе к виртуальной таблице Остатки не указана дата, платформа читает актуальные итоги напрямую. Никаких досчётов: одна строка на комбинацию измерений.
Период рассчитанных итогов
Второе понятие, без которого механизм не понять, — период рассчитанных итогов. Это дата, до которой платформа хранит помесячные итоги.
| Дата движения | Что обновляет платформа при записи |
|---|---|
| Раньше периода рассчитанных итогов | Все помесячные итоги от месяца движения до периода + актуальные итоги |
| Позже периода рассчитанных итогов | Только актуальные итоги |
Отсюда практический вывод. Если период рассчитанных итогов стоит на конце прошлого месяца, текущие документы трогают только строку актуальных итогов. Запись идёт быстро.
Три настройки регистра
| Настройка | Что делает | Метод менеджера регистра |
|---|---|---|
| Использование итогов | Включает или выключает хранение итогов целиком | УстановитьИспользованиеИтогов() |
| Использование текущих итогов | Отдельно управляет строками «на сейчас» | УстановитьИспользованиеТекущихИтогов() |
| Разделение итогов | Разносит итоги по нескольким строкам для параллельной записи | УстановитьРазделениеИтогов() |
Зачем обновлять актуальные итоги
В нормальной работе ничего пересчитывать не нужно. Платформа сама держит итоги в согласии с движениями. Пересчёт нужен, когда это согласие нарушено или когда итоги выключали.
Типичные поводы:
- 💥 аварийное завершение — сервер СУБД перезагрузился посреди массовой записи, файловая база закрылась при сбое питания;
- 🔌 итоги отключали — для загрузки данных, свёртки базы, переноса остатков;
- 🛠 правки в обход платформы — кто-то менял таблицы движений SQL-запросом или внешней обработкой с прямым доступом к СУБД;
- 🔁 восстановление из копии средствами СУБД после частичного отката;
- 📉 странные остатки — отчёт на текущую дату показывает одно, а тот же отчёт на конец сегодняшнего дня с явной датой — другое.
Последний симптом самый показательный. Запрос без даты читает актуальные итоги, а запрос с датой собирает остаток из помесячных итогов и движений. Если цифры расходятся, повреждены именно текущие итоги.
Сверка без программиста: сформируйте оборотно-сальдовую ведомость или отчёт по остаткам дважды — без даты окончания и с сегодняшней датой. Разница по одному и тому же складу или счёту указывает на сбой итогов, а не на ошибку в документах.
Способы обновить итоги в режиме Предприятия
Пересчёт в режиме Предприятия не требует выгонять всех пользователей из базы. Но он нагружает сервер и ставит блокировки на таблицы итогов. Запускайте его вне рабочего времени или в обед.
Нужна роль с правом «Управление итогами». Обычно оно есть у полного администратора.
Через стандартную обработку «Управление итогами»
- Включите команду «Все функции»:
Главное меню → Сервис и настройки → Параметры, флажок «Отображать команду “Все функции”». - Откройте
Главное меню → Все функции → Стандартные → Управление итогами. - Форма откроется в упрощённом режиме с часто используемыми командами. Для работы с отдельными регистрами переключитесь на полные возможности — ссылка внизу формы.
- На вкладке итогов выделите нужный регистр. Если не знаете, какой сломан, выделите все.
- Выполните пересчёт текущих итогов. Если расхождение и в отчётах на прошлые даты — полный пересчёт итогов.
- Повторите сверку из предыдущего раздела.
В полном режиме видна таблица регистров с колонками: использование итогов, текущих итогов, период итогов, разделение. Сразу видно, не остался ли какой-то регистр с выключенными итогами.
Через администрирование типовой конфигурации
В конфигурациях на БСП (Бухгалтерия 3.0, ЗУП 3.1, УТ 11, КА, ERP) есть своя форма «Управление итогами и агрегатами». Она лежит в разделе Администрирование, в группе обслуживания базы. Удобнее всего найти её поиском по слову «итоги» в этом разделе.
Форма делает то же, что стандартная обработка, плюс показывает расписание регламентных заданий по итогам.
Программно: для загрузок и обработок
Когда обработка записывает тысячи документов, текущие итоги на время отключают. Иначе каждая запись бьётся за одни и те же строки актуальных итогов.
Менеджер = РегистрыНакопления.ТоварыНаСкладах;
Менеджер.УстановитьИспользованиеТекущихИтогов(Ложь);
Попытка
// массовая запись документов
ЗагрузитьДокументы();
Исключение
Менеджер.УстановитьИспользованиеТекущихИтогов(Истина);
ВызватьИсключение;
КонецПопытки;
Менеджер.УстановитьИспользованиеТекущихИтогов(Истина);
При включении платформа сама пересчитает текущие итоги. Конструкция Попытка нужна, чтобы итоги не остались выключенными после ошибки в загрузке.
Для точечного пересчёта есть методы ПересчитатьТекущиеИтоги(), ПересчитатьИтоги() и ПересчитатьИтогиЗаПериод(Начало, Конец).
Пересчёт итогов в Конфигураторе
Если в режиме Предприятия пересчёт не помог или база не открывается, идите в Конфигуратор.
- Сделайте резервную копию: выгрузку
.dtили копию средствами СУБД. - Попросите всех выйти из базы. Тестирование и исправление требует монопольного доступа — работающие сеансы будут прерваны или не дадут запустить проверку.
- Откройте
Администрирование → Тестирование и исправление. - Оставьте флажок «Пересчёт итогов». Остальные проверки включайте по необходимости.
- Нажмите «Выполнить» и дождитесь протокола.
Для ночного запуска то же самое делается из командной строки пакетного режима Конфигуратора:
"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 берут данные из регистра товаров на складах, ОСВ в Бухгалтерии — из регистра бухгалтерии «Хозрасчетный».
Пересчитывать стоит именно этот регистр. Полный пересчёт всех регистров в большой базе идёт часами, точечный — минуты.
Профилактика и автоматизация контроля итогов
Сбои итогов почти всегда — следствие аварии или кривой загрузки. Профилактика сводится к трём вещам.
Регламентное задание по периоду итогов
В конфигурациях на БСП есть регламентное задание, которое раз в месяц переносит период рассчитанных итогов на конец прошлого месяца. Проверьте, что оно включено:
- Откройте
Администрирование, найдите в группе обслуживания «Регламентные и фоновые задания». - Найдите задание про период рассчитанных итогов.
- Убедитесь, что оно включено и выполняется без ошибок.
В серверной базе задания выполняются сами. В файловой — только пока открыт хотя бы один сеанс или настроен отдельный запуск.
Правила для загрузок
- ✅ обработка, которая отключает итоги, обязана включить их обратно — даже при ошибке;
- ✅ никаких прямых правок таблиц движений через SQL;
- ✅ после большой загрузки — сверка остатков по контрольным позициям.
Плановый контроль
Раз в квартал полезно запускать Тестирование и исправление с пересчётом итогов на копии базы. Если на копии протокол чистый — на рабочей базе делать ничего не надо. Если нашлись ошибки — повторите на рабочей базе в окно обслуживания.