Заметки из Зазеркалья

23.12.2016

Система взаимодействия

Реализовано в версии 8.3.10.2168.

Мы реализовали новый механизм, который назвали Система взаимодействия. Это платформенный механизм, передающий информацию между клиентскими приложениями и серверами 1С:Предприятия.

Система взаимодействия предназначена для автоматизации бизнес-процессов, или для помощи в осуществлении бизнес-процессов предприятия.

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

201 общий вид 1.png

Система взаимодействия реализована в статусе бета-версии. Её функциональность, описанная далее, не является окончательной, а будет расширяться и совершенствоваться.

Зачем нужна система взаимодействия?

Система взаимодействия предоставляет несколько разных (по своему прикладному смыслу) видов интерактивного взаимодействия. Во-первых, вы можете создавать тематические обсуждения, посвященные какому-либо вопросу: мероприятиям, связанным с открытием нового магазина, вариантам проведения новогоднего праздника или грядущему совещанию у директора.

106 общий вид неконтекстного обсуждения.png

Во-вторых, вы можете обсуждать вопросы ведения учёта, связанные с конкретными объектами данных: накладными, товарами, поставщиками и т.д. При этом вся переписка будет отображаться в форме этих данных.

109_1 общий вид контекстного обсуждения.png

И, в-третьих, при наличии микрофона, вы можете звонить другим пользователям. А если у вас и вашего собеседника подключены веб-камеры, вы сможете ещё и видеть друг друга.

115_1 видеозвонок общение.png

В данном случае у администратора отсутствует веб-камера, поэтому при видеозвонке отображается его аватар.

Архитектура системы

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

Схема сервиса.png

Использовать систему взаимодействия могут пользователи информационных баз 1С:Предприятия. Для этого информационная база должна быть зарегистрирована в сервере взаимодействия. Авторизацию осуществляет сервер 1С:Предпрития. Всё остальное платформа выполняет автоматически.

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

Связь между клиентскими приложениями и сервером взаимодействия осуществляется по протоколу WebSocket. Этот протокол может использовать как открытую, так и защищённую передачу данных, поэтому взаимодействие, как через Интернет, так и в локальной сети, является достаточно безопасным.

Как «включить» систему взаимодействия?

Чтобы в интерфейсе 1С:Предприятия появились элементы системы взаимодействия, нужно зарегистрировать информационную базу в сервере взаимодействия. Это делается в режиме 1С:Предприятие с помощью стандартной функции Управление системой взаимодействия.

01 вызов общей функции.png

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

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

02 диалог подключения.png

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

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

У одного абонента системы взаимодействия может быть зарегистрировано несколько информационных баз. Идентификатором абонента является его адрес электронной почты. При запросе регистрации, если в сервере ещё нет абонента с таким адресом, он создаётся автоматически.

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

В каком месте интерфейса находится система взаимодействия?

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

Во-первых, в центре оповещений появляется команда Обсуждения.

501 в центре оповещений.png

Во-вторых, в панели открытых появляется стандартная закладка Обсуждения.

502 в панели открытых.png

В-третьих, в заголовке формы объекта, рядом с кнопкой закрытия, появляется команда Обсуждение.

503 в формах объектов данных.png

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

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

504 в формах блокирующих нет.png

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

Единственное, что могут захотеть пользователи, это указать свои реквизиты в системе взаимодействия: номер телефона и адрес электронной почты. Для этого нужно кликнуть мышью на имени пользователя в заголовке главного окна.

403 реквизиты пользователя системы взаимодействия.png

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

Типичные сценарии использования

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

Неконтекстное обсуждение

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

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

По команде +Новое создаётся новое обсуждение. Например, администратор может создать обсуждение, чтобы напомнить пользователям о грядущем совещании, и узнать их планы по участию в этом совещании.

101_1 участники нового неконтекстного обсуждения.png

Желательно (но не обязательно) указать тему обсуждения, и обязательно нужно выбрать участников. Подбор участников выполняется с помощью поиска, поэтому достаточно ввести фрагмент имени пользователя, а затем выбрать мышью подходящего. Когда все участники обсуждения указаны, нужно нажать кнопку Создать обсуждение.

