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

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

Часто в практике разработчиков и администраторов систем на платформе «1С:Предприятие 8» возникает задача быстрого и полного «обнуления» информационной базы. Это требуется при подготовке рабочей базы к запуску в промышленную эксплуатацию (когда нужно удалить все тестовые документы и движения, но сохранить справочники и настройки), при создании чистых тестовых полигонов на основе рабочей конфигурации или при передаче пустой базы заказчику. Стандартный путь — выгрузить файл конфигурации .cf и загрузить его в новую пустую базу данных — прост и понятен, однако он имеет свои минусы. Этот способ требует создания новой базы на сервере, настройки прав доступа, повторной публикации на веб-сервере и переноса пользователей. Рассмотрим альтернативные методы, позволяющие полностью очистить базу данных «на месте» без классического цикла выгрузки-загрузки.

Метод 1. Программное обнуление через встроенную функцию УдалитьДанныеИнформационнойБазы()

Платформа «1С:Предприятие 8» предоставляет разработчикам мощный инструмент для быстрого удаления всех пользовательских данных на уровне платформы — глобальный метод УдалитьДанныеИнформационнойБазы(). Проанализируем особенности его работы. Этот метод полностью удаляет все записи во всех таблицах данных: справочники, документы, регистры сведений, накопления, бухгалтерии, расчета, а также планы видов характеристик, планов счетов и планов видов расчета. Конфигурация при этом остается абсолютно нетронутой.

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


Процедура ОчиститьИнформационнуюБазу() Экспорт
    УстановитьПривилегированныйРежим(Истина);
    
    Попытка
        УстановитьМонопольныйРежим(Истина);
    Исключение
        ВызватьИсключение "Не удалось установить монопольный режим. Убедитесь, что в базе нет активных сеансов.";
    КонецПопытки;
    
    Попытка
        УдалитьДанныеИнформационнойБазы();
        Сообщить("Все данные успешно удалены. База приведена к исходному состоянию.");
    Исключение
        Сообщить("Ошибка при очистке базы: " + ОписаниеОшибки());
    КонецПопытки;
КонецПроцедуры

Важное предупреждение: Метод УдалитьДанныеИнформационнойБазы() стирает не только учетные данные, но и всех пользователей информационной базы, включая администраторов, их персональные настройки и права. После завершения работы этого метода база вернется в состояние, когда в ней нет ни одного пользователя, и при следующем входе платформа не спросит пароль, а сразу запустит сеанс. Вам потребуется заново создать пользователя с правами администратора.

Еще один технический нюанс связан с автонумерацией. После удаления документов платформа может сохранять в оперативной памяти или кэше сервера текущие индексы автонумерации. Это приводит к тому, что новые документы начинают создаваться не с первого номера, а продолжают старую последовательность. Чтобы этого избежать, после выполнения очистки обязательно выполните очистку серверного кэша и перезапустите службу сервера 1С.

Метод 2. Прямая очистка таблиц СУБД с помощью SQL-скрипта (для клиент-серверных баз)

Если ваша информационная база работает в клиент-серверном варианте под управлением Microsoft SQL Server или PostgreSQL, а ее размер исчисляется сотнями гигабайт, стандартные методы платформы 1С могут выполняться крайне медленно. В таких случаях мы можем прибегнуть к прямой очистке таблиц на уровне СУБД. Выясним причину, почему этот способ является самым быстрым: вместо построчного удаления записей с журналированием (команда DELETE) СУБД использует команду TRUNCATE TABLE, которая мгновенно освобождает дисковое пространство, занимаемое таблицами данных, без записи каждой строки в транзакционный лог.

Рассмотрим подробнее, как безопасно реализовать этот подход. Прямое удаление данных из СУБД может нарушить целостность структуры, если затронуть системные таблицы конфигурации (такие как Config, DBSchema, Params, ConfigSave). Наша задача — очистить только таблицы данных. Для этого нам нужно получить соответствие метаданных 1С физическим таблицам базы данных SQL.

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


