Объект конфигурации ПланОбмена
Для того, чтобы существовала возможность обмена какими-либо данными с кем-либо, необходимо некоторым образом идентифицировать тех, с кем мы будем обмениваться и для каждого из них описать перечень того, чем мы будем с ним обмениваться.
Обе эти задачи позволяет решать прикладной объект конфигурации План обмена.
Подобно тому, как элементами данных справочника являются элементы справочника, элементами данных плана обмена являются узлы плана обмена. Каждый узел идентифицирует участника обмена данными по данному плану обмена. Кроме этого, в каждом плане обмена всегда существует один предопределенный узел, идентифицирующий данную информационную базу.
В одной конфигурации может существовать несколько планов обмена. Каждый план обмена определяет набор данных, которым будет производиться обмен в рамках данного плана и сам механизм этого обмена. Наличие нескольких планов обмена может [395] потребоваться в случае, если с разными узлами ведется обмен разным составом данных, или когда схема организации обмена с одними узлами отличается от схемы организации обмена с другими узлами.
В состав данных, которыми может производиться обмен, входят элементы информационных структур базы данных, которые описываются следующими объектами встроенного языка:
· | КонстантаМенеджерЗначения.<имя>, |
· | СправочникОбъект.<имя>, |
· | ДокументОбъект.<имя>, |
· | ПоследовательностьНаборЗаписей.<имя>, |
· | ПланВидовХарактеристикОбъект.<имя>, |
· | ПланСчетовОбъект.<имя>, |
· | ПланВидовРасчетаОбъект.<имя>, |
· | РегистрСведенийНаборЗаписей.<имя>, |
· | РегистрНакопленияНаборЗаписей.<имя>, |
· | РегистрБухгалтерииНаборЗаписей.<имя>, |
· | РегистрРасчетаНаборЗаписей.<имя>, |
· | ПерерасчетНаборЗаписей.<имя>, |
· | БизнесПроцессОбъект.<имя>, |
· | ЗадачаОбъект.<имя>, |
· | УдалениеОбъекта. |
Для упрощения изложения, в дальнейшем будем называть эти элементы информационных структур объектами обмена.
Разработчик имеет возможность определить состав каждого плана обмена, указав, объекты конфигурации, данные которых должны участвовать в обмене по данному плану.
При описании состава данных плана обмена разработчик имеет возможность указать для каждого типа объектов признак "Авторегистрация". Этот признак определяет, каким образом план обмена будет отслеживать изменения этих данных.
Возможность отслеживать изменения данных реализована в плане обмена за счет использования механизма регистрации изменений. Работа этого механизма базируется на том, что каждый из объектов обмена имеет свойство "ОбменДанными", с помощью которого можно указать, для каких узлов необходимо производить регистрацию изменений этого объекта. Любые изменения объекта обмена сводятся, [396] в конечном итоге, к записи или удалению объекта обмена. Механизм регистрации изменений анализирует события записи и удаления объектов обмена и на основании параметров обмена данными, содержащихся в каждом из объектов обмена, формирует записи регистрации изменений. Следует отметить, что свойство "ОбменДанными" не хранится в базе данных, а используется только во время записи объекта обмена.
Так вот, признак "Авторегистрация", устанавливаемый при указании состава данных плана обмена, позволяет указать, что параметры обмена данными будут формироваться каждый раз самим механизмом регистрации изменений на основании информации, содержащейся в плане обмена. После автоматического заполнения параметров обмена, разработчик все же имеет возможность внести изменения в сформированные таким образом параметры. Для этого следует использовать обработчики событий объектов, участвующих в обмене – "ПередЗаписью" и "ПередУдалением", в которых можно модифицировать список узлов-получателей (т.е. тех узлов, для которых регистрируются изменения). Кроме этого, существует возможность отключить авторегистрацию изменений, и тогда параметры обмена данными нужно будет формировать полностью средствами встроенного языка. Гипотетически делать это можно в любом фрагменте кода, но для того, чтобы конфигурация была легко читаема, рекомендуется использовать для этих целей все те же обработчики событий "ПередЗаписью" и "ПередУдалением". В этом случае код формирования параметров обмена данными будет сосредоточен в логически понятных точках, а не разбросан по всей конфигурации.
Итак, как мы теперь знаем, при записи и удалении объектов обмена план обмена формирует записи регистрации изменений. Записи регистрации изменений хранятся в таблицах регистрации изменений, причем для каждого объекта обмена ведется своя отдельная таблица регистрации изменений. При изменении объекта обмена в таблице регистрации изменений создается столько записей, сколько узлов-получателей указано в параметрах обмена данными у объекта обмена. Каждая запись при этом будет хранить ссылку на свой узел-получатель. Таблицы регистрации изменений создаются лишь в том случае, если соответствующий объект метаданных указан в составе хотя бы одного плана обмена. [397]
Кроме ссылки на узел обмена, для которого регистрируются изменения, каждая запись таблицы регистрации изменений хранит также номер сообщения, в котором изменение было передано в первый раз в этот узел. До тех пор, пока сообщение не будет передано в первый раз, это поле хранит Null.
Сообщение, с точки зрения плана обмена, это единица обмена информацией. Поэтому одной из важнейших составляющих плана обмена, помимо службы регистрации изменений, является инфраструктура сообщений. Поскольку сообщения передаются в рамках плана обмена от одного узла к другому, каждое сообщение точно ассоциировано с планом обмена, имеет уникальный номер и имеет одного отправителя и одного получателя. За нумерацию сообщений отвечает инфраструктура сообщений, и благодаря этому записи регистрации изменений и имеют возможность хранить номера сообщений, в которых эти изменения были переданы первый раз.
Инфраструктура сообщений позволяет, также, получать подтверждения от узла-получателя о приеме сообщений. Такое подтверждение содержится в каждом сообщении, приходящем от узла-получателя в виде номера последнего принятого сообщения.
Впоследствии, проанализировав номер последнего принятого сообщения и номера сообщений, содержащиеся в записях регистрации изменений, разработчик может удалить записи регистрации изменений, прием которых подтвержден получателем.