Многие разработчики при работе с механизмом Системы взаимодействия (Collaboration System) в среде «1С:Предприятие» сталкиваются с неожиданной проблемой: попытка найти стандартную форму чата или окна сообщений в дереве метаданных конфигурации не приносит успеха. В этой статье мы подробно разберем, почему это происходит, где на самом деле «спрятана» эта форма и какими методами мы можем повлиять на ее поведение и внешний вид.
Для начала проанализируем, как устроена эта система «под капотом». В отличие от привычных нам справочников, документов или обработок, Система взаимодействия не является объектом метаданных, интерфейсную часть которого можно открыть в редакторе форм. Это платформенный механизм, встроенный непосредственно в ядро системы начиная с версии 8.3.10.
Рассмотрим основные особенности такого подхода:
Если перед нами стоит задача изменить пользовательский опыт работы с сообщениями, мы не должны пытаться «взломать» системное окно. Вместо этого разберем механизмы, которые платформа предоставляет для гибкой настройки обсуждений.
Самый эффективный способ кастомизации — это создание собственной формы и встраивание в нее специального элемента. Выясним, как это сделать по шагам:
ДанныеФормыЭлементСистемыВзаимодействия (в ряде версий это может быть связано с типом CollaborationSystem).Проанализируем преимущества этого метода: теперь чат находится внутри вашей формы. Вы можете добавить вокруг него любые дополнительные кнопки, поля ввода, таблицы или декорации. Однако помните, что внутренняя часть поля обсуждения (список сообщений) все равно останется стандартной.
Для реализации сложной логики (например, автоматического создания чата при наступлении события) необходимо использовать объект СистемаВзаимодействия. Рассмотрим пример программного создания обсуждения, привязанного к конкретному объекту информационной базы:
// Пример создания обсуждения для документа "ЗаказКлиента"
Процедура СоздатьОбсуждениеНаОснованииОбъекта(СсылкаНаДокумент)
// Получаем менеджер системы взаимодействия
Менеджер = СистемаВзаимодействия;
// Пытаемся найти существующее обсуждение по ключу (ссылке на объект)
Отбор = Новый Структура("Ключ", СсылкаНаДокумент);
СписокОбсуждений = Менеджер.ПолучитьОбсуждения(Отбор);
Если СписокОбсуждений.Количество() = 0 Тогда
// Создаем новое обсуждение, если оно не было найдено
НовоеОбсуждение = Менеджер.СоздатьОбсуждение();
НовоеОбсуждение.Ключ = СсылкаНаДокумент;
НовоеОбсуждение.Заголовок = "Обсуждение по заказу: " + Строка(СсылкаНаДокумент);
// Добавляем участников (например, текущего пользователя)
НовоеОбсуждение.Участники.Добавить(ПользователиИнформационнойБазы.ТекущийПользователь().ИдентификаторПользователяИБ);
НовоеОбсуждение.Записать();
КонецЕсли;
КонецПроцедуры
Этот код демонстрирует, что мы можем управлять контекстом общения, не касаясь дизайна самих форм.
Если ваша задача связана с модерацией сообщений или выполнением действий при их получении, следует обратить внимание на обработчики событий. Разберем ситуацию, когда нам нужно перехватить входящее сообщение. В модуле управляемого приложения мы можем использовать соответствующие методы для подписки на события.
Например, использование метода ПодключитьОбработчикОповещенияОНовыхСообщениях позволяет реагировать на активность в чатах в реальном времени. Рассмотрим, как это помогает решить проблему «редактирования формы»: если вы не можете добавить кнопку в форму, вы можете выводить собственное всплывающее окно или вопрос пользователю, когда в чате появляется ключевое слово.
В ситуациях, когда стандартный интерфейс категорически не удовлетворяет требованиям бизнеса (например, нужен специфический брендинг или интеграция с внешними мессенджерами), следует рассмотреть Систему взаимодействия как транспортный уровень (бекэнд).
Выясним возможности интеграции:
Важно понимать пределы возможностей разработчика, чтобы не тратить время на невыполнимые задачи:
Подводя итог нашему анализу, зафиксируем: форму сообщений «Системы взаимодействия» нельзя найти в конфигураторе, потому что ее не существует как отдельного объекта метаданных. Она генерируется платформой «на лету».
Для решения прикладных задач используйте следующие стратегии:
Поле обсуждения.СистемаВзаимодействия (создание обсуждений, добавление участников).Таким образом, несмотря на отсутствие прямого доступа к форме, платформа предоставляет достаточно инструментов для глубокой интеграции системы общения в бизнес-логику вашего прикладного решения.