1С:Предприятие 8
Система программ

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

25.06.2012

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

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

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

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

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

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

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