Андрей Луконькин
Варианты очистки базы данных
На дворе декабрь, и самое время продолжить новогоднюю тему перехода на новую базу данных.
На интернет-форумах участились вопросы примерно следующего содержания: «Как создать копию рабочей базы данных, чтобы в ней не было документов, но при этом сохранились бы все справочники?». То есть организации по разным причинам приходят к тому, чтобы удалить накопившиеся обороты за несколько лет и начать с нового года работу в новой чистой базе. Действительно, так ли это просто, удалить десятки тысяч документов?
Существует несколько способов, у каждого есть свои плюсы и минусы, выбор наиболее подходящего остается за администратором.
Рассмотрим пример базы данных «1С:Предприятия» платформы 7.7.
Первый способ
С помощью типового инструмента «Обработка документов» пометить на удаление все документы за период (например, за год). Затем опять же, с помощью встроенного механизма «Удаление помеченных объектов», удалить помеченные документы.
![Обработка пометки на удаление документов Обработка пометки на удаление документов](../../../../uploads/articles/2008/12/55_Delete/image001.gif)
Обработка пометки на удаление документов
Этот метод не требует каких-то специальных навыков и умений, им сможет воспользоваться даже бухгалтер или менеджер. Но, во-первых, далеко не все документы удалятся, так как на них существуют ссылки в истории периодических значений справочников, во-вторых, данная процедура займёт очень много времени, так как система контролирует ссылочную целостность данных, и при наличии большого объема документов это может вылиться в многочасовое ожидание окончания процесса.
Второй способ
Чтобы избежать недостатков первого метода, некоторые разработчики пишут свою собственную небольшую программу, которая не проверяет ссылочную целостность, а удаляет объект из базы данных напрямую.
Примером может служить следующий код:
Процедура УдалитьДокументы()
Док = Создатьобъект("Документ.ПриказПоОтпуску");
Док.ВыбратьДокументы();
Пока Док.ПолучитьДокумент() = 1 Цикл
Док.Удалить(1);
КонецЦикла;
КонецПроцедуры
Обязательным условием будет являться проведение полного тестирования и исправления базы в режиме конфигуратора («Администрирование -> Тестирование и исправление ИБ»). Но даже после тестирования никто не может дать гарантии работоспособности базы. Я бы оценил этот способ как достаточно быстрый, но рискованный.
Третий способ
Физическое удаление файлов базы данных, отвечающих за хранение документов. Это файлы DBF, начинающиеся с DH (шапки документов) и DT (табличные части), например DH665.DBF или DT877.DBF.
Кроме того, следует удалить файл 1SCONST.DBF, хранящий в себе периодические значения и константы (потом установить нужные значения констант в новой базе не составит большого труда). Если оставить этот файл как есть, то база будет не пригодна к работе, у справочников останется история периодических реквизитов, но документов, установивших эти значения, уже не будет существовать.
![В ходе тестирования таблицы базы данных будут созданы вновь В ходе тестирования таблицы базы данных будут созданы вновь](../../../../uploads/articles/2008/12/55_Delete/image002.gif)
В ходе тестирования таблицы базы данных будут созданы вновь
Тестирование и исправление базы в этом случае будет просто необходимо. В ходе процесса исправления вновь будут созданы файлы DH*.DBF, DT*.DBF и 1SCONST.DBF, но уже пустые. При первом запуске в режиме «Предприятие» будет произведено первоначальное заполнение базы данных.
Четвертый способ
Способ наиболее наукоёмкий. При запуске «1С:Предприятие» добавляется новая база, путь к ней указывается на пустую папку. При запуске в режиме «Конфигуратор» будет создана чистая база данных.
![Создание пустой базы данных Создание пустой базы данных](../../../../uploads/articles/2008/12/55_Delete/image003.gif)
Создание пустой базы данных
Затем нужно через пункт меню «Конфигурация -> Загрузить измененную конфигурацию» загрузить файл 1CV7.MD от текущей рабочей программы. Таким образом, получим абсолютно чистую базу со всеми нужными структурами метаданных, но без введенных данных (справочников, документов). А так как документы нам и не нужны, то задача сводится просто к переносу справочников между двумя идентичными конфигурациями! Для этого существует масса инструментов, начиная от типовых обработок (Import77.ert/Export771.ert, TRANREF.ERT) и заканчивая конфигурацией «Конвертация данных», в которой, опять же, можно использовать стандартные правила обмена, исключив лишь оттуда обмен документов. Для удобства можно также перенести сведения о пользователях, скопировав подкаталог usrdef в каталог вновь созданной базы данных.
Итог
Какой из способов наиболее предпочтителен? Я бы отметил первый и четвертый как самые корректные и безопасные. Но и другие варианты тоже имеют право на существование, и если выполнять их осторожно, перед началом работы пользователей проверить внимательно базу данных, то можно сэкономить массу времени. И не забывайте делать архивные копии, как гласит народная мудрость: «Архив лишним не бывает». Проверено, это каждый раз так!