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

Рис. 3.88. Сообщение пользователю

Рис. 3.89. Состояние
Пример использования этого объекта будет рассмотрен далее.

Рис. 3.90. Оповещение пользователя

Рис. 3.91. Предупреждение
Если указан тайм-аут, то окно будет закрыто по истечении заданного времени.
Рассмотрим все перечисленные способы на небольшом примере.
Примечание
Пример можно посмотреть в демонстрационной базе «Способы информирования пользователя».
Пусть в конфигурации существует справочник Товары, у которого перед записью проверяется заполненность реквизита Наименование. Для этого в модуле объекта, в процедуре ОбработкаПроверкиЗаполнения, используется сообщение пользователю (листинг 3.60, рис. 3.92).
Листинг 3.60. Использование сообщения пользователю
ПроверяемыеРеквизиты.Очистить();
Если СокрЛП(Наименование) = "" Тогда
Сообщение = Новый СообщениеПользователю;
Сообщение.Поле = "Наименование";
Сообщение.УстановитьДанные(ЭтотОбъект);
Сообщение.Текст = "Не заполнено наименование товара!";
Сообщение.Сообщить();
Отказ = Истина;
КонецЕсли;

Рис. 3.92. Сообщение пользователю
Кроме того, в конфигурации существует глобальная команда ГенерацияТоваров, которая заполняет справочник Товары элементами в тестовых целях.
Перед началом работы пользователю выдается сообщение о предполагаемых действиях и о том, что он может прервать выполнение этих действий (листинг 3.61).
Листинг 3.61. Использование предупреждения
&НаКлиенте
Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды)
ПоказатьПредупреждение(Новый ОписаниеОповещения("ОбработкаКомандыЗавершение", ЭтотОбъект), "Будет добавлено 1000 товаров.
|Выполнение можно прервать, нажав сочетание клавиш Ctrl + Break", , "Добавление товаров");
КонецПроцедуры
Для этого используется предупреждение, которое показывается в блокирующем окне. Это окно не останавливает исполнение программного кода, но блокирует весь интерфейс до тех пор, пока пользователь не ознакомится с этим сообщением и не нажмет кнопку ОК (рис. 3.93).

Рис. 3.93. Предупреждение
Предупреждение показывается с помощью немодального метода ПоказатьПредупреждение(). Первым параметром в него передается описание оповещения, указывающее на экспортную процедуру обработки оповещения ОбработкаКомандыЗавершение(), которая будет выполнена после закрытия окна предупреждения (листинг 3.62).
Листинг 3.62. Обработчик команды «ОбработкаКомандыЗавершение»
&НаКлиенте
Процедура ОбработкаКомандыЗавершение(ДополнительныеПараметры) Экспорт
Для Счетчик = 0 по 9 Цикл
ПоследняяДобавленнаяСсылка = НаСервере(Счетчик);
Состояние("Добавление товаров", 10 + Счетчик * 10, "Выполнятеся автоматическое заполнение справочника Товары", БиблиотекаКартинок.СоздатьЭлементСписка);
ОбработкаПрерыванияПользователя();
КонецЦикла;
// Обновить список товаров на начальной странице
ОповеститьОбИзменении(ПоследняяДобавленнаяСсылка);
ПоказатьОповещениеПользователя("Данные заполнены",
ПолучитьНавигационнуюСсылку(ПоследняяДобавленнаяСсылка), "Открыть последний добавленный товар", БиблиотекаКартинок.Справочник, СтатусОповещенияПользователя.Важное);
КонецПроцедуры
Таким образом, только после того, как пользователь закроет окно предупреждения кнопкой ОК, происходит добавление элементов в справочник Товары.
Обратите внимание, что если бы код по добавлению товаров располагался сразу после показа предупреждения, а не в отдельном обработчике оповещения, то товары добавились бы сразу, не ожидая закрытия окна предупреждения. Потому что это окно немодальное и оно не останавливает исполнение программного кода.
Добавление элементов в справочник может быть выполнено только на сервере, и для этого используется серверная функция НаСервере(). Она добавляет в справочник 100 элементов (листинг 3.63).
Листинг 3.63. Серверная функция
&НаСервере
Функция НаСервере(НомерВызова)
Для Счетчик = 1 по 100 Цикл
ОбъектТовара = Справочники.Товары.СоздатьЭлемент();
ОбъектТовара.Наименование = "Товар_" + Строка(НомерВызова * 100 + Счетчик);
ОбъектТовара.Записать();
КонецЦикла;
Возврат ОбъектТовара.Ссылка;
КонецФункции
Для того чтобы пользователь имел возможность прервать процесс добавления элементов в справочник, серверная функция вызывается в цикле несколько раз, то есть добавление элементов выполняется порциями по 100 штук (листинг 3.64).
Листинг 3.64. Вызов серверной функции
Для Счетчик = 0 по 9 Цикл
ПоследняяДобавленнаяСсылка = НаСервере(Счетчик);
Состояние("Добавление товаров", 10 + Счетчик * 10, "Выполняется автоматическое заполнение справочника Товары", БиблиотекаКартинок.СоздатьЭлементСписка);
ОбработкаПрерыванияПользователя();
КонецЦикла;
Каждый раз после выполнения функции проверяется, не нажал ли пользователь комбинацию клавиш Ctrl + Break. Для этого вызывается метод глобального контекста ОбработкаПрерыванияПользователя().
Кроме того, каждый раз после вызова серверной функции в нижнем правом углу экрана выводится окно состояния, отображающее ход процесса с помощью индикатора (10 + Счетчик * 10) – листинг 3.65, рис. 3.94.
Листинг 3.65. Вывод состояния
Состояние("Добавление товаров", 10 + Счетчик * 10, "Выполняется автоматическое заполнение справочника Товары", БиблиотекаКартинок.СоздатьЭлементСписка);

Рис. 3.94. Состояние
В данном случае состояние используется, во-первых, чтобы информировать пользователя о том, что система выполняет какие-то действия, а во-вторых, чтобы пользователь мог примерно оценить время, оставшееся до окончания действий.
Серверная функция возвращает ссылку на последний элемент, добавленный в справочник Товары.
Эта ссылка используется для того, чтобы после добавления всех элементов обновить список товаров, расположенный на начальной странице (листинг 3.66).
Листинг 3.66. Обновление списка товаров
// Обновить список товаров на начальной странице
ОповеститьОбИзменении(ПоследняяДобавленнаяСсылка);
Также эта ссылка используется в оповещении, которое выдается по окончании процесса (листинг 3.67).
Листинг 3.67. Вывод оповещения пользователя
ПоказатьОповещениеПользователя("Данные заполнены",
ПолучитьНавигационнуюСсылку(ПоследняяДобавленнаяСсылка), "Открыть последний добавленный товар", БиблиотекаКартинок.Справочник , СтатусОповещенияПользователя.Важное);
Оповещение показывается на несколько секунд в правом нижнем углу экрана. Но, чтобы пользователь позднее мог ознакомиться с ним через центр оповещений, последним параметром в метод ПоказатьОповещениеПользователя() передается статус Важное системного перечисления СтатусОповещенияПользователя. Ссылка на последний добавленный товар позволяет открыть его форму сразу же, из оповещения, или позже, из центра оповещений (рис. 3.95).

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