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

01.07.19

Задачи пользователя - Адаптация типовых решений

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

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

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

Объект также можно использовать как на клиенте так и на сервере. Основным преимуществом перед командой «Сообщить», является возможность привязки сообщений к реквизитам формы. Дополнительно, при нажатии на текст сообщения, можно открывать новую форму с привязкой сообщения к ее реквизитам. Однако, следует понимать, что основным назначением объекта является информирование об ошибках, так как сообщение, привязанное к реквизитам формы всегда имеет заголовок  «Ошибка»:

Сообщение пользователю об ошибке

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

 

Вариант 1. Вывод сообщения в текущую активную форму с привязкой к ее элементам

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

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

Сообщение.Поле = "РеквизитФормы";

Можно прикрепить сообщение к строке табличной части объекта:

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

Следует иметь в виду, что сообщение всегда выводится в текущую активную форму. Даже в том случае, если сообщение формируется в другой форме, но она еще не открыта.

Например, при обработке события формы «ПриОткрытии» можно выполнить проверку некоторого условия и выводить сообщение об ошибке не открывая форму. Сообщение будет выведено в форму из которой выполнялось открытие новой формы.

 

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

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

Поле – наименование реквизита без указания ключевого слова «Объект».

КлючДаных – ссылка на объект дополнительной формы, к реквизиту которой требуется привязать сообщение. Система попробует найти открытую форму по значению стандартного параметра формы «Ключ». Если форма не будет найдена, будет открыта новая.

ПутьКДанным – имя основного реквизита формы, через который можно получить доступ к реквизитам объекта.

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

 

Вариант 3. Вывод сообщения в форму, которая не является активной

ПараметрыФормы = Новый Структура;
ПараметрыФормы.Вставить("Ключ", Объект.ОсновнойДоговор);
Форма = ОткрытьФорму("Справочник.Договоры.ФормаОбъекта",
ПараметрыФормы, ЭтаФорма);

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

УникальныйИдентификатор – уникальный идентификатор формы, в которой будет выведено сообщение.

Сообщение может быть привязано как к реквизитам объекта, так и к остальным реквизитам формы.

 

Вариант 4. Совмещение второго и третьего вариантов. Вывод сообщения не в текущую форму, с привязкой к реквизиту в третьей форме

ПараметрыФормы = Новый Структура;
ПараметрыФормы.Вставить("Ключ", Объект.Контрагент);
Форма = ОткрытьФорму("Справочник.Контрагенты.ФормаОбъекта", ПараметрыФормы, ЭтаФорма);

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

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

 

Вариант 5. Вывод сообщения из модуля объекта

Для вывода сообщения из модуля объекта, можно использовать следующий синтаксис:

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

Сообщение будет выведено и привязано к реквизитам корректно, причем параметры: «КлючДанных» и «ПутьКДанным» можно опустить, указав в параметре «Поле» полный путь к данным формы. 

Важно. Без указания параметров: «КлючДанных» и «ПутьКДанным» сообщение будет привязано к реквизитам формы только в том случае, если форма объекта открыта и является активной . Однако, код процедуры модуля объекта может быть выполнен и без открытия формы. В этом случае сообщение будет выведено в текущей активной форме. И, чтобы при нажатии на тексте сообщения, открывалась форма объекта с привязкой сообщения к реквизитам формы (например при проведении документа из формы списка), должны быть заполнены параметры: «КлючДанных» и «ПутьКДанным». Параметр «Поле» в этом случае, должен содержать наименование реквизита объекта.

Также, как и на клиенте, есть возможность привязать сообщение к реквизитам формы объекта, который не является текущим. Для этого необходимо присвоить параметру «КлючДанных» ссылку на объект:

Сообщение.КлючДанных = ОсновнойДоговор;

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

Однако, в модуле объекта, более корректно использовать метод объекта «УстановитьДанные» с указанием объекта, к которому требуется привязать сообщение:

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

