ОбъектМетаданныхКонфигурация.РежимИспользованияМодальности

Свойства · ModalityUseMode

Тип: РежимИспользованияМодальности. Показывает установленный режим использования модальности.

Полное описание, параметры и ограничения

ОбъектМетаданныхКонфигурация.РежимИспользованияМодальности (ConfigurationMetadataObject.ModalityUseMode)

ОбъектМетаданныхКонфигурация (ConfigurationMetadataObject)

РежимИспользованияМодальности (ModalityUseMode)

Доступен, начиная с версии 8.3.3.

Использование:
Только чтение.
Описание:
Тип: РежимИспользованияМодальности.
Показывает установленный режим использования модальности.
Доступность:

Сервер, толстый клиент, внешнее соединение.

Использование в версии:

Доступен, начиная с версии 8.3.3.

Методическая информация

Практические примеры

ВвестиДату: использовать дату только после подтверждения в своём стенде

Синхронный датовый диалог меняет локальную дату, а возвращает Булево. До диалога проверяется собственная среда и разрешённая модальность.

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

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

Подготовка

  1. В отдельной учебной базе платформы 8.5.1.1343 создайте внешнюю обработку УчебнаяФорма85 с пустой управляемой основной формой. Используйте тонкий клиент Windows.

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

  3. Не создавайте вручную ЗначениеПримера, ПолеПримера и кнопку: код создаёт их полностью. Каждый урок запускайте в отдельной копии своей формы.

  4. Сохраните свою EPF и откройте её в учебной базе. Собственное количество начинается с 3, цена книги задана в коде как 250; исходный расчёт равен 750.

  5. Связанный реквизит помечен как СохраняемыеДанные для изучения поведения формы. Это признак реквизита формы, а не автоматическая запись книги, файла или документа в базу.

  6. Команда расчёта имеет ИзменяетСохраняемыеДанные = Ложь. Уроки изменяют только свой интерфейс и значения собственной формы, не конфигурацию и не рабочие данные.

  7. Запуск и вид в 1С не проверены. Компоновку, сочетания клавиш и расположение команд осмотрите вручную в указанном клиенте; не переносите настройки на рабочие формы без отдельной проверки.

  8. В этой партии каждое окно ввода запускает собственная кнопка УчебноеДействие. Изучайте один полный модуль за раз; никакие значения ввода не исполняются как код.

  9. Только для синхронного варианта создайте отдельную пустую учебную конфигурацию с техническим именем УчебныеДиалоги85 и заранее разрешённой модальностью. Читайте её режим в конфигураторе; не меняйте рабочую базу ради урока. При ином имени или НеИспользовать пример откажется до диалога.

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    Новые = Новый Массив;
    ТипРеквизита = Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(2, 0, ДопустимыйЗнак.Неотрицательный));
    Новые.Добавить(Новый РеквизитФормы("ЗначениеПримера", ТипРеквизита, "", "Количество книг", Истина));
    ЭтаФорма.ИзменитьРеквизиты(Новые);
    ЭтаФорма.ЗначениеПримера = 3;
    Поле = Элементы.Добавить("ПолеПримера", Тип("ПолеФормы"));
    Поле.Вид = ВидПоляФормы.ПолеВвода;
    Поле.ПутьКДанным = "ЗначениеПримера";
    Поле.Заголовок = "Количество собственных книг";


    КомандаДействия = ЭтаФорма.Команды.Добавить("УчебноеДействие");
    КомандаДействия.Действие = "УчебноеДействие";
    КомандаДействия.Заголовок = "Выполнить собственный учебный шаг";
    КомандаДействия.Подсказка = "Действие только над данными учебной формы";
    КомандаДействия.ИзменяетСохраняемыеДанные = Ложь;
    Кнопка = Элементы.Добавить("КнопкаУчебноеДействие", Тип("КнопкаФормы"));
    Кнопка.ИмяКоманды = КомандаДействия.Имя;
    Кнопка.Заголовок = КомандаДействия.Заголовок;
КонецПроцедуры

