Как свернуть базу 1С:Бухгалтерия 2.0 КОРП объемом более 500 Гб и перенести остатки в чистую базу?

Программист 1С v8.3 (Обычные формы) 1C:Бухгалтерия Бухгалтерский учет IT и автоматизация бизнеса
← На главную

Работа с базами данных 1С сверхбольшого объема (от 500 Гб и выше) всегда накладывает серьезные ограничения на использование стандартных механизмов платформы. Типовая свертка информационной базы, которая отлично справляется на базах до 50 Гб, на терабайтных объемах превращается в бесконечный процесс. Удаление помеченных объектов и очистка движений регистров через объектную модель 1С могут выполняться неделями или даже месяцами. При этом попытки перенести остатки через типовую обработку ВыгрузкаЗагрузкаДанныхXML приводят к лавинообразному росту файла выгрузки из-за эффекта «ссылочной цепочки».

В этой статье мы подробно разберем, как решить проблему свертки огромной базы 1С:Бухгалтерия предприятия 2.0 КОРП, избавиться от лишнего «мусора» и перенести актуальные остатки в чистую базу (с последующим переходом на БП 3.0) за одни выходные.

Почему стандартные инструменты дают сбой на базах 500+ Гб?

Для начала выясним причину, по которой классические методы оказываются неэффективными:

  1. Объектная блокировка и транзакции. Типовая свертка удаляет движения документов построчно или небольшими транзакциями, генерируя гигантский объем транзакционного лога в СУБД (LDF-файл MS SQL). На базах в 500 Гб транзакционный лог быстро переполняет диски, а СУБД начинает тратить больше времени на обеспечение целостности, чем на само удаление.
  2. Эффект ссылочной целостности при XML-экспорте. Когда мы пытаемся выгрузить документы остатков (или документы типа ОперацияБух) через XML, платформа анализирует связи. Если в остатках по взаиморасчетам или НДС фигурирует ссылка на документ расчетов (например, «Поступление товаров и услуг» пятилетней давности), сериализатор XML потянет за собой этот документ. Тот, в свою очередь, потянет справочники договоров, контрагентов, номенклатуру, счета-фактуры. В итоге выгружается практически вся историческая база, а размер XML-файла превышает разумные пределы (50–100 Гб и более).

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

Решение 1. Схема фоновой свертки через планы обмена

Это одно из самых изящных и безопасных решений для крупного бизнеса, позволяющее минимизировать время простоя пользователей (технологическое окно) до нескольких часов.

Суть метода заключается в разделении процесса на два параллельных потока: пока пользователи продолжают работать в текущей базе, на отдельном сервере происходит тяжелый процесс свертки и перехода.

Разберем процесс по шагам:

Шаг 1. Подготовка и фиксация изменений
В рабочей базе БП 2.0 КОРП мы создаем новый план обмена. Назовем его, например, ФоновыйПереход. Настраиваем авторегистрацию для всех объектов конфигурации (документов, справочников, констант, регистров сведений).

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

Шаг 3. Работа над копией (Свертка и Обновление)
В копии базы мы запускаем тяжелый процесс свертки. Поскольку это копия, мы не ограничены во времени. Мы можем использовать любые оптимизированные методы очистки (вплоть до прямого удаления исторических таблиц на уровне СУБД). После успешного завершения свертки и выверки остатков мы обновляем эту базу до актуальной версии 1С:Бухгалтерия 3.0 КОРП.

Для примера, код для программной регистрации изменений в плане обмена в рабочей базе может выглядеть следующим образом:


// Регистрируем изменения для всех документов за период свертки
УзелОбмена = ПланыОбмена.ФоновыйПереход.НайтиПоКоду("Свертка");
Если Не УзелОбмена.Пустая() Тогда
    Выборка = Документы.РеализацияТоваровУслуг.Выбрать(НачалоПериода, КонецПериода);
    Пока Выборка.Следующий() Цикл
        ПланыОбмена.ЗарегистрироватьИзменения(УзелОбмена, Выборка.Ссылка);
    КонецЦикла;
КонецЕсли;

Шаг 4. Перенос накопленных данных
Когда свернутая копия базы успешно переведена на БП 3.0 и готова к работе, мы останавливаем работу пользователей в старой рабочей базе. Из нее по зарегистрированным изменениям плана обмена выгружаются только те данные, которые пользователи успели ввести за время проведения свертки. Эти данные транслируются в новую базу БП 3.0 с помощью правил конвертации. В результате мы получаем чистую свернутую базу БП 3.0 со всеми актуальными оперативными данными.

