Как правильно сделать свертку базы данных 1С: очистка старых документов или перенос остатков в новую базу?

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

Рано или поздно перед любым администратором или программистом 1С встает задача уменьшения размера базы данных и повышения скорости ее работы. Самым очевидным решением кажется проведение свертки. Однако на практике этот процесс скрывает множество подводных камней.

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

Варианты решения задачи: что выбрать?

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

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

Давайте разберем по шагам особенности, преимущества и недостатки каждого метода, чтобы принять взвешенное решение.

Почему свертка за короткий период (например, 1 год) малоэффективна?

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

Подход №1: Свертка и физическое удаление документов в рабочей базе

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

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

  1. Создает документы ввода остатков на выбранную дату (например, на начало 2017 года).
  2. Очищает движения (проводки) у всех документов до этой даты.
  3. Помечает старые документы на удаление.

После этого вам необходимо запустить процедуру «Удаление помеченных объектов». На больших базах стандартный механизм удаления работает крайне медленно, так как он проверяет каждую ссылку на удаляемый объект во всех таблицах базы данных. В процессе удаления система может зависнуть из-за нехватки оперативной памяти или переполнения лога транзакций СУБД.

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


ВыборкаДокументов = Документы.РеализацияТоваровУслуг.Выбрать(ДатаНачала, ДатаОкончания);
Пока ВыборкаДокументов.Следующий() Цикл
    ОбъектДокумента = ВыборкаДокументов.ПолучитьОбъект();
    // Программное удаление объекта напрямую из базы данных без проверки ссылок
    ОбъектДокумента.Удалить();
КонецЦикла;

Важное предупреждение: Использование метода Удалить() напрямую крайне опасно! Если на удаленный документ ссылались другие объекты в будущем периоде, в базе возникнут битые ссылки (объекты со значением «Объект не найден»). Это приведет к нарушению логики работы конфигурации и ошибкам при проведении последующих документов.

Подход №2: Перенос остатков в новую пустую базу (Рекомендуемый метод)

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

  1. Создается новая пустая база данных с абсолютно аналогичной конфигурацией.
  2. С помощью специализированных обработок (например, «Конвертация данных» или встроенные помощники перехода) в новую базу переносятся только актуальные справочники (контрагенты, номенклатура, договоры) и рассчитанные остатки на начало выбранного периода.
  3. Старая база со всей детальной историей за прошлые годы переводится в режим «Только чтение» и сохраняется в качестве архивной копии. Если пользователям потребуется посмотреть документы за прошлые годы, они просто открывают архивную базу.

Преимущества данного метода очевидны: в новой рабочей базе не будет старых «битых» ссылок, очистятся неиспользуемые элементы справочников (так называемый «шлак»), а размер базы данных уменьшится до минимально возможного физического предела. Это гарантирует максимальный прирост производительности системы.

Что делать с размером файла базы данных после свертки?

Проанализируем технический нюанс: даже если вы успешно свернули базу и удалили тысячи помеченных документов, физический размер файла базы данных (1Cv8.1CD в файловом режиме) или размер базы на SQL-сервере не уменьшится автоматически. СУБД резервирует освободившееся место под будущие записи.

Чтобы реально вернуть свободное место на жесткий диск, выполните следующие технические процедуры:

Резюме

Подводя итог, можно сказать следующее: если перед вами стоит задача отрезать прошлые периоды работы базы, самым надежным решением будет **отказ от классической свертки внутри живой базы** в пользу **переноса остатков в новую чистую базу**. Это позволит избежать проблем с битыми ссылками, гарантированно уменьшит размер базы и сэкономит огромное количество времени как программисту, так и пользователям.

← На главную