Система взаимодействия — мощный инструмент для коммуникаций внутри 1С, однако ее стандартные возможности могут оказаться недостаточными для решения специфических бизнес-задач. Часто возникает необходимость автоматизировать добавление участников в обсуждения, использовать заранее созданные группы пользователей или анализировать всю историю переписки в удобном виде. Штатными настройками этого добиться нельзя.
Рассмотрим, как можно реализовать эти функции с помощью программной доработки, используя встроенный язык 1С и API Системы взаимодействия.
Проблема: При создании обсуждения, привязанного к документу или другому объекту, приходится вручную выбирать каждого участника. Хотелось бы, чтобы система сама предлагала или добавляла пользователей, связанных с этим объектом (например, автора документа, ответственного менеджера, руководителя отдела).
Решение: Эта задача решается программно через использование объекта глобального контекста СистемаВзаимодействия. Логику подбора участников нужно встроить в код конфигурации.
Разберем по шагам, как это можно реализовать:
ПриСозданииНаСервере или ПриОткрытии.
Автор, Ответственный, Контрагент.
СистемаВзаимодействия.СоздатьОбсуждение().Обсуждение.ДобавитьУчастника().Пример логики для кнопки "Создать обсуждение с ответственными":
Предположим, на форме документа есть кнопка. В обработчике команды этой кнопки мы можем написать следующий код:
// &НаСервере
Процедура СоздатьОбсуждениеСОтветственнымиНаСервере()
// Получаем текущий объект, к которому будет привязано обсуждение
КонтекстОбсуждения = Объект.Ссылка;
// Получаем пользователей из реквизитов документа
ПользовательАвтор = Объект.Автор;
ПользовательОтветственный = Объект.Ответственный;
// Важно: в систему взаимодействия добавляются не пользователи ИБ (справочник "Пользователи"),
// а пользователи системы взаимодействия. Их нужно получить по пользователю ИБ.
УчастникАвтор = СистемаВзаимодействия.ПолучитьПользователя(ПользовательАвтор);
УчастникОтветственный = СистемаВзаимодействия.ПолучитьПользователя(ПользовательОтветственный);
// Создаем новое обсуждение
НовоеОбсуждение = СистемаВзаимодействия.СоздатьОбсуждение("Обсуждение заказа №" + Объект.Номер, КонтекстОбсуждения);
// Добавляем участников, если они определены
Если УчастникАвтор <> Неопределено Тогда
НовоеОбсуждение.ДобавитьУчастника(УчастникАвтор);
КонецЕсли;
Если УчастникОтветственный <> Неопределено Тогда
НовоеОбсуждение.ДобавитьУчастника(УчастникОтветственный);
КонецЕсли;
// Сохраняем обсуждение
НовоеОбсуждение.Записать();
КонецПроцедуры
Таким образом, мы можем реализовать любую сложную логику для автоматического формирования списка участников обсуждения.
Проблема: В системе нет встроенного понятия "группа пользователей Системы взаимодействия", чтобы можно было одной командой пригласить в чат, например, весь отдел бухгалтерии или проектную команду.
Решение: Создать собственный справочник в конфигурации для хранения таких групп и использовать его при программном добавлении участников.
Посмотрим на примерную реализацию:
ГруппыПользователейСВ. У него будет наименование (например, "Бухгалтерия", "Отдел продаж") и табличная часть СоставГруппы с одной колонкой Пользователь (тип СправочникСсылка.Пользователи).
ГруппыПользователейСВ и кнопку "Пригласить группу".
Пример кода для команды "Пригласить группу":
// &НаСервере
Процедура ПригласитьГруппуНаСервере(ВыбраннаяГруппа, ТекущееОбсуждение)
Если ЗначениеЗаполнено(ВыбраннаяГруппа) И ТекущееОбсуждение <> Неопределено Тогда
// Получаем состав группы
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ГруппыПользователейСВСоставГруппы.Пользователь
|ИЗ
| Справочник.ГруппыПользователейСВ.СоставГруппы КАК ГруппыПользователейСВСоставГруппы
|ГДЕ
| ГруппыПользователейСВСоставГруппы.Ссылка = &СсылкаНаГруппу";
Запрос.УстановитьПараметр("СсылкаНаГруппу", ВыбраннаяГруппа);
РезультатЗапроса = Запрос.Выполнить();
Выборка = РезультатЗапроса.Выбрать();
Пока Выборка.Следующий() Цикл
// Получаем пользователя системы взаимодействия
ПользовательСВ = СистемаВзаимодействия.ПолучитьПользователя(Выборка.Пользователь);
// Добавляем в обсуждение
Если ПользовательСВ <> Неопределено Тогда
ТекущееОбсуждение.ДобавитьУчастника(ПользовательСВ);
КонецЕсли;
КонецЦикла;
// Не забываем записать изменения
ТекущееОбсуждение.Записать();
КонецЕсли;
КонецПроцедуры
Этот подход позволяет гибко управлять составом групп без изменения кода конфигурации. Если требуется готовая реализация групповых комнат и бесед без написания кода с нуля, подойдёт чат на управляемых формах с поддержкой комнат.
Проблема: Стандартный интерфейс не позволяет просмотреть всю историю сообщений по всем пользователям за период или сделать удобную выборку переписки, относящейся к конкретному заказу или контрагенту. Система взаимодействия хранит данные на отдельном сервере и является "черным ящиком" для аналитических запросов из 1С.
Решение: Организовать дублирование (зеркалирование) сообщений в специальный регистр сведений внутри информационной базы 1С. Как только данные окажутся в базе, их можно будет анализировать стандартными средствами — отчетами на СКД, динамическими списками и прямыми запросами.
Проанализируем шаги для реализации:
РегистрСведений, например, ИсторияСообщенийСВ.
ИдентификаторСообщения (Строка), ИдентификаторОбсуждения (Строка).ТекстСообщения (Строка неограниченной длины).Автор (СправочникСсылка.Пользователи), Дата (Дата и время), КонтекстОбсуждения (ДокументСсылка, СправочникСсылка и т.д., составной тип данных).Важный момент: этот подход создает дублирующую структуру данных, что незначительно увеличивает объем базы данных. Однако выгоды от возможности полноценного анализа переписки и контроля коммуникаций, как правило, перевешивают этот недостаток.
Все рассмотренные задачи — автоматический подбор участников, создание групп и анализ истории — полностью реализуемы. Ключевая особенность заключается в том, что они решаются не с помощью пользовательских настроек, а путем программирования во встроенном языке 1С.
Основными инструментами для разработчика являются:
СистемаВзаимодействия, для управления обсуждениями и их участниками.Такой подход позволяет глубоко интегрировать Систему взаимодействия в бизнес-процессы компании и адаптировать ее под любые уникальные требования. В качестве альтернативы собственной разработке можно использовать готовое решение чата в 1С с поддержкой обмена документами и файлами.