Решение 2. Перенос остатков в чистую базу через "каркас" справочников

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

Рассмотрим подробнее данный алгоритм:

  1. Создание пустой базы. Создаем чистую базу той же конфигурации (или сразу БП 3.0, если планируется переход).
  2. Перенос справочной информации ("Каркас"). Заранее (например, за неделю до планируемого перехода) переносим только нормативно-справочную информацию (НСИ): справочники Контрагенты, Номенклатура, Организации, ДоговорыКонтрагентов и т.д. Этот объем данных перенесется быстро и безболезненно.
  3. Разрыв ссылочных цепочек. При выгрузке остатков по регистрам расчетов с контрагентами или НДС, вместо оригинальных документов-оснований (которые весят гигабайты), мы подставляем специальный вспомогательный документ. В БП 2.0/3.0 для этого используется документ ДокументРасчетовСКонтрагентом (ручной учет). Это позволяет передать информацию о задолженности в разрезе сделок, но не тащить за собой физические документы закупки/продажи пятилетней давности.
  4. Загрузка остатков в выходные дни. В нерабочее время (за выходные) мы рассчитываем остатки на контрольную дату в исходной базе, выгружаем их компактным пакетом и загружаем в уже подготовленный каркас новой базы. Так как справочники уже сопоставлены и перенесены, загрузка чистых проводок и остатков регистров занимает минимум времени.

Решение 3. Использование специализированных инструментов (свертка сразу в БП 3.0)

Стандартная свертка БП 2.0 формирует документы ОперацияБух (Операция бухгалтерского и налогового учета). Такие документы крайне неудобны для последующей работы пользователей в БП 3.0: их сложно анализировать, они не делают движений по многим вспомогательным регистрам и часто вызывают ошибки при последующем закрытии месяцев.

Для обхода этой проблемы рекомендуется использовать альтернативные инструменты. На портале Инфостарт широкую популярность завоевала специализированная обработка (например, публикация №509628), которая решает задачу принципиально иным способом:

Решение 4. Прямое удаление движений на уровне СУБД (MS SQL Server / PostgreSQL)

Если принято решение сворачивать базу «на месте» без переноса в чистую, то для очистки исторических данных за прошлые периоды необходимо использовать средства СУБД. Очистка движений через объектную модель 1С (методом НаборЗаписей.Записать()) на базе 500 Гб неэффективна.

Проанализируем ситуацию на уровне СУБД. Самыми тяжелыми таблицами в БП 2.0 являются таблицы движений регистров бухгалтерии (субконто) и регистров накопления. Для их быстрой очистки администраторы баз данных применяют прямые SQL-запросы.

Важное предупреждение: Любые операции прямого удаления в СУБД нарушают лицензионное соглашение 1С и должны выполняться только квалифицированными специалистами на резервных копиях с последующим обязательным тестированием и исправлением!

Пример SQL-скрипта для быстрой очистки движений регистра бухгалтерии (основного "пожирателя" свободного места) за период ранее 2019 года:


-- Прямое удаление движений регистра бухгалтерии до определенной даты
-- Перед выполнением обязательно сделать BACKUP!
USE [ИмяВашейБазыДанных];
GO

-- Удаляем субконто (аналитику) проводок за старый период
DELETE FROM _AccRgED32000 
WHERE _Period < '2019-01-01 00:00:00';

-- Удаляем сами записи регистра бухгалтерии
DELETE FROM _AccRg32000 
WHERE _Period < '2019-01-01 00:00:00';

После выполнения подобных операций на уровне SQL обязательно выполняются следующие шаги в Конфигураторе 1С:

  1. Запуск процедуры «Тестирование и исправление» с включенными опциями проверки логической и ссылочной целостности (для очистки «битых» ссылок в документах).
  2. Полный пересчет итогов бухгалтерского и налогового учета (так как итоги на уровне СУБД хранятся в отдельных таблицах, их необходимо актуализировать под новые очищенные движения).
  3. Сжатие базы данных (процедура SHRINK DATABASE в MS SQL Server) для освобождения неиспользуемого дискового пространства операционной системе.

Сочетание этих подходов позволяет сократить время свертки и перехода гигантской базы 1С:Бухгалтерия 2.0 КОРП с нескольких месяцев до одного уикенда, гарантируя стабильную работу пользователей в новой, чистой и быстродействующей системе БП 3.0.

← На главную