0. ids79 5374 15.02.19 10:24 Сейчас в теме

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

Различные варианты и нюансы использования объекта СообщениеПользователю и другие способы информирования пользователя: без привязки к какой-либо форме и с выводом сообщения в отдельном окне.

Перейти к публикации

Комментарии
Избранное Подписка Сортировка: Древо развёрнутое
Свернуть все
1. FesenkoA 44 15.02.19 11:04 Сейчас в теме
Вот такие статьи я люблю. Вроде какая то фигня о сообщениях, но раскрывается потенциал платформы!
Кстати у нас работает обработчик ожидания, который проверяет сообщения в рег.сведений. И новые выводит как "ПоказатьОповещениеПользователю". При том что сами записи в регистр создаются при создании нового тикета, новой заявки или вручную из любого документа другим пользователем или рег.заданием. Немного раздражает что приходится каждые 20 сек дергать сервер. Может у вас есть опыт работы с этим и подскажете более элегантное решение?
TreeDogNight; gradi; rpgshnik; +3 Ответить
3. Goleff74 165 15.02.19 12:23 Сейчас в теме
(1)
Сервер взаимодействия
24. MSK_Step 19 01.07.19 10:30 Сейчас в теме
(3)ага, к нему купить лицензии КОРП+сделать сервер отдельный,непонятно как это работать будет стабильно сейчас
А это проверенный способ, который работает.
6. pbabincev 115 17.02.19 01:32 Сейчас в теме
(1)
Сервер взаимодействия на раз решает это
9. Roin2512 28 20.02.19 11:52 Сейчас в теме
(1)Глянте в сторону подписок на события
13. FesenkoA 44 20.02.19 13:23 Сейчас в теме
(9)Подписка на событие, при записи - все едино. Есть пользователь ШЕФ, он сидит в отчетах,или вообще ничего не делает, и пользователи 1,2,3...н, которые создают заявки. Заявка создана - у шефа уведомление. То есть разные клиентские сеансы.
15. ids79 5374 20.02.19 16:58 Сейчас в теме
(13)Наверно только сервер взаимодействия
18. FesenkoA 44 20.02.19 17:39 Сейчас в теме
(15)Сейчас бы я ее так бы и решил ) Но когда ее проектировали СВ то ли не было, то ли в какой то глубокой бете был...
2. mifka186 8 15.02.19 11:20 Сейчас в теме
Команда удобна своей простатой

Наверное простотой?
Cmapnep; АлександрЯрославичъ; YPermitin; TreeDogNight; accounting_cons; kuzyara; Ibrogim; nbondarenko; mrmasson; catv; +10 Ответить
4. ids79 5374 15.02.19 12:44 Сейчас в теме
32. Madsos 27.09.19 14:16 Сейчас в теме
(4)Зачем исправил, было правильно?!
5. NeviD 15.02.19 13:32 Сейчас в теме
В БСП есть функция ОбщегоНазначенияКлиентСервер.СообщитьПользователю() - интерфейс над объектом СообщениеПользователю.
Удобно использовать, к тому же рекомендуется в стандартах: https://its.1c.ru/db/v8std#content:2149184067:hdoc
wowik; АлександрЯрославичъ; TreeDogNight; Somebody1; yufan; MCV; sm.artem; WhiteOwl; jif; +9 Ответить
22. ids79 5374 23.02.19 12:58 Сейчас в теме
(5)Спасибо за дополнение.
Можно пользоваться и этой процедурой или "СообщитьПользователюВФорму".
Но ничего нового они не добавляют, и не упрощают ввод, на мой взгляд.
Да и результат будет зависеть от того, что разработчики решат сделать в конкретном релизе.
По мне, удобнее использовать сам объект.
7. the1 536 18.02.19 09:10 Сейчас в теме
Срочно внести в Синтакс-помощник!
8. Inziya 20.02.19 06:46 Сейчас в теме
Спасибо! Все понятно и подробно описано.
14. ids79 5374 20.02.19 16:52 Сейчас в теме
10. Дмитрий74Чел 187 20.02.19 11:59 Сейчас в теме
Неточности:
Путь к реквизитам объекта формы необходимо указывать задав ключевое слово «Объект».
Сообщение.Поле = "Объект.Товары[1].Номенклатура";

