Особенности использования объекта СообщениеПользователю в управляемом приложении 1С 8.2

На платформе 1С 8.2, для информирования пользователей, предлагается использовать новый общий объект – СообщениеПользователю. Объект довольно простой, но есть несколько не очевидных особенностей его использования в управляемых формах, которые будут рассмотрены в данной статье.

Сразу отметим, что СообщениеПользователю можно использовать как на клиенте, так и на сервере(!). В случае если метод Сообщить() объекта СообщениеПользователю вызывается на сервере, то сообщение будет показано пользователю не сразу, а после того как отработает серверный вызов и управление будет передано обратно на клиент.

1). Использование СообщениеПользователю на клиенте, в форме элемента справочника, документа и других объектов. Для корректного отображения сообщения и его привязки к нужному полю формы, используется нижеследующий код, обратите внимание на инициализацию свойств ПутьКДанным и КлючДанных.

&НаКлиенте
Процедура СообщитьПользователю(Команда)
  Сообщение = Новый СообщениеПользователю;
  Сообщение.Текст = "Текст сообщения привязан к полю ИмяПоляФормы";
  Сообщение.Поле = "ИмяПоляФормы";
  Сообщение.ПутьКДанным = "Объект";
  Сообщение.КлючДанных = Объект.Ссылка;
  Сообщение.Сообщить();
КонецПроцедуры

2). Довольно часто необходимо вывести сообщение в обработке проведения документа, причем не только когда возникла ошибка при проведении, но и в том случае, когда документ успешно проведен. Проблема возникает когда пользователь использует команду “Провести и закрыть”. Сообщение привязывается к окну содержащему форму текущего документа, которое в случае успешного проведения тут же закрывается и пользователь его не видит. Все дело в том что метод Сообщить() объекта СообщениеПользователю выводит сообщение в АКТИВНОЕ окно, документ как правило открывается в дополнительном окне, которое в данном случае и является активным. Таким образом, что бы пользователь смог прочитать сообщение после закрытия формы документа, необходимо перед использованием метода Сообщить() активизировать основное окно управляемого приложения. Один из вариантов – сделать это в событии формы ПередЗаписью(), например так:

&НаКлиенте
Процедура ПередЗаписью(Отказ, ПараметрыЗаписи)
  ОкнаКлиентскогоПриложения = ПолучитьОкна();
  Для каждого ОкноКлиентскогоПриложения Из ОкнаКлиентскогоПриложения Цикл
    Если ОкноКлиентскогоПриложения.Основное Тогда
      ОкноКлиентскогоПриложения.Активизировать();
      Прервать;
    КонецЕсли;
  КонецЦикла; 
КонецПроцедуры

После этого в обработке проведения можно смело выводить сообщение, теперь оно будет привязано к основному окну, и пользователь сможет прочитать его даже после закрытия формы документа.

Процедура ОбработкаПроведения(Отказ, РежимПроведения)
  // .....
  Сообщение = Новый СообщениеПользователю;
  Сообщение.Текст = "Проведен документ " + Ссылка;
  Сообщение.КлючДанных = Ссылка;
  Сообщение.Сообщить();
  // .....
КонецПроцедуры

Предусмотрим случай, когда пользователь воспользовался командой “Провести”, а не “Провести и закрыть”, в этом случае форма документа остается открытой, но не активной, активизируем её:

&НаКлиенте
Процедура ПослеЗаписи(ПараметрыЗаписи)
  Если НЕ Окно = АктивноеОкно() Тогда
    Окно.Активизировать();
  КонецЕсли;
КонецПроцедуры

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

Комментарии:

  1. konde пишет:

    Фокус с сообщением в проведении не работает если окно документа открывается во вкладке а не в отдельном окне (главное окно и так активно, сообщения все равно подвязываются к закрывающейся форме). Платформа 8.2.16.

  2. borrman пишет:

    и как тогда реализовать?

  3. Антон пишет:

    Спасибо, натолкнули на решение! )

  4. Любовь пишет:

    И на такси то же не получается. платформа 8.3.5.1119. Окно сообщений закрывается вместе с окном формы.

Оставить комментарий