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