Передача данных с сервера на клиент

26.06.19

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

Не так давно столкнулся с задачей интеграции облачной АТС и 1С CRM. Типовой функционал предполагает получения http-запросов через http-сервис. Обработкой запросов занимается сервер, и создается документ «Телефонный звонок». И все бы ничего, если данного функционала хватило для работы, но данной статьи тогда бы не было. Дополнительная задача заключалась в открытии форм существующего документа по клиенту «Интерес» и обработки «Мастер формирования интереса».
  1. Предисловие

Не так давно столкнулся с задачей интеграции облачной АТС и 1с CRM. Типовой функционал предполагает получения http-запросов через http-сервис. Обработкой запросов занимается сервер и создается документ «Телефонный звонок». И все бы ничего если данного функционала хватило для работы, но данной статьи тогда бы не было.

Дополнительная задача заключалась в открытии форм существующего документа по клиенту «Интерес» и обработки «Мастер формирования интереса».

  1. Поиск решения

Проблема была проста: при приеме http-запроса работает только Сервер, вызова Клиента не происходит. Вопрос, как реализовать открытие форм и отображение их конкретному пользователю?

За день «гуглежа» энтузиазм устремился в минус бесконечность пока не наткнулся на статью,  посвященную функционалу «Обсуждения» добавленного в платформу 8.3.11.2867.

Сервис представляет собой открытие обсуждения между пользователями информационной базы в форме чата.

Данная статья подразумевает передачу данных с сервера на клиент путем отправки сообщения конкретному пользователю системы.

  1. Реализация

Код в основном использовался из статьи указанной выше лишь с малыми изменениями необходимыми для решения моих задач.

Для начала каждому пользователю необходимо создать свое «Служебное обсуждение», ориентироваться будем по Ключу, который (в моем случаи) формируется из идентификатора пользователя в системе обсуждения (уид пользователя в системе обсуждения и уид в информационной базе разный) и произвольного префикса (оставил как в статье, для меня это было не принципиально).

 

&НаСервере

Процедура СоздатьСлужебноеОбсуждение(КлючСлужебногоОбсуждения) Экспорт

               

                Если СистемаВзаимодействия.ПолучитьОбсуждение(КлючСлужебногоОбсуждения) = Неопределено Тогда

                              

                               Обсуждение = СистемаВзаимодействия.СоздатьОбсуждение();

                               Обсуждение.Отображаемое = Ложь;

                               Обсуждение.Ключ = КлючСлужебногоОбсуждения;

                               Обсуждение.Участники.Добавить(СистемаВзаимодействия.ИдентификаторТекущегоПользователя());

                               Обсуждение.Записать();

                              

                КонецЕсли;

               

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



&НаСервере

Функция КлючСлужебногоОбсуждения() Экспорт

               

                Возврат "Сообщения сервера " + СистемаВзаимодействия.ИдентификаторТекущегоПользователя();

               

КонецФункции

 

Функция для генерации ключа «Служебного обсуждения» возвращает сформированный ключ и процедура, в которую передаем ключ, для формирования самого обсуждения.

Участники обсуждения добавляются по идентификатору пользователя в системе обсуждения.

СистемаВзаимодействия.ИдентификаторТекущегоПользователя() – возвращает идентификатор в системе по текущему пользователю информационной базы.

СистемаВзаимодействия.ПолучитьИдентификаторПользователя(ПользовательИБ.УникальныйИдентификатор) – возвращает идентификатор пользователя по уникальному идентификатору пользователя информационной базы.

Обсуждение.Отображаемое = Ложь – скрываем обсуждение от пользователя (а зачем оно ему?).

Обсуждение создано, пользователь подвязан, следующий этап – добавление возможности пользователя получать эти самые «Служебные обсуждения».

Для этого будем использовать процедуру, которую мы будем вызывать 1 раз за сеанс, в моем случаи я подключаю ее при входе в рабочее место «Телефония» и до конца действия сеанса. Все поступившие сообщения для пользователя сохраняются в системе даже если сеанс неактивен, после выполнения процедуры все сообщения будут воспроизведены.

&НаКлиенте

