Как организовать обработку нажатия на оповещение пользователя при запуске системы

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

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

Проблема использования модуля управляемого приложения

При попытке реализовать обработку нажатия в МодульУправляемогоПриложения через конструктор ОписаниеОповещения, разработчики часто получают ошибку: «Переменная не определена (ЭтотОбъект)» или «Переменная не определена (МодульПриложения)». Выясним причину этой ситуации. Модуль управляемого приложения — это не программный объект в классическом понимании, к нему нельзя обратиться по ссылке. В отличие от формы или обработки, у него нет контекста ЭтотОбъект, который можно было бы передать в конструктор оповещения.

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

Шаг 1. Создание и настройка общего модуля

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

  1. Создайте новый общий модуль (например, с именем ОповещенияКлиент).
  2. В свойствах модуля обязательно установите флаг Клиент (управляемое приложение).
  3. Флаг Глобальный устанавливать не рекомендуется — это замусоривает контекст приложения.
  4. Убедитесь, что флаг Сервер выключен, так как оповещения — это чисто клиентская сущность.

Шаг 2. Написание процедуры-обработчика

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


// В общем модуле ОповещенияКлиент
Процедура ОбработкаНажатияНаУведомление(ДополнительныеПараметры) Экспорт
    
    // Здесь описываем логику, например, открытие формы
    Если ДополнительныеПараметры <> Неопределено Тогда
        // Можно передать ссылку на объект или имя формы
        ОткрытьФорму(ДополнительныеПараметры.ИмяФормы, ДополнительныеПараметры.ПараметрыФормы);
    КонецЕсли;
    
КонецПроцедуры

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

Шаг 3. Вызов оповещения при начале работы системы

Теперь вернемся в МодульУправляемогоПриложения в процедуру ПриНачалеРаботыСистемы. Нам нужно создать объект ОписаниеОповещения, указав имя нашего общего модуля в виде строки. Посмотрим на пример реализации:


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

Альтернативный способ: Использование навигационных ссылок

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


СсылкаНаДокумент = ПолучитьНавигационнуюСсылку(ОбъектСсылка);
ПоказатьОповещениеПользователя("Новый приказ", СсылкаНаДокумент, "Нажмите для просмотра");

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

Важные нюансы и рекомендации

Рассмотрим несколько критических моментов, которые помогут сделать ваши оповещения профессиональными:

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

← На главную