Система взаимодействия. Быстрый старт

28.11.17

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

В статье описано принципиальное взаимодействие клиентского сеанса с сервером взаимодействия.

Скачать файл

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование По подписке [?] Купить один файл
Система взаимодействия. Быстрый старт.:
.cf 15,81Kb
53
53 Скачать (1 SM) Купить за 1 850 руб.

В платформе 8.3.11 наконец были добавлены функции создания обработчиков оповещений при получении сообщений от сервера взаимодействий. Здесь мы не будем рассматривать вопросы установки или настройки самого сервера взаимодействий, регистрацию базы на нем и т.п. - это все описано в этой статье.

Для знакомства с новыми функциями создадим новую пустую конфигурацию, в которой добавим общий универсальный обработчик сообщений от сервера. Таким образом, у нас сообщения будут обрабатываться независимо от того, какие формы открыты.

Итак, начинаем с модуля управляемого приложения. При начале работы системы:

  1. Проверяем, что база зарегистрирована на сервере взаимодействия.
  2. Получаем из константы значение уникального идентификатора обсуждения для наших универсальных сообщений севера.
  3. Проверяем существование обсуждения с таким идентификатором.
  4. Если обсуждение не существует, то создаем его c полученным из константы идентификатором.
  5. Добавляем текущего пользователя в участники обсуждения.
  6. Создаем два оповещения: одно оповещение успешного подключения обработчика новых сообщений, второе оповещение о получении нового сообщения.
  7. Подключаем оповещение о новых сообщениях функцией НачатьПодключениеОбработчикаНовыхСообщений.
 
 Модуль управляемого приложения

 

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

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

 
 Модуль "СерверВзаимодействияПривилегированный"

 

Функция СоздатьОбсуждениеБезКонтекста: создает новое обсуждение, признак "Отображаемое" выставляем в ЛОЖЬ, чтобы обсуждение не появилось в стандартном интерфейсе уведомлений пользователей. После записи идентификатора записываем в константу. Функция вызывается только один раз (вопросы возможного одновременного создания обсуждений несколькими пользователями не будем тут рассматривать)

Функция ОбсуждениеСуществует проверяет существование обсуждения по его идентификатору.

Функция ДобавитьТекущегоПользователяВОбсуждение добавляет идентификатор текущего пользователя в обсуждение, если он туда еще не добавлен.

Функция ПолучитьИдентификаторТекущегоПользователя получает идентификатор текущего пользователя.

Функция СоздатьСообщение создает новое сообщение в обсуждения с переданными параметрами (Ищет пользователя по представлению параметра "Ответственный", в текст сообщения вставляет ссылку на документ)

В модуле документа "СчетНаОплату" в обработчике ПриЗаписи добавим код.

 
 Модуль документа "Счет на оплату"

 

В результат при записи документа (на сервере) ответственному из счета на оплату будет отправляться сообщение  том, что документ был записан.

 
 Модуль "КлиентскиеФункции"

 

В модуле КлиентскиеФункции описаны функции оповещения подключения обработчика и самого обработчика сообщений.  В обработчике сообщения проверяется, что текущий пользователь входит в число получателей сообщения, и выводится сообщение о записи документа. В качестве данных сообщения передается ссылка на записанный документ.

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

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

См. также

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

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

23.06.2024    7443    bayselonarrend    20    

154

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

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

13.03.2024    5942    dsdred    16    

80

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

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

24.01.2024    17666    YA_418728146    26    

71

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

Вы все еще регистрируете изменения только на Планах обмена и Регистрах сведений?

11.12.2023    11222    dsdred    44    

130

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

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

06.10.2023    23757    SeiOkami    48    

135

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

Начиная с версии платформы 8.3.22 1С снимает стандартные блокировки БД на уровне страниц. Делаем рабочий скрипт, как раньше.

14.09.2023    18828    human_new    27    

80

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

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

28.08.2023    14730    YA_418728146    7    

