В практике работы с 1С часто возникает задача «свертки» базы, когда удаляются старые данные, а остатки переносятся на начало актуального периода. Однако иногда возникает обратная задача: необходимо сделать «архивную» базу за определенный период (например, оставить только 2015–2017 годы), а все данные, введенные позже, полностью удалить. Типовой механизм «Свертка информационной базы» для этого не предназначен, так как его логика работает в противоположную сторону.
В данной статье мы подробно разберем, как грамотно провести «обрезку» базы сверху, сохранив целостность данных за первые годы работы и минимизировав объем занимаемого места.
Прежде всего, проанализируем ситуацию: штатная обработка СверткаИнформационнойБазы создает документы «Ввод остатков» на дату свертки и удаляет документы до этой даты. В нашем же случае нам нужно сохранить документы начала периода и избавиться от документов будущего. Если попытаться использовать штатный механизм, мы получим базу с остатками на конец 2017 года, но без документов за 2015-2016 годы, что противоречит нашей цели.
Это самый простой и безопасный способ для пользователей и администраторов. Разберем его по шагам:
Важный нюанс: при удалении документов в справочниках могут остаться «лишние» элементы (контрагенты, номенклатура), которые были созданы после 2017 года. Чтобы очистить базу от них, после удаления документов следует повторно запустить поиск помеченных объектов, предварительно пометив неиспользуемые справочники.
Если документов за нужный нам период (2015–2017) относительно немного по сравнению с общим объемом базы, этот метод будет наиболее предпочтительным. Рассмотрим ситуацию: база за 8 лет весит 50 Гб, а данные за первые 2 года занимают всего 2 Гб. Проще перенести нужное в чистую базу, чем удалять лишнее.
Алгоритм действий:
ВыгрузкаЗагрузкаДанныхXML (доступна на диске ИТС).Этот метод гарантирует, что в «новую» базу не попадут ошибочные записи, битые ссылки или «мусорные» движения из будущих периодов.
Проанализируем ситуацию, когда база слишком велика для стандартных обработок 1С. В этом случае можно воспользоваться SQL-запросами. Однако стоит помнить, что 1С хранит данные документа в нескольких таблицах (шапка, табличные части, движения по регистрам).
Для корректного удаления данных «мачете», как упоминали на форуме, нам необходимо построить список таблиц, содержащих дату. Пример логики запроса для удаления документов из конкретной таблицы:
-- Пример для удаления данных из таблицы документа, где _Date_Time — поле даты
DELETE FROM _Document150 WHERE _Date_Time > '2017-12-31 23:59:59'
Выясним причину, по которой этот метод опасен: после такого удаления в базе останутся записи в регистрах сведений и накопления, если вы не очистите их по аналогичному принципу. Кроме того, нарушится ссылочная целостность. Поэтому после использования SQL-методов обязательно нужно запустить «Тестирование и исправление» в режиме Конфигуратора со всеми включенными галочками (особенно «Очищать ссылки» и «Удалять объекты»).
Удаление документов автоматически очищает регистры накопления (после снятия проведения), но не затрагивает регистры сведений, такие как «Цены номенклатуры», «Курсы валют» или «Контактная информация». Если эти данные за 2018–2024 годы не нужны, их придется удалять отдельно.
Для этого мы можем использовать небольшую программную обработку, которая очистит записи по периоду:
Набор = РегистрыСведений.ЦеныНоменклатуры.СоздатьНаборЗаписей();
Набор.Отбор.Период.Установить(ДатаНачалаУдаления, ДатаКонцаУдаления, Истина);
Набор.Записать();
Этот код эффективно очищает срез данных в регистрах, имеющих периодичность. Проанализируем это: установив пустой набор записей на конкретный период, мы фактически стираем все записи, попадающие в него.
После того как основные данные удалены, база все еще может занимать много места на диске. Чтобы привести её в порядок, выполним следующие действия:
.1CD.Shrink Database в SQL Management Studio, чтобы вернуть свободное место операционной системе.Таким образом, мы рассмотрели комплексный подход к обрезке базы 1С «сверху». Выбор метода зависит от объема ваших данных и навыков: от безопасной групповой обработки до радикального вмешательства через SQL-запросы.