Экспорт–импорт документов при миграции баз СЭД DIRECTUM

21 3

На одном из проектов после слияния двух юридических лиц появилась задача объединить две базы 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) ИД уже перенесенного документа в текущей системе.

Итоговый результат

Был разработан механизм, который позволяет в пару кликов перенести документы из одной базы в другую.  Сценарий можно доработать под индивидуальные требования.  Весь функционал, который нужен был для решения моей задачи, в нем реализован.

Подводя итоги, перечислю основные особенности данной разработки:

  • возможность переноса документов с определенным типом карточки;
  • у версий документов указаны настоящие авторы, а не пользователь, запустивший сценарий;
  • дата создания документа устанавливается идентично данным в исходной базе;
  • заполняются реквизиты главного и табличных разделов;
  • переносятся все подписи документа;
  • выдаются права на документы;
  • создается связь, если информация о связанном документе присутствует в таблице IntegratedSystemsObjectLinks.

 


 

Алексей Пестов

К сожалению подписи с сертификатами КриптоПРО переносится не будут

Sergey Medvedev

коллеги, а есть решение выгрузки документов из общих папок в аналогичную структуру на диске?

Дмитрий Соколов

Sergey, а стандартный сценарий "Экспорт электронных документов" не подходит?

Авторизуйтесь, чтобы написать комментарий