Разработка полноценного чата внутри конфигураций на обычных формах (таких как УПП или старые редакции УТ) — задача нетривиальная. Основная сложность заключается в ограничениях интерфейса и отсутствии встроенных инструментов для работы в реальном времени, которые появились только в более поздних версиях платформы 8.3. Однако, проанализировав опыт разработчиков, мы можем выделить несколько эффективных стратегий внедрения мессенджера, который будет поддерживать ссылки на объекты, вложения и мгновенные уведомления.
Существует распространенное заблуждение, что Система взаимодействия (СВ) доступна только в управляемом приложении. На самом деле, начиная с определенных версий платформы 8.3, мы можем интегрировать функционал СВ в конфигурации на обычных формах. Рассмотрим, как это реализовать. Основная идея заключается в создании «мостика» между обычными формами и механизмом управляемых форм, в которых СВ работает нативно.
Для реализации этого метода проанализируем следующие шаги:
Главный плюс этого подхода — нативная поддержка навигационных ссылок e1cib/data/.... Чтобы ссылка открыла объект в обычном приложении, нам потребуется написать обработчик события при нажатии на ссылку, который будет использовать метод ПерейтиПоСсылке(). Рассмотрим пример кода для открытия документа по ссылке:
Процедура ОбработкаПереходаПоСсылке(НавигационнаяСсылка)
ПараметрыСсылки = ПолучитьПараметрыНавигационнойСсылки(НавигационнаяСсылка);
СсылкаНаОбъект = НайтиПоСсылке(ПараметрыСсылки.Значение);
Если Не СсылкаНаОбъект.Пустая() Тогда
ОткрытьФорму(СсылкаНаОбъект.ПолучитьФорму());
КонецЕсли;
КонецПроцедуры
Если штатная Система взаимодействия по каким-то причинам не подходит (например, из-за требований безопасности или необходимости работы на старых версиях платформы), проанализируем вариант с использованием внешних серверов сообщений. Чтобы избежать «тяжелых» запросов к базе данных через обработчик ожидания, мы должны использовать технологию Push или WebSockets.
Разберем архитектуру такого решения:
Выясним причину, почему это лучше стандартного регистра сведений. В обычном мессенджере на РС клиент опрашивает базу каждые 5-10 секунд, создавая нагрузку. В случае с WebSockets сервер сам «толкает» сообщение клиенту. Как только сообщение приходит в компоненту, она генерирует внешнее событие в 1С, которое мы обрабатываем в коде формы:
Процедура ВнешнееСобытие(Источник, Событие, Данные)
Если Источник = "MessengerComponent" И Событие = "NewMessage" Тогда
// Обновляем текст в поле HTML-документа
ЭлементыФормы.ПолеЧат.Документ.parentWindow.addNewMessage(Данные);
// Выводим всплывающее уведомление
ПоказатьОповещениеПользователя("Новое сообщение", , Данные);
КонецЕсли;
КонецПроцедуры
Одной из ключевых задач является поддержка ссылок на документы и справочники. В обычных формах ПолеТекстовогоДокумента не позволяет сделать текст кликабельным так же легко, как в вебе. Поэтому рассмотрим использование Поля HTML-документа как основного средства отображения.
Чтобы реализовать передачу ссылки на объект в чат, мы можем использовать уникальный идентификатор (GUID). Проанализируем процесс отправки ссылки:
<a href="1c-object://[GUID]">Документ Реализация №1</a>.Для работы со скриншотами и вставкой картинок из буфера обмена в обычных формах штатными средствами обойтись сложно. Рекомендуем использовать внешнюю компоненту на C#, которая умеет перехватывать содержимое буфера. Рассмотрим алгоритм:
.1CD или SQL-базу.Если бюджет и время ограничены, стоит рассмотреть интеграцию с готовыми решениями, такими как Mattermost или Rocket.Chat. Это мощные Open-source мессенджеры, которые можно развернуть внутри сети предприятия. Мы можем встроить их веб-интерфейс прямо в форму 1С через движок Chromium (используя компоненты типа CefSharp, так как встроенный IE в старых платформах не поддерживает современный JS).
Преимущества такого подхода:
Подводя итог, выбор решения зависит от ваших ресурсов. Если платформа 8.3 достаточно свежая, Система взаимодействия — самый логичный путь. Если же требуется максимальная кастомизация и независимость от механизмов 1С, связка WebSocket + HTML5 обеспечит наилучшую юзабельность и производительность для ваших пользователей.