"Объект" - обычно такое имя задано у ключевого реквизита формы документа или справочника. Но формы бывают и другие.И Имя реквизита может быть не "Объект", а например, "Список".
Лучше написать "Путь к реквизитам, подчиненным основному реквизиту формы, необходимо прописывать указывая "полный путь" с имением основного реквизита, например...".
16. ids79 5374 20.02.19 17:01 Сейчас в теме
(10)Согласен, может быть и другой основной реквизит формы.
11. Дмитрий74Чел 187 20.02.19 12:12 Сейчас в теме
Вообще, идентичны варианты
Сообщение.Поле = "Наименование";
Сообщение.ПутьКДанным = "Объект";

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


А еще не слова не сказано про типовые процедуры. Я сторонник всегда использовать типовой функционал. Вот как обычно в типовых используют СообщениеПользователю:
//в модуле объекта [внимание: взводит флаг Отказ (если передан)]
	ОбщегоНазначенияКлиентСервер.СообщитьПользователю("Текст ошибки",                
								ЭтотОбъект,//КлючДанных (ссылка на объект или ключ записи регистра), нужен при вызове не из формы
								"Договор", //Поле (наименование реквизита формы)
								,		   //ПутьКДанным (путь к реквизиту формы)
								Отказ);
//в форме объекта
ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтр("ru = 'Дублирование пременной'"),
								,
								"Запросы["+ИдентификаторСтроки+"].ИмяПеременнойЗапроса",//таблица Запросы, строка ИдентификаторСтроки, колонка ИмяПеременнойЗапроса
								"Объект", //у какого реквизита формы искать поле, указанное выше
								 Отказ);
Показать
Artorg; klaus38; MCV; +3 Ответить
17. ids79 5374 20.02.19 17:05 Сейчас в теме
(11)
Вообще, идентичны варианты

Не всегда.
Если сообщение необходимо привязать к реквизитам формы, которая закрыта, только первый вариант можно использовать.
Если выводить сообщение в текущую форму, разницы нет.
12. herfis 363 20.02.19 12:22 Сейчас в теме
Может автор подскажет, есть ли возможность вывести сообщение из модуля проведения документа в привязке к форме списка, из которой этот документ проводится? В свое время у меня это не получилось, хотя перепробовал вроде все варианты.
Да и вообще в принципе хоть как-то отобразить сообщения из модуля проведения документа при проведении документа из списка без открытия его формы.
19. ids79 5374 22.02.19 11:07 Сейчас в теме
(12)Просто вывести сообщение в форме списка очень просто, так как сообщение сформированное в модуле документа будет выведено в текущем активном окне.
А вот привязать его к реквизитам формы списка не получится, только к реквизитам формы документа.
20. herfis 363 22.02.19 12:16 Сейчас в теме
(19)
Просто вывести сообщение в форме списка очень просто, так как сообщение сформированное в модуле документа будет выведено в текущем активном окне.

