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

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

ЗаписатьХМЦЗаписьХМЬ,ВыборкаИзменешш.Получить()); КонецЦикла;

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

ЗаписьXML.Закрыть();

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

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

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

Создание процедуры чтения данных

П

орядок создания процедуры чтения данных обмена будет таким же, как и ранее: сначала мы сформируем имя файла, содержащего данные обмена:


ПроцедураПрочитатьСообщениеСИзменениями() Экспорт

Каталог = КаталогВременныхФайлов();

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

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

Возврат; КонецЕсли;

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

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

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

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

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

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

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

Возврат; КонецЕсли;

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

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

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


 


410



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


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


 


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

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

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

ЧтениеХМЬ.Закрыть();

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

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

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

Именно в этот момент мы обращаемся к механизмам записи/чтения документов XML, которые работают с ними на «базовом» уровне.

Для этого мы создаем новый объект ЧтениеХМЦс помощью которого открываем найденный файл для чтения. В случае успеха мы выводим сообщение о начале загрузки данных из файла. В конце процедуры мы также прекращаем чтение XML-данных из файла методом Закрыть().

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


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

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

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

ЧтениеХМЬ.Закрыть(); УдалитьФайлы(ИмяФайла);

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

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

Здесь мы обращаемся к механизмам инфраструктуры сообщений планов обмена и создаем объект ЧтениеСообщенияОбмена. Используя метод этого объекта НачатьЧтение() мы считываем заголовок XML-сообщения, в котором содержится, в том числе, информация об отправителе сообщения. После того, как все сообщение будет нами обработано, мы заканчиваем чтение.

Теперь, когда мы представили данные обмена в виде сообщения и получили его заголовок, можно произвести одну проверку перед тем, как начать собственно обрабатывать данные:


 


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

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

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

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

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

КонецЕсли;

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

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

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

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

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

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


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

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

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

Возврат; КонецЕсли;

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

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

Сообщить("Невозможно открыть файл обмена данными.");
Возврат;
КонецПопытки;
Сообщить("----- Загрузка из " + Строка(ЭтотОбъект) + "......... -");


 




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


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


 


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

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

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

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

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

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

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

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

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

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

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

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

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


ЧтениеXML = Новый ЧтениеXML; Попытка

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

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

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

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

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

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

//читать заголовок сообщения обмена данными - файла XML

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

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

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

// Удаляем регистрацию изменений// для узла отправителя сообщения //*** служба регистрации изменений

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

ЧтениеСообщения.НомерПринятого);ЧтениеСообщения.ЗакончитьЧтение(); ЧтениеXML.Закрыть(); УдалитьФайлы(ИмяФайла);

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

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


 


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

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

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

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

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

КонецЕсли;

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


Обратите внимание, что здесь мы обращаемся к службе

регистрации изменений и используем метод

УдалитьРегистрациюИзменений()для выполнения описанных
действий.

Теперь, наконец, мы можем приступить к чтению непосредственно самих данных, содержащихся в сообщении:

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

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

ИмяФайла = Каталог +?(Прав(Каталог, 1) = "\","", "\")+
_ "Message" + СокрЛП(Ссылка.Код) + "_" +


 


414



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


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


 


СокрЛП(ПланыОбмена.Филиалы.ЭтотУзел().Код) + ".xml"; Файл = Новый Файл(ИмяФайла); Если Не Файл.Существует() Тогда

Возврат; КонецЕсли;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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