&НаКлиенте
Процедура УчебноеДействие(Команда)
    #Если ВебКлиент Тогда
    Сообщить("Синхронный урок не выполняется в веб-клиенте; используйте обратный вызов");
    Возврат;
    #Иначе
    Если Не РазрешёнСобственныйСинхронныйВвод() Тогда
        Сообщить("Синхронный ввод недоступен для этого собственного стенда; настройки базы не менялись");
        Возврат;
    КонецЕсли;
    ДоВвода = ЗначениеПримера;
    Введено = Дата(2026, 10, 6);
    Принято = ВвестиДату(Введено, "День собственной доставки: с 6 по 12 октября 2026", ЧастиДаты.Дата);
    Если Не Принято Тогда
        Сообщить("Отмена: собственные данные не менялись");
        Возврат;
    КонецЕсли;
    Если Введено = Неопределено Тогда
        Сообщить("Отмена: собственные данные не менялись");
        Возврат;
    КонецЕсли;
    Если ЗначениеПримера <> ДоВвода Тогда
        Сообщить("Количество изменилось за время диалога. Повторите ввод для актуальной заявки");
        Возврат;
    КонецЕсли;
    Если ТипЗнч(Введено) <> Тип("Дата") Тогда
        ВызватьИсключение "Для собственной доставки нужна дата";
    КонецЕсли;
    День = НачалоДня(Введено);
    Если День < Дата(2026, 10, 6) Или День > Дата(2026, 10, 12) Тогда
        ВызватьИсключение "Для урока выберите день с 6 по 12 октября 2026 включительно";
    КонецЕсли;
    ПроверитьСобственноеКоличество();
    Доставка = 0;
    Если День > Дата(2026, 10, 7) Тогда
        Доставка = 100;
    КонецЕсли;
    СуммаКниг = ЗначениеПримера * 250;
    Итого = СуммаКниг + Доставка;
    Сообщить(Итого - Доставка = СуммаКниг);
    Сообщить(ЗначениеПримера = ДоВвода);
    Сообщить(СтрШаблон("Собственный день %1; книги %2; доставка %3; итого %4", Формат(День, "ДФ=yyyy-MM-dd"), СуммаКниг, Доставка, Итого));
    #КонецЕсли

КонецПроцедуры

&НаКлиенте
Процедура ПроверитьСобственноеКоличество()
    Если ТипЗнч(ЗначениеПримера) <> Тип("Число") Тогда
        ВызватьИсключение "Собственное количество должно быть числом";
    КонецЕсли;
    Если ЗначениеПримера < 1 ИЛИ ЗначениеПримера > 10 ИЛИ ЗначениеПримера <> Цел(ЗначениеПримера) Тогда
        ВызватьИсключение "Нужно собственное целое количество от 1 до 10";
    КонецЕсли;
КонецПроцедуры

&НаСервереБезКонтекста
Функция РазрешёнСобственныйСинхронныйВвод()
    Возврат Метаданные.РежимИспользованияМодальности <> Метаданные.СвойстваОбъектов.РежимИспользованияМодальности.НеИспользовать;
КонецФункции

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

  1. На сервере проверить техническое имя и режим своей конфигурации; в веб-клиенте синхронная ветка сразу отказывается.

  2. Присвоить локальной Введено собственную дату 6 октября 2026. Переменная служит одновременно начальным значением и получателем нового значения.

  3. ВвестиДату вызывается с тремя аргументами. При Принято=Ложь выйти до нормализации и расчёта.

  4. После подтверждения проверить дату и свой диапазон 6–12 октября. НачалоДня отделяет прикладной день от времени внутри значения.

  5. Посчитать книги по 250 плюс собственную доставку 0/100. Числовое количество остаётся прежним, ни один документ не записывается.

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

  1. В своей совместимой базе 8 октября при количестве 3 даёт 850 и две Истина; 6 октября — 750. Отмена сохраняет данные.

  2. При НеИспользовать, другом имени конфигурации или веб-клиенте окно не вызывается. Для немодального режима используйте соседний ПоказатьВводДаты.

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

Старый датовый контракт объяснён на реальном собственном расчёте, с защитой среды и подтверждения.

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

  1. Возвращённое Булево не является датой. Дата после OK находится в локальной Введено.

  2. Не вызывайте синхронный ввод на сервере и не меняйте режим рабочего приложения ради примера.

  3. Этот календарный диапазон фиксирован для урока. Не выдавайте его за правило текущих сроков вашей конфигурации.

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

ВвестиЧисло: отличить булево подтверждение от самого количества

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

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

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

Подготовка

  1. В отдельной учебной базе платформы 8.5.1.1343 создайте внешнюю обработку УчебнаяФорма85 с пустой управляемой основной формой. Используйте тонкий клиент Windows.

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

  3. Не создавайте вручную ЗначениеПримера, ПолеПримера и кнопку: код создаёт их полностью. Каждый урок запускайте в отдельной копии своей формы.

  4. Сохраните свою EPF и откройте её в учебной базе. Собственное количество начинается с 3, цена книги задана в коде как 250; исходный расчёт равен 750.

  5. Связанный реквизит помечен как СохраняемыеДанные для изучения поведения формы. Это признак реквизита формы, а не автоматическая запись книги, файла или документа в базу.

  6. Команда расчёта имеет ИзменяетСохраняемыеДанные = Ложь. Уроки изменяют только свой интерфейс и значения собственной формы, не конфигурацию и не рабочие данные.

  7. Запуск и вид в 1С не проверены. Компоновку, сочетания клавиш и расположение команд осмотрите вручную в указанном клиенте; не переносите настройки на рабочие формы без отдельной проверки.

  8. В этой партии каждое окно ввода запускает собственная кнопка УчебноеДействие. Изучайте один полный модуль за раз; никакие значения ввода не исполняются как код.

  9. Только для синхронного варианта создайте отдельную пустую учебную конфигурацию с техническим именем УчебныеДиалоги85 и заранее разрешённой модальностью. Читайте её режим в конфигураторе; не меняйте рабочую базу ради урока. При ином имени или НеИспользовать пример откажется до диалога.

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    Новые = Новый Массив;
    ТипРеквизита = Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(2, 0, ДопустимыйЗнак.Неотрицательный));
    Новые.Добавить(Новый РеквизитФормы("ЗначениеПримера", ТипРеквизита, "", "Количество книг", Истина));
    ЭтаФорма.ИзменитьРеквизиты(Новые);
    ЭтаФорма.ЗначениеПримера = 3;
    Поле = Элементы.Добавить("ПолеПримера", Тип("ПолеФормы"));
    Поле.Вид = ВидПоляФормы.ПолеВвода;
    Поле.ПутьКДанным = "ЗначениеПримера";
    Поле.Заголовок = "Количество собственных книг";


    КомандаДействия = ЭтаФорма.Команды.Добавить("УчебноеДействие");
    КомандаДействия.Действие = "УчебноеДействие";
    КомандаДействия.Заголовок = "Выполнить собственный учебный шаг";
    КомандаДействия.Подсказка = "Действие только над данными учебной формы";
    КомандаДействия.ИзменяетСохраняемыеДанные = Ложь;
    Кнопка = Элементы.Добавить("КнопкаУчебноеДействие", Тип("КнопкаФормы"));
    Кнопка.ИмяКоманды = КомандаДействия.Имя;
    Кнопка.Заголовок = КомандаДействия.Заголовок;