Процедура ПодписатьсяНаСлужебноеОбсуждение(КлючСлужебногоОбсуждения) Экспорт

               

                ОшибкаПодключения = Новый ОписаниеОповещения( , , , "ОшибкаПодключения", БИТ_СерверВзаимодействия);

                ОбработкаСообщенийСервера = Новый ОписаниеОповещения("ОбработкаСообщенийСервера", БИТ_СерверВзаимодействия);

                СистемаВзаимодействия.НачатьПодключениеОбработчикаНовыхСообщений(ОшибкаПодключения, КлючСлужебногоОбсуждения, ОбработкаСообщенийСервера);

               

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

 

Процедура проста: на вход передаем Ключ и заводим описания вызова процедур. ОшибкаПодключения – по желанию, если что-то пошло не так, то система проинформирует и ОбработкаСообщенийСервера – то, что и будет обрабатывать наше сообщение в моменте его поступления.

Следующее что нам необходимо сделать – создать сообщение, которое мы и будем обрабатывать.

В моем случаи я получаю данные из http-запроса, типовым функционалом формируется документ «Телефонный звонок», а дальше забираю входящий номер телефона, внутренний телефон менеджера и сам документ себе в процедуру формирования служебного сообщения.


&НаСервере

Процедура ВыполнитьДействиеПриЗвонке(НомерТелефонаВх, НомерПользователя, ДокументЗвонка) Экспорт
               

                ПользовательСВ = ПолучитьПользователяСВ(НомерПользователя);

                Ключ = "Сообщения сервера " + ПользовательСВ;

                СлужебноеОбсуждение = СистемаВзаимодействия.ПолучитьОбсуждение(Ключ);

               

                СтруктураДанных = Новый Структура;

                СтруктураДанных.Вставить("Значение", ДокументЗвонка);

                СтруктураДанных.Вставить("СпособОбработки", "Индикатор");

                СтруктураДанных.Вставить("НомерТелефона", НомерТелефонаВх);

               

                Сообщение = СистемаВзаимодействия.СоздатьСообщение(СлужебноеОбсуждение.Идентификатор);

               

                Сообщение.Данные = СтруктураДанных;

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


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

Функция ПолучитьПользователяСВ(НомерПользователя) – получает данные по внутреннему номеру АТС пользователя. Сначала я получаю пользователя информационной базы, после чего по уникальному идентификатору получаю пользователя системы взаимодействия.

Далее по ключу ищу его «Служебное обсуждение» и завожу в него структуру с данными. Так же через структуру можно передать название «клиентской» процедуры или функции и в обработке данного сообщения ее вызвать (Выполнить(«НазваниеПроцедуры()») – для процедуры и Вычислить(«НазваниеФункции()») – для функции).

Создаем сообщение в «Служебном обсуждении» и записываем его.

Осталось нам только обработать новое сообщение у пользователя.

&НаКлиенте

Процедура ОбработкаСообщенийСервера(Сообщение, ДополнительныеПараметры) Экспорт

                 СтруктураЗвонка(Сообщение.Данные.НомерТелефона, Сообщение.Данные.Значение);


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


&НаКлиенте

Процедура СтруктураЗвонка(НомерТелефона, Документ)

…

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

 

Это та самая процедура которую мы подключаем в ОбработкаСообщенийСервера.

Возможно это особенность конфигурации, но сам сервер взаимодействия устанавливать не пришлось. Как установить сервер взаимодействия можно посмотреть здесь.

Касательно новых конфигурации, например Управление торговлей 11.4 включение сервиса взаимодействий находится в НСИ и администрирование -> Интернет-поддержка и сервисы -> Группа "Обсуждения"

На этом все.

Моя первая статья, особо ногами не пинайте)

взаимодействие сервер клиент с сервера на

См. также

Механизмы платформы 1С Программист Стажер Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

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

23.06.2024    8324    bayselonarrend    20    

156

Механизмы платформы 1С Программист Стажер Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

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

13.03.2024    6400    dsdred    18    

80

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

Все мы используем массивы в своем коде. Это один из первых объектов, который дают ученикам при прохождении обучения программированию. Но умеем ли мы ими пользоваться? В этой статье я хочу показать все методы массива, а также некоторые фишки в работе с массивами.

24.01.2024    19633    YA_418728146    26    

72

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