Теперь можно вести переписку в этом обсуждении. Вы можете написать сообщение, и отправить его нажатием Enter. Также для отправки сообщения можно использовать кнопку Отправить в нижнем правом углу формы.

102 текст нового неконтекстного обсуждения.png

В результате каждый участник обсуждения получит оповещение. Оно, как и оповещения пользователя, будет отображено в правом нижнем углу экрана, а кроме этого оно попадёт в центр оповещений.

103 оповещение о неконтекстном обсуждении.png

Если пользователь (в данном случае менеджер по продажам) находится за компьютером и готов принять участие в обсуждении, он может кликнуть по оповещению, и в основной форме системы взаимодействия написать своё сообщение.

105 текст входящего неконтекстного обсуждения.png

В результате администратор, инициировавший это обсуждение, через некоторое время (по мере ответа пользователей) увидит такую переписку:

106 общий вид неконтекстного обсуждения.png

Аналогичным образом переписка будет выглядеть и у других участников этого обсуждения. Разница будет только в том, какие сообщения выделены цветом. Потому что цветом выделяются собственные сообщения пользователя.

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

301 реквизиты пользователя.png

Контекстное обсуждение

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

Для каждого объекта данных предусмотрено единственное обсуждение. Поэтому ничего создавать не надо, достаточно просто открыть панель обсуждения в форме нужного объекта.

В ней можно написать сообщение, и отправить его клавишей Enter.

108 контекстное обсуждение входящее.png

Это сообщение сможет прочитать любой пользователь, которому доступен товар Валенки. Но, во-первых, как «любой пользователь» узнает, что тут кто-то что-то написал? А во-вторых, менеджер по закупкам, очевидно, хочет обсудить валенки с конкретным пользователем, с продавцом. Поэтому, прежде чем отправить сообщение, он в поле Кому выбирает того пользователя, которого хочет оповестить о своём сообщении.

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

107 оповещение внеконтекстного обсуждения.png

По клику на оповещение платформа откроет ему форму того объекта, к которому относится данное оповещение.

Продавец нажмёт кнопку Ответить, напишет ответ, и отправит его. В результате менеджер по закупкам увидит такую переписку:

109_1 общий вид контекстного обсуждения.png

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

401 кого оповещать.png

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

402_1 ответить всем.png

Как мы уже говорили, на контекстные обсуждения накладываются ограничения, соответствующие правам доступа на объект данных. Читать и писать могут все, кому системой прав разрешён доступ к этому объекту.

А раз так, то один из возможных сценариев работы заключается в том, что пользователь не принимает активного участия в обсуждении, но должен быть в курсе того, «что происходит с объектом». Как ему быть в этом случае? Постоянно открывать форму объекта и смотреть, не появилось ли там что-то новое и важное?

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

110 режим наблюдения.png

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

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

Видеозвонок

При наличии микрофонов, видеозвонки позволяют общаться голосом «один на один» с любым пользователем информационной базы. А при наличии веб-камер, собеседники могут ещё и видеть друг друга.

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

Также видеозвонок можно выполнить из любого обсуждения, неконтекстного или контекстного. В этом случае нужно будет выбрать пользователя, которому адресован звонок.

111 видеозвонок начало.png

В процессе установки соединения в окне видеозвонка отображается аватар пользователя. А в нижней части окна указывается ссылка на обсуждение. Она добавляется автоматически, каким бы образом звонок ни инициировался. В данном случае указана ссылка на обсуждение совещания у директора.

113_1 видео звонок ожидание ответа.png

На стороне собеседника появляется входящий звонок. В нём, кроме вызывающего пользователя, также указана ссылка на обсуждение. Таким образом собеседник, если есть необходимость, (после ответа на звонок) может быстро открыть контекст разговора и познакомиться с ним.

114 входящи видеозвонок.png