166
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. pbazeliuk 1969 28.11.17 20:04 Сейчас в теме
Не правильный подход формировать сообщение при записи, необходимо формировать сообщение после завершения транзакции.
EugeneMIPT; pfilyk; Brawler; +3 Ответить
3. Goleff74 217 28.11.17 21:59 Сейчас в теме
(1)
Предлагаю поменять текст в сообщении на "Кто-то пытался записать ваш документ.", чтобы не было споров :)
2. script 128 28.11.17 20:58 Сейчас в теме
Огромное Спасибо. А что с той базой, которая используется системой взаимодействия. Про нее что-то известно?
4. Goleff74 217 28.11.17 22:01 Сейчас в теме
(2)
До базы пока не добрался.
5. asddsaas 28.12.17 11:16 Сейчас в теме
Спасибо за статью! Возможно ли в системе взаимодействия вставлять в сообщение ссылку (гиперссылку) на документ по типу Ссылка? Или позиционирование на объекте ИБ возможно только в рамках контекстного обсуждения?
6. Goleff74 217 28.12.17 17:29 Сейчас в теме
(5)
Оформление, установленное в форматированной строке, не используется.

Так что как вариант на текущий момент - рисовать свою форму оповещения с форматированной строкой и показывать эту форму пользователям.
15. kwazi 659 17.04.19 16:11 Сейчас в теме
7. FreeArcher 162 25.01.18 11:00 Сейчас в теме
Я правильно понимаю, что появление нового сообщения через колокольчик сделать пока нельзя?
8. Goleff74 217 25.01.18 11:10 Сейчас в теме
(7)
При создании обсуждения указываете
НовоеОбсуждение.Отображаемое = ИСТИНА;

и то, что сервер отсылает на клиент, будет отображаться пользователю.
9. andrey.luchkin@gmail.com 15.03.18 12:38 Сейчас в теме
Добрый день и спасибо за Вашу публикацию.

Я столкнулся с ситуацией, когда вызов метода СистемаВзаимодействия.ПолучитьОбсуждение(ИдентификаторОбсуждения) при вызове в начале работы системы прерывается по таймауту:
"Превышено максимальное время ожидания ответа от сервера системы взаимодействия"

При этом сервер взаимодействия доступен, база зарегистрирована. Может есть идеи?
10. Goleff74 217 15.03.18 14:53 Сейчас в теме
(9)
В идентификаторе уберите кириллицу.
11. andrey.luchkin@gmail.com 15.03.18 15:25 Сейчас в теме
(10) Спасибо, но не помогло. Ключ обсуждения формирую из фиксированного префикса и строки идентификатора пользователя системы взаимодействия.

В продолжение поиска ошибки оставил преобразованный в строку ИдентификаторПользователяСистемыВзаимодействия в качестве ид обсуждения и тогда сваливается система с ошибкой "Объект системы взаимодействия не найден".
Longinoff; ivmer; +2 Ответить
12. andrey.luchkin@gmail.com 15.03.18 15:38 Сейчас в теме
(11) Все, ошибку нашел. Пропустил преобразование ключа обсужденяи в ИдентификаторОбсуждения. Поиск обсуждения по ключу отлично работает.
21. TreeDogNight 22 19.03.20 15:10 Сейчас в теме
(11) В какой момент у вас выходила такая ошибка? У меня выходит такая же, но никак не пойму в какой момент. Остановка по ошибке к сожалению не работает.
13. Stepka1206 08.08.18 09:14 Сейчас в теме
Как проверить работает она или нет?
в обсуждениях красный ⚠
14. terrorion 93 27.02.19 08:58 Сейчас в теме
Добрый день. Использовал Ваши наработки, спасибо.
Возможно ли сделать сообщение прочитанным программно?
16. TreeDogNight 22 18.12.19 16:16 Сейчас в теме
Подскажите, каким образом можно отключить возможность использования видео / аудио звонков в системе взаимодействия?
17. TreeDogNight 22 31.01.20 13:25 Сейчас в теме
(16) Задача решилась очисткой конфигурационного файла, предназначенного для видео звонков. Теперь при нажатии на кнопку видео звонка выходит ошибка, что звонки не доступны.
18. TreeDogNight 22 31.01.20 13:34 Сейчас в теме
Теперь возникла новая задача. Возникла необходимость открыть форму Обсуждений не стандартным способом, а из произвольной формы. Подскажите, как это можно реализовать?
19. unknown181538 158 24.02.20 18:19 Сейчас в теме
Либо я не очень понял, но я понял так. Изначально константа пустая, поэтому полученное при запуске значение будет пустое, и она не будет заполнена.
Дописал еще

