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