Построение распределенных информационных систем
Цель лекции: научиться создавать распределенные информационные системы, используя механизмы распределенной информационной базы
7.1. Постановка задачи
Наша организация расширяется. У нее появился дополнительный офис, который занимается закупками материалов. Но материалы может покупать и центральный офис организации. Руководством было принято решение о том, что учет поступления материалов в дополнительном офисе должен вестись с использованием того же ПО, что и в главном офисе. Учетные данные головного и дополнительного офисов нужно синхронизировать не реже одного раза в день для того, чтобы сотрудники и того и другого офиса имели бы правильное представление об остатках материалов в организации.
Основным инструментом учета поступления материалов в нашей конфигурации является документ ПоступлениеМатериалов. При его заполнении используется множество справочников, он формирует движения в регистре накопления ОстаткиМатериалов и в регистре бухгалтерии Хозрасчетный, по этим регистрам строятся несколько отчетов. Нам нужно организовать учет в территориально разделенных подразделениях организации с возможностью синхронизации изменений.
Для решения этой задачи можно воспользоваться механизмом распределенных информационных баз. Он позволяет организовывать обмен данными между несколькими информационными базами, синхронизировать как изменения в данных, которые внесены в базу в пользовательском режиме, так и изменения в конфигурации.
7.2. Предварительная подготовка
Прежде чем начинать реализацию механизма, подумаем о том, все ли в нашей конфигурации готово для того, чтобы он смог нормально работать. Предположим, у нас имеются две базы данных - одну назовем Главная база (ГБ), вторую - База филиала (ФБ). После того, как база ФБ создана, в ней и в базе ГБ есть один документ ПоступлениеМатериалов с номером 00001. В базах ГБ и ФБ, каждая из которых автономно используется до того момента, когда придет время обмениваться данными, создают по одному документу ПоступлениеМатериалов. Он, в соответствии со стандартными правилами нумерации, приобретает номер 00002. И в той и в другой базе содержатся разные документы, имеющие один и тот же номер. При синхронизации данных возникнет конфликтная ситуация. Для того чтобы подобной ситуации не допустить, нам нужно предусмотреть собственные правила нумерации объектов для баз ГБ и ФБ. Обычно подобная задача решается с помощью использования префиксов номеров, автоматически подставляемых при создании новых объектов.
Доработаем конфигурацию таким образом, чтобы те объекты, данными которых мы будем обмениваться, предусматривали использование различной системы нумерации в разных базах.
По предварительной оценке, произведенной выше, нас интересует, во-первых, документ ПоступлениеМатериалов, во-вторых - все справочники, используемые в системе. То есть, нам нужно создать механизм формирования номеров (для документа) и кодов (для элементов справочников), который использовал бы префиксы для разделения нумерации элементов различных баз.
Создадим новую константу ( рис. 7.1):
Откроем форму констант ( Общие > Общие формы > ФормаКонстант ), и, воспользовавшись командой меню Форма > Размещение данных ( рис. 7.2) добавим на нее поле для редактирования новой константы ПрефиксНомера, установив галочки Вставить надписи и Разместить в диалоге автоматически для того, чтобы система сама разместила нужные данные на форме, рис. 7.2.
Теперь добавим в модули объекта каждого справочника ( рис. 7.3) обработчик события ПриУстановкеНовогоКода (выбрав его из поля Процедуры и функции панели инструментов Модуль ) такого вида:
Процедура ПриУстановкеНовогоКода(СтандартнаяОбработка, Префикс) Префикс=Константы.ПрефиксНомера.Получить(); КонецПроцедуры
Присваивание значения константы ПрефиксНомера параметру Префикс, приводит к тому, что код элемента справочника, присваиваемый ему при создании, начинается с заданного в константе префикса. Делая это, нужно учитывать, что количество значимых цифр кода уменьшится - для того, чтобы справиться с этой проблемой, можно увеличить длину кода справочника.
В модуль документа ПоступлениеМатериалов нам нужно внести похожее изменение, однако, здесь идет речь о номерах объекта, в итоге, получается следующий код:
Процедура ПриУстановкеНовогоНомера(СтандартнаяОбработка, Префикс) Префикс=Константы.ПрефиксНомера.Получить(); КонецПроцедуры
Подготовительный этап выполнен, теперь приступим к созданию основного объекта, на котором основана распределенная информационная база - на Плане обмена.
7.3. План обмена
Планы обменов используются при реализации механизмов обмена данными. В частности, план обмена содержит список объектов, которые участвуют в обмене, а так же - список информационных баз (узлов обмена), между которыми осуществляется обмен.
При обмене данными в рамках распределенной информационной базы в плане обмена должен быть включен признак Распределенная информационная база. Кроме того, следует учитывать, что один из узлов распределенной базы является главным, остальные - подчиненными (в свою очередь, подчиненные узлы так же могут иметь другие подчиненные узлы, для которых они являются главными). От главного узла к подчиненным распространяются изменения в данных (например, новые документы, созданные в пользовательском режиме) и изменения в конфигурации (например, добавление нового реквизита в документ и т.д.). От подчиненного узла к главному передаются лишь изменения данных.
Создадим новый план обмена ( Общие > Планы обмена ), назовем его РаспределеннаяИБ, установим параметр Распределенная информационная база, рис. 7.4.
Теперь нам нужно настроить состав объектов, которые будут участвовать в обмене. Для этого перейдем на вкладку Прочее окна редактирования свойств объекта и нажмем на кнопку Состав. Отметим следующие объекты ( рис. 7.5):
- Корневой элемент Справочники
- Документ ПоступлениеМатериалов
- Корневой элемент Планы видов характеристик
- Корневой элемент Планы счетов
- Корневой элемент Регистры накопления
- Корневой элемент Регистры бухгалтерии
После того, как состав плана обмена настроен, запустим нашу конфигурацию в пользовательском режиме. Откроем форму списка плана обмена ( Операции > План обмена > Распределенная ИБ ), рис. 7.6.
Здесь есть один предопределенный элемент, узел, который представляет собой главную информационную базу. Откроем его для редактирования, заполним поля следующим образом:
Создадим еще один узел, заполним его параметры так ( рис. 7.7):
Обратите внимание на то, что в форме элемента ИБ филиала, а так же - в форме списка плана обмена, когда этот элемент выделен, активны три кнопки, с которыми мы до этого не встречались. Это, слева направо, следующие кнопки:
- Создать начальный образ;
- Записать изменения;
- Прочитать изменения;
Кнопка Создать начальный образ служит для того, чтобы создать информационную базу для выбранного узла. Именно эту базу следует передать в филиал организации, который будет вести в ней учет. И именно с этой базой данных будет синхронизироваться основная база. Нажмем эту кнопку, появится диалоговое окно Создание начального образа ИБ, которое позволяет выбрать тип расположения информационной базы. Выберем вариант На данном компьютере или в локальной сети ( рис. 7.8) и нажмем Далее.