Как отправить оповещение в «колокольчик» конкретному пользователю в 1С?

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

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

Рассмотрим подробнее доступные механизмы решения этой задачи, начиная от современных штатных инструментов и заканчивая классическими обходными путями.

Метод 1: Использование Системы взаимодействия

Это наиболее правильный и современный способ организации мгновенных уведомлений между пользователями. Система взаимодействия позволяет пересылать сообщения напрямую в интерфейс программы. Для реализации этого метода необходимо, чтобы в информационной базе была настроена Система взаимодействия — в качестве альтернативы подойдёт согласование задач с уведомлениями в Telegram.

Проанализируем программный код, который позволяет создать неинтерактивное обсуждение и отправить сообщение конкретному адресату:


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

// Создаем новое сообщение
Сообщение = СистемаВзаимодействия.СоздатьСообщение(Обсуждение);
Сообщение.Текст = "У вас новое задание по счету №123";

// Определяем получателя (используем ИдентификаторПользователяИБ)
ИдентификаторПользователяИБ = ПользовательСсылка.ИдентификаторПользователяИБ;
ИдентификаторСВ = СистемаВзаимодействия.ПолучитьИдентификаторПользователя(ИдентификаторПользователяИБ);

// Добавляем получателя и записываем сообщение
Сообщение.Получатели.Добавить(ИдентификаторСВ);
Сообщение.Записать();

Важный нюанс: при таком подходе у пользователя загорится индикатор в панели обсуждений или «колокольчик», в зависимости от настроек программы. Это работает мгновенно («Push-технология»), не нагружая сервер постоянными запросами.

Метод 2: Менеджер уведомлений клиента (Платформа 8.3.26+)

Выясним причину, почему разработчики долго ждали версию 8.3.26. Именно в этом релизе платформа получила штатный объект МенеджерУведомленийКлиента. Теперь нам не обязательно использовать Систему взаимодействия для простых оповещений.

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

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

Этот метод станет стандартом для всех конфигураций, работающих на актуальных версиях платформы, так как он минимизирует затраты на написание кастомных «велосипедов» с регистрами и таймерами — для этого есть универсальная настройка оповещений по произвольным условиям.

Метод 3: Классическая схема «Регистр + Обработчик ожидания»

Если ваша платформа ниже версии 8.3.26 и Система взаимодействия не подключена, разберем проверенный временем «обходной путь». Суть заключается в реализации модели «Pull» (клиент сам забирает данные с сервера).

Пошагово это выглядит следующим образом:

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

Проанализируем пример кода для подключения обработчика:


Процедура ПриНачалеРаботыСистемы()
    // Проверка новых уведомлений каждые 5 минут (300 секунд)
    ПодключитьОбработчикОжидания("ПроверитьНовыеУведомления", 300);
КонецПроцедуры

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

Важный момент: не ставьте слишком маленький интервал (например, 1 секунду). Это может создать избыточную нагрузку на сервер БД, если в системе работает много пользователей. Оптимальный интервал — от 1 до 5 минут.

Метод 4: Использование механизмов БСП

Если ваша конфигурация построена на базе Библиотеки стандартных подсистем (БСП), рекомендуется не изобретать свои механизмы, а использовать подсистему «Текущие дела» или «Заметки». В БСП реализованы стандарты разработки (например, стандарт #std487), которые описывают правильное взаимодействие с пользователем.

Рассмотрим подробнее использование бизнес-процессов. Вместо простого уведомления часто эффективнее создать объект Задача. Она автоматически появится в списке задач пользователя на рабочем столе и будет висеть там до тех пор, пока пользователь её не выполнит или не отметит прочитанной. Это гарантирует, что важное событие не будет пропущено в потоке всплывающих окон.

Резюме и выбор решения

Выясним, какой метод выбрать именно вам:

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

← На главную