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