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