Как правильно выполнить обрезку (свертку) базы 1С:УТП на SQL-сервере?

Программист 1С v8.3 (Обычные формы) Управленческий учет Торговля и дистрибуция
← На главную

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

Постановка задачи и выбор метода

Перед началом работы нам необходимо определить, какие данные должны остаться в базе после «обрезки». Как правило, это:

  1. Все справочники (Номенклатура, Контрагенты, ОС и т.д.).
  2. Остатки по регистрам накопления и бухгалтерии на определенную дату (дату свертки).
  3. Актуальные срезы последних по регистрам сведений (цены, курсы валют, учетная политика).
  4. Документы по долгосрочным операциям (Основные средства, НМА, кадровые данные).

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

Метод ускоренной свертки через XML и SQL

Этот метод основан на опыте успешной очистки базы со 180 Гб до 25 Гб всего за три дня. Разберем по шагам, как это реализовать:

Шаг 1: Формирование остатков. На дату свертки необходимо создать документы ввода остатков. Лучше всего использовать специализированные документы или универсальный документ КорректировкаЗаписейРегистров (КЗР). Мы можем заполнить их программно, используя запросы к текущим остаткам регистров.

Шаг 2: Выгрузка остатков. Чтобы не потерять сформированные данные при очистке таблиц, выгружаем созданные документы (КЗР или «Ввод остатков») во внешний XML-файл с помощью обработки «Выгрузка и загрузка данных XML». Важно убедиться, что выгружаются только нужные нам объекты.

Шаг 3: Очистка базы на уровне SQL. Это самый ответственный этап. Для очистки огромных таблиц движений (регистров накопления и бухгалтерии) рекомендуется использовать команду TRUNCATE TABLE в SQL Server Management Studio. Посмотрим на пример логики:


-- Пример очистки таблицы регистра накопления (имя таблицы можно узнать в конфигураторе)
TRUNCATE TABLE _AccumReg12345;
-- Очистка таблиц документов
TRUNCATE TABLE _Document543;

Важно помнить, что TRUNCATE работает значительно быстрее, чем DELETE, так как не записывает удаление каждой строки в лог транзакций. Однако этот метод требует высокой квалификации администратора базы данных.

Шаг 4: Загрузка остатков. После очистки таблиц загружаем наш XML-файл обратно в базу. Справочники при этом остаются нетронутыми, а документы ввода остатков снова появляются в системе.

Тонкости работы с Основными средствами и Персоналом

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

Мы рекомендуем исключить из процесса удаления следующие объекты:

Сложный учет НДС и взаиморасчетов

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

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

Техническое обслуживание после обрезки

После того как данные удалены, физический размер файла базы данных .mdf на диске не уменьшится автоматически. Чтобы вернуть место операционной системе, необходимо выполнить операцию Shrink Database. Рассмотрим последовательность действий в SQL Server Management Studio:

  1. Выбираем базу данных, нажимаем правую кнопку мыши.
  2. Переходим в Tasks -> Shrink -> Database.
  3. После сжатия обязательно выполняем Rebuild Indexes (перестройку индексов), так как после массового удаления они будут сильно дефрагментированы.

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

Проверка результатов

Заключительный этап — сверка отчетов. Мы должны сформировать ОборотноСальдоваяВедомость и ВедомостьПоТоварамНаСкладах в старой базе на секунду «ДО» свертки и в новой базе на секунду «ПОСЛЕ» свертки. Данные должны совпадать до копейки. Только после этого базу можно отдавать пользователям в работу.

Помните, что перед любыми манипуляциями с SQL-таблицами необходимо сделать как минимум две независимые резервные копии базы данных. Успешная свертка — это результат тщательной подготовки и нескольких тренировочных запусков на тестовой копии.

← На главную