С помощью данного объекта осуществляется управление конструктором форматной строки.
Примеры платформы
Конструктор = Новый КонструкторФорматнойСтроки;
Конструктор.ДоступныеТипы = Новый ОписаниеТипов("Число, Дата");
Если Конструктор.ОткрытьМодально() Тогда
ФорматнаяСтрока = Конструктор.Текст;
КонецЕсли;Полное описание, параметры и ограничения
КонструкторФорматнойСтроки (FormatStringWizard)
КонструкторФорматнойСтроки (FormatStringWizard)
Доступен, начиная с версии 8.0.
Свойства:
ДоступныеТипы (AvailableTypes)
Текст (Text)
Методы:
ОткрытьАсинх (DoAsync)
ОткрытьМодально (DoModal)
Показать (Show)
Конструкторы:
По умолчанию
Описание:
С помощью данного объекта осуществляется управление конструктором форматной строки.
Доступность:
Тонкий клиент, веб-клиент, мобильный клиент, толстый клиент.
Сериализуется.
Пример:
Конструктор = Новый КонструкторФорматнойСтроки;
// форматная строка только для типов Число и Дата
Конструктор.ДоступныеТипы = Новый ОписаниеТипов("Число, Дата");
Если Конструктор.ОткрытьМодально() Тогда
// обработка форматной строки
ФорматнаяСтрока = Конструктор.Текст;
// ...
КонецЕсли;
Использование в версии:
Доступен, начиная с версии 8.0.
Методическая информация
Практические примеры
Редактировать формат числа асинхронно и отличить отмену от пустого формата
ОткрытьАсинх возвращает обещание. После Ждать результатом является строка или Неопределено; результат не является Булево.
Где и как запускать
Полный модуль собственной управляемой формы внешней учебной обработки.
Подготовка
В отдельной своей конфигурации УчебнаяКонфигурацияСинтаксиса создайте новую внешнюю обработку с пустой управляемой основной формой.
Добавьте команду НастроитьФормат и её кнопку, обработчик НастроитьФормат. Модуль целиком вставьте на уровне формы, не внутрь существующей процедуры.
Назначьте событию ПриСозданииНаСервере одноимённый обработчик. Число, строка формата и образец создаются кодом. Не добавляйте одноимённые реквизиты вручную.
Используйте тонкий/толстый клиент Windows 8.5.1.1343. Для первого опыта нажмите Отмена; для второго выберите иной формат числа и нажмите OK.
ИсходноеЧисло=750 находится только в памяти формы. Меняется формат и его строковое представление, не число, не цена товара и не данные базы.
Модальный урок намеренно откажется при режиме НеИспользовать. Не меняйте режим рабочей конфигурации ради упражнения; основной современный вариант — асинхронный.
&НаКлиенте
Перем Занято;
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
Реквизиты = Новый Массив;
Реквизиты.Добавить(Новый РеквизитФормы("ИсходноеЧисло", Новый ОписаниеТипов("Число")));
Реквизиты.Добавить(Новый РеквизитФормы("ФорматСуммы", Новый ОписаниеТипов("Строка")));
Реквизиты.Добавить(Новый РеквизитФормы("Образец", Новый ОписаниеТипов("Строка")));
ЭтаФорма.ИзменитьРеквизиты(Реквизиты);
ИсходноеЧисло = 750;
ФорматСуммы = "ЧДЦ=2;ЧГ=0";
Образец = Формат(ИсходноеЧисло, ФорматСуммы);
Для Каждого Имя Из СтрРазделить("ИсходноеЧисло,ФорматСуммы,Образец", ",") Цикл
Поле = ЭтаФорма.Элементы.Добавить("УчебноеПоле" + Имя, Тип("ПолеФормы"));
Поле.Вид = ВидПоляФормы.ПолеНадписи;
Поле.ПутьКДанным = Имя;
Поле.Заголовок = Имя;
КонецЦикла;
КонецПроцедуры
&НаКлиенте
Асинх Процедура НастроитьФормат(Команда)
Если Занято = Истина Тогда
Сообщить("Дождитесь закрытия собственного конструктора");
Возврат;
КонецЕсли;
Конструктор = Новый КонструкторФорматнойСтроки(ФорматСуммы);
Конструктор.ДоступныеТипы = Новый ОписаниеТипов("Число");
Сообщить(Конструктор.Текст = ФорматСуммы);
Сообщить(Конструктор.ДоступныеТипы.СодержитТип(Тип("Число")));
Занято = Истина;
Попытка
Результат = Ждать Конструктор.ОткрытьАсинх();
Если Результат = Неопределено Тогда
Сообщить("Отмена: прежний формат и число сохранены");
Иначе
ПрименитьСвойФормат(Результат);
КонецЕсли;
Исключение
Занято = Ложь;
ВызватьИсключение;
КонецПопытки;
Занято = Ложь;
КонецПроцедуры
&НаКлиенте
Процедура ПрименитьСвойФормат(НовыйФормат)
Если ТипЗнч(НовыйФормат) <> Тип("Строка") Тогда
ВызватьИсключение "Ожидалась строка форматирования из собственного конструктора";
КонецЕсли;
НовыйОбразец = Формат(ИсходноеЧисло, НовыйФормат);
ФорматСуммы = НовыйФормат;
Образец = НовыйОбразец;
Сообщить(ИсходноеЧисло = 750);
Сообщить(ТипЗнч(ИсходноеЧисло) = Тип("Число"));
Сообщить("Только новое представление: " + Образец);
КонецПроцедурыРазбор по шагам
Создать собственный конструктор из текущей строковой настройки. ДоступныеТипы ограничить Число.
До ожидания проверить исходный текст и доступность числового типа. Флаг Занято защищает от повторного открытия собственной команды.
Ждать завершает немодальное открытие. Неопределено означает отмену; пустая строка — допустимый результат OK, а не отмена.
Сначала вычислить новое представление, затем записать строку формата и образец в свои реквизиты. ИсходноеЧисло не присваивается.
Сбросить Занято при успехе, отмене и ошибке. Не открывать модальное окно из асинхронного обработчика.
Как проверить результат
До диалога две проверки Истина. При Отмена ФорматСуммы и Образец остаются прежними.
При OK ещё две проверки Истина: число осталось 750 и числовым. Образец меняется согласно выбранному формату.
Пустая строка после OK применяется как общий формат, не отбрасывается.
Ожидаемый результат
Есть полный современный обработчик формата с правильным ожиданием и веткой отмены.
На что обратить внимание
Не используйте Если Результат Тогда: обещание даёт строку/Неопределено, не булев ответ.
ДоступныеТипы не преобразует исходные данные, а определяет вкладки конструктора.
Генерируемые спецификаторы зависят от языка интерфейса. Не сравнивайте выбранную пользователем строку с единственным русским шаблоном.
Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.
Получить формат через обратный вызов и сохранить собственный конструктор до закрытия
Показать не возвращает выбранную строку. Её получает экспортный обработчик закрытия вместе с собственными дополнительными параметрами.
Где и как запускать
Полный модуль собственной управляемой формы внешней учебной обработки.
Подготовка
В отдельной своей конфигурации УчебнаяКонфигурацияСинтаксиса создайте новую внешнюю обработку с пустой управляемой основной формой.
Добавьте команду НастроитьФормат и её кнопку, обработчик НастроитьФормат. Модуль целиком вставьте на уровне формы, не внутрь существующей процедуры.
Назначьте событию ПриСозданииНаСервере одноимённый обработчик. Число, строка формата и образец создаются кодом. Не добавляйте одноимённые реквизиты вручную.
Используйте тонкий/толстый клиент Windows 8.5.1.1343. Для первого опыта нажмите Отмена; для второго выберите иной формат числа и нажмите OK.
ИсходноеЧисло=750 находится только в памяти формы. Меняется формат и его строковое представление, не число, не цена товара и не данные базы.
Модальный урок намеренно откажется при режиме НеИспользовать. Не меняйте режим рабочей конфигурации ради упражнения; основной современный вариант — асинхронный.
&НаКлиенте
Перем Занято;
&НаКлиенте
Перем УчебныйКонструктор;
&НаКлиенте
Перем УчебныйКонтекст;
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
Реквизиты = Новый Массив;
Реквизиты.Добавить(Новый РеквизитФормы("ИсходноеЧисло", Новый ОписаниеТипов("Число")));
Реквизиты.Добавить(Новый РеквизитФормы("ФорматСуммы", Новый ОписаниеТипов("Строка")));
Реквизиты.Добавить(Новый РеквизитФормы("Образец", Новый ОписаниеТипов("Строка")));
ЭтаФорма.ИзменитьРеквизиты(Реквизиты);
ИсходноеЧисло = 750;
ФорматСуммы = "ЧДЦ=2;ЧГ=0";
Образец = Формат(ИсходноеЧисло, ФорматСуммы);
Для Каждого Имя Из СтрРазделить("ИсходноеЧисло,ФорматСуммы,Образец", ",") Цикл
Поле = ЭтаФорма.Элементы.Добавить("УчебноеПоле" + Имя, Тип("ПолеФормы"));
Поле.Вид = ВидПоляФормы.ПолеНадписи;
Поле.ПутьКДанным = Имя;
Поле.Заголовок = Имя;
КонецЦикла;
КонецПроцедуры
&НаКлиенте
Процедура НастроитьФормат(Команда)
Если Занято = Истина Тогда
Сообщить("Дождитесь закрытия своего конструктора; при ошибке запуска закройте только эту учебную форму");
Возврат;
КонецЕсли;
УчебныйКонструктор = Новый КонструкторФорматнойСтроки;
УчебныйКонструктор.Текст = ФорматСуммы;
УчебныйКонструктор.ДоступныеТипы = Новый ОписаниеТипов("Число");
УчебныйКонтекст = Новый Структура("Маркер", Новый УникальныйИдентификатор);
Оповещение = Новый ОписаниеОповещения("КонструкторФорматаЗакрыт", ЭтаФорма, УчебныйКонтекст);
Занято = Истина;
Попытка
УчебныйКонструктор.Показать(Оповещение);
Исключение
Сообщить("Запуск завершился ошибкой; занятость сохранена до закрытия собственного диалога или учебной формы: " + ОписаниеОшибки());
ВызватьИсключение;
КонецПопытки;
КонецПроцедуры
&НаКлиенте
Процедура КонструкторФорматаЗакрыт(Результат, ДополнительныеПараметры) Экспорт
Если УчебныйКонтекст = Неопределено Тогда
Возврат;
КонецЕсли;
Если ДополнительныеПараметры <> УчебныйКонтекст Тогда
Возврат;
КонецЕсли;
Попытка
Если Результат = Неопределено Тогда
Сообщить("Отмена: формат и число не менялись");
Иначе
ПрименитьСвойФормат(Результат);
КонецЕсли;
Исключение
УчебныйКонструктор = Неопределено;
УчебныйКонтекст = Неопределено;
Занято = Ложь;
ВызватьИсключение;
КонецПопытки;
УчебныйКонструктор = Неопределено;
УчебныйКонтекст = Неопределено;
Занято = Ложь;
КонецПроцедуры
&НаКлиенте
Процедура ПрименитьСвойФормат(НовыйФормат)
Если ТипЗнч(НовыйФормат) <> Тип("Строка") Тогда
ВызватьИсключение "Ожидалась строка форматирования из собственного конструктора";
КонецЕсли;
НовыйОбразец = Формат(ИсходноеЧисло, НовыйФормат);
ФорматСуммы = НовыйФормат;
Образец = НовыйОбразец;
Сообщить(ИсходноеЧисло = 750);
Сообщить(ТипЗнч(ИсходноеЧисло) = Тип("Число"));
Сообщить("Только новое представление: " + Образец);
КонецПроцедурыРазбор по шагам
Держать конструктор и уникальный контекст в клиентских переменных модуля, а не очищать их сразу после Показать.
ОписаниеОповещения указывает экспортный обработчик своей формы. Его сигнатура Результат, ДополнительныеПараметры, без выдуманного третьего параметра ошибки.
Показать только запускает диалог. Выбранный формат приходит после закрытия в callback, не возвращается из Показать.
Проверить принадлежность контекста. На отмене ничего не применять, на строковом результате обновить только свои реквизиты.
Освободить свои ссылки и занятость только после обработки закрытия. При неопределённой ошибке запуска не начинать второй диалог поверх потенциально первого.
Как проверить результат
При Отмена число, формат и образец остаются прежними; после callback команду можно нажать снова.
При OK число сохраняет значение 750 и числовой тип, образец соответствует выбранному формату.
При ошибке запуска блокировка сохраняется: закройте только собственную учебную форму, не чужие окна приложения.
Ожидаемый результат
Полный немодальный пример показывает передачу результата, время жизни конструктора и принадлежность callback.
На что обратить внимание
Не присваивайте Показать переменной результата.
Обработчик закрытия должен быть Экспорт, иначе его не найдёт оповещение.
Формат чисел не является безопасной маской пароля или проверкой диапазона введённого значения.
Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.