В этом разделе мы протестируем обмен данными сначала интерактивным, а затем программным образом, а также рассмотрим различные сценарии обмена данными в распределенной информационной базе.
подробнее
Подробнее познакомиться с реализацией обмена данными в распределенной информационной базе можно в демонстрационной конфигурации «Примеры обмена», которая прилагается к книге.
В нашей демонстрационной конфигурации существует план обмена Магазины, на основе которого выполняется обмен данными в распределенной информационной базе. Для этого у плана обмена установлен флажок Распределенная информационная база (рис. 3.12).
Рис. 3.12. План обмена «Магазины»
Состав плана обмена включает все объекты конфигурации за исключением константы ПрефиксНомеров, которая служит для установки префиксов кодов/номеров объектов, созданных в каждом узле обмена. Подробнее об этом рассказывается в разделе «».
У плана обмена Магазины также существует реквизит Склад (тип СправочникСсылка.Склады) для хранения ссылки на склад, к которому относится конкретный узел обмена. Подробнее об этом будет рассказано ниже, в разделе «».
Сначала создадим общий неглобальный модуль Обмен и поместим в нем экспортную функцию ПолучитьПрефиксНомера() – листинг 3.23.
Листинг 3.23. Функция «ПолучитьПрефиксНомера»
Функция ПолучитьПрефиксНомера() Экспорт
Возврат Константы.ПрефиксНомеров.Получить();
КонецФункции
После этого в модули объектов всех справочников, участвующих в обмене, поместим процедуру ПриУстановкеНовогоКода() – листинг 3.24.
Листинг 3.24. Процедура «ПриУстановкеНовогоКода»
Процедура ПриУстановкеНовогоКода(СтандартнаяОбработка, Префикс)
Префикс = Обмен.ПолучитьПрефиксНомера();
КонецПроцедуры
А в модули объектов всех документов, участвующих в обмене, поместим процедуру ПриУстановкеНовогоНомера() – листинг 3.25.
Листинг 3.25. Процедура «ПриУстановкеНовогоНомера»
Процедура ПриУстановкеНовогоНомера(СтандартнаяОбработка, Префикс)
Префикс = Обмен.ПолучитьПрефиксНомера();
КонецПроцедуры
В результате созданные в базе каждого узла обмена объекты будут иметь префиксы, соответствующие значению константы, установленному при настройке этого узла.
Запустим «1С:Предприятие», введем некоторые тестовые данные и протестируем работу обмена в распределенной информационной базе.
В списке узлов плана обмена Магазины уже существует одна предопределенная запись, соответствующая нашей информационной базе. Это и будет центральный узел плана обмена. Установим его код (ЦентрОфис) и название (Центральный офис).
Затем добавим в список еще одну запись с кодом Опт и наименованием Оптовый. В поле Склад выберем значение Оптовый склад. Выделим этот узел, нажмем кнопку Создать начальный образ… и создадим подчиненный узел обмена путем создания начального образа из нашей центральной базы, как описано в разделе «» (рис. 3.13).
Рис. 3.13. Создание подчиненного узла «Оптовый» путем создания начального образа
При этом в базе подчиненного узла, в списке плана обмена Магазины, узел, для которого создавалась база (с кодом Опт), будет внесен платформой как предопределенный (помечен специальной пиктограммой в списке узлов), а узел центральной базы будет добавлен в качестве главного узла обмена (помечен специальной пиктограммой в списке узлов), рис. 3.14.
Рис. 3.14. Список узлов плана обмена для базы подчиненного узла
Для предотвращения конфликта записи объектов с одинаковыми номерами в базе каждого из узлов обмена нужно установить значение константы Префикс номеров. Подробнее об этом рассказывается в разделе «». Для центральной базы установим значение этой константы как «ЦО» (рис. 3.15).
Рис. 3.15. Установка значения константы «ПрефиксНомеров»
После этого в базе центрального узла введем новый элемент справочника Номенклатура. Код этого элемента будет иметь префикс «ЦО» (рис. 3.16).
Рис. 3.16. Ввод новых данных в центральной базе
Теперь нам нужно передать эти изменения подчиненному узлу Оптовый. Для этого в центральной базе, в списке узлов плана обмена нужно выбрать подчиненный узел, которому будут передаваться данные (Оптовый), и нажать кнопку Записать изменения (рис. 3.17).
Рис. 3.17. Запись измененных данных из центральной базы в подчиненный узел «Оптовый»
Откроем базу подчиненного узла Оптовый. Там мы увидим все данные, перенесенные из центральной базы при создании начального образа. В списке узлов плана обмена Магазины выберем узел, из которого данные были выгружены (Центральный офис), нажмем кнопку Прочитать изменения и укажем файл архива, в который были записаны изменения от центрального узла с автоматически сформированным именем Message_ЦентральныйОфис_Оптовый (рис. 3.18).
Рис. 3.18. Чтение измененных данных из центральной базы в подчиненный узел
Произойдет загрузка данных из центральной базы, являющейся корневым узлом, в подчиненный узел обмена. В справочнике Номенклатура мы увидим еще одну запись, код которой начинается с префикса «ЦО» (рис. 3.19).
Рис. 3.19. Список справочника «Номенклатура» в подчиненном узле обмена «Оптовый»
Теперь установим значение константы Префикс номеров как «ОП». Добавим нового контрагента. Его код будет начинаться с префикса «ОП». В списке узлов плана обмена Магазины выберем узел, которому будут передаваться данные (Центральный офис) и нажмем кнопку Записать изменения. После этого откроем центральную базу, в списке узлов плана обмена Магазины выберем узел, из которого данные были выгружены (Оптовый), нажмем кнопку Прочитать изменения и укажем файл архива, в который были записаны изменения от подчиненного узла с автоматически сформированным именем Message_Оптовый_ЦентральныйОфис.
Таким образом, изменения данных можно производить в любом из узлов плана обмена и обмениваться данными в обе стороны. Но, в отличие от универсального обмена данными, в распределенных информационных базах обмениваться данными можно только между парами узлов «главный – подчиненный», а не между подчиненными узлами. Изменения конфигурации возможны только в корневом узле и должны быть переданы по всем уровням иерархии.
Если изменить и конфигурацию, и данные и записать эти изменения, то они будут переданы в одном сообщении обмена. В этом случае прочитать сообщение обмена в подчиненном узле нужно дважды. Сначала будут получены изменения конфигурации. Затем нужно в режиме Конфигуратор обновить конфигурацию и выполнить чтение изменений еще раз. После этого будут получены измененные данные.