Асинхронный вызов клиентской процедуры из серверной

15.10.20

Разработка - Механизмы платформы 1С

Для чего может понадобиться. 1. Печать на принтер документа из http,web – сервисов. 2. Открытие форм из http,web – сервисов. Например, открыть карточку клиента при входящем звонке. 3. Различного рода оповещения при проведении документов (не только из формы но из журнала по правой кнопке мыши), например, при ошибках проведения оповещать ответственного менеджера.

 

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") тогда
		//ПечатьЭтикетки, открытие формы, в общем любое клиентское действие


	конецесли;
КонецПроцедуры

 

Вступайте в нашу телеграмм-группу Инфостарт

вызов клиента с сервера

Вы можете заказать платную адаптацию этой статьи под ваши задачи на «Бирже заказов».

  • 0% комиссии — оплата напрямую исполнителю;
  • Исполнители любого масштаба — от отдельных специалистов до команд под проект;
  • Прямой обмен контактами между заказчиком и исполнителем;
  • Безопасная сделка — при необходимости;
  • Рейтинги, кейсы и прозрачная система откликов.

См. также

Механизмы платформы 1С Программист Бесплатно (free)

Разберем 15 мифов о работе платформы «1С:Предприятие 8» – как распространенных, так и малоизвестных. Начнем с классики: «Код, написанный в одну строку, работает быстрее, чем многострочный». Так ли это на самом деле?

16.07.2025    32062    TitanLuchs    108    

149

Механизмы платформы 1С Работа с интерфейсом Программист Стажер 1С:Предприятие 8 Бесплатно (free)

Про ООП в 1С и о том, как сделать свой код более кратким и выразительным при помощи использования текучего интерфейса (fluent interface).

03.02.2025    17540    bayselonarrend    127    

68

Механизмы платформы 1С Программист 1С:Предприятие 8 Бесплатно (free)

В этой статье подробно рассматривается работа с JSON в XDTO в 1С:Предприятие. Вы узнаете, как сериализовать и десериализовать объекты XDTO в JSON, интегрировать 1С с веб-сервисами и API, а также корректно обрабатывать данные при обмене. Разбираются особенности работы с коллекциями, использование функций восстановления и частые ошибки при работе с JSON и XDTO.

30.01.2025    21661    user2122906    9    

66

Механизмы платформы 1С Файловый обмен (TXT, XML, DBF), FTP Программист 1С:Предприятие 8 Бесплатно (free)

Этот материал познакомит вас с механизмом XDTO (XML Data Transfer Objects) в 1С и научит эффективно использовать его возможности. Мы разберёмся, как работать с XML-схемами, создавать модели данных, манипулировать объектами XDTO, а также сериализовать и десериализовать их в XML. Вы узнаете, как использовать XDTO для интеграции с внешними системами, избегать типичных ошибок и оптимизировать код. К концу вы будете уверенно применять XDTO для решения сложных задач обмена данными и автоматизации процессов.

17.01.2025    37941    user2122906    12    

62

Механизмы платформы 1С WEB-интеграция Программист 1С:Предприятие 8 Бесплатно (free)

В платформе 8.3.27 появилась возможность использовать WebSocket-клиент. Давайте посмотрим, как это все устроено и чем оно нам полезно.

14.01.2025    32813    dsdred    106    

148

Механизмы платформы 1С Программист Стажер 1С:Предприятие 8 1C:Бухгалтерия Бесплатно (free)

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

23.06.2024    28696    bayselonarrend    22    

177

Механизмы платформы 1С Программист Стажер 1С:Предприятие 8 1C:Бухгалтерия Бесплатно (free)

Пример использования «Сервисов интеграции» без подключения к Шине и без обменов.

13.03.2024    15558    dsdred    22    

87
Отзывы
3. serg33rus 35 15.10.20 17:11 Сейчас в теме
Если СВ стоит внутри локалки и используется только внутри, то ставится довольно просто. То, что СВ можно (нужно) использовать еще и для других целей - тоже факт. И передача управляющих воздействий с сервера на клиент - это вишенка на торте.
Развернул у себя.
Кроме как мессенджер используется и для уведомлений от 1С и от внешних систем.
Внутри 1С - контроль документов. Когда кто-то проводит деньги по интересующему меня направлению/клиенту/счету (нужное подчеркнуть) СВ скидывает мне инфу со ссылкой на документ. Мне очень нравится.
Снаружи проходная генерит http-запрос и посылает в 1С. А СВ опять же уведомляет меня о событии. Удобно.
А WebSocket - это вариант, но ... внешняя компонента. И нужно рисовать обвязку.
А тут 5 строк кода и все работает.
И еще момент, для меня очень важный. СВ можно развернуть на типовой. Конечно если не только щебетать, то придется писать, но ... получить контекстное обсуждение не вмешиваясь в конфигурацию - это очень крутая фича.
Все это IMHO само собой.
user824960; JohnyDeath; +2 Ответить
Остальные комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. Steelvan 316 15.10.20 14:55 Сейчас в теме
...Предварительно нужно подключить систему взаимодействия...

Правильно писать "Предварительно нужно купить систему взаимодействия и пройтись по граблям настроек"
TerveRus; +1 Ответить
2. malikov_pro 1355 15.10.20 15:59 Сейчас в теме
(1) поддерживаю, поэтому с меньшими граблями можно запустить на WebSocket, статья по теме https://infostart.ru/1c/articles/1125876/
3. serg33rus 35 15.10.20 17:11 Сейчас в теме
Если СВ стоит внутри локалки и используется только внутри, то ставится довольно просто. То, что СВ можно (нужно) использовать еще и для других целей - тоже факт. И передача управляющих воздействий с сервера на клиент - это вишенка на торте.
Развернул у себя.
Кроме как мессенджер используется и для уведомлений от 1С и от внешних систем.
Внутри 1С - контроль документов. Когда кто-то проводит деньги по интересующему меня направлению/клиенту/счету (нужное подчеркнуть) СВ скидывает мне инфу со ссылкой на документ. Мне очень нравится.
Снаружи проходная генерит http-запрос и посылает в 1С. А СВ опять же уведомляет меня о событии. Удобно.
А WebSocket - это вариант, но ... внешняя компонента. И нужно рисовать обвязку.
А тут 5 строк кода и все работает.
И еще момент, для меня очень важный. СВ можно развернуть на типовой. Конечно если не только щебетать, то придется писать, но ... получить контекстное обсуждение не вмешиваясь в конфигурацию - это очень крутая фича.
Все это IMHO само собой.
user824960; JohnyDeath; +2 Ответить
4. serg33rus 35 15.10.20 19:49 Сейчас в теме
(3) Вот только сейчас допилил. Форма обратной связи на сайте не в мыло сообщение шлет, а в СВ. Мне так удобнее.
5. Steelvan 316 15.10.20 20:20 Сейчас в теме
Пользовать 1С как беседку, не, спасибо.

Купить и настроить СВ <> подключить бесплатную родную вк для веб-гнезд.
6. serg33rus 35 16.10.20 09:54 Сейчас в теме
(5) Все-таки это немного разное. И по назначению и по механизму встраивания. СВ - обмен сообщениями с возможностью их обработки. Встроенное в платформу. А ВК - это ВК. Можно все, но совсем другими силами и средствами. Я например в С не очень, это если мягко. Собрать ВК, соберу. А вот подправить, если что-то серьезное, уже нет. Тем более свою не напишу.
7. kudim 10.06.22 15:07 Сейчас в теме
а то же самое но без системы взаимодействия?
Для отправки сообщения требуется регистрация/авторизация