На одном из проектов после слияния двух юридических лиц появилась задача объединить две базы Directum, в которых работали организации. Более комплексно процесс миграции баз описан в статье «Реструктуризация c DIRECTUM – это просто».
Под объединением понимается помодульный перенос из одной базы в другую разработки, типовых маршрутов, мастеров действий, записей справочников и документов, их настройка и адаптация. В данной статье я опишу, как происходил процесс переноса документов.
Задача стояла в переносе всех документов по модулю, перенос которого осуществлялся. Стандартные сценарии «Экспорт документов» и «Импорт документов» не подошли. Во-первых, проблематично было бы собрать все нужные документы в одну папку. Во-вторых, нужен был полный перенос документов вместе с подписями, заполнением реквизитов, выдачей прав, создание связей. В-третьих, нужно было перенести все версии каждого документа.
Было принято решение написать свой сценарий, который совместил бы все функции, требуемые для полноценного переноса документов и удовлетворения всех условий задачи. Так как документы каждого модуля имели свои уникальные нестандартные типы карточек, было решено переносить документы с определенным ТКЭДом, который выберет пользователь.
Перед запуском сценария нужно заполнить константу с параметрами подключения к базе, из которой требуется перенести документы. Строка подключения выглядит следующим образом:
ServerName=<Имя сервера>; DBName=<Имя базы данных>;UserName=<Логин пользователя, под которым осуществляется подключение>;Password=<Пароль пользователя>
После запуска сценария выходит окно выбора типа карточки документов, которые нужно перенести:
Подключение к базе, с которой осуществляется перенос происходит через объект «SBLogon.LoginPoint». Через него удобно напрямую обращаться к компонентам системы, их свойствам и методам.
После выбора типа карточки выходит диалог запроса вида документа и ТКЭДа, с которыми нужно создать документы в текущей системе.
Далее выходит диалоговое окно выбора папки, куда будут выгружаться документы:
В выбранной нами директории создаются 3 новые папки и 2 txt файла:
Изначально документ будет экспортироваться в esd. формате в папку «Обрабатываемые документы». Если во время экспорта-импорта произошла ошибка, документ переносится в папку «Документы, обработанные с ошибкой». Если все действия прошли безошибочно, то он переносится в папку «Загруженные документы», а в файл «LoadedDocs» заносится информация о созданных в системе документах.
После выбора директории экспорта-импорта, производится работа с документом.
Сначала первая версия документа экспортируется в esd-файл в папку «Обрабатываемые документы». Далее происходит создание документа из файла. При таком подходе так же экспортируются и импортируются подписи документа.
Далее происходит заполнение реквизитов главного и табличных разделов. Во втором табличном разделе в реквизите “ISBVersionAuthor” содержится информация об авторе документа. Для всех версий он также меняется на корректный, чтобы вместо пользователя, запустившего сценарий, у каждой версии был указан истинный автор документа.
При экспорте документа в esd-файл добавляется информация только об основных системных реквизитах, таких как автор, примечание, организация. В связи с этим, через объект «SBLogon.LoginPoint» осуществляется получение значений. Происходит сравнение всех реквизитов выбранного ТКЭДа. Если в документе из системы, из которой осуществляется перенос, найден такой же реквизит, то в созданном документе устанавливается его значение.
Для реквизитов типа ЗС «Пользователи» происходит поиск значения в текущей системе по имени пользователя, которое задано в системе, из которой осуществляется перенос. Для реквизитов, которые ссылаются на другие типы справочников, происходит поиск значений исходя из записи в таблице IntegratedSystemsObjectLinks. В данную таблицу заносятся связи объектов DIRECTUM c объектами интегрируемых систем.
В рамках объединения баз эта таблица использовалась для сопоставления записей справочников, которые в обеих системах имеют разные коды. Благодаря данным в таблице, удалось корректно заполнить реквизиты при экспорте -импорте записей справочников, а в рамках текущей задачи - при импорте документов.
После создания документа и заполнения реквизитов, импортируются все имеющиеся версии документа. Далее происходит выдача прав на документ. Так как в моем случае почти все нужные мне документы были связаны друг с другом, в сценарий был добавлен функционал создания связей документов. Связь создается в том случае, если в таблице IntegratedSystemsObjectLinks есть информация о документе, который связан с созданным.
Тип объекта интегрированной системы (IntegratedSystemObjectType) и тип объекта DIRECTUM(DIRECTUMObjectType) для документов указывается как EDocument. В имени справочника интегрированной системы (IntegratedSystemReferenceName) указано имя типа карточки, документы с которым переносятся. А в имени справочника системы DIRECTUM (DIRECTUMReferenceName) имя типа карточки, с которым документ заносится в систему. В поле IntegratedSystemObjectID (ИД объекта интегрированной системы) указан ИД документа в базе, из которой осуществляется перенос, а в поле DIRECTUMObjectID (ИД объекта системы DIRECTUM) ИД уже перенесенного документа в текущей системе.
Был разработан механизм, который позволяет в пару кликов перенести документы из одной базы в другую. Сценарий можно доработать под индивидуальные требования. Весь функционал, который нужен был для решения моей задачи, в нем реализован.
Подводя итоги, перечислю основные особенности данной разработки:
К сожалению подписи с сертификатами КриптоПРО переносится не будут
коллеги, а есть решение выгрузки документов из общих папок в аналогичную структуру на диске?
Sergey, а стандартный сценарий "Экспорт электронных документов" не подходит?
Авторизуйтесь, чтобы написать комментарий