Выбрать период без модальности и сохранить выбор только по ОК

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

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

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

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

Подготовка

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

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

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

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

  5. Этот вариант подходит для управляемого приложения без модальных вызовов; согласно справке Показать доступен также в веб-клиенте.

&НаКлиенте
Процедура ВыбратьПериод(Команда)
    Если ТипЗнч(ВыбранныйПериод) <> Тип("СтандартныйПериод") Тогда
        ВыбранныйПериод = Новый СтандартныйПериод(Дата(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. Выберите относительный вариант ЭтотМесяц и подтвердите. При следующем открытии сохраняется вариант, а не принудительно превращается в произвольные даты.

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

Готовый клиентский сценарий немодального выбора периода с корректной отменой.

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

  1. После Диалог.Показать нельзя сразу присваивать ВыбранныйПериод=Диалог.Период: пользователь ещё не закончил.

  2. Имя обработчика в строке и имя процедуры должны совпадать, процедура должна иметь Экспорт.

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

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

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

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

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

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