Как программно выводить и управлять сообщениями в Центре оповещений 1С 8.3?

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

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

Базовый метод вывода оповещения

Для вывода уведомления в Центр оповещений используется процедура ПоказатьОповещениеПользователя. Этот метод доступен на клиенте. Разберем его синтаксис и основные параметры, чтобы понять, как система интерпретирует наши команды.

Проанализируем типовой пример кода, который выводит простое текстовое уведомление:


ТекстОповещения = "Обработка данных завершена успешно.";
ПоказатьОповещениеПользователя(ТекстОповещения, , "Всего обработано 150 строк", БиблиотекаКартинок.ИнформационныйШрифт);

В данном случае мы передаем основной текст, который увидит пользователь, и пояснение. Однако для полноценной работы этого часто недостаточно. Проанализируем ситуацию, когда нам нужно, чтобы пользователь мог не просто прочитать текст, но и открыть документ, о котором идет речь.

Использование навигационных ссылок

Одним из главных преимуществ Центра оповещений является возможность сделать сообщение кликабельным. Для этого используется параметр НавигационнаяСсылка. Если мы передадим в него ссылку на объект (например, Объект.Ссылка), платформа автоматически сформирует переход.

Посмотрим на пример реализации внутри цикла, когда нам нужно оповестить о создании нескольких документов:


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

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

Проблема очистки Центра оповещений

Часто разработчики сталкиваются с вопросом: как программно очистить список уведомлений? Выяснилось, что метод ОчиститьСообщения() здесь абсолютно бесполезен. Разберем почему.

В платформе 1С существует жесткое разделение:

  1. Панель сообщений (внизу): управляется методами Сообщить() и ОчиститьСообщения().
  2. Центр оповещений (колокольчик): управляется методом ПоказатьОповещениеПользователя().

На текущий момент прямого метода «ОчиститьВсеОповещения()» не существует. Центр оповещений позиционируется как личный лог пользователя, который он должен очищать самостоятельно. Однако существует техническая хитрость (трюк с ключом), позволяющая управлять конкретными записями.

Обходной путь: механизм «Ключа оповещения»

Если нам нужно не плодить новые записи, а обновлять существующее уведомление (или имитировать его скрытие), мы должны использовать параметр КлючОповещения. Рассмотрим, как это работает программно.

Когда вы вызываете ПоказатьОповещениеПользователя с указанным ключом, система ищет в списке уже существующее оповещение с таким же идентификатором. Если находит — заменяет его новым текстом и параметрами.


// Выводим первое сообщение с уникальным ключом
КлючПроцесса = "ЗагрузкаДанных_ID_123";
ПоказатьОповещениеПользователя("Загрузка началась...", , , , КлючПроцесса);

// Спустя время обновляем это же сообщение
ПоказатьОповещениеПользователя("Загрузка выполнена на 50%", , , , КлючПроцесса);

// Имитируем "удаление" или завершение: заменяем на пустое или финальное сообщение
ПоказатьОповещениеПользователя("Процесс завершен", , "Нажмите для скрытия", , КлючПроцесса);

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

Отличия при работе на мобильном клиенте

Рассмотрим нюансы работы с мобильной платформой. В мобильном клиенте 1С Центр оповещений тесно интегрирован с системными уведомлениями Android и iOS. Если приложение свернуто, вызов ПоказатьОповещениеПользователя может превратиться в стандартное Push-уведомление телефона. Для вывода системных оповещений пользователям на платформе Windows можно использовать инструмент для отображения уведомлений 1С в центре уведомлений Windows.

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

Рекомендации по использованию для длительных операций

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

Сформулируем правила хорошего тона при создании таких оповещений:

Помните о лимитах платформы: Центр оповещений хранит до 200 записей. При достижении этого предела старые сообщения удаляются автоматически по принципу очереди. Программного доступа к чтению истории этих сообщений у разработчика нет — это механизм «в одну сторону».

Итоги

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

← На главную