Язык программирования 1С содержит много нюансов и особенностей, которые могут приводить к неожиданным для разработчика результатам. Сталкиваясь с ними, программист начинает лучше понимать логику платформы, а значит, быстрее выявлять ошибки и видеть потенциальные узкие места своего кода там, где позже можно было бы ещё долго медитировать с отладчиком в поисках источника проблемы. Мы рассмотрим разные примеры поведения кода 1С. Разберём результаты выполнения и ответим на вопросы «Почему?», «Как же так?» и «Зачем нам это знать?». 

06.10.2023    24319    SeiOkami    48    

135

WEB-интеграция Универсальные функции Механизмы платформы 1С Программист Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

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

28.08.2023    15383    YA_418728146    7    

169
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. lunjio 67 26.06.19 12:38 Сейчас в теме
Вопрос, как реализовать открытие форм и отображение их конкретному пользователю?

Пихаешь в регистр сведений, на клиенте в сеансе упр приложения подключаешь обработчик по определенной периодичности проверяет сервер, получает те данные которые без флага обработаны. Это работает во всех видах клиента, на всех платформах.
2. login1281 14 26.06.19 12:44 Сейчас в теме
(1) Задача подразумевала открытие форм в момент ответа на входящий звонок.
Я в курсе обработчика ожидания, но в данном кейсе не подходит
4. lunjio 67 26.06.19 12:53 Сейчас в теме
(2) Я делал такое на платформе 8.2 УПП 1.3, как правило, если откроется с небольшой задержкой в 5-8 сек, то ничего критичного не произойдет, как правило, пока поздароваются и т.п, уже все откроется. Второй вариант был генерировать внешнее событие с помощью ВК, но пока было в экспериментальных целях, отказался от ВК.
6. login1281 14 26.06.19 13:20 Сейчас в теме
(4) 1.Опять таки это дополнительная нагрузка и без того нагруженной системы CRM. С некоторой периодичностью нужно будет проверять появление необработанных данных. Поток входящих данных огромный, почта, мессенджеры, телефонные звонки, данные с сайта, чат с сайта, все это грузит систему и задержка в данном случаи может превысить 5-8 сек. как Вы говорите.
2. Даже задержка 5-8 сек. достаточно неприятна, за эту задержку менеджер сам сможет открыть существующий документ и по нему создать интерес.
3. user1166203 26.06.19 12:50 Сейчас в теме
5. login1281 14 26.06.19 13:13 Сейчас в теме
(3)Согласен. Здесь я постарался разжевать статью с сайта зазеркалья и описать как мне помогло данное решение
7. harmless 27.06.19 07:56 Сейчас в теме
Маленькая очепятка в процедуре ОбработкаСообщенийСервера в наименовании метода: СтруктураЗвонака
8. login1281 14 27.06.19 09:12 Сейчас в теме
(7)Спасибо. Поправил. Посмотрел код в 1с, и там и там у меня СтруктураЗвонАка)
9. PLAstic 296 27.06.19 14:48 Сейчас в теме
Подскажите, какие действия выполнялись для возможности задействования механизма СистемаВзаимодействия? Просто взял и пошёл, или надо что-то покупать?
10. пользователь 27.06.19 15:21
Сообщение было скрыто модератором.
...
11. login1281 14 27.06.19 15:38 Сейчас в теме
(9) Не знаю, дойдет ли мое предыдущее сообщение (было указано на модерации). Добавил данные в низ статьи.
Сам сервер устанавливать не пришлось.
Сам сервис необходимо подключить, в новых версиях конфигурация находится в Администрировании -> Интернет-поддержка и сервисы -> Обсуждения
Так же находил нюанс касательно изменений политики лицензирования по платформе в котором было указано что данный сервис будет работать только в платформе версии КОРП, но могу ошибаться.
12. login1281 14 27.06.19 15:41 Сейчас в теме
(9)И еще хочу добавить что у меня работает на серверной базе на платформе версии 8.3.12.1685
13. vdv2701 91 11.10.19 13:30 Сейчас в теме
На обычных формах это не будет работать. В этом случае лучше использовать более универсальное решение, т.е. внешнюю компоненту.
14. von_de 5 03.12.19 14:49 Сейчас в теме
Во-первых, это не будет работать на обычных формах. Во-вторых не будет работать на конфигурациях в режиме совместимости. Гораздо проще написать ВК, которая будет кидать и принимать текстовое сообщение по UDP с сервера на клиент.
Оставьте свое сообщение