1. Для чего может понадобиться.
- Печать на принтер документа из http,web – сервиса, как пример нужно печатать этикетки со стороннего вэб приложения.
- Открытие форм из http,web – сервисов. Например, открыть карточку клиента при входящем звонке.
- Различного рода оповещения при проведении документов, например, при ошибках проведения оповещать ответственного менеджера.
2. Используемые инструменты
- Подключенная система взаимодействия.
3. Недостатки
- Данный метод можно использовать для асинхронного использования, т.е. ответа от клиента по результатам выполнения не будет.
Предварительно нужно подключить систему взаимодействия https://its.1c.ru/db/v8311doc#bookmark:dev:TI000001900
Реализация
Создадим обсуждение, в котором будут храниться наши сообщения для клиента
&НаСервере
Процедура СоздатьСлужебныйЖурналЗвонковСистемыВзаимодействия() Экспорт
ОбсуждениеЖурналИдентификатор = Неопределено;
#Если НЕ ВнешнееСоединение Тогда
Ключ = "ТестовоеОбсуждение";
ОбсуждениеЖурнал = СистемаВзаимодействия.СоздатьОбсуждение();
ОбсуждениеЖурнал.Ключ = Ключ;
ОбсуждениеЖурнал.Отображаемое = Ложь;
ОбсуждениеЖурнал.Заголовок = НСтр("ru='Журнал тест'");
ОбсуждениеЖурнал.Участники.Добавить(СистемаВзаимодействия.СтандартныеПользователи.ВсеПользователиПриложения);
УстановитьПривилегированныйРежим(Истина);
Попытка
ОбсуждениеЖурнал.Записать();
ОбсуждениеЖурналИдентификатор = ОбсуждениеЖурнал.Идентификатор;
Исключение
ЗаписьЖурналаРегистрации(НСтр("ru='Создание служебного обсуждения Системы взаимодействия'"), УровеньЖурналаРегистрации.Ошибка,, Ключ, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));
КонецПопытки;
УстановитьПривилегированныйРежим(Ложь);
#КонецЕсли
КонецПроцедуры
в месте серверной процедуры откуда нужно запустить клиентскую вызываем ОтправитьВКлиентскоеПриложение(параметр1,параметр2)
&НаСервере
процедура ОтправитьВКлиентскоеПриложение(параметр1,параметр2)
ИдОбсуждения = ИдентификаторОбсуждения();
Если ИдОбсуждения <> Неопределено Тогда
ДанныеСообщения = СтрШаблон("param1=""%1"";param2=""%2""", параметр1,параметр2);
СообщениеОбсуждения = СистемаВзаимодействия.СоздатьСообщение(ИдОбсуждения);
СообщениеОбсуждения.Данные = ДанныеСообщения;
СообщениеОбсуждения.Получатели.Добавить(СистемаВзаимодействия.ПолучитьИдентификаторПользователя
(пользователи.АвторизованныйПользователь().ИдентификаторПользователяИБ));
СообщениеОбсуждения.Записать();
КонецЕсли;
конецпроцедуры
&НаСервере
Функция ИдентификаторОбсуждения() Экспорт
ОбсуждениеИдентификатор = Неопределено;
#Если НЕ ВнешнееСоединение Тогда
Ключ = "ТестовоеОбсуждение";
Если НЕ СистемаВзаимодействия.ИнформационнаяБазаЗарегистрирована() Тогда
Возврат ОбсуждениеИдентификатор;
КонецЕсли;
Обсуждение = Неопределено;
УстановитьПривилегированныйРежим(Истина);
Попытка
Обсуждение = СистемаВзаимодействия.ПолучитьОбсуждение(Ключ);
Исключение
ЗаписьЖурналаРегистрации(НСтр("ru='Поиск обсуждения Системы взаимодействия по ключу'"), УровеньЖурналаРегистрации.Ошибка,, Ключ, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));
КонецПопытки;
УстановитьПривилегированныйРежим(Ложь);
Если Обсуждение <> Неопределено Тогда
ОбсуждениеИдентификатор = Обсуждение.Идентификатор;
КонецЕсли;
#КонецЕсли
Возврат ОбсуждениеИдентификатор;
КонецФункции
Далее что бы клиент видел сообщения - в глобальном модуле объявляем и запускаем ПодключитьОбработчикНовыхСообщенийСистемыВзаимодействия() при начале работы системы
Процедура ПодключитьОбработчикНовыхСообщенийСистемыВзаимодействия() Экспорт
ОписаниеОповещения = Новый ОписаниеОповещения("ОбработчикНовогоСообщенияОбсуждениеЖурнал", МодульКлиент);
СистемаВзаимодействия.НачатьПодключениеОбработчикаНовыхСообщений(,
ИдентификаторОбсуждения(),
ОписаниеОповещения
);
КонецПроцедуры
далее в модуле модульклиент определяем экспортную процедуру, которая будет вызывать логику клиентской части.
&НаКлиенте
Процедура UNF_PH_ОбработчикНовогоСообщенияОбсуждениеЖурнал(Сообщение, ДополнительныеПараметры)
Если ТипЗнч(Сообщение.Данные) <> Тип("Строка") Тогда
Возврат;
КонецЕсли;
Если НЕ ЗначениеЗаполнено(Сообщение.Данные) Тогда
Возврат;
КонецЕсли;
ДанныеОповещения = СтроковыеФункцииКлиентСервер.ПараметрыИзСтроки(Сообщение.Данные);
если ДанныеОповещения.свойство("param1") и ДанныеОповещения.свойство("param2") тогда
//ПечатьЭтикетки, открытие формы, в общем любое клиентское действие
конецесли;
КонецПроцедуры