В процессе работы с многофирменными базами 1С часто возникает ситуация, когда необходимо полностью удалить данные одной организации или, наоборот, «отпочковать» её в отдельную информационную базу. Стандартный механизм удаления помеченных объектов в таких случаях часто оказывается неэффективным: процесс поиска ссылок может длиться часами или вовсе приводить к зависанию системы из-за огромного объема связанных записей в регистрах и отсутствия необходимых индексов. В этой статье мы разберем наиболее надежные способы решения этой задачи, основываясь на практическом опыте специалистов.
Прежде чем переходить к альтернативным методам, проанализируем, почему стандартная обработка «Удаление помеченных объектов» в 1С:Предприятие часто «висит». Основная причина заключается в том, что при поиске ссылок система проверяет каждую таблицу базы данных на наличие связей с удаляемым объектом. Если база данных имеет большой объем, а поля, по которым осуществляется поиск, не индексированы должным образом, SQL-сервер тратит колоссальное время на полное сканирование таблиц. Также стоит учитывать таблицы итогов регистров накопления и сведений, которые могут содержать миллионы записей, связанных с удаляемой организацией.
Одним из самых эффективных и «чистых» способов разделения данных является использование механизма Распределенных Информационных Баз (РИБ) с фильтрацией по организации. Этот метод позволяет создать новую базу, в которую попадут только документы и справочники, относящиеся к конкретному юридическому лицу.
Рассмотрим основные шаги этого процесса:
Оборотно-сальдовая ведомость) совпадают с данными в исходной базе.Проанализируем ситуацию, когда часть справочников может не попасть в автоматическую регистрацию для обмена. Это часто происходит с объектами, которые не имеют прямого реквизита Организация, но необходимы для корректной работы. Выясним причину расхождений, сравнив количество элементов в справочниках обеих баз.
Для быстрой сверки можно использовать простой запрос в консоли. Посмотрим на пример запроса для проверки справочника Номенклатура:
ВЫБРАТЬ
КОЛИЧЕСТВО(*) КАК Количество
ИЗ
Справочник.Номенклатура
Такую проверку следует выполнить для всех ключевых справочников: Контрагенты, ДоговорыКонтрагентов, Склады. Если вы обнаружили, что в новой базе элементов меньше, чем должно быть, необходимо принудительно зарегистрировать эти объекты к обмену в главной базе.
Если автоматические механизмы РИБ пропустили часть данных, мы можем использовать встроенную обработку «Регистрация изменений для обмена» или выполнить это программно. Разберем, как подписать весь справочник к выгрузке одной командой кода:
УзелОбмена = ПланыОбмена.ПоОрганизации.НайтиПоКоду("001"); // Укажите код вашего узла
ПланыОбмена.ЗарегистрироватьИзменения(УзелОбмена, Метаданные.Справочники.Номенклатура);
После выполнения этого кода при следующем сеансе синхронизации все элементы справочника будут переданы в подчиненную базу. Это гарантирует, что аналитика в документах не будет потеряна.
Если метод с РИБ кажется избыточным, разберем другой вариант — использование универсальной обработки ВыгрузкаЗагрузкаДанныхXML. Этот способ хорош тем, что позволяет гибко выбирать объекты.
Особенности этого подхода:
Организация.Однако стоит помнить, что при таком подходе могут не перенестись настройки пользователей, пароли и специфические настройки 1С-Отчетности. Их придется догружать отдельно или настраивать заново.
Важно помнить, что даже после успешного удаления всех документов и организации из базы, физический размер файла (.1CD или файл данных SQL) не уменьшится сам по себе. Проанализируем необходимые завершающие действия:
Shrink (сжатие) базы данных средствами SQL Server Management Studio, а также обновить статистики для оптимизации дальнейшей работы.Использование предложенных методов позволяет избежать многочасового ожидания при стандартном удалении и гарантирует сохранность данных при разделении учета.