13.10.2010
Рассмотрим такую задачу. В процессе работы с формой нужно ввести некоторые дополнительные данные. Причем дальнейшая работа с программой должна быть невозможна до тех пор, пока пользователь не введет эти данные или пока он явно не откажется от ввода этих данных. При этом в вызывающем коде необходимо узнать результат дейтвий пользователя: он ввел данные или отказался от их ввода.
Для этих целей форма для ввода дополнительных данных открывается в модальном режиме. Это значит, что до тех пор, пока она не будет закрыта, дальнейшее выполнение кода на встроенном языке будет остановлено. В форме для ввода дополнительных данных используются стандартные команды формы. Таким образом, после того, как форма будет закрыта, исполнение кода продолжится и в вызывающем коде можно проанализировать, какой именно командой пользователь закрыл эту форму.
В качестве примера рассмотрим некоторую абстрактную обработку. Кроме основной формы, - Форма, - создадим у нее форму ПараметрыЗаполнения. Эта форма будет открываться модально из основной формы и возвращать коды стандартных команд.
В командную панель этой формы перенесем три стандартные команды: ОК, Пропустить, Отмена:
Форма ПараметрыЗаполнения после своего закрытия одной из этих стандартных команд вернет код возврата диалога, значения которого описаны в системном перечислении КодВозвратаДиалога.
Теперь, чтобы открыть форму ПараметрыЗаполнения модально, в основной форме нашей обработки выполним следующий код. Сначала откроем форму ПараметрыЗаполнения модально, а затем проанализируем возвращаемый результат:
Копировать в буфер обменаРезультат = ОткрытьФормуМодально("Обработка.ЗаполнениеДанных.Форма.ПараметрыЗаполнения");
Если Результат = КодВозвратаДиалога.ОК Тогда
// Действия в случае ввода данных
ИначеЕсли Результат = КодВозвратаДиалога.Пропустить Тогда
// Действия в случае пропуска экрана; например, переход к следующему шагу мастера
ИначеЕсли Результат = КодВозвратаДиалога.Отмена Тогда
// Действия в случае отказа от ввода данных
Иначе
// Действия во всех остальных случаях
КонецЕсли;