УзнАй больше!. подскАзкА
УзнАй больше! Следует отметить, что метод «ЗаписатьИзменения()» позволяет задать максимальное число элементов данных, которые помещаются в сообщение в рамках одной транзакции базы данных. По умолчанию все данные помещаются в сообщение в рамках одной транзакции. Такой режим является рекомендуемым, так как гарантирует согласо- ванность данных, помещаемых в сообщение. Но при создании сообщения в многопользовательском режиме могут быть конфликты блокировок между транзакцией, в которой данные помещаются в сообщение, и транзакциями, выполняемыми другими пользователями. Для снижения вероятности возникновения таких конфликтов можно задать значение этого параметра, отличное от значения по умолчанию. Чем меньше значение параметра, тем меньше вероятность конфликта блокировок, но выше вероятность помещения в сообщение несогласованных данных. Учитывая все вышесказанное, идеальным вариантом является выпол- нение обмена данными в монопольном режиме. Однако такой вариант не всегда приемлем в силу специфики организации работы конкретных информационных баз. И последним мы создадим обработчик команды Прочитать изменения. Текст обработчика будет выглядеть следующим образом (листинг 24. 31). листинг 24. 31. Обработчик нажатия кнопки «Прочитать изменения» В начале процедуры мы снова вызываем диалог выбора имени файла, который будет прочитан, и затем вызываем процедуру ПрочитатьИз- мененияНаСервере(), исполняющуюся на сервере без контекста. В этой процедуре мы создаем объект ЧтениеXML для работы с этим файлом. Затем создаем объект ЧтениеСообщенияОбмена для чтения сообщения, содержащегося в указанном файле.
Затем методом ПрочитатьИзменения() объекта ПланыОбменаМе- неджер мы читаем полученное сообщение. В заключение процедуры мы завершаем чтение сообщения обмена и закрываем файл (листинг 24. 32). листинг 24. 32. Процедура «ПрочитатьИзмененияНаСервере» В заключение на закладке Подсистемы укажем принадлежность обработки ОбменСОтделениями к подсистеме Предприятие. Теперь настроим командный интерфейс основного раздела для администратора. Вызовем окно настройки командного интерфейса (Открыть командный интерфейс основного раздела) из контекстного меню корня дерева объектов конфигурации. Добавим команды для открытия форм Общие настройки, Обмен данными и Обмен с отделе- ниями в список команд основного раздела и зададим видимость этих форм только для роли Администратор (рис. 24. 29).
Рис. 24. 29. Настройка командного интерфейса основного раздела для администратора А также расположим формы списка планов обмена Филиалы и Отделения на начальной странице администратора. Вызовем настройку начальной страницы (Открыть рабочую область начальной страницы) из контекстного меню корня дерева объектов конфигу- рации. Создадим форму списка плана обмена Отделения. Добавим формы списка планов обмена Филиалы и Отделения в левую часть начальной страницы и зададим видимость этих форм только для роли Админи- стратор (рис. 24. 30).
Теперь выполним пример программного обмена данными.
подскАзкА При выполнении примера обмена данными нужно правильно задавать узел, в который записываются и от которого принимаются изменения. Например, после изменения данных в центральной базе в списке узлов плана обмена нужно выбрать подчиненный узел, которому будут передаваться данные (например, Отделение), и нажать кнопку Записать изменения. А в базе узла, в который будут загружаться данные, в списке узлов плана обмена нужно выбрать узел, из которого данные были выгружены (например, Центральная база), и нажать кнопку Прочитать изменения.
Запустим «1С: Предприятие» для пользователя с ролью Админи- стратор. Откроется начальная страница приложения (рис. 24. 31).
Из командной панели раздела Главное, из подменю Сервис откроем форму обработки Обмен с отделениями. Выберем в поле ввода Отделение узел обмена Отделение, для которого мы хотим создать начальный образ нашей информационной базы (рис. 24. 32). Затем выполним команду Создать начальный образ. Создадим каталог, куда будет выгружен начальный образ информационной базы, и укажем его в диалоге выбора каталога. Теперь создадим в центральной базе нового сотрудника. В форме Обмен с отделениями выберем в поле ввода Отделение узел обмена Отделение, в который мы хотим передать изменения. Нажмем кнопку Записать изменения и укажем имя файла сообщения с изменениями. Затем откроем базу отделения (куда был выгружен начальный образ центральной базы) в конфигураторе. Создадим в ней поль- зователя с ролью Администратор и запустим «1С: Предприятие». На начальной странице в форме Обмен с отделениями выберем в поле ввода Отделение узел обмена Центральная база, от которого мы хотим принять изменения. Нажмем кнопку Прочитать изменения и укажем имя файла сообщения с изменениями.
Рис. 24. 32. Пример программного обмена с отделениями
Убедимся, что сотрудник центральной базы (с префиксом кода ЦБ) присутствует в базе отделения. Следует лишь сделать несколько заключительных замечаний. При использовании механизма распределенных информационных баз становятся доступными четыре события объекта встроенного языка ПланОбменаОбъект. < имя>, которые позволяют управлять отправкой и приемом данных на уровне отдельных элементов данных: ПриОтправкеДанныхГлавному(), ПриОтправкеДанныхПодчиненному(), ПриПолученииДанныхОтГлавного(), ПриПолученииДанныхОтПодчиненного(). Эти события будут вызываться для каждого элемента данных, вклю- чаемого в сообщение. Работу этих событий можно увидеть, добавив в модуль объекта План обмена Отделения следующий текст (листинг 24. 33).
листинг 24. 33. Просмотр работы событий объекта «ПланОбменаОбъект» Процедура ПриОтправкеДанныхГлавному(ЭлементДанных, ОтправкаЭлемента) Сообщение = Новый СообщениеПользователю; Сообщение. Текст = " ПриОтправкеДанныхГлавному " + ЭлементДанных; Сообщение. Сообщить(); КонецПроцедуры Процедура ПриОтправкеДанныхПодчиненному(ЭлементДанных, ОтправкаЭлемента) Сообщение = Новый СообщениеПользователю; Сообщение. Текст = " ПриОтправкеДанныхПодчиненному " + ЭлементДанных; Сообщение. Сообщить(); КонецПроцедуры Процедура ПриПолученииДанныхОтГлавного(ЭлементДанных, ПолучениеЭлемента, ОтправкаНазад) Сообщение = Новый СообщениеПользователю; Сообщение. Текст = " ПриПолученииДанныхОтГлавного " + ЭлементДанных; Сообщение. Сообщить(); КонецПроцедуры Процедура ПриПолученииДанныхОтПодчиненного(ЭлементДанных, ПолучениеЭлемента, ОтправкаНазад) Сообщение = Новый СообщениеПользователю; Сообщение. Текст = " ПриПолученииДанныхОтПодчиненного " + ЭлементДанных; Сообщение. Сообщить(); КонецПроцедуры В первом параметре всех перечисленных событий находится тот элемент данных, для которого вызвано это событие. Параметр ОтправкаЭлемента позволяет управлять тем, какая инфор- мация будет помещена в сообщение. Он может принимать три значения: Авто – значение по умолчанию. Указывает на то, что элемент дан- ных будет помещен в сообщение; Удалить – в сообщение будет помещено значение, предназначен- ное для удаления этого элемента данных; Игнорировать – в сообщение не будет помещено ничего, связан- ного с этим элементом данных. Параметр ПолучениеЭлемента позволяет указать, будет ли прочи- танный элемент данных записан в базу данных или нет. Параметр также может принимать три значения: Авто – значение по умолчанию. Если элемент данных получен от главного узла, он будет записан всегда. Если элемент данных получен от подчиненного узла, он будет записан, только если не зарегистрированы изменения для этого элемента данных;
Принять – полученный элемент данных будет записан всегда; Игнорировать – проигнорировать получение элемента данных и ничего не записывать. Также в событиях получения данных существует третий параметр – ОтправкаНазад, имеющий тип Булево. Этот параметр позволяет выполнять принудительную регистрацию изменений для полученного элемента данных в базе-получателе. Такая необходимость может возникнуть, например, когда при приеме данных от узла-отправителя обнаружено, что полученные данные противоречивы (например, в узле-отправителе была допущена ошибка при изменении данных). Тогда мы можем проигнорировать присланные изменения и, установив флажок ОтправкаНазад, вызвать принудительную реги- страцию изменений полученного элемента данных в нашей базе для узла-отправителя. В результате последующего обмена состояние этого элемента данных в узле-отправителе будет установлено таким же, как и в нашей базе.
Воспользуйтесь поиском по сайту: ©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...
|