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