Разобрать прежний модальный выбор периода и его ограничения

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

Редактировать синхронно возвращает Булево, а не сам период. Новый период берём из свойства диалога только при подтверждении ОК.

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

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

Подготовка

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

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

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

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

  5. Только отдельная учебная конфигурация с разрешёнными модальными вызовами, тонкий или толстый клиент. Если РежимИспользованияМодальности=НеИспользовать, этот пример не запускайте: используйте Показать или РедактироватьАсинх.

  6. Не меняйте режим модальности рабочей конфигурации ради упражнения. Веб-клиент не включён в доступность Редактировать в локальной справке.

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

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

  1. В разрешённом учебном клиенте ОК обновляет реквизит, Отмена сохраняет прежнее значение.

  2. Подтверждён имеет тип Булево, а ВыбранныйПериод после ОК — СтандартныйПериод.

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

Разобран контракт прежнего метода с явным ограничением режима и клиента.

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

  1. Не заменяйте Редактировать на РедактироватьАсинх без изменения обработки результата: Булево и период/Неопределено — разные контракты.

  2. При запрете модальности это не универсальное решение; запрет не следует обходить изменением конфигурации.

  3. Модальный пример оставлен для понимания существующего кода, а не как обязательный выбор для новой формы.

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

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

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

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

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