Дождаться выбора периода через асинхронный метод

Учебные задачи

РедактироватьАсинх возвращает Обещание. Ждать получает конечный результат: период по ОК или Неопределено по отмене.

Где и как запускать

Полный клиентский код модуля управляемой формы собственной учебной обработки. Процедуры уже включены; не вставляйте их в тело другого обработчика.

Подготовка

  1. Создайте новую внешнюю обработку УчебныйПериод85 с управляемой формой. Используйте только учебную базу; сведения из документов/регистров не нужны.

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

  3. Создайте команду ВыбратьПериод, выведите её кнопкой и назначьте обработчик ВыбратьПериод. Вставьте полный код данного примера в модуль формы отдельно от прочих процедур.

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

  5. Используйте тонкий или толстый клиент платформы 8.5.1.1343. В локальной справке РедактироватьАсинх не указан для веб-клиента; для него используйте пример Показать с оповещением.

&НаКлиенте
Асинх Процедура ВыбратьПериод(Команда)
    Если ТипЗнч(ВыбранныйПериод) <> Тип("СтандартныйПериод") Тогда
        ВыбранныйПериод = Новый СтандартныйПериод(Дата(2024, 2, 1), КонецМесяца(Дата(2024, 2, 1)));
    ИначеЕсли Не ЗначениеЗаполнено(ВыбранныйПериод.ДатаНачала)
        Или Не ЗначениеЗаполнено(ВыбранныйПериод.ДатаОкончания) Тогда
        ВыбранныйПериод = Новый СтандартныйПериод(Дата(2024, 2, 1), КонецМесяца(Дата(2024, 2, 1)));
    КонецЕсли;
    РабочийПериод = Новый СтандартныйПериод(ВыбранныйПериод.Вариант);
    Если ВыбранныйПериод.Вариант = ВариантСтандартногоПериода.ПроизвольныйПериод Тогда
        РабочийПериод.ДатаНачала = ВыбранныйПериод.ДатаНачала;
        РабочийПериод.ДатаОкончания = ВыбранныйПериод.ДатаОкончания;
    КонецЕсли;
    Диалог = Новый ДиалогРедактированияСтандартногоПериода;
    Диалог.Период = РабочийПериод;
    Результат = Ждать Диалог.РедактироватьАсинх();
    Если Результат = Неопределено Тогда
        Сообщить("Отмена: выбранный период не изменён");
        Возврат;
    КонецЕсли;
    ВыбранныйПериод = Результат;
    Сообщить("Выбран вариант: " + Строка(ВыбранныйПериод.Вариант));
    Сообщить(Формат(ВыбранныйПериод.ДатаНачала, "ДФ=dd.MM.yyyy HH:mm:ss"));
    Сообщить(Формат(ВыбранныйПериод.ДатаОкончания, "ДФ=dd.MM.yyyy HH:mm:ss"));
КонецПроцедуры

Разбор по шагам

  1. Обработчик объявлен Асинх Процедура: в нём разрешён оператор Ждать.

  2. Рабочий период отделён от подтверждённого выбора формы. Диалог редактирует рабочую копию.

  3. Ждать получает результат обещания, поэтому после этой строки можно проверять отмену и свойства периода.

  4. При отмене выходим до присваивания реквизита. При ОК сохраняем результат и выводим его обе границы.

Как проверить результат

  1. ОК с новым интервалом обновляет поле ВыбранныйПериод и выводит даты.

  2. Отмена после изменения рабочей копии не меняет подтверждённый реквизит формы.

  3. В переменную Результат попадает конечный период или Неопределено, а не само Обещание.

Ожидаемый результат

Современный клиентский вариант последовательного кода выбора периода без callback-процедуры.

На что обратить внимание

  1. Без Ждать переменная содержала бы обещание; обращаться к нему как к СтандартныйПериод нельзя.

  2. Не копируйте код в серверную процедуру: диалог интерактивный и клиентский.

  3. Доступность веб-клиента у разных асинхронных диалогов различается; проверяйте именно выбранный метод.

Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.

Не хотите разбираться сами?

Адаптируем это решение под вашу базу. Оценка бесплатно.

Оставить задачу

1С, 1С:Предприятие — товарные знаки ООО «1С». Сайт не является официальным представительством фирмы «1С» и не аффилирован с ней.