По своей сути, данный метод устанавливает значения для параметров: «КлючДанных» и «ПутьКДанным». Ключу данных будет присвоена ссылка на объект, а вот установка параметра «ПутьКДанным» происходит несколько сложнее. Дело в том, что работа с объектом может производится из разных форм. Имя основного реквизита формы, в общем случае, может отличатся от стандартного «Объект». Метод «УстановитьДанные» определяет имя основного реквизита формы по установленному соответствию. Причем, при записи объекта это соответствие устанавливается автоматически. В тех случаях, когда автоматического сопоставления нет, его необходимо указать явно с помощью метода «УстановитьСоответствиеОбъектаИРеквизитаФормы». Например, необходимо выполнить какие-либо действия с объектом, привязанным к текущей форме, и вывести в процессе этих действий сообщение:

//Серверная процедура в модуле  формы
&НаСервере
Процедура ОбработкаОбъекта()
       КонтрагентОбъект = ДанныеФормыВЗначение(Объект, Тип("СправочникОбъект.Контрагенты"));
       УстановитьСоответствиеОбъектаИРеквизитаФормы (КонтрагентОбъект, "Объект");
       КонтрагентОбъект.ВыполнитьРаботуСОбъектом();
КонецПроцедуры
 
//Процедура в модуле объекта
Процедура ВыполнитьРаботуСОбъектом() Экспорт
      ……

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

 

Оповещение пользователя без привязки к конкретной форме

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

Метод «ПоказатьОповещениеПользователю» выводит всплывающее оповещение в нижний часть экрана, которое не привязано к какой-либо открытой форме:

Вывод оповещения пользователю

Синтаксис метода в справке:

ПоказатьОповещениеПользователя(<Текст>, 
                               <ДействиеПриНажатии>, 
                               <Пояснение>, 
                               <Картинка>, 
                               <СтатусОповещенияПользователя>, 
                               <КлючУникальности>)

Первый параметр «Текст» вводит в заблуждение, на самом деле – это заголовок окна оповещения.

Второй параметр «ДействиеПриНажатии» может содержать либо навигационную ссылку, по которой необходимо перейти при нажатии на сообщении, либо описание процедуры оповещения.

Параметр «Пояснение» - это как раз текст оповещения.

Дополнительно, есть возможность вывести картинку, указать важность оповещения и задать ключ уникальности для поиска уже открытых оповещений. 

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

Команда «Состояние» выводит информацию в специальную панель состояния. Ее следует использовать для информирования пользователя о ходе выполнения кого либо действия. Дополнительно есть возможность показать прогресс выполнения:

Состояние(«Выполнение операции, 50, «Операция выполняется»);

Вывод состояния с прогресом

 

Вывод сообщения пользователю в отдельном окне

В некоторых случаях требуется вывести сообщение пользователю в отдельном окне. Для этой цели можно использовать как собственную разработанную форму, так и не модальный метод глобального контекста «ПоказатьПредупрежедение». (В отличие от модальных методов, данный не ожидает выполнения действия с формой, а продолжает выполнение программного кода). Вызов метода возможен только на клиенте

В качестве первого параметра необходимо указать процедуру - описание оповещения. В качестве второго – текст выводимого сообщения. Причем, в качестве текста сообщения можно использовать форматированную строку. Это позволяет вывести в тексте сообщения ссылку на какой-либо объект:

СтрокаСообщения = Новый ФорматированнаяСтрока(НовыйДоговор.Наименование,,,, 
                                              ПолучитьНавигационнуюСсылку(НовыйДоговор.Ссылка));
