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

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

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

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

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

