Данные) Тогда

ПланыОбмена

.ИзменеииеЗарегистрировано(ЧтениеСообщения.Отправитель,

Сообщить("- Изменения отклонены"); Продолжить; КонецЕсли;

КонецЦикла;

ЧтениеСообщения.ЗакончитьЧтение();

ЧтениеXML.Закрыть();

УдалитьФайлы(ИмяФайла);

Сообщить("----- Конец загрузки---------- ");

КонецПроцедуры

Возможная коллизия разрешается следующим образом: мы проверяем, является ли узел-отправитель главным узлом и есть ли записи об изменении этого объекта для этого узла в нашей базе


 


418



Использование основных объектов конфигурации

данных. В случае если объект изменялся в нашей базе и отправите^ не является главным узлом, мы отклоняем запись полученного объекта. Во всех остальных случаях мы принимаем изменения полученного объекта.

Теперь единственное, что нам осталось сделать - записать полученные данные:

Процедура ПрочитатьСообщениеСИзменениями() Экспорт Каталог = КаталогВременныхФайлов();

// Сформировать имя файла

ИмяФайла = Каталог +?(Прав(Каталог, 1) = "V,"", "\") + "Message" + СокрЛП(Ссылка.Код) + "_" + СокрЛП(ПланыОбмена.Филиалы.ЭтотУзел().Код) + " .xml";

Файл = Новый Файл(ИмяФайла);

Если Не Файл.Существует() Тогда Возврат;

КонецЕсли;

//*** Чтение документов XML // Попытаться открыть файл ЧтениеXML = Новый ЧтениеXML; Попытка

ЧтениеXML.ОткрытьФайл(ИмяФайла); Исключение

Сообщить("Невозможно открыть файл обмена данными.");

Возврат; КонецПопытки;

Сообщить("----- Загрузка из " + Строка(ЭтотОбъект) + "-------- ");

Сообщить(" - Считывается файл " + ИмяФайла);

// Загрузить из найденного файла //*** Инфраструктура сообщений ЧтениеСообщения = ПланыОбмена.СоздатьЧтениеСообщения();

//читать заголовок сообщения обмена данными - файла XML ЧтениеСообщения.НачатьЧтение^тениеXML);

// Сообщение предназначено не для этого узяа

Если ЧтениеСообщения.Отправитель <> Ссылка Тогда

ВызватьИсключение "Неверный узел"; КонецЕсли;

// Удаляем регистрацию изменений // для узла отправителя сообщения //*** служба регистрации изменений ПланыОбмена.УдалитьРегистрациюИзменений(ЧтениеСообщения.Отправитель,_


Обмен данными

ЧтениеСообшения.НомерПринятого);

// Читаем данные из сообщения

//*** XML-сериализация

Пока ВозможностьЧтенияXML(ЧтениеXML) Цикл

// Читаем очередное значение

Данные = ПрочитатьXMLЧтениеXML);

// Не переносим изменение полученное // в главный из неглавного // если есть регистрация изменения Если Не ЧтениеСообщения.Отправитель.Главный И

ПланыОбмена.ИзменениеЗарегистрировано(ЧтениеСообщения.Отправитель,

Данные) Тогда

Сообщить("- Изменения отклонены"); Продолжить; КонецЕсли;

// Записать полученные данные

Данные.ОбменДанными.Отправитель = ЧтениеСообщения.Отправитель;

Даниые.ОбменДанными.Загрузка = Истина;

ДанныеЗаписать();

КонецЦикла;

ЧтениеСообщения.ЗакончитьЧтение();

ЧтениеXML.Закрьпъ();

УдалитьФайлы(ИмяФайла);

Сообщить("----- Конец загрузки---------- ");

КонецПроцедуры

Перед записью полученного объекта мы устанавливаем у него в параметрах обмена данными узел-отправителя, для того, чтобы система, при записи этого объекта в нашей базе данных, не формировала записи регистрации изменений этого объекта для того узла, от которого мы его только что получили.

Кроме этого, в параметрах обмена данными мы устанавливаем свойство «Загрузка», информирующее систему о том, что запись объекта будет происходить в режиме обновления данных, полученных в результате обмена. Такое указание позволяет системе упростить процедуру записи объекта, отказавшись от ряда стандартных проверок и исключив изменения связанных данных, которые выполняются при, обычной записи.

На этом создание процедуры получения и обработки данных обмена закончено.


 


420



Использование основных объектов конфигурации


Обмен данными


 


