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

28.11.17

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

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

Скачать файлы

Наименование Файл Версия Размер
Система взаимодействия. Быстрый старт.:
.cf 15,81Kb
52
.cf 15,81Kb 52 Скачать

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

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

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

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

 

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

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

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

 

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

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

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

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

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

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

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

 

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

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

 

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

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

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

См. также

Поинтегрируем: сервисы интеграции – новый стандарт или просто коннектор?

Обмен между базами 1C Администрирование СУБД Механизмы платформы 1С Платформа 1С v8.3 Бесплатно (free)

В платформе 8.3.17 появился замечательный механизм «Сервисы интеграции». Многие считают, что это просто коннектор 1С:Шины. Так ли это?

11.03.2024    4527    dsdred    53    

72

Как готовить и есть массивы

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

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

24.01.2024    5294    YA_418728146    25    

63

Планы обмена VS История данных

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

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

11.12.2023    6409    dsdred    36    

112

1С-ная магия

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

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

06.10.2023    18473    SeiOkami    46    

118

Дефрагментация и реиндексация после перехода на платформу 8.3.22

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

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

14.09.2023    12088    human_new    27    

74

Валидация JSON через XDTO (включая массивы)

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

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

28.08.2023    8822    YA_418728146    6    

141

Внешние компоненты Native API на языке Rust - Просто!

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

Внешние компоненты для 1С можно разработывать очень просто, пользуясь всеми преимуществами языка Rust - от безопасности и кроссплатформенности до удобного менеджера библиотек.

20.08.2023    6279    sebekerga    54    

94

Все скопируем и вставим! (Буфер обмена в 1С 8.3.24)

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

Рассмотрим новую возможность 8.3.24 и как её можно эффективно использовать

27.06.2023    15986    SeiOkami    31    

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

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

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

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

При этом сервер взаимодействия доступен, база зарегистрирована. Может есть идеи?
10. Goleff74 214 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 92 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 151 24.02.20 18:19 Сейчас в теме
Либо я не очень понял, но я понял так. Изначально константа пустая, поэтому полученное при запуске значение будет пустое, и она не будет заполнена.
Дописал еще

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


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

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

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

Те, кто могут развивать эту систему, на рынке нету, как и нет нормальных гайдлайнов, сценариев использования, еще один механизм в котором ни кто не разбирается, который ни кто не знает, не понимает что с ним делать. Проводя аналогию с БСП, знает модуль только тот, кто его написал, больше ни кто. Описание на ИТС, похоже на скучную инструкцию для утюга, которую перестает хочется читать на первом абзаце. Остается только сделать в каком-нибудь УЦ курс, по этой системе и никому не нужный сертификат в конце, чтобы довести эту тему, до ее апофеоза.
LomayaZakat; elcoan; borman; user592475; +4 Ответить
22. DimaP 63 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 56 29.11.21 19:22 Сейчас в теме
Здравствуйте!

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