Где 1С держит обороты: движения, итоги и физические таблицы базы
Содержание
Обороты в 1С 8.3 хранятся в регистрах: каждая операция пишет строку движения в таблицу движений регистра, а платформа параллельно ведёт таблицу итогов — накопленные суммы по месяцам. Отчёт вроде ОСВ не складывает все проводки с начала времён. Он берёт готовый итог за ближайший месяц и досчитывает только «хвост» движений.
Механизм общий для платформы и одинаково работает в Бухгалтерии 3.0, ЗУП 3.1, УТ 11 и ERP. Разница между конфигурациями только в том, какие регистры в них созданы.
Что такое обороты и зачем знать, где они лежат
Оборот — сумма движений за период: приход и расход по складу, дебет и кредит по счёту, начисления за месяц. Остаток — результат накопления оборотов на дату.
Знать устройство хранения полезно в трёх ситуациях:
- 📉 Отчёты тормозят. ОСВ за год формируется минуты — причина часто в состоянии итогов, а не в «слабом сервере».
- ⚖️ Цифры не сходятся. Оборотка показывает одно, карточка счета другое — значит, итоги рассогласованы с движениями.
- 🛠 Обслуживание базы. Администратору нужно понимать, какие таблицы растут быстрее всего и что можно безопасно пересчитать.
Ключевая мысль: первичны движения, итоги вторичны. Итоги всегда можно пересчитать из движений. Обратное невозможно.
Регистр бухгалтерии: где хранятся бухгалтерские обороты
Проводки в БП 3.0 — это записи регистра бухгалтерии Хозрасчетный. Каждая запись содержит период, регистратор (документ), счёт дебета и кредита, до трёх субконто с каждой стороны, сумму и количественные ресурсы.
Из чего состоит регистр бухгалтерии
| Часть | Что хранит | Кто пишет |
|---|---|---|
| Таблица движений | Каждую проводку целиком | Документ при проведении или ручная операция |
| Значения субконто | Аналитику проводок отдельной таблицей | Платформа вместе с движением |
| Итоги по счетам | Обороты и остатки по счёту за месяц без аналитики | Платформа автоматически |
| Итоги по счетам с субконто | То же в разрезе одного, двух, трёх субконто | Платформа автоматически |
Итоги ведутся помесячно. Когда документ проводится, платформа добавляет движение и сразу корректирует итоги того месяца и всех последующих месяцев до периода рассчитанных итогов.
Как отчёт достаёт обороты
ОСВ, анализ счёта и карточка читают виртуальные таблицы регистра:
Обороты— суммы Дт и Кт за период;ОборотыДтКт— обороты в корреспонденции счетов;Остатки— сальдо на дату;ОстаткиИОбороты— всё вместе, с периодичностью (день, месяц, квартал);ДвиженияССубконто— сами проводки с аналитикой.
Виртуальная таблица — не хранилище, а правило выборки. Если период запроса совпадает с границами месяцев, платформа берёт данные из итогов. Если период «рваный» (с 5 по 23 число), она досчитывает дни из таблицы движений.
Регистры накопления: обороты склада, взаиморасчётов и продаж
Складские остатки, взаиморасчёты, выручка, себестоимость в УТ 11, ERP и частично в БП хранятся в регистрах накопления. Их два вида, и обороты в них хранятся по-разному.
Регистр остатков
Таблица движений содержит приход и расход. Таблица итогов хранит остатки на конец каждого месяца в разрезе измерений.
Обороты как таковые здесь отдельно не накапливаются. Когда отчёт просит обороты за период, платформа суммирует движения из таблицы движений или вычисляет разницу остатков на границах месяцев.
Оборотный регистр
Используется для того, у чего нет остатка: продажи, выручка, затраты. Таблица итогов хранит обороты по периодам в разрезе измерений. Остатков у такого регистра нет вовсе.
Для оборотных регистров платформа поддерживает агрегаты — дополнительные заранее посчитанные таблицы с урезанным набором измерений и крупной периодичностью. Отчёт «продажи по месяцам по номенклатуре» читает агрегат и не трогает миллионы строк движений.
Регистр остатков и оборотный регистр: сравнение
| Признак | Регистр остатков | Оборотный регистр |
|---|---|---|
| Что в таблице итогов | Остатки на конец месяца | Обороты за период |
| Виртуальные таблицы | Остатки, Обороты, ОстаткиИОбороты | Только Обороты |
| Актуальные итоги | Есть | Нет |
| Агрегаты | Нет | Есть |
| Разделение итогов | Есть | Есть |
Актуальные итоги
У регистров остатков и регистра бухгалтерии есть отдельная строка итогов «на сейчас». Платформа хранит её с условной датой далеко в будущем — 5999-11-01. Запрос остатка без даты читает её напрямую и не перебирает ни месяцы, ни движения.
Управляет этим флаг «Использовать текущие итоги». Его отключают на время массовой загрузки или перепроведения, чтобы ускорить запись, а потом включают обратно.
Физическое хранение оборотов: файловая база и SQL
Файловый вариант
Вся база — один файл 1Cv8.1CD в каталоге информационной базы. Внутри него те же логические таблицы, что и в СУБД: движения, итоги, значения субконто. Открыть их внешним инструментом нельзя, формат собственный.
Практические следствия:
- 📦 размер
1Cv8.1CDрастёт в основном за счёт таблиц движений регистров; - 🗜 после массового удаления файл сам не уменьшается — помогает сжатие таблиц в режиме тестирования и исправления;
- 🐢 файловый вариант заметно медленнее на отчётах за длинные периоды при нескольких пользователях.
Клиент-серверный вариант
В MS SQL или PostgreSQL каждая часть регистра — отдельная таблица с обезличенным именем. Типичные префиксы:
| Префикс таблицы | Что внутри |
|---|---|
_AccumRg | Движения регистра накопления |
_AccumRgT | Итоги регистра остатков |
_AccumRgTn | Итоги оборотного регистра |
_AccumRgAgg… | Агрегаты и их настройки |
_AccRg | Проводки регистра бухгалтерии |
_AccRgED | Значения субконто проводок |
_AccRgAT0, _AccRgAT1… | Итоги по счетам без субконто, с одним субконто и далее |
Число после префикса — внутренний номер объекта, у каждой базы своё. Узнать, какая таблица отвечает за какой регистр, можно встроенным методом. Выполните код во внешней обработке или в консоли кода под администратором:
Структура = ПолучитьСтруктуруХраненияБазыДанных();
Для Каждого Строка Из Структура Цикл
Если СтрНайти(Строка.Метаданные, "РегистрБухгалтерии.Хозрасчетный") > 0 Тогда
Сообщить(Строка.ИмяТаблицыХранения + " — " + Строка.Назначение);
КонецЕсли;
КонецЦикла;
В колонке Назначение будет видно, где основная таблица, где итоги по счетам, где значения субконто.
Таблицы 1С в СУБД только читают. Прямая правка данных регистров через SQL нарушает лицензионное соглашение и рассогласовывает итоги с движениями. Исправления делаются средствами платформы.
Временные таблицы и кэш: что ещё участвует в расчёте оборотов
Кроме постоянных таблиц, при формировании отчёта появляются временные данные. Они ничего не хранят долго, но влияют на скорость.
- 🧮 Временные таблицы запроса. Конструкция
ПОМЕСТИТЬв запросе отчёта создаёт таблицу на время выполнения. В MS SQL она живёт вtempdb, в PostgreSQL — во временном пространстве сеанса. Большая ОСВ с детализацией по субконто может занять там гигабайты. - 💾 Файловый вариант складывает временные данные во временный каталог пользователя Windows. Мало места на системном диске — отчёт падает с ошибкой записи.
- 🔁 Кэш платформы. Сервер кэширует метаданные и результаты повторяющихся обращений к справочникам. Обороты регистров между отчётами не кэшируются — каждое формирование читает итоги и движения заново.
Частая путаница: ключ запуска /ClearCache очищает кэш конфигурации на клиенте. На суммы оборотов он не влияет и расхождения в отчётах не лечит.
Расхождения в оборотах: диагностика и пересчёт итогов
Итоги рассогласуются с движениями после аварийного отключения, сбоя СУБД, обрыва обмена или некорректной ручной правки. Симптом всегда один: два отчёта за один период дают разные цифры.
Пересчёт итогов из пользовательского режима
- Сделайте резервную копию базы — пересчёт затрагивает все регистры.
- В БП 3.0 откройте
Администрирование → Обслуживание → Корректировка данных → Управление итогами. В других конфигурациях та же обработка открывается через «Функции для технического специалиста» (Все функции→ Стандартные → Управление итогами). - Переключитесь в полные возможности и отметьте нужные регистры.
- Нажмите команду пересчёта итогов. Для больших баз пересчитывайте не всё сразу, а за выбранный период.
- Сравните ОСВ и карточку счета ещё раз.
Пересчёт в пользовательском режиме можно запускать без монопольного доступа, но в рабочее время он заметно нагружает сервер и блокирует запись в регистры. Лучше вечером.
Пересчёт через Конфигуратор
Если расхождения массовые, используйте Администрирование → Тестирование и исправление в Конфигураторе с флажком «Пересчёт итогов». Этот режим требует монопольного доступа: все пользователи должны выйти из базы, их сеансы оборвутся. Планируйте на нерабочее время и сделайте выгрузку .dt перед запуском.
Если после пересчёта итогов цифры всё равно не сходятся, проблема не в итогах, а в самих движениях: документ проведён с ошибкой или в базе есть ручные проводки. Ищите регистратор через карточку счета.
Оптимизация хранения оборотов: советы администратору
1. Держите период рассчитанных итогов актуальным
В Управлении итогами задаётся дата, до которой платформа поддерживает итоги. Её обычно ставят на конец прошлого месяца. Тогда проведение документов текущего месяца не пересчитывает итоги за будущие периоды, а отчёты за закрытые месяцы читают готовые суммы. В конфигурациях на БСП это делает регламентное задание установки периода рассчитанных итогов — проверьте, что оно включено.
2. Включите разделение итогов
Режим разделения итогов позволяет нескольким пользователям одновременно писать в один регистр без ожидания на блокировке строки итогов. Полезно при интенсивном проведении: розница, склад, массовые начисления. Плата — немного больше строк в таблице итогов и чуть медленнее чтение.
3. Настройте агрегаты для оборотных регистров
Если отчёты по продажам строятся по нескольким типовым разрезам, включите режим агрегатов и заполните их. Платформа сама подберёт оптимальный набор по статистике обращений. Агрегаты полезны только там, где отчётов много, а измерений в регистре больше, чем в отчётах.
4. Обслуживайте СУБД
Для серверной базы обороты читаются через индексы таблиц движений и итогов. Без обслуживания они фрагментируются.
- 🔧 перестроение и реорганизация индексов — раз в неделю;
- 📊 обновление статистик — ежедневно, ночью;
- 🧹 для PostgreSQL — регулярный
VACUUM ANALYZE.
5. Не храните лишнюю историю бесконечно
Десять лет проводок в одной базе — это сотни миллионов строк в _AccRg. Свёртка базы оставляет остатки на дату и удаляет старые движения. Операция необратима: перед ней сохраните полную копию и архивную базу.
Частые ошибки и как их избежать
- ❌ Отключили итоги перед загрузкой и забыли включить. Отчёты работают, но в разы медленнее. Проверяйте
Управление итогамипосле каждой массовой операции. - ❌ Пересчитывают итоги при каждом расхождении. Если документ проведён неверно, пересчёт ничего не изменит. Сначала найдите регистратор в карточке.
- ❌ Ставят период рассчитанных итогов в будущее. Тогда проведение в текущем месяце обновляет итоги на много месяцев вперёд и замедляет запись.
- ❌ Чистят tempdb или временный каталог при открытых сеансах. Отчёты пользователей обрываются с ошибкой. Делайте это при остановленной службе и вне рабочего времени.