Проверка работы обмена данными

П

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

(Конфигурация | Сохранить конфигурацию в файл...).Запустим 1С:Предприятие в режиме отладки и установим необходимые значения в нашей центральной базе. Прежде всего зададим значение константы «ПрефиксНомеров» - «ЦБ»:


Затем создадим новый узел, который будет соответствовать базе филиала, присвоим ему код «Фил» и наименование «Филиал»:

Теперь вызовем обработку «ОбменДанными» и нажмем «Выполнить». В окне сообщений появится следующий текст:


 


После этого откроем план обмена «Филиалы» и зададим параметры узла по умолчанию - т.е. параметры нашей базы. Код базы будет «ЦБ», а наименование - «Центральная база».

Не забудьте, что именно код идентифицирует узлы обмена в различных базах, поэтому в базе филиала мы будем создавать узлы с такими же кодами.


Таким образом, в результате обмена данными центральная база сформировала файл обмена, содержащий изменения всех данных, которыми она обменивается с филиалом.

Настало время перейти к базе филиала. Запустим систему в режиме
Конфигуратора и добавим в список баз новую базу с пустой
конфигурацией, которая будет расположена в созданном нами
каталоге базы филиала. В конфигураторе откроем конфигурацию и
загрузим конфигурацию из файла

(Конфигурация | Загрузить конфигурацию из файла...).Запустим 1С:Предприятие в режиме отладки.


 


d?.7



Использование основных объектов конфигурации


Обмен данными


 


Первым делом зададим значение константы «ПрефиксНомеров» «ФЛ»:

Затем откроем план обмена «Филиал» и опишем предопределенный узел (узел текущей информационной базы) кодом «Фил» и наименованием «Филиал»:


Теперь, для большей наглядности откроем список справочника «Клиенты». Сейчас в этом справочнике нет ни одного элемента. Запустим обработку «ОбменДанными» и нажмем «Выполнить».

Справочник будет заполнен элементами, а в окне сообщений появится текст:

Теперь проверим, как будет происходить обмен в другую сторону. Создадим в справочнике «Клиенты» нового клиента с произвольным наименованием. После этого снова нажмем «Выполнить» в открытой форме обработки «ОбменДанными». Затем перейдем в центральную базу, также выполним обмен данными и убедимся, что клиент, созданный в базе филиала перенесен в центральную базу.


После этого создадим новый узел плана обмена с кодом «ЦБ», наименованием «Центральная база» и признаком «Главный»:



 


 


424



Использование основных объектов конфигурации


Обмен данными


 


Механизм распределенных информационных баз

М

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

Механизм распределенных информационных баз реализуется планами обмена. Для этого объект конфигурации План обмена содержит свойство «Распределенная информационная база». Если это свойство установлено, для данного плана обмена включается механизм распределенных информационных баз и разработчик получает возможность создать распределенную базу исключительно интерактивными средствами, без написания кода. Такая возможность не исключает программное управление обменом, которое также доступно при работе с распределенными информационными базами и в ходе создания примера мы рассмотрим оба варианта организации обмена в распределенных информационных базах.


Основные сведения о распределенных информационных базах

К

ак мы уже говорили выше, распределенная информационная база должна иметь четко определенную древовидную структуру. Количество уровней в такой структуре не ограничено, главное - между двумя связанными узлами всегда должно быть определено отношение «главный - подчиненный»:


Таким образом, любой узел этой структуры может иметь произвольное количество подчиненных узлов (в том числе и ни одного). Кроме этого все узлы, кроме одного, должны иметь по одному главному узлу, и один узел не будет иметь главного узла - это корневой узел.

Такое жесткое задание структуры узлов необходимо для определения порядка миграции изменений данных и изменений конфигурации.

Конфигурация может быть изменена только в узле, не имеющем главного узла (то есть в корневом узле). Изменения данных могут выполняться в любом узле.

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


426



Использование основных объектов конфигурации

Разрешение коллизий также будет производиться исходя Из отношения «главный-подчиненный». Если изменения выполнены одновременно и в главном, и в подчиненном узле, при обмене данными будут приняты только изменения главного узла, а изменения подчиненного отвергнуты.

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

Создание начального образа является рекомендуемым способом создания подчиненного узла в распределенной информационной базе.

Постановка задачи

В

