Как быстро очистить базу 1С 7.7 на SQL, оставив только справочники

Программист 1С v7.7 Управленческий учет IT и автоматизация бизнеса
← На главную

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

Анализ структуры таблиц 1С 7.7 на SQL

Прежде чем приступать к удалению данных, нам необходимо четко понимать, за что отвечает каждая таблица в базе данных SQL. В 1С 7.7 используется специфическая префиксная система именования. Проанализируем основные типы таблиц:

Метод 1: Очистка через SQL-запросы (Truncate)

Самый быстрый способ очистки — использование команды TRUNCATE TABLE. В отличие от DELETE, эта команда не записывает удаление каждой строки в лог транзакций, что позволяет мгновенно очистить даже таблицы объемом в десятки гигабайт. Рассмотрим пошаговый алгоритм действий.

Во-первых, выясним соответствие имен таблиц объектам метаданных. Для этого нам понадобится файл 1cv7.dds, который находится в каталоге базы данных. Открыв его обычным текстовым редактором, мы увидим описание всех таблиц.

Во-вторых, подготовим SQL-скрипт. Проанализируем ситуацию: нам нужно очистить все таблицы, кроме тех, что начинаются на SC. Рассмотрим примерный код для выполнения в SQL Management Studio:


-- Пример очистки основных таблиц движений и документов
TRUNCATE TABLE _1SJOURN;
TRUNCATE TABLE _1SCRDOC;
TRUNCATE TABLE _1SOPER; -- Если есть бухгалтерский учет
TRUNCATE TABLE _1SENTRY; -- Если есть бухгалтерский учет

-- Далее необходимо пройтись циклом или списком по всем таблицам DH, DT, RA, RG
-- Пример для конкретных таблиц:
TRUNCATE TABLE DH123;
TRUNCATE TABLE DT123;
TRUNCATE TABLE RA200;
TRUNCATE TABLE RG200;

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

Решение проблемы несоответствия DDS-файла

При выполнении очистки на копии базы пользователи часто сталкиваются с ошибками вида «Таблица SC... не найдена» или ошибками при последующем запуске Тестирования и Исправления (ТиИ). Выясним причину этой проблемы.

Проблема часто кроется в файле 1cv7.dds. Если вы перенесли файл 1cv7.md из одной базы в другую, идентификаторы таблиц в SQL могут не совпадать с описанием в DDS, даже если конфигурации идентичны. Это происходит из-за разного порядка создания объектов.

Чтобы решить эту проблему, выполните следующие действия:

  1. Зайдите в Конфигуратор целевой базы.
  2. Внесите любое фиктивное изменение (например, добавьте и удалите описание в любой константе).
  3. Сохраните конфигурацию. 1С принудительно пересоберет файл 1cv7.dds и синхронизирует его со структурой SQL-таблиц.

Метод 2: Конвертация в DBF и обратно

Если работа с прямыми SQL-запросами кажется рискованной, рассмотрим более «мягкий», но медленный способ. Он заключается в промежуточной выгрузке данных в формат DBF.

Рассмотрим этапы этого метода:

  1. Выполните выгрузку данных в файл (Администрирование — Выгрузка данных).
  2. Создайте новую пустую базу в формате DBF, загрузив в нее только метаданные (MD-файл).
  3. В каталоге DBF-базы удалите все файлы, кроме тех, что относятся к справочникам (файлы SC*.dbf и SC*.cdx).
  4. Очистите файлы журналов и регистров (1SJOURN.dbf, DH*.dbf, DT*.dbf и т.д.).
  5. После очистки файлов выполните процедуру «Тестирование и исправление» с включенными галочками «Очистка ссылок» и «Пересчет итогов».
  6. Загрузите полученную «чистую» DBF-базу обратно в SQL-формат.

Обработка «битых» ссылок в справочниках

После удаления всех документов в справочниках неизбежно останутся реквизиты, которые ссылались на эти документы (например, «ДокументОснование» в договорах или «ПриходныйДокумент» в партиях). Вместо долгого процесса ТиИ мы можем воспользоваться прямым SQL-запросом для обнуления этих ссылок.

В 1С 7.7 пустая ссылка в SQL представляет собой строку из 13 пробелов (или специфический идентификатор в зависимости от типа). Проанализируем пример запроса для очистки ссылок в справочнике:


-- Обнуление ссылок на документы в справочнике SC84 (например, Номенклатура)
-- где SP100 - это ID реквизита типа "Документ"
UPDATE SC84 SET SP100 = '   0     0   ' WHERE SP100 <> '   0     0   ';

Завершающие регламентные операции

После физического удаления данных размер файлов базы данных .mdf и .ldf в MS SQL Server не уменьшится автоматически. Чтобы вернуть место операционной системе, необходимо выполнить сжатие базы данных (Shrink).

Рассмотрим последовательность действий в SQL Server Management Studio:

  1. Нажмите правой кнопкой на базу данных — Задачи (Tasks) — Сжать (Shrink) — База данных (Database).
  2. Перед сжатием рекомендуется перевести модель восстановления базы (Recovery Model) в режим Simple, чтобы лог транзакций не разрастался при последующих операциях индексации.
  3. Выполните дефрагментацию и перестроение индексов, так как после массового удаления статистика распределения данных будет неактуальна:
    
    DBCC DBREINDEX (ИмяТаблицы);
    -- Или для всей базы
    EXEC sp_MSforeachtable 'DBCC DBREINDEX ("?")';
    

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

← На главную