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

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

У ОткрытьМодально другой контракт: Истина/Ложь. Формат после OK читается из Текст; современным немодальным режимам этот вариант не навязывается.

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

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

Подготовка

  1. В отдельной своей конфигурации УчебнаяКонфигурацияСинтаксиса создайте новую внешнюю обработку с пустой управляемой основной формой.

  2. Добавьте команду НастроитьФормат и её кнопку, обработчик НастроитьФормат. Модуль целиком вставьте на уровне формы, не внутрь существующей процедуры.

  3. Назначьте событию ПриСозданииНаСервере одноимённый обработчик. Число, строка формата и образец создаются кодом. Не добавляйте одноимённые реквизиты вручную.

  4. Используйте тонкий/толстый клиент Windows 8.5.1.1343. Для первого опыта нажмите Отмена; для второго выберите иной формат числа и нажмите OK.

  5. ИсходноеЧисло=750 находится только в памяти формы. Меняется формат и его строковое представление, не число, не цена товара и не данные базы.

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

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

&НаКлиенте
Процедура НастроитьФормат(Команда)
    Если НЕ РазрешёнУчебныйМодальныйОпыт() Тогда
        Сообщить("В этой учебной конфигурации модальность запрещена; используйте асинхронный урок");
        Возврат;
    КонецЕсли;
    Конструктор = Новый КонструкторФорматнойСтроки(ФорматСуммы);
    Конструктор.ДоступныеТипы = Новый ОписаниеТипов("Число");
    Если Конструктор.ОткрытьМодально() Тогда
        ПрименитьСвойФормат(Конструктор.Текст);
    Иначе
        Сообщить("Отмена: исходный формат не менялся");
    КонецЕсли;
КонецПроцедуры

&НаКлиенте
Процедура ПрименитьСвойФормат(НовыйФормат)
    Если ТипЗнч(НовыйФормат) <> Тип("Строка") Тогда
        ВызватьИсключение "Ожидалась строка форматирования из собственного конструктора";
    КонецЕсли;
    НовыйОбразец = Формат(ИсходноеЧисло, НовыйФормат);
    ФорматСуммы = НовыйФормат;
    Образец = НовыйОбразец;
    Сообщить(ИсходноеЧисло = 750);
    Сообщить(ТипЗнч(ИсходноеЧисло) = Тип("Число"));
    Сообщить("Только новое представление: " + Образец);
КонецПроцедуры

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

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

  1. На сервере проверить имя собственного стенда и его режим использования модальности. При НеИспользовать не вызывать модальное открытие.

  2. Создать конструктор с текущим форматом и ограничением на числовой тип.

  3. ОткрытьМодально возвращает булев ответ. Только при Истина прочитать Текст и применить формат.

  4. При Ложь оставить свои данные. Этот пример нужен для чтения старого кода; при новом интерфейсе предпочтительны два немодальных урока.

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

  1. При запрещённой модальности диалог не открывается и выводится объяснение.

  2. При разрешённом модальном опыте Отмена сохраняет данные, OK обновляет только формат и образец. Две проверки сохранения числа Истина.

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

Контракты трёх вариантов открывания разделены без предложения менять рабочую конфигурацию.

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

  1. Булев ответ модального метода нельзя использовать как строку формата.

  2. Нельзя переносить модальное открытие в конфигурацию с НеИспользовать ради старого образца.

  3. Не сравнивайте контракт ОткрытьМодально с результатом ожидания ОткрытьАсинх.

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

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

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

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

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