Получение сообщения без тела и отправка сообщения с двоичным содержимым в информационной базе «Магазин»
При получении сообщения в информационной базе Магазин запускается фоновое задание, которое вызывает обработчик соответствующего канала.
Откройте конфигуратор информационной базы Магазин и перейдите в модуль сервиса интеграции СервисМагазина. В момент загрузки канала ВМагазин был создан пустой обработчик СетьМагазинов_ВМагазинОбработкаПолученияСообщения().
Напишите код, который будет проверять тип полученного сообщения и, если пришел запрос остатков, формировать соответствующий отчет и отправлять его обратно:
Процедура СетьМагазинов_ВМагазинОбработкаПолученияСообщения(Сообщение, Отказ)
ТипСообщения = Сообщение.Параметры.Получить("ТипСообщения");
Если ТипСообщения = "ЗапросОстатков" Тогда
Отчет = Отчеты.ОстаткиТоваровНаСкладах.Создать();
ТабДок = Новый ТабличныйДокумент;
Отчет.СкомпоноватьРезультат(ТабДок);
ИмяВременногоФайла = ПолучитьИмяВременногоФайла("HTM");
Попытка
ТабДок.Записать(ИмяВременногоФайла, ТипФайлаТабличногоДокумента.HTML);
Поток = ФайловыеПотоки.Открыть(ИмяВременногоФайла,
РежимОткрытияФайла.Открыть,
ДоступКФайлу.Чтение);
Ответ = СервисыИнтеграции.СервисМагазина.СоздатьСообщение();
Ответ.ИдентификаторСообщенияЗапроса = Сообщение.Идентификатор;
Ответ.КодПолучателя = Сообщение.КодОтправителя;
ФайлВложение = Новый Файл(ИмяВременногоФайла);
РазмерФайла = ФайлВложение.Размер();
Ответ.Параметры["РазмерСообщения"] = РазмерФайла;
Тело = Ответ.ПолучитьТелоКакПоток();
Поток.КопироватьВ(Тело);
Тело.СброситьБуферы();
Тело.Закрыть();
Поток.Закрыть();
СервисыИнтеграции.СервисМагазина
.СетьМагазинов_ИзМагазина.ОтправитьСообщение(Ответ);
Исключение
ИнформацияОбОшибке = ИнформацияОбОшибке();
ЗаписьЖурналаРегистрации("Ошибка",
УровеньЖурналаРегистрации.Ошибка,,,
ПодробноеПредставлениеОшибки(ИнформацияОбОшибке));
УдалитьФайлы(ИмяВременногоФайла);
ВызватьИсключение;
КонецПопытки;
УдалитьФайлы(ИмяВременногоФайла);
КонецЕсли;
КонецПроцедуры
Экземпляр Сообщение
, передаваемый в параметрах процедуры, аналогичен тому сообщению, которое было отправлено из базы
Офис. Соответственно, извлечь значение переданного вами текстового параметра ТипСообщения
можно с
помощью следующего кода:
Сообщение.Параметры.Получить("ТипСообщения")
С помощью метода СоздатьСообщение() вы создаете экземпляр ответного сообщения таким же образом, как делали это ранее.
В свойстве ответа КодПолучателя вы указываете, что сообщение нужно отправить в адрес того участника обмена, от которого пришло исходное сообщение.
Кроме того, в свойстве сообщения ИдентификаторСообщенияЗапроса можно указать, что данное сообщение является ответом на то сообщение, код которого указан в этом свойстве. Сама по себе механика «1С:Шины» никак не использует это свойство, однако с его помощью можно реализовать соответствующую логику на стороне получателя сообщения.
В параметрах сообщения вы передаете дополнительную информацию о передаваемом файле — его размер. Это нужно, чтобы более эффективно реализовать код обработки полученного сообщения.
Далее методом ПолучитьТелоКакПоток() вы получаете двоичный поток, в который записываете файл с результатом отчета.
Наконец, с помощью метода ОтправитьСообщение() подготовленное ответное сообщение записывается в базу данных для отправки получателю.