Информирование пользователя. Работа с объектом «СообщениеПользователю»

38 Comments

  1. FesenkoA

    Вот такие статьи я люблю. Вроде какая то фигня о сообщениях, но раскрывается потенциал платформы!

    Кстати у нас работает обработчик ожидания, который проверяет сообщения в рег.сведений. И новые выводит как «ПоказатьОповещениеПользователю». При том что сами записи в регистр создаются при создании нового тикета, новой заявки или вручную из любого документа другим пользователем или рег.заданием. Немного раздражает что приходится каждые 20 сек дергать сервер. Может у вас есть опыт работы с этим и подскажете более элегантное решение?

    Reply
  2. mifka186
    Команда удобна своей простатой

    Наверное простотой?

    Reply
  3. Goleff74

    (1)

    Сервер взаимодействия

    Reply
  4. ids79

    (2) Исправил, спасибо.

    Reply
  5. NeviD

    В БСП есть функция ОбщегоНазначенияКлиентСервер.СообщитьПользователю() — интерфейс над объектом СообщениеПользователю.

    Удобно использовать, к тому же рекомендуется в стандартах: https://its.1c.ru/db/v8std#content:2149184067:hdoc

    Reply
  6. pbabincev

    (1)

    Сервер взаимодействия на раз решает это

    Reply
  7. the1

    Срочно внести в Синтакс-помощник!

    Reply
  8. Inziya

    Спасибо! Все понятно и подробно описано.

    Reply
  9. Roin2512

    (1)Глянте в сторону подписок на события

    Reply
  10. Дмитрий74Чел

    Неточности:

    Путь к реквизитам объекта формы необходимо указывать задав ключевое слово «Объект».

    Сообщение.Поле = «Объект.Товары[1].Номенклатура»;

    «Объект» — обычно такое имя задано у ключевого реквизита формы документа или справочника. Но формы бывают и другие.И Имя реквизита может быть не «Объект», а например, «Список».

    Лучше написать «Путь к реквизитам, подчиненным основному реквизиту формы, необходимо прописывать указывая «полный путь» с имением основного реквизита, например…».

    Reply
  11. Дмитрий74Чел

    Вообще, идентичны варианты

    Сообщение.Поле = «Наименование»;
    Сообщение.ПутьКДанным = «Объект»;

    и

    Сообщение.Поле = «Объект.Наименование»;

    А еще не слова не сказано про типовые процедуры. Я сторонник всегда использовать типовой функционал. Вот как обычно в типовых используют СообщениеПользователю:

    //в модуле объекта [внимание: взводит флаг Отказ (если передан)]
    ОбщегоНазначенияКлиентСервер.СообщитьПользователю(«Текст ошибки»,
    ЭтотОбъект,//КлючДанных (ссылка на объект или ключ записи регистра), нужен при вызове не из формы
    «Договор», //Поле (наименование реквизита формы)
    ,     //ПутьКДанным (путь к реквизиту формы)
    Отказ);
    //в форме объекта
    ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтр(«ru = ‘Дублирование пременной'»),
    ,
    «Запросы[«+ИдентификаторСтроки+»].ИмяПеременнойЗапроса»,//таблица Запросы, строка ИдентификаторСтроки, колонка ИмяПеременнойЗапроса
    «Объект», //у какого реквизита формы искать поле, указанное выше
    Отказ);

    Показать

    Reply
  12. herfis

    Может автор подскажет, есть ли возможность вывести сообщение из модуля проведения документа в привязке к форме списка, из которой этот документ проводится? В свое время у меня это не получилось, хотя перепробовал вроде все варианты.

    Да и вообще в принципе хоть как-то отобразить сообщения из модуля проведения документа при проведении документа из списка без открытия его формы.

    Reply
  13. FesenkoA

    (9)Подписка на событие, при записи — все едино. Есть пользователь ШЕФ, он сидит в отчетах,или вообще ничего не делает, и пользователи 1,2,3…н, которые создают заявки. Заявка создана — у шефа уведомление. То есть разные клиентские сеансы.

    Reply
  14. ids79

    (8)Спасибо

    Reply
  15. ids79

    (13)Наверно только сервер взаимодействия

    Reply
  16. ids79

    (10)Согласен, может быть и другой основной реквизит формы.

    Reply
  17. ids79

    (11)

    Вообще, идентичны варианты

    Не всегда.

    Если сообщение необходимо привязать к реквизитам формы, которая закрыта, только первый вариант можно использовать.

    Если выводить сообщение в текущую форму, разницы нет.

    Reply
  18. FesenkoA

    (15)Сейчас бы я ее так бы и решил ) Но когда ее проектировали СВ то ли не было, то ли в какой то глубокой бете был…

    Reply
  19. ids79

    (12)Просто вывести сообщение в форме списка очень просто, так как сообщение сформированное в модуле документа будет выведено в текущем активном окне.

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

    Reply
  20. herfis

    (19)

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

    Вы правы. Это я напутал уже за давностью.

    Проблема возникает при нажатии дефолтной кнопки «Провести и закрыть» в открытой форме документа.

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

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

    Reply
  21. ids79

    (20)Я в статье писал про этот момент с закрытием форм с сообщением.

    Из модуля объекта вывести такое сообщение, я думаю, не получится.

    Если из клиентской процедуры формы, например «При записи» можно попробовать, передав идентификатор формы списка.

    Reply
  22. ids79

    (5)Спасибо за дополнение.

    Можно пользоваться и этой процедурой или «СообщитьПользователюВФорму».

    Но ничего нового они не добавляют, и не упрощают ввод, на мой взгляд.

    Да и результат будет зависеть от того, что разработчики решат сделать в конкретном релизе.

    По мне, удобнее использовать сам объект.

    Reply
  23. АлександрЯрославичъ

    Народ, а кто-то сталкивался с проблемой привязки сообщения к полю в процедуре, которая указана в описании оповещения?

    У меня не работает ((

    Reply
  24. MSK_Step

    (3)ага, к нему купить лицензии КОРП+сделать сервер отдельный,непонятно как это работать будет стабильно сейчас

    А это проверенный способ, который работает.

    Reply
  25. pavel_pss

    Спасибо, за сбор все информации в одном месте.

    Было бы не плохо, если бы еще добавил, как добавить в оповещения (значок колокольчика)

    Reply
  26. sikvel2012

    Почему — то забыли про ПолучитьСообщенияПользователю()

    и почему-то она не работает

    После Сообщение.Текст = ТекстСообщения но до Сообщение.Сообщить() пытаюсь получить ей массив накопленных сообщений, но он пустой, может что делаю не так, ткните носом.

    Reply
  27. ids79

    (26)

    ПолучитьСообщенияПользователю

    Эта функция выводит накопленные (поле Сообщение.Сообщить()) и еще не выведенные сообщения.

    Она характерна для регламентных или фоновых заданий. В обычном сеансе получить с помощью нее сообщения не получиться, на сколько я знаю. Так как они сразу будут выведены пользователям.

    Reply
  28. sikvel2012

    (27) странная конечно реализация, под сообщить подразумевается что оно выводится, зачем его ещё накапливать?

    Я из описания понял что она собирает сообщения которые ещё не выведены командой сообщить, то есть очередь сообщений, это было бы логично

    Reply
  29. max_zhilin

    Как вывести сообщение при открытии формы существующего документа?

    Например, сообщение о том, что редактировать документ не рекомендуется.

    В привязке к открываемой форме, естественно.

    UPD: выяснилась интересная особенность:

    если документ открывать из списка, то всё ОК, сообщение цепляется к форме открываемого документа.

    Но если документ открывать из истории, то сообщение цепляется к активной форме на экране.

    А если открытых форм, нет, то к «Начальной странице».

    Посему вопрос формулируется так: Как вывести сообщение при открытии формы существующего документа из меню истории (Ctrl+Shift+H)?

    Reply
  30. ids79

    (29)Если до открытия формы, то сообщение будет выведено в текущей форме. Новая ведь еще не открыта. Привязать его можно к открываемой — второй вариант из статьи.

    Reply
  31. max_zhilin

    (30)

    сообщение будет выведено в текущей форме. Новая ведь еще не открыта

    В ПриЧтенииНаСервере вызываю

        Сообщение = Новый СообщениеПользователю;
    Сообщение.Текст = ТекстСообщения;
    //Сообщение.ИдентификаторНазначения = Форма.УникальныйИдентификатор;
    Сообщение.Сообщить();

    Либо просто

        Сообщить(ТекстСообщения);

    При этом привязка к открываемой форме происходит. То же самое из ПриОткрытии.

    Но с вышеописанными особенностями: если из списка или из любой другой формы, то норм, но из истории ведет себя странно — привязывает к текущей активной форме. Может, баг платформы? 1С:Предприятие 8.3 (8.3.12.1714)

    Сообщение.ИдентификаторНазначения = Форма.УникальныйИдентификатор; — так тоже пробовал, поведение не меняется.

    Reply
  32. Madsos

    (4)Зачем исправил, было правильно?!

    Reply
  33. DmitryKSL

    Сообщение выходит и в поле и внизу окна, как сделать чтобы только в поле выходило?

    Reply
  34. ids79

    (33)На сколько я знаю, никак. Снизу всегда будет выводиться.

    Reply
  35. kassbar

    из обработки проведения не удалось вывести в форму сообщение с привязкой, перебрал возможно около 10 разных вариантов, например такой:

    Сообщение = Новый СообщениеПользователю;
    Сообщение.Текст = «текст»;
    Сообщение.УстановитьДанные(ЭтотОбъект);
    Сообщение.Поле = «Объект.Товары[1].Номенклатура»;
    Сообщение.Сообщить(); 

    или такой:

    Сообщение = Новый СообщениеПользователю;
    Сообщение.Текст = «текст»;
    Сообщение.УстановитьДанные(ЭтотОбъект);
    Сообщение.Поле = «Склад»;
    Сообщение.Сообщить(); 

    и много других..

    платформа 8.3.15.1656

    Reply
  36. ids79
    из обработки проведения не удалось вывести в форму сообщение с привязкой

    Сообщение = Новый СообщениеПользователю;

    Сообщение.Текст = «Текст сообщения»;

    Сообщение.Поле = «Товары[0].Номенклатура»;

    Сообщение.УстановитьДанные(ЭтотОбъект);

    Сообщение.Сообщить();

    Выводит все корректно. Платформа 8.3.15.1656, режим совместимости 8.3.12.

    Если форма документа была открыта, привязывается к ней.

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

    Reply
  37. kassbar

    (36) попробуйте в расширение (например в УТ 11 или КА 2.4) добавить нечто такое:

    &Перед(«ОбработкаПроведения»)

    Процедура Расш1_ОбработкаПроведения(Отказ, РежимПроведения)

    Сообщение = Новый СообщениеПользователю;

    Сообщение.Текст = «текст сообщения»;

    Сообщение.Поле = «Товары[0].Номенклатура»;

    Сообщение.УстановитьДанные(ЭтотОбъект);

    Сообщение.Сообщить();

    КонецПроцедуры

    Будет текст привязан к строке ТЧ или выведется внизу ? К слову сказать типовые сообщения при нехватке например товара в документе реализации тоже без привязки к строкам выводятся (УТ 11.4.10.62)

    Reply
  38. kassbar

    Единственное объяснение этому возможно кроется в окне предупреждения, которое генерирует платформа (или БСП), с текстом «Не удалось провести документ…».

    Может быть это окно каким-то образом блокирует собой отображение окон с привязкой к строкам, и в результате сообщения выводятся только внизу экрана.

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *