В современной разработке на платформе 1С:Предприятие 8.3 часто возникает задача оперативного оповещения руководителей или смежных отделов о проведении важных документов или изменении статусов заказов. Пользователи привыкли видеть «красную единичку» на иконке колокольчика, как в социальных сетях. Однако реализация такого механизма требует понимания различий между клиентскими оповещениями, подсистемами CRM и Системой взаимодействия — упростить задачу поможет модуль настройки уведомлений под бизнес-события без кода.
В рамках этой статьи мы разберем несколько способов реализации уведомлений, проанализируем примеры кода и выясним, почему стандартные методы иногда «не срабатывают» так, как ожидает разработчик — для решения этой задачи есть система автоматической рассылки напоминаний в 1С.
Это наиболее современный и рекомендуемый способ (помимо прямых уведомлений в Телеграмм со ссылкой на документ) вызвать появление индикатора на «колокольчике». Система взаимодействия — это встроенный в 1С мессенджер, который позволяет программно создавать обсуждения и отправлять сообщения конкретным пользователям.
Рассмотрим пример кода, который позволяет отправить сообщение в контексте конкретного объекта (например, документа), чтобы у получателя загорелся индикатор уведомления:
УстановитьПривилегированныйРежим(Истина);
// 1. Получаем навигационную ссылку на объект, чтобы пользователь мог перейти к нему из уведомления
НавигационнаяСсылка = ПолучитьНавигационнуюСсылку(ТекущийОбъект.Ссылка);
КонтекстОбсуждения = Новый КонтекстОбсужденияСистемыВзаимодействия(НавигационнаяСсылка);
МенеджерВзаимодействия = Новый МенеджерСистемыВзаимодействия;
// 2. Создаем или находим существующее обсуждение
Обсуждение = МенеджерВзаимодействия.СоздатьОбсуждение;
Обсуждение.КонтекстОбсуждения = КонтекстОбсуждения;
Обсуждение.Заголовок = "Уведомление о проведении документа: " + ТекущийОбъект;
Обсуждение.Ключ = Строка(ТекущийОбъект.Ссылка.УникальныйИдентификатор);
Обсуждение.Записать;
// 3. Формируем сообщение
Автор = ПараметрыСеанса.ТекущийПользователь;
СообщениеДляОбсуждения = МенеджерВзаимодействия.СоздатьСообщение(Обсуждение.Идентификатор);
СообщениеДляОбсуждения.Дата = ТекущаяДата();
СообщениеДляОбсуждения.Автор = СистемаВзаимодействия.ПолучитьИдентификаторПользователя(Автор.ИдентификаторПользователяИБ);
// 4. Добавляем получателей (массив пользователей из справочника Пользователи)
Для каждого СтрПолучатель Из МассивПолучателей Цикл
Идентификатор = СистемаВзаимодействия.ПолучитьИдентификаторПользователя(СтрПолучатель.ИдентификаторПользователяИБ);
СообщениеДляОбсуждения.Получатели.Добавить(Идентификатор);
КонецЦикла;
СообщениеДляОбсуждения.Текст = "Проведен важный документ. Проверьте данные.";
СообщениеДляОбсуждения.Записать;
Важные нюансы использования этого метода:
МенеджерСистемыВзаимодействия не будет выполнять отправку.Получатели. Простого создания сообщения в общем обсуждении недостаточно.Если ваша конфигурация построена на базе Библиотеки стандартных подсистем (БСП), например, КА 2.0 или ERP, мы можем использовать механизм напоминаний. Этот метод отличается тем, что вызывает не только «колокольчик», но и всплывающее окно в установленное время.
Проанализируем работу с регистром сведений НапоминанияПользователя. Записи в этом регистре обрабатываются специальным обработчиком ожидания на стороне клиента, который проверяет наступление времени события.
Для создания напоминания другому пользователю (например, руководителю) используется следующий подход:
Менеджер = РегистрыСведений.НапоминанияПользователя.СоздатьМенеджерЗаписи();
Менеджер.Пользователь = НужныйРуководитель; // Ссылка на справочник Пользователи
Менеджер.ВремяСобытия = ТекущаяДата() + 60; // Напомнить через минуту
Менеджер.Источник = СсылкаНаДокумент;
Менеджер.СрокНапоминания = ТекущаяДата();
Менеджер.Описание = "Необходимо проверить документ!";
Менеджер.СпособУстановкиВремени = Перечисления.СпособыУстановкиВремениНапоминания.ВсплывающееОкно;
Менеджер.Записать();
Преимущество этого метода в том, что он гарантированно сработает в типовом интерфейсе без настройки внешних серверов. Однако помните, что это именно «напоминание», а не мгновенный чат.
При использовании модуля 1С:CRM (интегрированного в КА 2.0) разработчики часто пытаются использовать регистр CRM_Оповещения. Выясним причину, по которой прямая запись в этот регистр может не давать визуального результата.
Механизм оповещений в CRM работает по следующей схеме:
Если вы создаете запись вручную через СоздатьМенеджерЗаписи, убедитесь, что заполнены все ключевые поля: ВидОповещения, Канал (должен быть установлен в значение «Напоминание»), Получатель и ДатаОповещения. Если ДатаОповещения установлена в будущее время, уведомление не появится до наступления этого момента.
Многие разработчики сталкиваются с проблемой: пользователь нажимает на «крестик» в уведомлении, и оно исчезает навсегда, хотя действие (проверка документа) не было выполнено. Это стандартное поведение платформы — сообщение считается «прочитанным».
Чтобы реализовать более надежное уведомление, рассмотрим использование Задач — для построения таких процессов есть модуль согласования документов и задач в Telegram. В отличие от сообщений в системе взаимодействия, задача будет висеть в списке «Мои задачи» до тех пор, пока пользователь не нажмет кнопку «Выполнено». Это лучший способ гарантировать, что руководитель действительно обратил внимание на документ.
Подведем итог нашему анализу:
Если вам нужно мгновенное уведомление («как в мессенджере»), используйте Систему взаимодействия (МенеджерСистемыВзаимодействия). Это обеспечит появление индикатора на колокольчике и возможность мгновенного перехода к объекту.
Если требуется гарантированное всплывающее окно в определенное время, лучше использовать механизмы БСП и регистр НапоминанияПользователя.
Для контроля исполнения используйте подсистему «Бизнес-процессы и задачи», так как обычное уведомление легко пропустить или случайно закрыть — организовать этот процесс поможет модуль настройки маршрутов согласования документов в 1С.