Функция ПолучитьСкриптОчисткиБазыДляSQL() Экспорт
    ТаблицаСтруктуры = ПолучитьСтруктуруХраненияБазыДанных();
    Скрипт = "USE " + ИмяБазыДанныхSQL + ";" + Символы.ПС;
    
    Для Каждого СтрокаТаблицы Из ТаблицаСтруктуры Цикл
        ИмяТаблицыСУБД = СтрокаТаблицы.ИмяТаблицыХранения;
        ИмяМетаданных = СтрокаТаблицы.ИмяТаблицы;
        
        // Исключаем системные таблицы, таблицы конфигурации и пользователей
        Если Найти(ВРег(ИмяТаблицыСУБД), "CONFIG") > 0
            Или Найти(ВРег(ИмяТаблицыСУБД), "DBSCHEMA") > 0
            Или Найти(ВРег(ИмяТаблицыСУБД), "PARAMS") > 0
            Или Найти(ВРег(ИмяТаблицыСУБД), "USERS") > 0 Тогда
            Продолжить;
        КонецЕсли;
        
        Скрипт = Скрипт + "TRUNCATE TABLE [" + ИмяТаблицыСУБД + "];" + Символы.ПС;
    КонецЦикла;
    
    Возврат Скрипт;
КонецФункции

Полученный скрипт можно запустить непосредственно в среде СУБД (например, через SQL Server Management Studio для MS SQL). Преимуществом этого метода является то, что сама конфигурация, настройки подключений, пользователи СУБД и пользователи 1С остаются полностью нетронутыми, а база данных мгновенно освобождается от всех тяжелых транзакционных данных.

Метод 3. Частичная очистка через механизм «Свертки базы данных» в БСП

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

Разберем по шагам, как это сделать:

  1. Откроем встроенный помощник «Свертка информационной базы» (обычно доступен через меню «Администрирование» — «Обслуживание» — «Свертка информационной базы»).
  2. На шаге выбора даты свертки установим дату далеко в будущем — например, 31.12.2099.
  3. Система проанализирует базу и, не обнаружив документов после этой даты, сформирует абсолютно пустые входящие остатки.
  4. На этапе обработки документов программа автоматически пометит на удаление все существующие документы в базе за весь период ее существования.
  5. После успешного завершения работы помощника запустим встроенную обработку «Удаление помеченных объектов». Выберем удаление всех помеченных документов.

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

Метод 4. Автоматизированное удаление и замена файла 1Cv8.1CD (для файловых баз)

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

Посмотрим на пример командного файла (BAT-скрипта), который решает эту задачу:


@echo off
chcp 65001
echo Шаг 1: Принудительное завершение всех процессов 1С...
taskkill /f /im 1cv8.exe
taskkill /f /im 1cv8c.exe
taskkill /f /im 1cv8s.exe

echo Шаг 2: Остановка веб-сервера Apache или IIS...
net stop W3SVC
net stop Apache2.4

echo Шаг 3: Удаление старого файла базы данных...
del /f /q "C:\Bases\ActiveBase\1Cv8.1CD"

echo Шаг 4: Копирование заранее подготовленного пустого файла конфигурации...
copy "C:\Bases\Templates\EmptyTemplate.1CD" "C:\Bases\ActiveBase\1Cv8.1CD"

echo Шаг 5: Перезапуск веб-сервера...
net start W3SVC
net start Apache2.4
echo Процесс завершен! База данных полностью обнулена.
pause

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

Метод 5. Очистка сопутствующих тяжелых данных (История данных и Журнал регистрации)

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

Во-первых, это история данных (версионирование объектов). Если в вашей системе включено версионирование, то при изменении объектов платформа записывает их старые версии в специальные системные таблицы. При удалении самих объектов эти версии могут оставаться в базе. Чтобы полностью очистить историю данных, выполним следующий программный код в режиме внешнего соединения или обработки:


Процедура ОчиститьИсториюДанных() Экспорт
    УстановитьПривилегированныйРежим(Истина);
    ИсторияДанных.УдалитьВерсии();
    Сообщить("История версионирования успешно очищена.");
КонецПроцедуры

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

В-третьих, после удаления всех данных в файловом варианте размер файла 1Cv8.1CD на диске не уменьшится сам по себе. Нам необходимо принудительно запустить процедуру сжатия таблиц. Для этого откроем Конфигуратор нашей информационной базы, перейдем в меню «Администрирование» — «Тестирование и исправление», установим флажок «Сжатие таблиц информационной базы» и нажмем кнопку «Выполнить». Только после этого операционная система высвободит неиспользуемое дисковое пространство.

Подводя итог, отметим, что выбор метода очистки информационной базы зависит от конкретных технических условий и масштаба системы. Использование встроенной функции УдалитьДанныеИнформационнойБазы() отлично подходит для небольших баз и файловых вариантов, когда нужно быстро получить чистую базу на месте. Для крупных корпоративных баз на СУБД MS SQL или PostgreSQL эффективнее и быстрее использовать прямые SQL-запросы с командой TRUNCATE TABLE. Если же перед вами стоит задача сохранить нормативно-справочную информацию, лучшим выбором будет использование встроенного в БСП помощника свертки базы данных с датой в далеком будущем.

← На главную