Как организовать комментарии и диалоги между исполнителями в 1С

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

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

Разберем основные подходы к решению этой задачи: от создания собственной подсистемы на регистрах сведений до использования готовых библиотек и штатной Системы взаимодействия.

Вариант 1. Разработка собственного механизма на Регистре сведений

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

Проанализируем структуру такого регистра сведений. В качестве измерений и ресурсов рекомендуем использовать следующий набор полей:

  1. Измерения:
    • Объект (ЛюбаяСсылка) — ссылка на бизнес-процесс, задачу или документ, к которому привязан диалог.
    • ДатаВремя (Дата) — точное время отправки сообщения (позволяет сортировать сообщения и очищать устаревшие данные).
    • Исполнитель (СправочникСсылка.Пользователи) — автор сообщения.
  2. Ресурсы:
    • ТекстСообщения (Строка неограниченной длины) — чистый текстовый вариант сообщения без HTML-тегов и оформления.
    • ТекстХранилище (ХранилищеЗначения) — форматированный текст сообщения или HTML-код с оформлением и вложениями.
    • Получатель (СправочникСсылка.Пользователи) — опционально, если требуется адресовать сообщение конкретному сотруднику.

Как правильно хранить и индексировать текст комментариев

Рассмотрим важную особенность платформы 1С: если хранить текст комментариев исключительно в ХранилищеЗначения (в виде двоичного потока или форматированного документа), штатный полнотекстовый поиск платформы не сможет проиндексировать эти данные. Это сделает невозможным быстрый поиск по истории переписки.

Поэтому рекомендуется разделять хранение данных:

  1. Для полнотекстового поиска и быстрого вывода простых списков используем ресурс с типом Строка неограниченной длины. В него записываем «сухой» текст сообщения.
  2. Для сохранения сложного оформления (выделение цветом, шрифты) и преобразования текста в HTML используем объект ФорматированныйДокумент, который сохраняется в ХранилищеЗначения.

Для программного получения HTML-кода из объекта ФорматированныйДокумент применяется следующий алгоритм:


ФорматированныйДокумент = Новый ФорматированныйДокумент;
// Заполнение документа или загрузка из хранилища...

ТекстHTML = "";
ТекстКартинки = Новый Структура;
ФорматированныйДокумент.ПолучитьHTML(ТекстHTML, ТекстКартинки);

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

Отображение диалога на форме

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

  1. Использование элемента «Поле HTML документа»: Позволяет красиво оформить чат (диалоговые облака, выделение авторов разными цветами, кликабельные ссылки). В управляемых формах поле HTML работает в режиме просмотра, поэтому для ввода нового сообщения под полем HTML размещают отдельный элемент ввода с типом ФорматированныйДокумент или обычной строкой.
  2. Использование «Динамического списка»: Если нужно простыми средствами выписать историю комментариев, создается динамический список с отбором по текущему объекту. В настройках динамического списка можно включить свойства АвтоОбновление и ПериодАвтоОбновления, что позволит автоматически получать новые комментарии без использования фоновых обработчиков ожидания.

Вариант 2. Использование подсистем БСП и 1С:Документооборот

Если конфигурация разработана с использованием Библиотеки Стандартных Подсистем (БСП) или интегрирована с «1С:Документооборот», не обязательно создавать механизмы с нуля. Рассмотрим готовые решения:

  1. Подсистема «Заметки и комментарии» (БСП): Позволяет привязывать произвольные заметки и текстовые комментарии к любым объектам системы с минимальными настройками.
  2. Подсистема «Взаимодействия» (БСП): Предоставляет полноценный механизм учета переписки (включая электронные письма, звонки и сообщения) с привязкой к предметам и отслеживанием статусов.
  3. Механизмы «1С:Документооборот»: Включают развитый функционал обсуждений, согласований и выполнения задач бизнес-процессов с сохранением полной истории решений и комментариев участников.

Вариант 3. Использование штатной Системы взаимодействия

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

Преимущества Системы взаимодействия:

  1. Поддержка контекстных обсуждений — переписка привязывается непосредственно к карточке задачи, бизнес-процессу или документу.
  2. Поддержка видеозвонков, обмена файлами и индикации статуса присутствия.
  3. Мгновенные уведомления пользователей без необходимости опрашивать базу через ПодключитьОбработчикОжидания.
  4. Возможность программного создания обсуждений через менеджер СистемаВзаимодействия:

// Пример программного создания контекстного обсуждения для объекта
КлючОбсуждения = СистемаВзаимодействия.СоздатьКлючОбсуждения(СсылкаНаОбъект);
Обсуждение = СистемаВзаимодействия.СоздатьОбсуждение();
Обсуждение.Ключ = КлючОбсуждения;
Обсуждение.Заголовок = "Обсуждение задачи: " + Строка(СсылкаНаОбъект);
Обсуждение.Записать();

Для работы Системы взаимодействия требуется либо бесплатная регистрация информационной базы в сервисе «1С:Диалог», либо установка локального «Сервера взаимодействия» на мощностях предприятия.

Резюме и рекомендации

Выбор архитектуры зависит от требований к проекту:

← На главную