ТекстСообщения = Новый ФорматированнаяСтрока("Создан новый договор: """, СтрокаСообщения,"""");
ОписаниеОповещения = новый ОписаниеОповещения("ПредупрежедениеЗавершение",ЭтаФорма);
ПоказатьПредупреждение(ОписаниеОповещения, ТекстСообщения,, "Заголовок сообщения");


&НаКлиенте
Процедура ПредупрежедениеЗавершение(Параметры) Экспорт
       //Обработка закрытия предупреждения
КонецПроцедуры    

Вывод предупреждения      

 

Если информация оказалась для Вас полезной, ставьте звездочку J

 

Другие мои статьи про механизмы платформы 1С

  1. Создание отчетов с помощью СКД - основные понятия и элементы
  2. Функциональные опции 1С 8.3 – все возможные варианты использования
  3. Автоматические и управляемые блокировки. Разделение итогов

 

вывод сообщения пользователю показать оповещение пользователя состояния предупреждение

См. также

Табличная часть в доп. реквизитах и формирование таблиц в шаблоне docx для 1С:ДО 3.0

Адаптация типовых решений Платформа 1С v8.3 1С:Документооборот Россия Платные (руб)

Расширение конфигурации для «1С:Документооборот КОРП», редакция 3.0. позволяет: 1.использовать произвольные табличные части в качестве дополнительных реквизитов к документу; 2 использовать произвольные табличные части в шаблонах в формате docx для автоматического заполнения таблиц.

29400 руб.

29.06.2023    4371    8    4    

16

Расширение для 1С:УНФ. Автоматическое снятие резервов в Заказах покупателей

Логистика, склад и ТМЦ Адаптация типовых решений Платформа 1С v8.3 1С:Управление нашей фирмой 1.6 1С:Управление нашей фирмой 3.0 Россия Управленческий учет Платные (руб)

Чтобы не допустить путаницы с обещаниями клиентам и для четкого контроля исполнения заказов мы используем резервирование товаров. Мы доработали УНФ, чтобы она автоматически отменяла старые резервы и не мешала эффективно продавать.

7200 руб.

02.08.2023    2897    4    0    

19

Создать на основании - своя кнопка (БСП). Проблема двух подменю Создать на основании

БСП (Библиотека стандартных подсистем) Адаптация типовых решений Платформа 1С v8.3 1С:ERP Управление предприятием 2 Бесплатно (free)

Понадобилось в подменю "Создать на основании" добавить свою команду, которая открывает обработку. В процессе доработок появилась проблема двух подменю "Создать на основании". В статье о том, как решились проблемы.

01.03.2024    1114    dimanich70    6    

13

Доработка отчета "Связанные документы" (структура подчиненности) для вывода объектов из любого расширения

Адаптация типовых решений Платформа 1С v8.3 1С:Управление торговлей 11 Россия Абонемент ($m)

Доработка типового отчета "Связанные документы" позволяет просто и быстро расширять состав объектов для построения структуры подчиненности документов, используя объекты основной конфигурации и любых расширений.

1 стартмани

27.10.2023    1933    13    avmartynov    10    

43

Печать непроведенных документов для УТ, КА, ERP. Настройка печати по пользователям, документам и печатным формам

Пакетная печать Печатные формы Адаптация типовых решений Универсальные функции Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Россия Абонемент ($m)

Расширение для программ 1С:Управление торговлей, 1С:Комплексная автоматизация, 1С:ERP, которое позволяет распечатывать печатные формы для непроведенных документов. Можно настроить, каким пользователям, какие конкретные формы документов разрешено печатать без проведения документа.

2 стартмани

22.08.2023    2020    21    progmaster    7    

3
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. FesenkoA 57 15.02.19 11:04 Сейчас в теме
Вот такие статьи я люблю. Вроде какая то фигня о сообщениях, но раскрывается потенциал платформы!
Кстати у нас работает обработчик ожидания, который проверяет сообщения в рег.сведений. И новые выводит как "ПоказатьОповещениеПользователю". При том что сами записи в регистр создаются при создании нового тикета, новой заявки или вручную из любого документа другим пользователем или рег.заданием. Немного раздражает что приходится каждые 20 сек дергать сервер. Может у вас есть опыт работы с этим и подскажете более элегантное решение?
begemotoff35; maksa2005; Izumov; Mechanist; TreeDogNight; gradi; rpgshnik; +7 Ответить
3. Goleff74 214 15.02.19 12:23 Сейчас в теме
(1)
Сервер взаимодействия
24. Vasvas05 22 01.07.19 10:30 Сейчас в теме
(3)ага, к нему купить лицензии КОРП+сделать сервер отдельный,непонятно как это работать будет стабильно сейчас
А это проверенный способ, который работает.
6. pbabincev 132 17.02.19 01:32 Сейчас в теме
(1)
Сервер взаимодействия на раз решает это
9. Roin2512 45 20.02.19 11:52 Сейчас в теме
(1)Глянте в сторону подписок на события
13. FesenkoA 57 20.02.19 13:23 Сейчас в теме
(9)Подписка на событие, при записи - все едино. Есть пользователь ШЕФ, он сидит в отчетах,или вообще ничего не делает, и пользователи 1,2,3...н, которые создают заявки. Заявка создана - у шефа уведомление. То есть разные клиентские сеансы.
15. ids79 8275 20.02.19 16:58 Сейчас в теме
(13)Наверно только сервер взаимодействия
18. FesenkoA 57 20.02.19 17:39 Сейчас в теме
(15)Сейчас бы я ее так бы и решил ) Но когда ее проектировали СВ то ли не было, то ли в какой то глубокой бете был...
71. neek666 26.01.22 16:29 Сейчас в теме
(1) Какие такие статья??? Делаю точно так же, НА КЛИЕНТЕ "СообщениеПользователю" отрабатывает как обычное "Сообщить". Внизу выводит сообщение, без привязки к элементам формы. Уже пробовал по всякому. УФ. Фигня это, а не статья. Если есть какие нибудь нюансы, надо их выкладывать в статью.
SuperSpade; +1 Ответить
75. SuperSpade 15.11.22 14:54 Сейчас в теме
(71)Обычно внизу выводит, если запущено в режиме обычного приложения. Привинчивается к реквизитам только в управляемом приложении.
2. mifka186 8 15.02.19 11:20 Сейчас в теме
Команда удобна своей простатой

Наверное простотой?
mart-sha; Cmapnep; SagittariusA; YPermitin; TreeDogNight; accounting_cons; kuzyara; Ibrogim; nbondarenko; mrmasson; catv; +11 Ответить
4. ids79 8275 15.02.19 12:44 Сейчас в теме
32. Madsos 27.09.19 14:16 Сейчас в теме
(4)Зачем исправил, было правильно?!
omgtube; user1810037; dovolos; Alexwarsis; user1908142; aalu14; sad888; mart-sha; dsp123; user591389_aska_rabota; +10 Ответить
5. NeviD 15.02.19 13:32 Сейчас в теме
В БСП есть функция ОбщегоНазначенияКлиентСервер.СообщитьПользователю() - интерфейс над объектом СообщениеПользователю.
Удобно использовать, к тому же рекомендуется в стандартах: https://its.1c.ru/db/v8std#content:2149184067:hdoc
PLAstic; wowik; SagittariusA; TreeDogNight; Somebody1; yufan; MCV; sm.artem; WhiteOwl; jif; +10 Ответить
22. ids79 8275 23.02.19 12:58 Сейчас в теме
(5)Спасибо за дополнение.
Можно пользоваться и этой процедурой или "СообщитьПользователюВФорму".
Но ничего нового они не добавляют, и не упрощают ввод, на мой взгляд.
Да и результат будет зависеть от того, что разработчики решат сделать в конкретном релизе.
По мне, удобнее использовать сам объект.
64. ISP 19.09.21 07:28 Сейчас в теме
(5) У меня почему-то при вызове через общий модуль не происходит привязка. А если код сообщения написать в самой форме, то привязывается нормально
7. ixijixi 1761 18.02.19 09:10 Сейчас в теме
Срочно внести в Синтакс-помощник!
AdmKmpt; zqzq; user591389_aska_rabota; +3 Ответить
8. Inziya 20.02.19 06:46 Сейчас в теме
Спасибо! Все понятно и подробно описано.
14. ids79 8275 20.02.19 16:52 Сейчас в теме
10. Дмитрий74Чел 234 20.02.19 11:59 Сейчас в теме
Неточности:
Путь к реквизитам объекта формы необходимо указывать задав ключевое слово «Объект».
Сообщение.Поле = "Объект.Товары[1].Номенклатура";

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

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


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

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

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

Было бы не плохо, если бы еще добавил, как добавить в оповещения (значок колокольчика)
IlnasZiiatov; +1 Ответить
73. IlnasZiiatov 04.05.22 16:36 Сейчас в теме
(25) Тоже интересует как добавить оповещения, при изменении документа оповещать создателя документа
26. sikvel2012 96 10.09.19 13:00 Сейчас в теме
Почему - то забыли про ПолучитьСообщенияПользователю()

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

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

Эта функция выводит накопленные (поле Сообщение.Сообщить()) и еще не выведенные сообщения.
Она характерна для регламентных или фоновых заданий. В обычном сеансе получить с помощью нее сообщения не получиться, на сколько я знаю. Так как они сразу будут выведены пользователям.
sikvel2012; +1 Ответить
28. sikvel2012 96 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 8275 16.09.19 13:52 Сейчас в теме
(29)Если до открытия формы, то сообщение будет выведено в текущей форме. Новая ведь еще не открыта. Привязать его можно к открываемой - второй вариант из статьи.
31. max_zhilin 16.09.19 14:03 Сейчас в теме
(30)
сообщение будет выведено в текущей форме. Новая ведь еще не открыта

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

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

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

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


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

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

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

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

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


Такая конструкция выводит неформатированное значение. Пробовал передавать составную строку, в составе которой есть форматированная, в БСП ОбщегоНазначенияКлиент.СообщитьПользователю() - аналогично без результатов.
40. ids79 8275 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 8275 12.03.20 15:17 Сейчас в теме
(42)Я не пробовал так делать, но проблем не вижу.
44. Stas-ch 35 13.03.20 11:10 Сейчас в теме
(43) Проблема в отсутствии Объекта
45. ids79 8275 14.03.20 07:52 Сейчас в теме
(44)Не вижу проблемы. Привязывайте к реквизиту формы.
46. Goleff74 214 28.03.20 15:48 Сейчас в теме
Добрый день.
Есть обработка. Есть ТЧ Формы (не объекта). На форму динамически выводятся ПоляВвода, привязанные к колонкам строк ТЧ. Извращение, но так надо. Никак в итоге не получается привязать сообщение пользователю к таким полям ввода. Как это можно реализовать?
Поле = "Таблица[0].Колонка" - не работает.
Поле = "<Имя элемента поля ввода>" и ПутькДанными = "Элементы" не работает.
Что еще попытаться сделать?
49. Светлый ум 406 18.09.20 11:32 Сейчас в теме
(46) Столкнулся с экзотическим случаем - две одинаковых таблицы на форме находились в разных группах элементов, в итоге:

- в одной таблице не выводилось облако сообщения в значении строки
- в другой выводилось

Вывод: форматирование группы элементов может не дать отработать механизму
50. Sikh 08.10.20 00:21 Сейчас в теме
Хорошо когда все в одном месте.
51. lev6975 14.12.20 17:24 Сейчас в теме
Задублирую и сюда вопросец...

Можно ли как - то посмотреть буфер накопленных сообщений в процессе отладки, пока они еще не показаны пользователю? Чтобы узнать отправителя сообщения - имя и адрес отправившей функции пока все эти сообщения висят еще непоказанными... чтобы узнать какой модуль какая функция вызывает отказ?
Ну или смотреть в процессе отладки, было ли уже выведено где - то сообщение в буфер сообщений, чтобы потом показать все это при возврате на клиента. Нужно вычислить причину появления сообщения и понять по коду что не так...
А то по коду ЗУП можно шнырять годами...
63. user1461477 01.07.21 16:19 Сейчас в теме
(51)
ПолучитьСообщенияПользователю(<УдалятьПолученные>) 


в отладчике, не?
52. pavlo 29.01.21 13:34 Сейчас в теме
Главная беда у меня вывести в не активной форме сообщение пользователю.
Есть 2 отчета, оба запускаются с котиками в фоне, когда оба заканчиваются в сообщения пишутся типа "отчет сформирован" текст не важен.
так вот как и что не делай все равно выводит 2 сообщения (когда оба отчета закончили) в активное окно одного из отчетов.
В итоге переключаясь на один отчет не понятно выводилось ли сообщение, а во втором 2 сообщения.
	Сообщение = Новый СообщениеПользователю;
	Сообщение.ИдентификаторНазначения = ЭтаФорма.УникальныйИдентификатор;
	Сообщение.Текст = "отчет сформирован";
	Сообщение.УстановитьДанные(Отчет);
	Сообщение.Сообщить();

Единственное чего не стоит Поле, но сообщение не нужно выводить с привязкой к полю.
53. ids79 8275 29.01.21 17:18 Сейчас в теме
(52)ЭтаФорма - указывает на текущую форму. Вам нужно передать в отчеты ту форму, в которой Вы хотите вывести сообщения и использовать ее.
54. pavlo 30.01.21 10:58 Сейчас в теме
(53)
В том и дело, что сообщения вызываются из модуля формы и ЭтаФорма там и является конкретной.
У каждого отчета на &НаКлиенте после формирования отчета вызывается показ сообщения выше, а в итоге показывается внизу активного окна.
Тоесть открыты 2 отчета и в фоне оба работают (котики) когда они завершают все возвращается в модуль формы конкретного отчета и там вызывается показать сообщение пользователю.
Нов итоге оно показывается не при переключении на конкретный отчет, а в активном окне сразу все ото всех открытых отчетов.
55. ids79 8275 30.01.21 12:21 Сейчас в теме
(54)Теперь понял. Да, странное поведение. А может быть попробовать после окончания формирования отчета делать форму активной и уже тогда выводить сообщение?
56. pavlo 01.02.21 09:06 Сейчас в теме
(55) Ну так они переключаются на ходу, если пользователь что то делал его перекидывает на активную форму, но с другой стороны вроде как показывает, что вот этот отчет отработал и сообщение тогда верно в нужном окне.
Если без активизации формы ни как то этот вариант, очень даже не плох.
Спасибо за идею.
57. EVKash 14 08.02.21 15:34 Сейчас в теме
(55) Может знаете... Есть ли возможность выводить сообщение с привязкой к строке дерева значений.
Обращение к строке по индексу для ДанныеФормыДерево не поддерживается.
Гугл не помог.
59. EVKash 14 12.02.21 07:52 Сейчас в теме
(58) Это уже скачал, но не встраивал пока...
60. asg128 11.03.21 11:09 Сейчас в теме
А можно отобразить всплывающее сообщение, указывающее на кнопку?
user785225; +1 Ответить
61. Stepka1206 13.04.21 13:28 Сейчас в теме
У документа есть скрытая табличная часть, программно рисую реквизиты на форме из данных табличной части.
Все добавленные элементы имеют путь к данным табличной части с множеством строк.
при использовании конструкции
Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = "Текст сообщения";
Сообщение.Поле = "ТаблицаДанных[12].ДатаСрока";
Сообщение.УстановитьДанные(ЭтотОбъект);
Сообщение.Сообщить(); 


Собщение вылезает внизу формы, можно ли его как то к элементу формы привязать?
62. Arxxximed 34 15.06.21 18:46 Сейчас в теме
Может кто подскажет, а как привязать сообщения к форме начальной страницы? Точнее вопрос не очень коректен, потому что у начальной страницы может быть несколько форм. И начальная страница это окно клиентского приложения. Но почему то у меня не получилось вывести ни одного сообщения, привязанного к нему (к начальной странице).
65. AnryMc 849 24.09.21 09:12 Сейчас в теме
(0) ВОПРОС: Как вывести СообщениеПользователю с "привязкой" к ячейке ТабличногоДокумента на форме?
66. ids79 8275 27.09.21 12:37 Сейчас в теме
(65)По-моему, такой возможности нет.
67. AnryMc 849 27.09.21 13:13 Сейчас в теме
68. dklp 42 03.11.21 07:52 Сейчас в теме
У меня в расширении внутри обработчика события модуля формы "ПередЗаписью" происходит проверка заполнения некоторых реквизитов, и пользователю выводится Предупреждение через ПоказатьПредупреждение(). Проблема в том, что в типовой конфигурации УТ при записи документа из формы запись происходит дважды, и обработчик события "ПередЗаписью" прогоняется дважды. Соответственно, выскакивают два одинаковых предупреждения.

Как проверить, если окно с таким предупреждением уже открыто, чтобы не выводить его второй раз?
69. ids79 8275 03.11.21 09:20 Сейчас в теме
(68)Какой именно документ записываете?
70. dklp 42 03.11.21 10:05 Сейчас в теме
(69) ЗаказКлиента... Но я уже разобрался. Вот примерный код проверки, чтобы повторно не выводилось одно и то же предупреждение:
ПредупреждениеУжеВыдано = Ложь;
КоллекцияОконПриложения = ПолучитьОкна();
Для Каждого ОкноПриложения Из КоллекцияОконПриложения Цикл
	Если ОкноПриложения.Заголовок = "Заголовок предупреждения" Тогда
		ПредупреждениеУжеВыдано = Истина;
		Прервать;
	КонецЕсли;	
КонецЦикла;

Если ПредупреждениеУжеВыдано = Ложь Тогда  
	ПоказатьПредупреждение(, "Текст предупреждения",,"Заголовок предупреждения");
КонецЕсли;
Показать
72. Dima123456 02.04.22 22:25 Сейчас в теме
Скажите пожалуйста, объект СообщениеПользователю работает ли с обычным приложением и обычной формой ? Или ТОЛЬКО с Управляемой формой, Управляемым приложением ?
74. dartweider 10.11.22 15:10 Сейчас в теме
Можно ли СообщениеПользователю привязать к полю пользовательских настроек, которые генерируются платформой на форме отчёта?
76. Абигоп-НахУрт 30.03.23 11:13 Сейчас в теме
Горе разработчики 1С создав "СообщениеПользователю" вшили заголовок "Ошибка". Видимо от большого ума и опыта. Сообщение пользователю подразумевает только сообщение с тем текстом который нужно вывести пользователю, например "если Вы не выберите в этом поле док.реализации, то оплачены будут самые ранние реализации по которым есть долг".
т.е. <Сообщение> не равно <ошибка>. Причём в близких по целям функциях "Сообщить" и "ПоказатьПредупреждение", нет такой ошибки. Могли бы параметром по умолчанию сделать заголовок для совместимости. А так как есть реализовать нормальный обучающий режим с сообщением в каждном поле по ходу заполнения сложных связанных форм просто нет возможности. Увы 1С.
77. user1273498 12 19.01.24 09:11 Сейчас в теме
Только разработчики 1С умудрились из простейшей процедуры вывода сообщений на экран сделать такое. чтобы для разрешения вопроса были нужны "танцы с бубнами" и целая статья.
Это же надо постараться.
user1316759; ids79; +2 Ответить
Оставьте свое сообщение