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

В 1С бывают 2 вида сообщений пользователю:

  1. Ознакомительные — просто выводят сообщение на экран.
  2. Терминирующие (модальные) — блокируют выполнение программы, пока пользователь не нажмет какую-то кнопку (устарели, раньше это были методы Вопрос() и Предупреждение()).

Сообщить()

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

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

1
Сообщить("Не заполнен реквизит наименование!");

ПоказатьОповещениеПользователя()

Данный метод выводит сообщение в правом нижнем углу экрана. Сообщение медленно затухает и закрывается через 10 секунд. Сообщение не привязано к форме. Одновременно можно вывести максимум 3 оповещения. Метод доступен только на клиенте.

Параметры метода:

  • Текст — текст сообщения
  • ДействиеПриНажатии — навигационная ссылка (например на элемент справочника) или описание оповещения для выполнения какого-либо действия при нажатии на сообщение. При нажатии на навигационную ссылку будет открыт элемент справочника. Описание оповещения — это указатель на процедуру, которая будет вызвана при нажатии.
  • Пояснение — дополнительное пояснение.
  • Картинка — тут все понятно.
  • СтатусОповещенияПользователя — системное перечисление «СтатусОповещенияПользователя». если «Важное», то сообщение сохраняется в центре оповещений. Чтобы посмотреть все оповещения в центре оповещений нужно нажать кнопку с колокольчиком в правом верхнем углу экрана:
  • КлючУникальности — если вызвать второй метод с таким же ключом, то не будет показано новое оповещение, а будет изменено текущее. Если параметр не указан, то сообщение считается уникальным.
1
2
3
4
5
6
7
8
9
Обработчик = Новый ОписаниеОповещения("ОбработкаНажатия", ЭтотОбъект);
ПоказатьОповещениеПользователя("Нажата кнопка!", Обработчик, "Пояснение к оповещению", 
	БиблиотекаКартинок.Вперед, СтатусОповещенияПользователя.Информация);
 
//процедура для описания оповещения должна быть на клиенте и с ключевым словом Экспорт!
&НаКлиенте
Процедура ОбработкаНажатия(ДопПараметры) Экспорт
	Сообщить("Нажал!");
КонецПроцедуры

Если нажать на гиперссылку «Пояснение к оповещению», то выведется сообщение (то что мы написали в методе «ОбработкаНажатия»):

1
2
3
4
5
6
7
8
9
&НаКлиенте
Процедура Команда1(Команда)
	//получаем ссылку на предопределенный элемент справочника
	//функция ПредопределенноеЗначение() возвращает ссылку на элемент базы данных
	//а функция ПолучитьНавигационнуюСсылку() получает ссылку для открытия этого элемента 
	СсылкаНаСправочник = ПолучитьНавигационнуюСсылку(ПредопределенноеЗначение("Справочник.Справочник1.ПредопределенныйЭлемент"));
	ПоказатьОповещениеПользователя("Нажата кнопка!", СсылкаНаСправочник, "Пояснение к оповещению", 
		БиблиотекаКартинок.Вперед, СтатусОповещенияПользователя.Важное);
КонецПроцедуры

По нажатию на оповещение откроется карточка предопределенного элемента:

При изменении объектов базы данных (например при записи элемента справочника) платформа автоматически генерирует оповещения пользователю.

ПоказатьПредупреждение()

Данный метод выводит предупреждение в отдельном окне с кнопкой «ОК». По нажатию на кнопку предупреждение закрывается. Можно указать процедуру, которая будет выполнена после нажатия на кнопку. Можно использовать только на клиенте.

Параметры метода:

  • ОписаниеОповещенияОЗавершении — описание оповещения, которое будет выполнено после нажатию на кнопку «ОК». Можно не указывать, тогда ничего не будет выполнено.
  • ТекстПредупреждения — само предупреждение.
  • Таймаут — время в секундах, после которого предупреждение будет автоматически закрыто.
  • Заголовок — заголовок окна с предупреждением.
1
2
3
4
5
6
7
Обработчик = Новый ОписаниеОповещения("ОбработкаНажатия", ЭтотОбъект);
ПоказатьПредупреждение(Обработчик, "Предупреждаем!", 5, "Это предупрежедение");
 
&НаКлиенте
Процедура ОбработкаНажатия(ДопПараметры) Экспорт
	Сообщить("Предупреждение прочитано!");
КонецПроцедуры

После нажатия на «ОК» выйдет сообщение:

Описание оповещения будет вызвано даже если не нажимать «ОК», а подождать 5 секунд (именно 5 секунд мы указали в третьем параметре).

ПоказатьВопрос()

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

Параметры метода:

  • ОписаниеОповещенияОЗавершении — описание оповещения, которое будет выполнено после нажатию на кнопку. Результат нажатия передается первым параметром в процедуру. В зависимости от ответа пользователя можно выполнить различные действия.
  • ТекстВопроса — сам вопрос.
  • Кнопки — системное перечисление «РежимДиалогаВопрос» или список значений.
  • Таймаут — время в секундах, после которого окно с вопросом будет закрыто.
  • КнопкаПоУмолчанию — кнопка, на которой изначально будет фокус. Именно она будет считаться нажатой, если пройдет время указанное в параметре «Таймаут».
  • Заголовок — заголовок окна с вопросом.
  • КнопкаТаймаута — кнопка, на которой будет обратный отсчет секунд из параметра «Таймаут».
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Обработчик = Новый ОписаниеОповещения("ОбработкаНажатия", ЭтотОбъект);
//РежимДиалогаВопрос может принимать следующие значения: ДаНет, ДаНетОтмена, ОК, ОКОтмена, 
//ПовторитьОтмена, ПрерватьПовторитьПропустить
//КодВозвратаДиалога.Да - это код, который вернется если нажмут на кнопку "Да"
ПоказатьВопрос(Обработчик, "Хотите ответить на вопрос?", РежимДиалогаВопрос.ДаНет, 10, 
	КодВозвратаДиалога.Да, "Это вопрос", КодВозвратаДиалога.Да);
 
&НаКлиенте
Процедура ОбработкаНажатия(Результат, ДопПараметры) Экспорт
	Если Результат = КодВозвратаДиалога.Да Тогда
		Сообщить("Нажали да!");
	ИначеЕсли Результат = КодВозвратаДиалога.Нет Тогда
		Сообщить("Нажали нет!");
	КонецЕсли;	
КонецПроцедуры

Вместо системного перечисления «КодВозвратаДиалога» можно использовать список значений со своими кнопками:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Обработчик = Новый ОписаниеОповещения("ОбработкаНажатия", ЭтотОбъект);
//СписокЗначений; - коллекция значений, в данном случае она будет хранить кнопки
Кнопки = Новый СписокЗначений;
Кнопки.Добавить("Кнопка1", "Кнопка 1"); //1 параметр - идентификатор кнопки, 2 - что будет написано на кнопке
Кнопки.Добавить("Кнопка2", "Кнопка 2");
ПоказатьВопрос(Обработчик, "Хотите ответить на вопрос?", Кнопки, 10, 
	"Кнопка1", "Это вопрос", "Кнопка1");
 
&НаКлиенте
Процедура ОбработкаНажатия(Результат, ДопПараметры) Экспорт
	Если Результат = "Кнопка1" Тогда
		Сообщить("Нажали кнопка 1!");
	ИначеЕсли Результат = "Кнопка2" Тогда
		Сообщить("Нажали кнопка 2!");
	КонецЕсли;	
КонецПроцедуры

Класс СообщениеПользователю

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

Свойства:

  • ИдентификаторНазначения — идентификатор формы, к которой нужно привязать сообщение.
  • КлючДанных — ссылка на объект базы данных.
  • Поле — путь к реквизиту формы, если реквизит объекта, то «Объект.ИмяРеквизита», если реквизит формы то просто «ИмяРеквизита».
  • ПутьКДанным — путь до объекта, связанного с сообщением (как правило «Объект»).
  • Текст — сообщение.

Методы:

  • Сообщить() — выводит сообщение на экран.
  • УстановитьДанные(<Объект>) — автоматически заполняет свойства КлючДанных (ссылка или регистратор) и ПутьКДанным. ПутьКДанным берется из имени основного реквизита формы, который был преобразован в прикладной объект, аналогично методу РеквизитФормыВЗначение(«Объект»);

Простое сообщение

Достаточно заполнить свойство Текст и вызвать метод Сообщить().

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

Сообщение с привязкой к реквизиту объекта

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

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

Привязанное сообщение всегда отображается с заголовком «Ошибка:», его нельзя изменить.

Сообщение с привязкой к реквизиту формы

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

Сообщение с привязкой к реквизиту табличной части

Так как индексация строк начинается с нуля, то для первой строки нужно указать индекс 0.

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

Сообщение из модуля объекта

Здесь нужно вызвать метод УстановитьДанные() и передать параметром прикладной объект (например, справочник объект). Данный метод автоматически заполнит свойства КлючДанных и ПутьКДанным.

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

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

Достаточно заполнить свойство КлючДанных.

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

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

Как привязать сообщение к другой форме

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

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

Сообщение будет выведено только в открытой форме:

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

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

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

В переменной МассивСообщений будет 3 объекта СообщениеПользователю. После возврата управления на клиента они будут последовательно выведены на экран. Но если вызвать данный метод с параметром Истина:

ПолучитьСообщенияПользователю(Истина);

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

Состояние()

Данный метод выводит сообщение со шкалой прогресса в панель состояния.

Параметры метода:

  • ТекстСообщения — текст.
  • Прогресс — число от 0 до 100. Если указан, то выводится шкала прогресса.
  • Пояснение — пояснение к сообщению.
  • Картинка
Состояние("Текст состояния", 20, "Пояснение", 
	БиблиотекаКартинок.СправочникОбъект);

Рейтинг
( Пока оценок нет )
Понравилась статья? Поделиться с друзьями: