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