КонструкторФорматнойСтроки.ОткрытьАсинх

Методы · DoAsync

Асинхронная функция. Открывает конструктор форматной строки немодально.

Синтаксис

ОткрытьАсинх()
Полное описание, параметры и ограничения

КонструкторФорматнойСтроки.ОткрытьАсинх (FormatStringWizard.DoAsync)

КонструкторФорматнойСтроки (FormatStringWizard)

ОткрытьАсинх (DoAsync)

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

Синтаксис:
ОткрытьАсинх()
Возвращаемое значение:
Тип: Обещание.
Результат выполнения обещания: Текст - если конструктор был закрыт нажатием кнопки "OK", Неопределено - в противном случае.
Описание:

Асинхронная функция. Открывает конструктор форматной строки немодально.

Доступность:

Тонкий клиент, веб-клиент, толстый клиент.

См. также:
КонструкторФорматнойСтроки, метод ОткрытьМодально

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

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

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

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

Редактировать формат числа асинхронно и отличить отмену от пустого формата

ОткрытьАсинх возвращает обещание. После Ждать результатом является строка или Неопределено; результат не является Булево.

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

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

Подготовка

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

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

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

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

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

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

&НаКлиенте
Перем Занято;

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

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

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

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

  1. Создать собственный конструктор из текущей строковой настройки. ДоступныеТипы ограничить Число.

  2. До ожидания проверить исходный текст и доступность числового типа. Флаг Занято защищает от повторного открытия собственной команды.

  3. Ждать завершает немодальное открытие. Неопределено означает отмену; пустая строка — допустимый результат OK, а не отмена.

  4. Сначала вычислить новое представление, затем записать строку формата и образец в свои реквизиты. ИсходноеЧисло не присваивается.

  5. Сбросить Занято при успехе, отмене и ошибке. Не открывать модальное окно из асинхронного обработчика.

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

  1. До диалога две проверки Истина. При Отмена ФорматСуммы и Образец остаются прежними.

  2. При OK ещё две проверки Истина: число осталось 750 и числовым. Образец меняется согласно выбранному формату.

  3. Пустая строка после OK применяется как общий формат, не отбрасывается.

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

Есть полный современный обработчик формата с правильным ожиданием и веткой отмены.

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

  1. Не используйте Если Результат Тогда: обещание даёт строку/Неопределено, не булев ответ.

  2. ДоступныеТипы не преобразует исходные данные, а определяет вкладки конструктора.

  3. Генерируемые спецификаторы зависят от языка интерфейса. Не сравнивайте выбранную пользователем строку с единственным русским шаблоном.

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

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

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

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

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