Данные о контрагентах и организациях используются во множестве систем. При этом не известно, куда именно они будут внесены в первую очередь.
Не все контрагенты нужны в каждой системе. Например, некоторые должны быть только в казначействе. Но многие нужны будут и в Казначействе и в УТ и в Рознице. С организациями похожая ситуация.
Поэтому предлагается применить следующий подход. Новый элемент вводится именно в ту систему, в которой надобность в этом элементе возникает впервые. Но при этом существует веб-сервис, который является агрегатором всех систем для элементов данного типа (контрагентов или организаций). При попытке создания нового элемента выполняется запрос к данному веб-сервису для проверки существования создаваемого элемента в других системах. Если элемент обнаружен, происходит импорт и синхронизация. Если же элемент не обнаружен, то он вводится в данную систему и впоследствии она будет источником для импорта в другие системы.
Два типа запросов: список и подробности по конкретному элементу.
В запросе списка должна быть возможность задавать шаблон для отбора. Отбор нужен по части наименования и по ИНН.
Каждая система-донор должна предоставлять доступ к своим элементам.
В каждой системе-реципиенте нужна специальная обработка, которая принудит пользователя при создании нового элемента сначала обратиться за данными к сервису.
Желательно стандартизировать эту обработку так, чтобы она работала без особых изменений во всех системах. В частности, она должна выдавать данные об импортируемом элементе в стандартной форме, а код создания нового элемента в ней располагаться не должен.
Должна ли система-реципиент уметь различать данные из разных источников сама, или это должно быть задачей агрегатора?
Возможно, стоит разделить реквизиты, которые агрегатор знает, и специфические реквизиты конкретной системы.
Нужно решить, что делать в случае недоступности веб-сервиса одной из систем-доноров. В таком случае есть риск задублировать один и тот же элемент.
За основу можно взять веб-сервис для импорта контрагентов из старой базы Казначейства.
Как будут регистрироваться системы реципиенты?
При попытке создания нового элемента в системе необходимо также проверить на наличие существующего элемента в данной системе, а веб-сервису нужно сообщить идентификатор системы для того, чтобы он мог исключить данную систему из списка опрашивающих.
Каждой системе (экземпляру) нужен уникальный идентификатор и текстовое наименование. В случае с Казначействами и УТ для этого используется идентификатор элемента справочника "Экземпляры информационных баз".
Если синхронизированный элемент существует сразу в нескольких донорах, как это будет отображаться?
При обращении за списком контрагентов системы-доноры должны выдавать результат с заданным набором стандартных полей. Каждая система может при этом использовать своё пространство имён, агрегатор преобразует все данные в сообщение со своим пространством имён.
Веб-сервисы для старого казначейства расположены на IIS сервера saturn. На этом сервере также находится публикация сервисов для тестовой базы старого казначейства, а также публикация сервисов мебельной базы УПП.
При получении списка контрагентов агрегирующий сервис выдаёт результат по всем системам в пространстве имён агрегирующего сервера. А при запросе по контрагента по UID контрагента и UID системы, начиная с узла partner в результате будет использоваться пространство имён системы-донора.