качестве примера, на котором мы проиллюстрируем использование механизма распределенных информационных баз, будет создание нескольких отделений нашего OOO «На все руки мастер». В отличие от филиалов, которые расположены в других городах, являются отдельными юридическими лицами и довольно самостоятельны в плане организации учета своей деятельности, отделения нашего OOO расположены в этом же городе, никакой юридической самостоятельностью не обладают и ведут учет в точности так, как это организовано в главном офисе. Поэтому все они используют ту же конфигурацию, что и главный офис, причем, если главный офис вносит какие-либо изменения в свою конфигурацию, все эти изменения должны быть своевременно внесены и в конфигурации отделений.

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


Обмен данными

Пример интерактивного обмена в распределенной информационной базе

Д

ля построения распределенной информационной базы нам понадобится создать еще один объект конфигурации План обмена, который мы назовем «Отделения».

Для этого плана обмена мы установим свойство «Распределенная информационная база»:

Установим свойство «Распределенная информационная база»...

Перейдем на закладку «Прочее» и определим тот же состав данных для обмена, что и в плане обмена «Филиалы»: отметим все объекты конфигурации, относящиеся к подсистеме «УчетУслугИМатериалов».

Запустим 1С:Предприятие в режиме отладки.


 


428



Использование основных объектов конфигурации

Откроем план обмена «Отделения» и зададим параметпк центрального узла (предопределенный элемент плана обмена): код «ЦБ» и наименование «Центральная база». После этого создадим новый узел с кодом «Отд» и наименованием «Отделение». Обратите внимание, что для созданного нами узла стали доступны три иконки в командной панели формы плана обмена: «Создать начальный образ» «Записать изменения» и «Прочитать изменения»:


Обмен данными

На следующем шаге укажем каталог информационной базы и нажмем «Готово». Система создаст в указанном каталоге начальный образ информационной базы нашего отделения.

Запустим 1С:Предприятие, подключим новую базу нашего отделения и откроем ее в конфигураторе. Обратите внимание на то, что конфигурация нашего отделения стала защищена от изменений средствами управления распределенной информационной базой:


 


 
 


Стали доступны команды работы с распределенной информационной базой...

Не откладывая в долгий ящик, воспользуемся первой из них, чтобы создать начальный образ информационной базы нашего отделения. Для этого нам потребуется сначала создать на диске новый каталог, в котором будет располагаться база отделения. После этого выполним команду «Создать начальный образ» и укажем, что информационная база будет расположена на данном компьютере:


Конфигурация подчиненного узла защищена от изменений

средствами управления распределенной информационной

базой...


 


430



Использование основных объектов конфигурации

Запустим базу отделения в режиме отладки и откроем план обмена «Отделения»:


Обмен данными

После этого закроем конфигуратор информационной базы отделения, и выполним чтение изменений в базе подчиненного узла. По окончании чтения система выдаст следующее сообщение:


 




 


 


Обратите внимание, что в базе подчиненного узла сам подчиненный узел является предопределенным узлом плана обмена, а узел центральной базы отмечен красной пиктограммой, указывающей на то, что он является главным для информационной базы отделения. Кроме этого для узла центральной базы доступны только команды «Записать изменения» и «Прочитать изменения».

Теперь проверим работу обмена данными. Откроем список констант и зададим значение константы «ПрефиксНумерации» - «ОТ».

После этого откроем справочник клиентов и добавим в него нового клиента. Затем выполним запись изменений для центральной базы (указав каталог обмена).

Перейдем в центральную базу и выполним чтение изменений в центральной базе. Убедимся, что новый клиент, созданный в базе отделения, присутствует и в центральной базе.

Теперь посмотрим, как будут переноситься изменения конфигурации между главным и подчиненным узлом. В конфигураторе центральной базы создадим новую константу с именем «НоваяКонстанта». Выполним обновление конфигурации базы данных и запустим 1С:Предприятие в режиме отладки. Откроем план обмена «Отделения» и выполним запись изменений для подчиненного узла.


Теперь запустим конфигуратор базы отделения и увидим, что в основной конфигурации появилась новая константа «НоваяКонстанта», т.е. изменения, внесенные в конфигурацию центральной базы, были автоматически перенесены в конфигурацию подчиненного узла. Теперь единственное, что остается сделать - это выполнить обновление конфигурации базы данных в подчиненном узле.

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

Программный обмен в распределенной информационной базе

В

се описанные выше действия по обмену данными в распределенной информационной базе можно выполнить программно.

Мы создадим обработку, которая будет программно выполнять для выбранного узла все те действия, которые были рассмотрены в предыдущем разделе.


 


432



Использование основных объектов конфигурации