Свертка базы 1С: что происходит с данными, итогами и отчётами
Содержание
Свертка в 1С — это замена старых документов и движений остатками на выбранную дату. Всё, что было до этой даты, сжимается в несколько служебных записей «на начало периода», а сами документы удаляются. База худеет, запросы к регистрам работают быстрее, но подробная история за свёрнутые годы пропадает.
Механизм свертки работает на прикладном уровне: в типовых конфигурациях 1С:Предприятия 8.3 это отдельная обработка, а не настройка платформы. Платформа даёт два похожих инструмента — итоги регистров и агрегаты. Их часто путают со сверткой, хотя записи они не удаляют. Ниже по порядку: как устроен алгоритм, чем он отличается от итогов, как его запустить и где он ломается.
Зачем нужна свертка информационной базы 1С
Свертку делают не ради порядка, а когда база мешает работать. Типичные поводы:
- 📦 Размер. Файловая база за 8–10 лет дорастает до 15–30 ГБ, резервная копия делается часами.
- 🐢 Скорость. Проведение документа задним числом пересчитывает последовательности и итоги, закрытие месяца идёт всё дольше.
- 🔁 Обмены и РИБ. Начальная выгрузка нового узла с полной историей тянется сутками.
- 🧹 Смена учётной политики или плана счетов. Проще начать с чистых остатков, чем тащить старые движения.
У свертки один физический смысл: вместо тысяч строк движений по регистру хранится одна строка остатка на дату по каждому сочетанию измерений. Если на складе «Основной» по товару «Кабель ВВГ 3×2,5» за пять лет было 4 200 приходов и расходов, после свертки останется одна запись: «на 01.01 остаток 350 м на сумму 41 300 руб.».
Свертка не трогает справочники. Контрагенты, номенклатура, сотрудники и договоры остаются. Удаляются только документы и их движения до даты свертки.
Когда сворачивать не нужно
- Идёт налоговая проверка или запрос документов за свёртываемые годы.
- База меньше 2–3 ГБ и тормозит по другой причине: мало памяти, медленный диск, нет обновления статистики в СУБД.
- Пользователям регулярно нужны отчёты с детализацией по документам за прошлые годы.
В этих случаях сначала ищут причину медленной работы, а свертку откладывают.
Как устроен алгоритм свертки данных
Любая свертка, типовая или самописная, проходит одни и те же этапы. Порядок важен: если поменять местами расчёт остатков и удаление, остатки посчитать будет уже не из чего.
- Выбор даты свертки. Обычно это начало года, например
01.01текущего года. Все документы с датой меньше этой будут свёрнуты. - Снимок остатков. По каждому регистру остатков и регистру бухгалтерии берутся остатки на дату свертки в разрезе всех измерений и субконто.
- Запись остатков служебными документами. Остатки фиксируются документами ввода остатков или специальными служебными документами с датой чуть раньше даты свертки. Так у регистров появляется «стартовая точка».
- Удаление старых документов. Документы до даты свертки удаляются вместе с движениями. Связанные регистры сведений, если они подчинены регистратору, очищаются тоже.
- Обработка ссылок. Если документ после даты свертки ссылается на удалённый (например, основание или документ расчётов), ссылку заменяют на служебный документ остатков или очищают.
- Пересчёт итогов. После удаления массы движений итоги регистров пересчитываются, иначе запросы остатков дадут неверные цифры.
Что происходит с разными видами регистров
| Вид данных | Что делает свертка | Что остаётся |
|---|---|---|
| Регистр накопления остатков | Сжимает движения в остаток на дату | Одна запись на сочетание измерений |
| Оборотный регистр накопления | Обороты до даты не нужны для остатков | Обычно ничего, история оборотов теряется |
| Регистр бухгалтерии | Сальдо по счетам и субконто на дату | Проводки ввода остатков |
| Регистр сведений периодический | Срез последних на дату | Последнее значение на дату свертки |
| Справочники, константы | Не трогает | Всё |
Оборотные данные (выручка по месяцам, продажи по менеджерам) после свертки за прошлые периоды не восстановить из базы. Если они нужны для аналитики, выгрузите отчёты заранее.
Свертка и расчёт итогов: в чём разница
Это главный источник путаницы. Итоги регистров — штатный механизм платформы, он есть в каждой базе без всяких обработок. Свертка — разовая операция, которая меняет сами данные.
Итоги — это служебная таблица, где платформа заранее хранит остатки регистра на конец каждого месяца. Запрос «остаток на 15 марта» берёт итог на конец февраля и досчитывает движения за 15 дней. Сами движения при этом никуда не деваются.
Свертка удаляет движения. После неё нечего досчитывать за прошлые годы: истории нет, есть только стартовый остаток.
| Признак | Итоги регистров | Агрегаты | Свертка базы |
|---|---|---|---|
| Уровень | Платформа | Платформа | Прикладная обработка |
| Удаляет движения | Нет | Нет | Да |
| Для каких регистров | Остатков, бухгалтерии | Оборотных регистров накопления | Всех, по логике обработки |
| Размер базы | Слегка растёт | Слегка растёт | Заметно уменьшается |
| Обратимость | Полная | Полная | Только из резервной копии |
Как управлять итогами и агрегатами
В режиме 1С:Предприятие итогами управляют через Все функции → Стандартные → Управление итогами. Если пункта «Все функции» не видно, его включают в параметрах программы флажком отображения команды «Все функции».
Там доступно:
- установить период рассчитанных итогов — до какой даты итоги считаются заранее;
- пересчитать итоги по выбранным регистрам;
- включить или выключить использование итогов на время массовой загрузки;
- для оборотных регистров — перейти в режим агрегатов, заполнить и перестроить их.
Те же действия есть во встроенном языке:
// Пересчёт итогов регистра накопления
РегистрыНакопления.ТоварыНаСкладах.ПересчитатьИтоги();
// Итоги заранее считаются только до заданной даты
РегистрыНакопления.ТоварыНаСкладах.УстановитьМаксимальныйПериодРассчитанныхИтогов(НачалоМесяца(ТекущаяДата()));
// Оборотный регистр: перевод в режим агрегатов и обновление
РегистрыНакопления.Продажи.УстановитьРежимАгрегатов(Истина);
РегистрыНакопления.Продажи.ОбновитьАгрегаты();
Имена регистров в примере условные, подставьте свои из дерева конфигурации.
Если отчёт по остаткам тормозит, сначала проверьте период рассчитанных итогов. Когда он отстал на год, платформа досчитывает движения за 12 месяцев на каждом запросе. Сдвиг периода решает проблему за минуты и без потери истории.
Свернуть() в коде: агрегация данных в памяти
Разработчики называют сверткой ещё одну вещь — метод Свернуть() у таблицы значений. Он группирует строки по одним колонкам и суммирует другие. Данные в базе не меняются, всё происходит в памяти.
// ТЗ: колонки Номенклатура, Склад, Количество, Сумма, Документ
ТЗ.Свернуть("Номенклатура, Склад", "Количество, Сумма");
// В таблице остались только 4 колонки:
// Номенклатура, Склад, Количество, Сумма.
// Колонка Документ удалена, строки с одинаковыми товаром и складом сложены.
Правила, которые стоит держать в голове:
- в первом параметре — колонки группировки, во втором — колонки суммирования, через запятую;
- колонки, не указанные ни там, ни там, из таблицы удаляются;
- суммируются только числа; если в колонке суммирования попалось не число, результат будет неверным;
- одна колонка не может быть одновременно в группировке и в суммировании.
Если данные берутся запросом, группировку дешевле сделать в самом запросе через СГРУППИРОВАТЬ ПО и СУММА(). Тогда в клиент не тянутся лишние строки. Свернуть() уместен, когда таблица собрана в коде из нескольких источников.
Как подготовить и выполнить свертку базы
В актуальных релизах «1С:Бухгалтерии предприятия 3.0» и ряда других типовых конфигураций есть встроенная обработка «Свертка информационной базы». В БП 3.0 её ищут в разделе Администрирование → Обслуживание, в группе команд по корректировке данных. Если в вашем релизе команды нет, найдите её через поиск по меню: в строке поиска интерфейса наберите слово «свертка».
Подготовка
Свертку сначала прогоняют на копии базы, а не на рабочей. Это не формальность: только на копии видно, сколько займёт операция и сойдутся ли остатки.
Выполнение
- Разверните копию базы и запустите обработку свертки.
- Укажите дату свертки и организации, если обработка позволяет выбрать их.
- Запустите процесс. На базе в 20 ГБ он может занять от нескольких часов до суток — это нормально.
- После завершения сформируйте ту же ОСВ на ту же дату и сравните с сохранённой.
- Проверьте остатки по складам, взаиморасчёты с контрагентами и расчёты по зарплате.
- Если всё сошлось, повторите процедуру на рабочей базе в нерабочее время.
На время свертки пользователи должны выйти из базы, а регламентные задания и обмены — быть остановлены. Иначе документы, которые кто-то проведёт параллельно, могут попасть под удаление или испортить остатки.
Альтернатива: новая база с остатками
Второй путь — не сворачивать старую базу, а завести новую и перенести в неё справочники и начальные остатки. Старая база остаётся архивом только для чтения.
| Способ | Плюсы | Минусы |
|---|---|---|
| Свертка в текущей базе | Одна база, настройки и пользователи на месте | Долго, риск ошибки в рабочей базе |
| Новая база + архив | История цела в архиве, новая база «чистая» | Две базы, нужно переносить остатки и настройки |
Для небольших организаций второй путь часто проще и безопаснее.
Как свертка влияет на размер базы, скорость и отчёты
Эффект зависит от доли документов, которые уходят под свертку. Если сворачиваются 7 лет из 9, движений становится в разы меньше.
Что ускоряется:
- 🚀 запросы остатков и оборотов — меньше строк в таблицах движений;
- 🚀 проведение документов задним числом и восстановление последовательностей ;
- 🚀 резервное копирование и обновление конфигурации ;
- 🚀 начальная выгрузка узлов обмена.
Что теряется:
- 📉 отчёты с детализацией до документа за свёрнутые периоды;
- 📉 оборотные данные: выручка, продажи, расходы по месяцам до даты свертки;
- 📉 возможность распечатать первичку за прошлые годы из этой базы.
Почему файл базы не уменьшился
Частый сюрприз: свертка прошла, а файл 1Cv8.1CD весит столько же. Платформа помечает освободившееся место как пустое, но сразу файл не сжимает.
Для файловой базы:
- в конфигураторе выполните
Администрирование → Тестирование и исправлениеи отметьте сжатие таблиц информационной базы; - либо выгрузите базу в
.dtи загрузите в новую пустую базу — файл получится минимального размера.
Для клиент-серверной базы место освобождается средствами СУБД. Это задача администратора сервера: сжатие файлов данных выполняется отдельно и в окно обслуживания.
Тестирование и исправление, а также загрузка .dt требуют монопольного доступа. Все сеансы пользователей будут завершены, поэтому запускайте их вечером или в выходной.
Ограничения и ошибки при свертке 1С
Свертка — операция без отката. Ниже то, на чём она чаще всего спотыкается.
Ещё несколько ограничений, о которых лучше знать заранее:
- Доработанные конфигурации. Типовая обработка сворачивает типовые регистры. Собственные регистры и документы, добавленные программистом, она может не учесть. Их проверяют вручную или дорабатывают обработку.
- РИБ. Сворачивать базу с распределёнными узлами без плана нельзя: узлы надо отключить, свернуть центральную базу и создать узлы заново.
- Хранение документов. Бумажные и электронные первичные документы за свёрнутые годы всё равно нужно хранить по срокам архивного и налогового законодательства. Свертка базы не отменяет этих сроков, поэтому архивную копию базы держат до их истечения.
- Закрытые периоды отчётности. Если по прошлым годам ещё возможна уточнённая декларация, удобнее иметь архивную базу с полной историей.