Skip to content

Чтение и запись сообщения обмена

Запись сообщения обмена

УзелОтправитель = ПланыОбмена.РИБ.ЭтотУзел();
УзелПолучатель = ПланыОбмена.РИБ.НайтиПоКоду("М1");
ИмяФайлаСообщения = СтрШаблон("C:\temp\demo_exchange\Message_%1_%2.xml",
УзелОтправитель.Код, УзелПолучатель.Код);
// Открываем файл для записи
ЗаписьXML = Новый ЗаписьXML();
ЗаписьXML.ОткрытьФайл(ИмяФайлаСообщения);
// Создаем запись сообщения
ЗаписьСообщения = ПланыОбмена.СоздатьЗаписьСообщения();
ЗаписьСообщения.НачатьЗапись(ЗаписьXML, УзелПолучатель);
// Записываем изменения в файл
ПланыОбмена.ЗаписатьИзменения(ЗаписьСообщения);
ЗаписьСообщения.ЗакончитьЗапись();
// Закрываем файл
ЗаписьXML.Закрыть();
Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = "Сообщение обмена успешно сформировано!";
Сообщение.Сообщить();

Чтение сообщения обмена

Вариант 1

УзелОтправитель = ПланыОбмена.РИБ.НайтиПоКоду("М1");
УзелПолучатель = ПланыОбмена.РИБ.ЭтотУзел();
ИмяФайлаСообщения = СтрШаблон("C:\temp\demo_exchange\Message_%1_%2.xml",
УзелОтправитель.Код, УзелПолучатель.Код);
// Открываем файл для чтения
ЧтениеXML = Новый ЧтениеXML;
ЧтениеXML.ОткрытьФайл(ИмяФайлаСообщения);
// Создаем чтение сообщения
ЧтениеСообщения = ПланыОбмена.СоздатьЧтениеСообщения();
// Чтение сообщения обмена
Попытка
ЧтениеСообщения.НачатьЧтение(ЧтениеXML);
ПланыОбмена.ПрочитатьИзменения(ЧтениеСообщения);
Исключение
ТекстОшибки = ОбработкаОшибок.КраткоеПредставлениеОшибки(ИнформацияОбОшибке());
Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = ТекстОшибки;
Сообщение.Сообщить();
КонецПопытки;
// Завершить чтение сообщения
ЧтениеСообщения.ЗакончитьЧтение();
ЧтениеXML.Закрыть();

Вариант 2

Функция ПрочитатьИПрименитьСообщениеОбмена(УзелОбмена, ИмяФайла) Экспорт
Результат = Новый Структура;
Результат.Вставить("Успешно", Ложь);
Результат.Вставить("ОписаниеОшибки", "");
Результат.Вставить("КоличествоОбъектов", 0);
Попытка
// Проверяем существование файла
Файл = Новый Файл(ИмяФайла);
Если НЕ Файл.Существует() Тогда
ВызватьИсключение "Файл сообщения не найден";
КонецЕсли;
// Открываем файл для чтения
ЧтениеXML = Новый ЧтениеXML;
ЧтениеXML.ОткрытьФайл(ИмяФайла);
// Создаем чтение сообщения
ЧтениеСообщения = ПланыОбмена.СоздатьЧтениеСообщения();
ЧтениеСообщения.НачатьЧтение(ЧтениеXML);
// Проверяем соответствие узлов
Если ЧтениеСообщения.Отправитель <> УзелОбмена Тогда
ВызватьИсключение СтрШаблон(
"Сообщение от другого узла. Ожидается: %1, Получено: %2",
УзелОбмена,
ЧтениеСообщения.Отправитель);
КонецЕсли;
// Проверяем номер сообщения
НомерПринятого = УзелОбмена.НомерПринятого;
НомерСообщения = ЧтениеСообщения.НомерСообщения;
Если НомерСообщения <= НомерПринятого Тогда
ВызватьИсключение СтрШаблон(
"Сообщение уже было принято. Номер сообщения: %1, Последний принятый: %2",
НомерСообщения,
НомерПринятого);
КонецЕсли;
// Начинаем транзакцию
НачатьТранзакцию();
Попытка
// Читаем и записываем объекты
Пока ЧтениеСообщения.Прочитать() Цикл
Данные = ЧтениеСообщения.Данные;
// Устанавливаем режим загрузки
Если ТипЗнч(Данные) <> Тип("УдалениеОбъекта") Тогда
Данные.ОбменДанными.Загрузка = Истина;
Данные.ОбменДанными.Отправитель = УзелОбмена;
Данные.Записать();
Иначе
// Удаление объекта
Попытка
УдаляемыйОбъект = Данные.Ссылка.ПолучитьОбъект();
Если УдаляемыйОбъект <> Неопределено Тогда
УдаляемыйОбъект.ОбменДанными.Загрузка = Истина;
УдаляемыйОбъект.Удалить();
КонецЕсли;
Исключение
// Объект уже удален
КонецПопытки;
КонецЕсли;
Результат.КоличествоОбъектов = Результат.КоличествоОбъектов + 1;
КонецЦикла;
// Обновляем номер принятого сообщения
УзелОбъектОбмена = УзелОбмена.ПолучитьОбъект();
УзелОбъектОбмена.НомерПринятого = НомерСообщения;
УзелОбъектОбмена.Записать();
// Фиксируем транзакцию
ЗафиксироватьТранзакцию();
Результат.Успешно = Истина;
Исключение
ОтменитьТранзакцию();
ВызватьИсключение;
КонецПопытки;
// Закрываем чтение
ЧтениеСообщения.ЗакончитьЧтение();
ЧтениеXML.Закрыть();
Исключение
Результат.ОписаниеОшибки = ОписаниеОшибки();
// Записываем в журнал регистрации
ЗаписьЖурналаРегистрации("Обмен.ЧтениеСообщения",
УровеньЖурналаРегистрации.Ошибка,
,
УзелОбмена,
Результат.ОписаниеОшибки);
КонецПопытки;
Возврат Результат;
КонецФункции