Решение задачи разделения базы 1С по организациям
В мире 1С встречается несколько типов задач, с которыми регулярно приходится встречаться. Это такие задачи, как свертка базы 1С, перенос данных из старой базы в новую или например организация регулярного обмена данными. А также задача разделения базы 1С по организациям.
Специалисты компании MoscowSoft неоднократно решали задачу разделения базы 1С по организациям для наших заказчиков и даже создали готовые инструменты для этого.
С чего можно начать в решении этой задачи - помнить, что платформа 1С дает нам инструменты для поиска ссылок на те организации, которые есть в базе. Эта функция называется “НайтиПоСсылкам”. То есть вы передаете массив готовых ссылок и, соответственно, результатом выполнения функции становится массив объектов баз данных. Но если выполнять корректно после такого поиска удаление данных (с контролем ссылочной целостности), этот процесс займет очень много времени. В этом главная сложность такой задачи - требуется максимально ускорить удаление данных.
Этапы разделения базы 1С на две отдельные базы по организациям
Также следует сказать, как технически можно организовать разделение базы 1С на две отдельные базы по организациям. Как правило, используют один из двух вариантов:
- Либо перенос данных между идентичными конфигурация, то есть запуск обработки “Выгрузка / загрузка данных XML”.
- Либо используется алгоритм для удаления “лишних” организации. То есть делается копия базы данных, и в ней запускается процесс удаления документов по тем организациям, учет по которым в новой базе данных не должен вестись.
Процесс удаления данных из базы 1С и её оптимизация
Таким образом остаются только нужные организации.
После различных экспериментов, различных попыток решить данную задачу для базы данных не самого большого размера (около 20 гигабайт), мы в итоге остановились на втором способе. Но удаление аккуратное, с контролем ссылочной целостности по каждому удаляемому объекту, могло длиться неделями даже для базы данных небольшого размера.
В итоге пришли к следующему решению - создали отдельную обработку для контроля одновременных перекрестных ссылок объектов на разные организации. О чем идет речь? В базе данных по ошибке или не по ошибке могут появиться ситуации, что один и тот же объект имеет прямые или непрямые ссылки сразу на две организации. Например, через какой-то подчиненный объект. Например, в документе “Операция бух” в шапке выбрана одна организация, а в табличной части данного документа выбран договор, который принадлежит другой организации.
Если мы будем выполнять удаление “лишних организаций” и договор который в табличной части в движениях документа “Операция бух” будет удален, то будет удален и документ сам “Операция бух”. Таким образом, движения и остатки по той организации, которая должна остаться, станут некорректными после процесса удаления. Чтобы избежать таких ошибочных ситуаций, мы разработали инструмент для поиска таких прекрасных ссылок, то есть инструмент их находит, а разобраться с ними предлагает уже пользователям. Понятно, что возможны и другие ситуации, когда один и тот же объект либо прямо, либо опосредованно может иметь в себе ссылки на разные организации. Уже после ручного удаления перекрестных ссылок приступаем к процессору удаления данных по организациям.
Сначала был разработан алгоритм, который для каждого объекта перед удалением запускал поиск ссылок на него и если их не было, то запускал удаление, но этот процесс занимал очень много времени. В последующем для ускорения перешли к другому алгоритму. Сначала происходит удаление всех документов, где есть реквизит шапки “Организация” и это удаление производится без контроля ссылочной целости. Обратите внимание - это самый быстрый способ удаление данных из базы 1С. Разумеется, кроме использования прямых SQL запросов, которые является нарушением лицензионной политики 1С, а без них быстрее удалить по-другому никак не получится. И уже после завершения удаления документов, происходит удаление записи регистров сведений, кстати многие записи удаляются автоматически при удалении документов, а документы предварительно надо распровести. И уже после этого происходит удаление справочников, причем тоже можно работать сначала удалить известные справочники: банковские счета организации, договоры контрагентов и так далее. Таким образом, когда будут удалены все ссылочные данные на самом последнем этапе удаляется собственно сама организация, в этот момент на нее никаких ссылок уже не остается.
Разумеется для решения данной задачи мы сделали обработку, она много лет присутствует на инфостарте и также предлагается на нашем сайте. И мы и наши заказчики активно ее используем на проектах. И эта обработка выполняет эту задачу разделения баз данных на части. Кроме того стоит помнить и о дополнительных моментах при выполнении такой операции. Что имеется в виду? В первую очередь имеется в виду настройка прав пользователей. Вторая задача это удаление обменов данными которые были в исходной базе, либо возможно настройка новых обменов данными, то есть интеграция данной базы 1с в информационное пространств организации, то есть настройка таких обменов.
Дополнительные моменты при выполнении задачи разделения базы 1С
Что еще стоит иметь в виду: настройка ИТС в этом случае будет выполнена автоматически. Все внешние обработки так же будут в базе присутствовать все доступы к внешним ресурсам, все расширения так же в ней останутся ну что является скорее плюсом да, то есть забыть об этом а не получится. Но, разумеется, потребуется отключить тот функционал, который в новый базе по новой организации уже не требуется для ее облегчения, возможно, в каких то ситуациях необходимо будет сделать базу типовой.
Посмотреть описание обработки разделения базы 1С по организациям >>