13.10.2010

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

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

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

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

В командную панель этой формы перенесем три стандартные команды: ОК, Пропустить, Отмена:

Форма ПараметрыЗаполнения после своего закрытия одной из этих стандартных команд вернет код возврата диалога, значения которого описаны в системном перечислении КодВозвратаДиалога.

Теперь, чтобы открыть форму ПараметрыЗаполнения модально, в основной форме нашей обработки выполним следующий код. Сначала откроем форму ПараметрыЗаполнения модально, а затем проанализируем возвращаемый результат:

Копировать в буфер обмена

Результат = ОткрытьФормуМодально("Обработка.ЗаполнениеДанных.Форма.ПараметрыЗаполнения");
               
Если Результат = КодВозвратаДиалога.ОК Тогда
     // Действия в случае ввода данных

ИначеЕсли Результат = КодВозвратаДиалога.Пропустить Тогда
     // Действия в случае пропуска экрана; например, переход к следующему шагу мастера

ИначеЕсли Результат = КодВозвратаДиалога.Отмена Тогда
     // Действия в случае отказа от ввода данных

Иначе 
     // Действия во всех остальных случаях

КонецЕсли;