После ответа на входящий звонок происходит общение голосом, при этом в окне звонка показывается изображение с веб-камеры собеседника. В примере ниже, как вы уже знаете, у администратора веб-камера не установлена, поэтому менеджер по закупкам видит только его аватар.

115_1 видеозвонок общение.png

Если вызываемый собеседник отсутствует на рабочем месте и не может принять входящий звонок, то через некоторое время вызов будет автоматически прекращён, и у него появится оповещение о пропущенном звонке.

117 пропущенный видеозвонок.png

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

116 адресация видеозвонка другому пользователю.png

В заключение нужно сделать пояснение, касающееся бета-версии системы взаимодействия. В ней по-умолчанию функциональность видеозвонков автоматически не включается после регистрации информационной базы в сервере 1С:Диалог. Это связано с тем, что видеозвонки находятся в той стадии разработки, когда мы ещё не можем предоставлять их всем желающим без ограничений. Если вам необходима функциональность видеозвонков, мы можем включить её для вашей базы (баз) по индивидуальному запросу, но не безусловно, а исходя из имеющихся у нас возможностей и технических ограничений.

Область уведомлений

При работе тонкого клиента в Windows после установки соединения с сервером взаимодействия в области уведомлений Windows (system tray) отображается значок клиентского приложения. При получении нового уведомления картинка значка изменяется.

602 область уведомлений Виндовс.png

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

Неполадки

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

03 индикатор отсутствия связи с сервером.png

Программная работа с системой взаимодействия

Во встроенном языке мы реализовали объектную модель для работы с системой взаимодействия. Она, в общем, проста и понятна. С помощью свойства глобального контекста СистемаВзаимодействия вы получаете МенеджерСистемыВзаимодействия, и дальше действуете в зависимости от того, что вам нужно.

04 объектная модель.png

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

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

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

Учётная запись в информационной базе представляется объектом встроенного языка ПользовательИнформационнойБазы. А учётная запись в системе взаимодействия представляется объектом встроенного языка ПользовательСистемыВзаимодействия. И тот и другой объекты указывают на одного и того же пользователя (человека). Более того, эти объекты всегда однозначно связаны друг с другом и, зная один из них, вы всегда можете получить другой.

Поэтому теперь, когда вам нужен какой-то пользователь из имеющихся, или текущий пользователь, вы получаете его в одном или другом механизме, в зависимости от своей задачи.

Например, учётную запись текущего пользователя (человека) в информационной базе вы можете получить так:

ТекущийПользовательИБ = ПользователиИнформационнойБазы.ТекущийПользователь();

А учётную запись того же самого пользователя (человека) в системе взаимодействия, так:

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

Зная учётную запись пользователя (человека) в информационной базе, вы можете получить соответствующую ей учётную запись этого пользователя (человека) в системе взаимодействия:

IDПользователяСВ = СистемаВзаимодействия.ПолучитьИдентификаторПользователя(ТекущийПользовательИБ.УникальныйИдентификатор);
ПользовательСВ = СистемаВзаимодействия.ПолучитьПользователя(IDПользователяСВ);

И наоборот:

IDПользователяСВ = СистемаВзаимодействия.ИдентификаторТекущегоПользователя();
IDПользователяИБ = СистемаВзаимодействия.ПолучитьИдентификаторПользователяИнформационнойБазы(IDПользователяСВ);
ПользовательИБ = ПользователиИнформационнойБазы.НайтиПоУникальномуИдентификатору(IDПользователяИБ);

Физически это выглядит следующим образом.

601 пользователи.png

Когда пользователь (человек) аутентифицируется (вводит логин/пароль, или другими способами) в 1С:Предприятии, он сопоставляет себя с некоторой учётной записью, имеющейся в информационной базе. Дальше запускается сеанс. Если это первый запуск сеанса этого пользователя после того, как информационная база была зарегистрирована в сервере взаимодействия, то платформа автоматически создаёт для этого пользователя информационной базы учётную запись в сервере взаимодействия. Таким образом получается, что эти записи жёстко связаны друг с другом и указывают на одного и того же пользователя (человека).

Планы и обратная связь

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

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

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

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

Рассказать друзьям: