Задача разделения единой информационной базы «1С:Комплексная автоматизация» (КА), в которой ведется учет по нескольким организациям, на отдельные базы — одна из самых трудоемких процедур для администратора или программиста 1С. Основная сложность заключается в том, что данные в таких конфигурациях тесно переплетены через общие справочники, настройки и механизмы внутреннего взаимодействия. В этой статье мы подробно разберем, как эффективно решить эту задачу, минимизировав риски потери данных и оставив базу максимально «чистой» от следов сторонних организаций.
Проанализируем самый быстрый и действенный метод, когда результат нужен «еще вчера». Этот способ не предполагает немедленного физического удаления данных, но позволяет сотрудникам начать работу в разделенных базах немедленно.
Рассмотрим алгоритм действий:
Этот метод хорош тем, что он исключает риск нарушения ссылочной целостности на начальном этапе. Выясним, в чем подвох: база не уменьшается в объеме, а сложные отчеты могут начать работать медленнее из-за наложенных условий RLS. Однако это дает время для того, чтобы в дальнейшем неспешно провести физическую очистку данных.
Если нам необходимо получить действительно чистую базу, содержащую только объекты конкретной организации, рассмотрим вариант с выгрузкой данных. Типовая обработка ВыгрузкаЗагрузкаДанныхXML из состава «Инструментов разработчика» часто используется для этих целей.
Посмотрим на важный нюанс: в оригинальной обработке от 1С нет встроенного фильтра по организации для всех типов объектов. Разберем, как можно доработать этот процесс:
Пример логики запроса, который может быть использован для отбора документов конкретной организации:
ВЫБРАТЬ
Ссылка
ИЗ
Документ.РеализацияТоваровУслуг
ГДЕ
Организация = &НужнаяОрганизация
Главный риск здесь — потеря «неявных» связей. Если выгружать только документы, могут не перенестись связанные записи регистров сведений или настройки, которые не имеют прямого реквизита Организация.
Проанализируем вариант для небольших баз, где объем данных позволяет выполнить очистку вручную или с помощью простых скриптов. Этот метод кажется «муторным», но он самый контролируемый. Для автоматизации этого процесса можно применить обработку выборочного удаления организаций из 1С, которая рекурсивно помечает на удаление все связанные объекты.
Важно помнить, что 1С не позволит удалить объекты, на которые есть ссылки. Например, если номенклатура использовалась в документах обеих организаций, она останется. Чтобы довести дело до конца, после удаления документов следует запустить специализированную обработку по поиску «сиротских» записей (объектов, на которые больше никто не ссылается) и удалить их.
Выясним причину, по которой простое разделение часто приводит к ошибкам в регистрах. В КА реализован механизм Intercompany — передача товаров между организациями. Если в исходной базе Организация №1 продавала товар Организации №2, то в базе возникнут документы Передача товаров между организациями.
При разделении базы такие документы становятся проблемными:
Рекомендуем перед разделением закрыть все цепочки Интеркампани и, если это возможно, заменить их на обычные операции купли-продажи с внешним контрагентом, созданным специально для этих целей.
Рассмотрим подробнее проблему «мусора» в общих справочниках. После того как документы лишней организации удалены, в базе остаются тысячи записей в справочниках Номенклатура, Контрагенты и Договоры.
Для качественной очистки выполним следующие шаги:
УчетныеПолитикиОрганизаций и НастройкиСистемы. Их нужно проверять вручную, так как они критически влияют на поведение программы в новой базе.В современных версиях «1С:Комплексная автоматизация» (начиная с 2.x) реализован универсальный формат обмена данными EnterpriseData. Посмотрим, почему этот метод может быть предпочтительнее XML-выгрузки:
OutOfMemory), часто возникающее при работе с огромными XML-файлами.После завершения процедур удаления объем физического файла базы данных (1Cv8.1CD) или таблиц в SQL-базе не уменьшится автоматически. Чтобы освободить место и ускорить работу, обязательно выполним следующие действия:
Shrink Database средствами СУБД и обновить статистику.Проанализировав все способы, можно сделать вывод: для быстрого старта используйте копию + RLS, а для качественного разделения — EnterpriseData или Выгрузку XML с последующей тщательной очисткой «сиротских» записей в справочниках. Всегда делайте резервную копию перед началом любых манипуляций с удалением данных!