Работа с базами данных 1С сверхбольшого объема (от 500 Гб и выше) всегда накладывает серьезные ограничения на использование стандартных механизмов платформы. Типовая свертка информационной базы, которая отлично справляется на базах до 50 Гб, на терабайтных объемах превращается в бесконечный процесс. Удаление помеченных объектов и очистка движений регистров через объектную модель 1С могут выполняться неделями или даже месяцами. При этом попытки перенести остатки через типовую обработку ВыгрузкаЗагрузкаДанныхXML приводят к лавинообразному росту файла выгрузки из-за эффекта «ссылочной цепочки».
В этой статье мы подробно разберем, как решить проблему свертки огромной базы 1С:Бухгалтерия предприятия 2.0 КОРП, избавиться от лишнего «мусора» и перенести актуальные остатки в чистую базу (с последующим переходом на БП 3.0) за одни выходные.
Для начала выясним причину, по которой классические методы оказываются неэффективными:
ОперацияБух) через XML, платформа анализирует связи. Если в остатках по взаиморасчетам или НДС фигурирует ссылка на документ расчетов (например, «Поступление товаров и услуг» пятилетней давности), сериализатор XML потянет за собой этот документ. Тот, в свою очередь, потянет справочники договоров, контрагентов, номенклатуру, счета-фактуры. В итоге выгружается практически вся историческая база, а размер XML-файла превышает разумные пределы (50–100 Гб и более).Ниже мы рассмотрим три наиболее эффективные стратегии решения этой задачи, предложенные практикующими архитекторами и разработчиками 1С.
Это одно из самых изящных и безопасных решений для крупного бизнеса, позволяющее минимизировать время простоя пользователей (технологическое окно) до нескольких часов.
Суть метода заключается в разделении процесса на два параллельных потока: пока пользователи продолжают работать в текущей базе, на отдельном сервере происходит тяжелый процесс свертки и перехода.
Разберем процесс по шагам:
Шаг 1. Подготовка и фиксация изменений
В рабочей базе БП 2.0 КОРП мы создаем новый план обмена. Назовем его, например, ФоновыйПереход. Настраиваем авторегистрацию для всех объектов конфигурации (документов, справочников, констант, регистров сведений).
Шаг 2. Создание копии для свертки
Делаем полную копию рабочей базы на выделенном производительном сервере. В этот момент в рабочей базе активируем наш план обмена. Все изменения, вносимые бухгалтерами с этого момента (новые документы, измененные справочники), будут автоматически регистрироваться на узле плана обмена.
Шаг 3. Работа над копией (Свертка и Обновление)
В копии базы мы запускаем тяжелый процесс свертки. Поскольку это копия, мы не ограничены во времени. Мы можем использовать любые оптимизированные методы очистки (вплоть до прямого удаления исторических таблиц на уровне СУБД). После успешного завершения свертки и выверки остатков мы обновляем эту базу до актуальной версии 1С:Бухгалтерия 3.0 КОРП.
Для примера, код для программной регистрации изменений в плане обмена в рабочей базе может выглядеть следующим образом:
// Регистрируем изменения для всех документов за период свертки
УзелОбмена = ПланыОбмена.ФоновыйПереход.НайтиПоКоду("Свертка");
Если Не УзелОбмена.Пустая() Тогда
Выборка = Документы.РеализацияТоваровУслуг.Выбрать(НачалоПериода, КонецПериода);
Пока Выборка.Следующий() Цикл
ПланыОбмена.ЗарегистрироватьИзменения(УзелОбмена, Выборка.Ссылка);
КонецЦикла;
КонецЕсли;
Шаг 4. Перенос накопленных данных
Когда свернутая копия базы успешно переведена на БП 3.0 и готова к работе, мы останавливаем работу пользователей в старой рабочей базе. Из нее по зарегистрированным изменениям плана обмена выгружаются только те данные, которые пользователи успели ввести за время проведения свертки. Эти данные транслируются в новую базу БП 3.0 с помощью правил конвертации. В результате мы получаем чистую свернутую базу БП 3.0 со всеми актуальными оперативными данными.
Если мы хотим полностью избавиться от накопленного «мусора» в справочниках и исключить перенос битых ссылок, оптимальным решением будет перенос данных в абсолютно чистую базу. Процесс разделяется на предварительную подготовку и финальный перенос остатков.
Рассмотрим подробнее данный алгоритм:
Контрагенты, Номенклатура, Организации, ДоговорыКонтрагентов и т.д. Этот объем данных перенесется быстро и безболезненно.ДокументРасчетовСКонтрагентом (ручной учет). Это позволяет передать информацию о задолженности в разрезе сделок, но не тащить за собой физические документы закупки/продажи пятилетней давности.Стандартная свертка БП 2.0 формирует документы ОперацияБух (Операция бухгалтерского и налогового учета). Такие документы крайне неудобны для последующей работы пользователей в БП 3.0: их сложно анализировать, они не делают движений по многим вспомогательным регистрам и часто вызывают ошибки при последующем закрытии месяцев.
Для обхода этой проблемы рекомендуется использовать альтернативные инструменты. На портале Инфостарт широкую популярность завоевала специализированная обработка (например, публикация №509628), которая решает задачу принципиально иным способом:
Если принято решение сворачивать базу «на месте» без переноса в чистую, то для очистки исторических данных за прошлые периоды необходимо использовать средства СУБД. Очистка движений через объектную модель 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С:
SHRINK DATABASE в MS SQL Server) для освобождения неиспользуемого дискового пространства операционной системе.Сочетание этих подходов позволяет сократить время свертки и перехода гигантской базы 1С:Бухгалтерия 2.0 КОРП с нескольких месяцев до одного уикенда, гарантируя стабильную работу пользователей в новой, чистой и быстродействующей системе БП 3.0.