1С-Предприятие 8.0. Практическое пособие разработчика

       

Создание процедуры записи данных


Сами процедуры записи и чтения данных обмена мы разместим в модуле объекта План обмена "Филиалы". Сначала создадим процедуру, которая используется нами при обмене данными – "ЗаписатьСообщениеСИзменениями". Порядок создания этой процедуры будет следующим: сначала мы сформируем имя файла, который будет содержать данные для обмена:

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

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

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

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

   ИмяФайла = Каталог +?(Прав(Каталог, 1) = "\","", "\") + "Message" +

       СокрЛП(ПланыОбмена.Филиалы.ЭтотУзел().Код) + "_" + СокрЛП(Ссылка.Код) + ".xml";

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



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

Для упрощения примера, мы будем обмениваться сообщениями через каталог временных файлов. Имена сообщений стандартизованы и имеют вид "МеssаgеКодУзлаОтправителя_КодУзлаПолучателя.xml".

После этого обратимся к механизмам записи/чтения XML документов и создадим новый объект ЗаписьXML с помощью которого откроем новый XML файл для записи, запишем в него [407] объявление XML, и в конце процедуры завершим запись закроем файл:

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

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

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

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

   ИмяФайла = Каталог +?(Прав(Каталог, 1) = "\","", "\") + "Message" +

       СокрЛП(ПланыОбмена.Филиалы.ЭтотУзел().Код) + "_" + СокрЛП(Ссылка.Код) + ".xml";

   // Создать объект записи XML




   //*** запись XML документов

   ЗаписьXML = Новый ЗаписьXML;

   ЗаписьXML.ОткрытьФайл(ИмяФайла);

   ЗаписьXML.ЗаписатьОбъявлениеXML();

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

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

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

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

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

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

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

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

   ИмяФайла = Каталог +?(Прав(Каталог, 1) = "\","", "\") + "Message" +

       СокрЛП(ПланыОбмена.Филиалы.ЭтотУзел().Код) + "_" + СокрЛП(Ссылка.Код) + ".xml";

   // Создать объект записи XML

   //*** запись XML документов

   ЗаписьXML = Новый ЗаписьXML;

   ЗаписьXML.ОткрытьФайл(ИмяФайла);

   ЗаписьXML.ЗаписатьОбъявлениеXML();

   //*** инфраструктура сообщений

   ЗаписьСообщения = ПланыОбмена.СоздатьЗаписьСообщения();

   ЗаписьСообщения.НачатьЗапись(ЗаписьХМL, Ссылка);

   Сообщить(" Номер сообщения; " + ЗаписьСообщения.НомерСообщения); [408]

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

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

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

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

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



При формировании выборки мы передаем вторым параметром номер сообщения, которым эти данные будут переданы:

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

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

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

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

   ИмяФайла = Каталог +?(Прав(Каталог, 1) = "\","", "\") + "Message" +

       СокрЛП(ПланыОбмена.Филиалы.ЭтотУзел().Код) + "_" + СокрЛП(Ссылка.Код) + ".xml";

   // Создать объект записи XML

   //*** запись XML документов

   ЗаписьXML = Новый ЗаписьXML;

   ЗаписьXML.ОткрытьФайл(ИмяФайла);

   ЗаписьXML.ЗаписатьОбъявлениеXML();

   //*** инфраструктура сообщений

   ЗаписьСообщения = ПланыОбмена.СоздатьЗаписьСообщения();

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

   Сообщить(" Номер сообщения; " + ЗаписьСообщения.НомерСообщения);

   // Получить выборку измененных данных

   //*** механизм регистрации изменений

   ВыборкаИзменений = ПланыОбмена.ВыбратьИзменения(

       ЗаписьСообщения.Получатель, ЗаписьСообщения.НомерСообщения);

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

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

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

КонецПроцедуры [409]

Теперь осталось только перебрать выборку записей в цикле сериализовать их в открытый XML файл:

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

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

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

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

   ИмяФайла = Каталог +?(Прав(Каталог, 1) = "\","", "\") + "Message" +



       СокрЛП(ПланыОбмена.Филиалы.ЭтотУзел().Код) + "_" + СокрЛП(Ссылка.Код) + ".xml";

   // Создать объект записи XML

   //*** запись XML документов

   ЗаписьXML = Новый ЗаписьXML;

   ЗаписьXML.ОткрытьФайл(ИмяФайла);

   ЗаписьXML.ЗаписатьОбъявлениеXML();

   //*** инфраструктура сообщений

   ЗаписьСообщения = ПланыОбмена.СоздатьЗаписьСообщения();

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

   Сообщить(" Номер сообщения; " + ЗаписьСообщения.НомерСообщения);

   // Получить выборку измененных данных

   //*** механизм регистрации изменений

   ВыборкаИзменений = ПланыОбмена.ВыбратьИзменения(

       ЗаписьСообщения.Получатель, ЗаписьСообщения.НомерСообщения);

  Пока ВыборкаИзменений.Следующий() Цикл

       // Записать данные в сообщение

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

       ЗаписатьXML(ЗаписьXML, ВыборкаИзменений.Получить());

   КонецЦикла;

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

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

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

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

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


Содержание раздела