КонецПроцедуры

&НаКлиенте
Процедура УчебноеДействие(Команда)
    #Если ВебКлиент Тогда
    Сообщить("Синхронный урок не выполняется в веб-клиенте; используйте обратный вызов");
    Возврат;
    #Иначе
    Если Не РазрешёнСобственныйСинхронныйВвод() Тогда
        Сообщить("Синхронный ввод недоступен для этого собственного стенда; настройки базы не менялись");
        Возврат;
    КонецЕсли;
    ДоВвода = ЗначениеПримера;
    Введено = ЗначениеПримера;
    Принято = ВвестиЧисло(Введено, "Сколько собственных книг: целое число от 1 до 10", 2, 0);
    Если Не Принято Тогда
        Сообщить("Отмена: собственные данные не менялись");
        Возврат;
    КонецЕсли;
    Если Введено = Неопределено Тогда
        Сообщить("Отмена: собственные данные не менялись");
        Возврат;
    КонецЕсли;
    Если ЗначениеПримера <> ДоВвода Тогда
        Сообщить("Количество изменилось за время диалога. Повторите ввод для актуальной заявки");
        Возврат;
    КонецЕсли;
    Если ТипЗнч(Введено) <> Тип("Число") Тогда
        ВызватьИсключение "Введённое количество должно быть числом";
    КонецЕсли;
    Если Введено < 1 ИЛИ Введено > 10 ИЛИ Введено <> Цел(Введено) Тогда
        ВызватьИсключение "Для собственной заявки нужно целое количество от 1 до 10";
    КонецЕсли;
    Цена = 250;
    Сумма = Введено * Цена;
    ЗначениеПримера = Введено;
    Сообщить(Сумма >= 250 И Сумма <= 2500);
    Сообщить(Сумма / Цена = ЗначениеПримера);
    Сообщить(СтрШаблон("Собственные книги: %1 × %2 = %3", ЗначениеПримера, Цена, Сумма));
    #КонецЕсли

КонецПроцедуры

&НаСервереБезКонтекста
Функция РазрешёнСобственныйСинхронныйВвод()
    Возврат Метаданные.РежимИспользованияМодальности <> Метаданные.СвойстваОбъектов.РежимИспользованияМодальности.НеИспользовать;
КонецФункции

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

  1. Сначала исключить веб-клиент препроцессором и проверить режим своей конфигурации на сервере. Отказ проверки не меняет настройки базы.

  2. Скопировать текущее количество в Введено. Это локальная переменная диалога, не ссылка на рабочий документ.

  3. ВвестиЧисло получает Введено, подсказку, длину 2 и точность 0. Принято — Булево; после OK число читается из Введено.

  4. При Ложь выйти до любых присваиваний реквизиту. После Истина проверить тип/диапазон/целочисленность и актуальность собственного снимка.

  5. Только допустимое число присвоить собственной форме и пересчитать книги по 250. Не умножать цену на Принято.

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

  1. В своей разрешённой конфигурации ввод 5 даёт количество 5, две Истина и 1250. При отмене реквизит не меняется.

  2. При имени конфигурации, отличном от УчебныеДиалоги85, или запрещённой модальности окно не вызывается. Для нового немодального кода используйте соседний урок.

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

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

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

  1. В веб-клиенте такой вызов вызывает исключение; в примере синхронная ветка исключена до него.

  2. Принято=Истина не означает количество 1. Новое число находится в изменённой локальной переменной Введено.

  3. НеИспользовать — основание отказаться от синхронного опыта. Пример не предлагает переключать модальность рабочей базы.

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

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

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

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

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