Если Не ЗначениеЗаполнено(ИдентификаторОбсужденияСтрока) Тогда
			ИдентификаторОбсуждения = СерверВзаимодействияПривилегированный.СоздатьОбсуждениеБезКонтекста();
		ИдентификаторОбсужденияСтрока = СерверВзаимодействияПривилегированный.ПолучитьЗначениеКонстанты("ВШ_ИдентификторОбсужденияСерверныхСообщенийБезКонтекста");
	КонецЕсли;


после получения константы

В целом, спасибо, кажется довольно извращенным способом, но, похоже, что другого способа обработать оповещения нету.
Я дописываю к своим контекстным обовещения дополнительные неконтекстные, чтобы их дополнительно обрабатывать.
Как я понимаю, еще можно создать отдельные неконтекстые оповещения, и записывать идентификаторы с привязкой к пользователю.
20. vanoono 14.03.20 11:12 Сейчас в теме
1. Важно понимать, что с точки зрения бизнеса мало кому интересно чего там хотели разработчики, не уверен что их мнение учитывалось.
2. Система взаимодействия явно опоздала с выходом на рынок, тем кому нужно было "взаимодействовать", уже давно решили это вполне успешно другими средствами.
3. Не совсем понятно зачем платить, когда этого можно не делать вообще ? Решить задачу взаимодействия полностью бесплатно или практически полностью, но явно гораздо дешевле.

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

Те, кто могут развивать эту систему, на рынке нету, как и нет нормальных гайдлайнов, сценариев использования, еще один механизм в котором ни кто не разбирается, который ни кто не знает, не понимает что с ним делать. Проводя аналогию с БСП, знает модуль только тот, кто его написал, больше ни кто. Описание на ИТС, похоже на скучную инструкцию для утюга, которую перестает хочется читать на первом абзаце. Остается только сделать в каком-нибудь УЦ курс, по этой системе и никому не нужный сертификат в конце, чтобы довести эту тему, до ее апофеоза.
Kalam; LomayaZakat; elcoan; borman; user592475; +5 Ответить
22. DimaP 64 28.08.20 11:36 Сейчас в теме
(20)

В целом, согласен. Однако, в том SAP или Sale force есть такой функционал и очень давно. Поэтому, EPR-система, ориентированная на большой рынок, должна иметь это и развивать дальше. Может быть вырастет во что-то бОльшее. Если у них интеграция через фэйсбук, то в 1С будет через вконтакте и одноклассники :)
23. maxdmt 28 25.12.20 00:15 Сейчас в теме
Кто знает, а зачем участники есть и в обсуждении и в сообщении (получатели)?
24. islam645 05.05.21 18:17 Сейчас в теме
Добрый вечер!

Кто нибудь может подсказать как вернуться в обсуждение что покинул, никого в нем нету чтобы попросить вернуть это было обсуждение с Телеграмм ботом теперь пишу в телеграмм сообщения просто теряются.
HIgor; Redoubtable; +2 Ответить
25. skyadmin 60 29.11.21 19:22 Сейчас в теме
Здравствуйте!

Далее если отправить его ПередЗаписью() объекта контекстное обсуждение то уведомление приходит сразу.
Если отправить ПриЗаписи() то в колокольчик приходит аж только после перезапуска программы.
Решение: Если при Записи еще раз Записать(), то ПередЗаписью() уже будет ссылка.
26. user649357 12.04.22 10:34 Сейчас в теме
Кто-нибудь сталкивался с тем, что не вызывается процедура, указанная в описании оповещения для НачатьОтключениеОбработчикаНовыхСообщений / НачатьПодключениеОбработчикаНовыхСообщений ?
27. user649357 13.04.22 02:15 Сейчас в теме
(26) Оставлю для истории. Как выяснилось, параметр <Обработчик> в методе НачатьОтключениеОбработчикаНовыхСообщений(<ОписаниеОповещения>, <Ключ>, <Обработчик>) надо указывать обязательно, хотя СП утверждает обратное. Если параметр не указан, обработчик с заданным ключом не отключается, процедуры из <ОписаниеОповещения> не вызываются (ни процедура успешного выполнения, ни обработки ошибок).
Оставьте свое сообщение