Как выделить одну Организацию из базы 1С:ERP в отдельную базу с сохранением истории?

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

Задача разделения информационной базы (ИБ) на несколько частей — одна из самых ресурсоемких и технически сложных в администрировании 1С. Особенно остро эта проблема стоит для крупных конфигураций, таких как 1С:ERP или 1С:Комплексная автоматизация, где количество связей между объектами огромно, а объемы данных исчисляются сотнями гигабайт.

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

Основные подходы к разделению базы

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

  1. Использование РИБ (Распределенной Информационной Базы) с фильтрацией.
  2. Копирование базы и удаление лишних данных («Метод скульптора»).
  3. Создание чистой базы и перенос нужных данных («Метод строителя»).

Давайте подробно рассмотрим каждый из них, выявим подводные камни и определим, как действовать наиболее эффективно.

Способ 1. РИБ с отбором по организации

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

Алгоритм действий:

  1. Заходим в настройки синхронизации данных (обычно это Администрирование - Синхронизация данных).
  2. Выбираем план обмена Полный или РИБ с фильтром по подразделению/организации (в типовых ERP обычно есть план обмена «С отбором» или «По Организации»).
  3. Создаем новый узел, указывая в настройках отбора нужную нам Организацию.
  4. Выполняем создание начального образа. Платформа сама выгрузит только те документы и справочники, которые относятся к этой организации или являются общими.
  5. После создания образа заходим в новую базу и отключаем её от главного узла (превращаем в самостоятельную базу).

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

ПланыОбмена.УстановитьГлавныйУзел(Неопределено);

Проблемы и нюансы:

Способ 2. «Метод скульптора»: Копия и удаление лишнего

Автор обсуждения пошел именно по этому пути и столкнулся с катастрофической нехваткой времени. Стандартное удаление через Пометить на удаление -> Удаление помеченных объектов выполняет контроль ссылочной целостности для каждого объекта. В базе ERP с миллионами записей регистров это работает крайне медленно.

Давайте разберем, как ускорить этот процесс в десятки раз.

Этап 1. Очистка движений (Регистров)

Самое долгое при удалении документа — это удаление его записей из регистров накопления, бухгалтерии и сведений, а также пересчет итогов. Если мы удаляем 90% базы, нет смысла пересчитывать итоги после каждого документа.

Мы должны программно очистить регистры до удаления документов. Это можно сделать, отключив итоги.

Примерный алгоритм для обработки:


// Отключаем использование итогов для ускорения
Для Каждого Регистр Из Метаданные.РегистрыНакопления Цикл
    РегистрыНакопления[Регистр.Имя].УстановитьИспользованиеИтогов(Ложь);
КонецЦикла;

// Далее выполняем очистку записей по "чужим" организациям
// Лучше всего использовать прямые SQL запросы (truncate) если есть квалификация, 
// либо НаборыЗаписей с отбором по Регистратору, если удаляем документы целиком.

Однако, еще более быстрый способ — не чистить движения выборочно, а удалить документы непосредственно (без контроля ссылочной целостности), но с умом.

Этап 2. Непосредственное удаление без контроля ссылок

Вместо пометки на удаление используем метод Удалить(). Но делать это нужно аккуратно.

Если просто запустить Объект.Удалить(), 1С все равно будет искать ссылки. Чтобы ускорить процесс, можно использовать удаление наборов записей или прямые запросы (если база на SQL), но оставаясь в рамках 1С, тактика следующая:

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

Важно: При удалении документа, платформа автоматически удалит его движения. Это будет быстрее, чем через стандартную обработку, но все равно может быть долго.

Этап 3. Тестирование и Исправление (ТИИ)

После массового удаления «без контроля» у нас останутся «битые» ссылки (например, в реквизитах документов оставшейся организации могут быть ссылки на удаленные документы-основания). Обязательно запускаем ТИИ в Конфигураторе:

Способ 3. Перенос данных в чистую базу (XML / КД 2.0)

Этот способ часто оказывается предпочтительнее для ERP, так как позволяет получить "чистую" базу без хвостов удаленных данных.

Мы можем использовать стандартную обработку «Выгрузка и загрузка данных XML» (с ИТС). Она позволяет выгружать данные с отбором.

Схема действий:

  1. Разворачиваем чистую базу той же версии (CF).
  2. В исходной базе запускаем обработку.
  3. Устанавливаем отбор по периоду и по Организации для всех документов.
  4. Включаем опцию «Выгружать при необходимости» (чтобы подтянулись справочники, на которые ссылаются документы).

Критические проблемы при разделении ERP

Независимо от выбранного метода (удаление или перенос), в ERP есть специфические механизмы, которые сломаются при разделении.

1. Интеркампани (Intercompany)

Если в базе велся учет перепродаж между организациями (например, Организация А продавала товар Организации Б), то документы связаны цепочками. В документе поступления у Организации Б в качестве партнера указана Организация А.

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

Решение: Перед разделением необходимо обработкой заменить ссылки.

2. Зарплата и Кадры (ЗУП внутри ERP)

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

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

Для корректного переноса зарплатного блока рекомендуется:

  1. Использовать специализированные правила обмена для перехода (например, правила переноса из ЗУП в ЗУП, адаптированные под ERP).
  2. Или использовать метод «Копия и удаление», так как он с большей вероятностью сохранит исторические данные регистров расчета.

Итоговое резюме: что выбрать?

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

  1. Если есть рабочий план обмена РИБ: Попробуйте создать узел РИБ с отбором. Это самый безопасный вариант. Проверьте на копии, перенеслись ли отраслевые данные.
  2. Если РИБ не подходит (наиболее вероятно): Используйте комбинированный метод «Копия и умное удаление».
    • Сделайте копию базы на быстром сервере (SSD, много RAM).
    • Сначала программно очистите все регистры (накопления, сведений, бухгалтерии) по удаляемым организациям прямыми запросами или наборами записей без итогов. Это уменьшит объем базы на 60-70% практически мгновенно.
    • Затем удалите документы удаляемых организаций (можно непосредственно, Удалить(), так как их движения уже пусты).
    • Выполните замену ссылок Интеркампани на внешних контрагентов.
    • Запустите ТИИ с опцией «Очищать ссылки».
    • Выполните сжатие таблиц (Shrink) на уровне SQL.

Метод «Выгрузка XML» в чистую базу для ERP рекомендуется использовать с осторожностью из-за риска потери настроек учетной политики и сложных связей регистров себестоимости.

← На главную