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

Администрирование · 11 мин

Как хранятся итоги в 1С и как ими управлять

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

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

Физически движения регистра и его итоги — это разные таблицы в базе данных. Таблица движений содержит каждую строку каждого проведённого документа, а таблица итогов хранит свёрнутые значения по измерениям и периодам. Когда вы строите отчёт «Остатки товаров», система не сканирует миллионы строк движений, а читает компактную таблицу итогов и при необходимости «досчитывает» текущий период.

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

Что такое итоги и зачем они нужны платформе

Итог — это агрегированное значение ресурса регистра в разрезе его измерений на определённый момент или за период. Например, для регистра «Товары на складах» итог — это количество конкретной номенклатуры на конкретном складе. Без итогов каждый запрос остатков обязал бы платформу суммировать все движения с начала ведения учёта, что на больших базах заняло бы неприемлемое время.

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

Где физически хранятся итоги

В файловом варианте базы итоги находятся внутри файла 1Cv8.1CD, в клиент-серверном — в таблицах СУБД (MS SQL, PostgreSQL, Oracle). Для регистра накопления платформа создаёт отдельные таблицы: таблицу движений, таблицу итогов и служебные таблицы настроек. Имена этих таблиц генерируются платформой и не предназначены для прямой работы — обращаться к ним стоит только через встроенный язык и запросы.

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

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

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

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

Порядок безопасной массовой загрузки с отключением итогов
  1. 1
    Сделайте резервную копию базы и убедитесь, что пользователи не работают с отчётами по регистру
  2. 2
    Отключите использование итогов регистра программно или через «Управление итогами»
  3. 3
    Выполните загрузку и проведение документов
  4. 4
    Включите итоги обратно и дождитесь полного пересчёта
  5. 5
    Проверьте отчётом остатки на нескольких контрольных датах, включая границу загруженного периода

Управление итогами через интерфейс и код

В типовых конфигурациях управление итогами доступно в разделе администрирования (например, «Обслуживание» → «Регламентные операции» → «Управление итогами» в ряде конфигураций). Там можно увидеть список регистров, признак использования итогов и период, по который они рассчитаны. В конфигураторе аналогичные операции выполняются через «Администрирование» → «Управление итогами».

Программно итогами управляют методы менеджера регистра: УстановитьИспользованиеИтогов(), ПолучитьИспользованиеИтогов(), ПересчитатьИтоги(), УстановитьМинимальныйПериодРассчитанныхИтогов() и ПолучитьМинимальныйПериодРассчитанныхИтогов(). Для регистров бухгалтерии существует аналогичный набор методов с учётом специфики субконто.

bsl
РегистрыНакопления.ТоварыНаСкладах.УстановитьИспользованиеИтогов(Ложь);
// ... массовая загрузка документов ...
РегистрыНакопления.ТоварыНаСкладах.УстановитьИспользованиеИтогов(Истина);
РегистрыНакопления.ТоварыНаСкладах.ПересчитатьИтоги();

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

Итоги в регистрах бухгалтерии и сведений

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

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

Сравнение механизмов получения агрегированных данных

Таблицы итогов регистров

Быстрые остатки и обороты; требуют обслуживания и места в базе

Виртуальные таблицы срезов

Актуальные значения периодических сведений; опираются на индексы, а не на итоги

Прямой запрос по движениям

Работает даже при отключённых итогах, но медленно на больших объёмах

Типичные проблемы с итогами и их диагностика

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

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

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

Как проверить состояние итогов регистра

Признак использования итогов
Норма

Включён, отчёты по остаткам выполняются быстро

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

Отключён — запросы остатков тормозят или недоступны

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

Покрывает даты, на которые строятся отчёты

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

Граница далеко в прошлом — отчёты досчитываются по движениям

Сверка остатков с движениями
Норма

Остаток по виртуальной таблице равен сумме движений

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

Расхождение — требуется пересчёт итогов и тестирование базы

Типичные ошибки при работе с итогами
01
Пересчёт итогов в рабочее время — блокировки и простой пользователей на часах
02
Забыли включить итоги после загрузки — отчёты неделями работают медленно, а причина неочевидна
03
Перепроведение документов задним числом без контроля — каскадный пересчёт итогов всех последующих месяцев
04
Правка таблиц итогов напрямую в СУБД — разрушение согласованности базы и потеря поддержки

Обслуживание итогов: регламент и ограничения

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

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

Итог

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

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

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

Почему отчёт по остаткам стал работать медленно после загрузки данных?

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

Нужно ли пересчитывать итоги регулярно «для профилактики»?

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

Что произойдёт, если провести документ прошлым периодом?

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

Можно ли удалить старые итоги, чтобы уменьшить размер базы?

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

Почему оборотка не сходится с отчётом по проводкам?

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

Отличается ли хранение итогов в файловой и клиент-серверной базе?

Логика одинаковая, различается физическое размещение: в файловом варианте итоги внутри файла 1Cv8.1CD, в клиент-серверном — в таблицах СУБД. Практическое отличие в том, что на сервере пересчёт итогов выполняется быстрее и его удобнее автоматизировать регламентными заданиями.