Вы правы. Это я напутал уже за давностью.
Проблема возникает при нажатии дефолтной кнопки "Провести и закрыть" в открытой форме документа.
В этом случае сообщение из модуля проведения адресуется форме документа, которая сразу же закрывается и пользователь в результате сообщения не видит.
Не получалось переадресовать это сообщение из формы документа в форму списка, из которого она открывалась.
21. ids79 5374 23.02.19 12:51 Сейчас в теме
(20)Я в статье писал про этот момент с закрытием форм с сообщением.
Из модуля объекта вывести такое сообщение, я думаю, не получится.
Если из клиентской процедуры формы, например "При записи" можно попробовать, передав идентификатор формы списка.
23. АлександрЯрославичъ 04.06.19 12:02 Сейчас в теме
Народ, а кто-то сталкивался с проблемой привязки сообщения к полю в процедуре, которая указана в описании оповещения?
У меня не работает ((
25. pavel_pss 264 01.07.19 15:33 Сейчас в теме
Спасибо, за сбор все информации в одном месте.

Было бы не плохо, если бы еще добавил, как добавить в оповещения (значок колокольчика)
26. sikvel2012 94 10.09.19 13:00 Сейчас в теме
Почему - то забыли про ПолучитьСообщенияПользователю()

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

После Сообщение.Текст = ТекстСообщения но до Сообщение.Сообщить() пытаюсь получить ей массив накопленных сообщений, но он пустой, может что делаю не так, ткните носом.
27. ids79 5374 10.09.19 14:22 Сейчас в теме
(26)
ПолучитьСообщенияПользователю

Эта функция выводит накопленные (поле Сообщение.Сообщить()) и еще не выведенные сообщения.
Она характерна для регламентных или фоновых заданий. В обычном сеансе получить с помощью нее сообщения не получиться, на сколько я знаю. Так как они сразу будут выведены пользователям.
sikvel2012; +1 Ответить
28. sikvel2012 94 10.09.19 16:49 Сейчас в теме
(27) странная конечно реализация, под сообщить подразумевается что оно выводится, зачем его ещё накапливать?

Я из описания понял что она собирает сообщения которые ещё не выведены командой сообщить, то есть очередь сообщений, это было бы логично
user717534; +1 Ответить
47. FlyVodolaz 16.05.20 01:17 Сейчас в теме
(26)
После Сообщение.Текст = ТекстСообщения но до Сообщение.Сообщить() пытаюсь получить ей массив накопленных сообщений, но он пустой, может что делаю не так, ткните носом.


После Сообщение.Текст = ТекстСообщения но до Сообщение.Сообщить() не может быть никакого массива. Откуда он? Это единичный объект.
А функция ПолучитьСообщенияПользователю() как раз ловит все сообщения которые вызвали Сообщение.Сообщить(), но еще не показаны. Показываются сообщения только после завершения текущего вызова. Например следующий код перехватит все сообщения и они будут в массиве, а не выведены на экран.
	
Для Ин = 1 По 100 Цикл
	СообщениеПользователю = Новый СообщениеПользователю;
	СообщениеПользователю.Текст = Ин;
	СообщениеПользователю.Сообщить();
КонецЦикла;
А = ПолучитьСообщенияПользователю(Истина);


Зачем их перехватывать? Разные причины. Например вызываем проведение документа или выполнение какой обработки, которые ругаются сообщениями. И нас это устраивает. Но может потребоваться например пакетная обработка и кроме или вместо сообщений мы хотим получить файл с логом или записать в журнал регистрации. Соответственно после вызова мы просто получаем массив сообщений, оставляя или удаляя стандартный вывод, и делаем с этим массивом что хотим.
29. max_zhilin 16.09.19 13:40 Сейчас в теме
Как вывести сообщение при открытии формы существующего документа?
Например, сообщение о том, что редактировать документ не рекомендуется.
В привязке к открываемой форме, естественно.

UPD: выяснилась интересная особенность:
если документ открывать из списка, то всё ОК, сообщение цепляется к форме открываемого документа.
Но если документ открывать из истории, то сообщение цепляется к активной форме на экране.
А если открытых форм, нет, то к "Начальной странице".

Посему вопрос формулируется так: Как вывести сообщение при открытии формы существующего документа из меню истории (Ctrl+Shift+H)?
30. ids79 5374 16.09.19 13:52 Сейчас в теме
(29)Если до открытия формы, то сообщение будет выведено в текущей форме. Новая ведь еще не открыта. Привязать его можно к открываемой - второй вариант из статьи.
31. max_zhilin 16.09.19 14:03 Сейчас в теме
(30)
сообщение будет выведено в текущей форме. Новая ведь еще не открыта

В ПриЧтенииНаСервере вызываю
				Сообщение = Новый СообщениеПользователю;
				Сообщение.Текст = ТекстСообщения;
				//Сообщение.ИдентификаторНазначения = Форма.УникальныйИдентификатор;
				Сообщение.Сообщить();
Либо просто
				Сообщить(ТекстСообщения);
При этом привязка к открываемой форме происходит. То же самое из ПриОткрытии.
Но с вышеописанными особенностями: если из списка или из любой другой формы, то норм, но из истории ведет себя странно - привязывает к текущей активной форме. Может, баг платформы? 1С:Предприятие 8.3 (8.3.12.1714)

Сообщение.ИдентификаторНазначения = Форма.УникальныйИдентификатор; - так тоже пробовал, поведение не меняется.
33. DmitryKSL 152 15.10.19 10:00 Сейчас в теме
Сообщение выходит и в поле и внизу окна, как сделать чтобы только в поле выходило?
34. ids79 5374 15.10.19 10:52 Сейчас в теме
(33)На сколько я знаю, никак. Снизу всегда будет выводиться.
35. kassbar 123 13.11.19 20:18 Сейчас в теме
из обработки проведения не удалось вывести в форму сообщение с привязкой, перебрал возможно около 10 разных вариантов, например такой:
Сообщение = Новый СообщениеПользователю;
			Сообщение.Текст = "текст";
			Сообщение.УстановитьДанные(ЭтотОбъект);
			Сообщение.Поле = "Объект.Товары[1].Номенклатура";
			Сообщение.Сообщить(); 

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

и много других..
платформа 8.3.15.1656
36. ids79 5374 14.11.19 07:23 Сейчас в теме
из обработки проведения не удалось вывести в форму сообщение с привязкой


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

Выводит все корректно. Платформа 8.3.15.1656, режим совместимости 8.3.12.
Если форма документа была открыта, привязывается к ней.
Если проведение выполнялось из формы списка, сообщение выводится в форме списка. При двойном щелчке, открывается форма документа и привязывается корректно.
37. kassbar 123 14.11.19 18:38 Сейчас в теме
(36) попробуйте в расширение (например в УТ 11 или КА 2.4) добавить нечто такое:
&Перед("ОбработкаПроведения")
Процедура Расш1_ОбработкаПроведения(Отказ, РежимПроведения)

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

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

Будет текст привязан к строке ТЧ или выведется внизу ? К слову сказать типовые сообщения при нехватке например товара в документе реализации тоже без привязки к строкам выводятся (УТ 11.4.10.62)
38. kassbar 123 15.11.19 22:30 Сейчас в теме
Единственное объяснение этому возможно кроется в окне предупреждения, которое генерирует платформа (или БСП), с текстом "Не удалось провести документ...".
Может быть это окно каким-то образом блокирует собой отображение окон с привязкой к строкам, и в результате сообщения выводятся только внизу экрана.
39. MaCCapAkIII 19.01.20 16:41 Сейчас в теме
Подскажите пожалуйста как выводить форматированную строку в СообщениеПользователю()?
фСтрокаТовара = Новый ФорматированнаяСтрока(Строка(нТовары[0].Номенклатура), Новый Шрифт(,, Истина));
		
		Сообщение = Новый СообщениеПользователю;
		Сообщение.Текст = "Номенклатура " 
			+ фСтрокаТовара
			+ ?(нТовары[0].ХарактеристикаНоменклатуры = "Не используется", "", " со значением характеристики " + нТовары[0].ХарактеристикаНоменклатуры)
			+ " в исходном документе не найдена. Товар подобран в конец списка!";
		Сообщение.Сообщить();
Показать


Такая конструкция выводит неформатированное значение. Пробовал передавать составную строку, в составе которой есть форматированная, в БСП ОбщегоНазначенияКлиент.СообщитьПользователю() - аналогично без результатов.
40. ids79 5374 20.01.20 14:22 Сейчас в теме
(39) Тип реквизита "Текст" объекта СообщениеПользователю - только строка.
MaCCapAkIII; +1 Ответить
41. Barok 02.03.20 20:57 Сейчас в теме
А как узнать, если сообщения на форме и если возможно получить их содержание?
42. Stas-ch 35 11.03.20 17:28 Сейчас в теме
Внешняя обработка, на форме есть таблица, можно ли привязать сообщение:
- к строке таблицы?
- к конкретной колонке строки таблицы?
43. ids79 5374 12.03.20 15:17 Сейчас в теме
(42)Я не пробовал так делать, но проблем не вижу.
44. Stas-ch 35 13.03.20 11:10 Сейчас в теме
(43) Проблема в отсутствии Объекта
45. ids79 5374 14.03.20 07:52 Сейчас в теме
(44)Не вижу проблемы. Привязывайте к реквизиту формы.
46. Goleff74 165 28.03.20 15:48 Сейчас в теме
Добрый день.
Есть обработка. Есть ТЧ Формы (не объекта). На форму динамически выводятся ПоляВвода, привязанные к колонкам строк ТЧ. Извращение, но так надо. Никак в итоге не получается привязать сообщение пользователю к таким полям ввода. Как это можно реализовать?
Поле = "Таблица[0].Колонка" - не работает.
Поле = "<Имя элемента поля ввода>" и ПутькДанными = "Элементы" не работает.
Что еще попытаться сделать?
Оставьте свое сообщение
Новые вопросы с вознаграждением
Автор темы объявил вознаграждение за найденный ответ, его получит тот, кто первый поможет автору.

Вакансии

Специалист 1 категории (Программист 1С)
Фрязино
зарплата от 110 000 руб.
Полный день

Автор новостных обзоров на тему 1С и бухучета
Санкт-Петербург
По совместительству

Специалист 1 категории (Методист-аналитик 1С)
Фрязино
зарплата от 100 000 руб.
Полный день

Главный архитектор 1С
Москва
зарплата от 200 000 руб. до 300 000 руб.
Полный день

Программист 1С (Оперативный учет)
Санкт-Петербург
зарплата от 120 000 руб.
Полный день