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

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 не будет опубликован. Обязательные поля помечены *