Как реализовать уведомление пользователя при создании события в 1С:УФФ?

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

В практике автоматизации бизнес-процессов часто возникает задача оперативного информирования сотрудников о новых задачах или событиях. Рассмотрим конкретную ситуацию, с которой столкнулся один из разработчиков: необходимо, чтобы при создании документа "Событие" в конфигурации "1С:Управление фирмой-франчайзи" (УФФ) одним пользователем, ответственному сотруднику, на которого "повесили" это событие, приходило уведомление.

Разберем подробно несколько способов решения этой задачи, от современных платформенных механизмов до классических приемов использования Библиотеки Стандартных Подсистем (БСП).

Понимание контекста: что такое УФФ?

Стоит отметить, что для решений на базе CRM существуют готовые интеграции, например, мессенджер Avito для 1С:CRM.

Прежде чем углубляться в код, определимся с объектом автоматизации. В обсуждении выяснилось, что аббревиатура УФФ расшифровывается как 1С:Управление фирмой-франчайзи. Это отраслевое решение для партнеров фирмы "1С", которое часто строится на базе каркаса CRM или УНФ. Следовательно, мы работаем в среде управляемых форм, где важна настройка доступности элементов формы у пользователей, и нам доступны механизмы БСП.

Способ 1. Использование Системы Взаимодействия (СВ)

Самым современным и рекомендованным способом организации мгновенных уведомлений в экосистеме 1С является Система Взаимодействия. Это механизм, позволяющий пользователям обмениваться сообщениями, звонками и файлами прямо внутри интерфейса 1С (см. отправка сообщений в систему уведомлений).

Проанализируем преимущества этого подхода:

  1. Мгновенность (Push): Сообщения приходят сразу, без необходимости ожидания регламентного задания.
  2. Нативность: Всплывающие окна ("тосты") интегрированы в интерфейс платформы.

Для реализации этого метода нам потребуется сервер взаимодействия. Здесь есть два пути:

Посмотрим, как программно отправить сообщение пользователю при записи документа. Допустим, мы находимся в модуле объекта документа Событие или в подписке на событие ПриЗаписи.


// Примерный алгоритм отправки сообщения через Систему Взаимодействия
Процедура ПриЗаписи(Отказ)
    
    Если ОбменДанными.Загрузка Тогда
        Возврат;
    КонецЕсли;

    // Проверяем, что ответственный изменился или это новый документ
    Если ЗначениеЗаполнено(Ответственный) И Ответственный <> ПараметрыСеанса.ТекущийПользователь Тогда
        
        // Нам нужно найти идентификатор пользователя системы взаимодействия
        ПользовательСВ = СистемаВзаимодействия.ПолучитьПользователя(Ответственный.ИдентификаторПользователяИБ);
        
        Если ПользовательСВ <> Неопределено Тогда
            
            // Создаем сообщение
            Сообщение = СистемаВзаимодействия.СоздатьСообщение();
            Сообщение.Текст = "Вам назначено новое событие: " + Представление;
            Сообщение.Получатели.Добавить(ПользовательСВ);
            
            // Можно добавить ссылку на сам документ
            Сообщение.Данные = Ссылка; 
            
            // Отправляем
            Сообщение.Записать();
            
        КонецЕсли;
        
    КонецЕсли;

КонецПроцедуры;

Этот код создаст чат или добавит сообщение в "Обсуждения", и у пользователя всплывет уведомление. Также полезным инструментом будет чат у объектов 1С на форме, позволяющий организовать оповещения. Это надежный способ, но он требует предварительной административной настройки сервера взаимодействия.

Способ 2. Новые возможности платформы 8.3.26+

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

Раньше сервер "не знал", где находится клиент, и не мог сам инициировать вызов. Теперь появился метод ОтправитьУведомление().

Разберем, как это работает. На сервере (например, при проведении документа) мы формируем уведомление:


// Код на сервере (в модуле документа или подписке)
Уведомление = Новый УведомлениеПрограммы;
Уведомление.Текст = "Внимание! Вам назначено событие №" + Номер;
Уведомление.Заголовок = "Новая задача";
Уведомление.URL = ПолучитьНавигационнуюСсылку(Ссылка);

// Опционально можно привязать к конкретному пользователю
// Для этого нужно знать идентификаторы сеансов пользователя или использовать механизм адресации
// В 8.3.26 механизм позволяет отправлять уведомления конкретным пользователям ИБ
Пользователь = Ответственный; // Ссылка на справочник Пользователи

// В реальном коде 8.3.26+ синтаксис может требовать уточнения получателя
// через менеджер взаимодействия или новые объекты платформы.
// Ключевая суть: Платформа сама доставляет пуш в сеанс пользователя.

На стороне клиента (в модуле управляемого приложения) это уведомление перехватывается специальным обработчиком ОбработкаУведомления. Это позволяет реализовать логику, не нагружая систему постоянными опросами сервера.

Способ 3. Классический метод через БСП (Регламентные задания)

Если у вас нет возможности поднять сервер взаимодействия, а версия платформы ниже 8.3.26, самым стабильным решением будет использование механизмов Библиотеки Стандартных Подсистем (БСП). В УФФ, как и в большинстве типовых конфигураций, встроена подсистема "Напоминания пользователя".

Суть метода заключается не в отправке сообщения напрямую в сеанс (что сложно сделать без СВ), а в создании записи в регистре сведений, которую "увидит" клиентское приложение получателя.

Рассмотрим алгоритм действий:

  1. При записи документа Событие мы программно создаем запись в регистре сведений НапоминанияПользователя.
  2. Устанавливаем время напоминания "прямо сейчас" или "через 1 минуту".
  3. В качестве пользователя указываем нашего Ответственного.

Пример программного создания напоминания:


// Процедура в модуле документа или подписке на событие
Процедура ПриЗаписи(Отказ)
    
    // Проверки на изменение ответственного...
    
    МенеджерЗаписи = РегистрыСведений.НапоминанияПользователя.СоздатьМенеджерЗаписи();
    МенеджерЗаписи.Пользователь = Ответственный;
    МенеджерЗаписи.ВремяСобытия = ТекущаяДата(); // Напоминание сработает при ближайшем опросе
    МенеджерЗаписи.Источник = Ссылка; // Ссылка на наше Событие
    МенеджерЗаписи.СрокНапоминания = ТекущаяДата();
    
    // Описание, которое увидит пользователь
    МенеджерЗаписи.Описание = "На вас назначено новое событие!";
    
    // Способ отображения
    МенеджерЗаписи.СпособУстановкиВремениНапоминания = Перечисления.СпособыУстановкиВремениНапоминания.ВУказанноеВремя;
    МенеджерЗаписи.ИнтервалВремениНапоминания = 0;
    
    МенеджерЗаписи.Записать();

КонецПроцедуры;

Как это работает для пользователя?
В конфигурациях с БСП на клиенте работает глобальный обработчик ожидания (обычно раз в минуту или раз в несколько минут), который опрашивает регистр напоминаний. Как только он найдет запись для текущего пользователя, на экране появится стандартное окно "Мои напоминания" (колокольчик).

Минусы метода: Это не мгновенно. Задержка зависит от настроек периода опроса напоминаний в системе (обычно от 1 до 5 минут).

Способ 4. Панель "Текущие дела"

Стоит также упомянуть идеологически правильный подход для экосистемы 1С. Вместо того чтобы отвлекать пользователя всплывающими окнами (которые часто раздражают и закрываются "на автомате"), можно использовать концепцию "Текущих дел".

В большинстве конфигураций на начальной странице есть виджет "Текущие дела" или "Мои задачи". При создании документа Событие система автоматически должна (если это настроено) создавать запись в реестре задач пользователя.

Мы рекомендуем проверить:

  1. Включено ли использование бизнес-процессов и задач в настройках программы.
  2. Настроена ли начальная страница пользователя так, чтобы он видел список своих активных событий.

В этом случае уведомление происходит пассивно: пользователь видит красный индикатор или счетчик (например, "Новые события: 1") на рабочем столе.

Резюме

Подведем итог. Выбор решения зависит от ваших технических возможностей и требований к срочности:

Для конфигурации УФФ наиболее органичным будет использование БСП (Напоминания) или Системы Взаимодействия, так как эти механизмы уже заложены в архитектуру типовых решений.

← На главную