13.10.2010

Как открыть форму для ввода дополнительных данных и передать введенное значение в вызывающий код?

Рассмотрим такую задачу. В процессе работы с формой нужно ввести некоторые дополнительные сложные данные. Для их ввода используется отдельная форма. Причем дальнейшая работа с программой должна быть невозможна до тех пор, пока пользователь не введет эти данные или пока он явно не откажется от ввода этих данных. Данные, введенные пользователем, необходимо вернуть в вызывающий код для дальнейшей обработки.

Для этих целей форма для ввода дополнительных данных открывается в модальном режиме. Это значит, что до тех пор, пока она не будет закрыта, дальнейшее выполнение кода на встроенном языке будет остановлено. В форме для ввода дополнительных данных создается команда, закрывающая форму и возвращающая данные, введенные пользователем.

В качестве примера рассмотрим некоторую абстрактную обработку. Кроме основной формы, - Форма, - создадим у нее форму ДобавлениеТекста. Эта форма будет открываться модально. И пользователь будет вводить в нее некоторый текст, предназначенный для дальнейшей обработки. Этот текст хранится в реквизите формы Текст.

Добавим в эту форму команду ЗакончитьВводТекста, по которой будем возвращать введенный пользователем текст:

Обработчик этой команды будет выглядеть просто:

Копировать в буфер обмена
Закрыть(Текст);

А в основной форме обработки выполним следующий код, открывающий форму ДобавлениеТекста модально и обрабатывающий возвращаемый текст:

Копировать в буфер обмена
Результат = ОткрытьФормуМодально("Обработка.ЗаполнениеДанных.Форма.ДобавлениеТекста");

// Действия, обрабатывающие текст, содержащийся в переменной Результат
...