Очень часто возникает необходимость программно открыть какую-то форму выбора (документа, справочника), выбрать нужное значение, и передать это значение на форму, которая инициализировала открытие формы выбора. Давайте разберемся, как это делать.
Делается это при помощи метода ОткрытьФорму.
Для этой статьи я в конфигураторе 1С создам обработку, на форму этой обработки помещу команду, при выполнении которой, откроется форма выбора справочника Номенклатура, и запишу выбранное значение в реквизит формы обработки.
Замечу, что в моей конфигурации нет формы выбора
т.е. мы будем открывать автоматически сгенерированную форму выбора.
Поэтому в методе ОткрытьФорму, когда мы будем выбирать нужную управляемую форму 1С, то просто выбираем ФормаВыбора.
Для того, чтобы получить какое-то значение с формы нужно использовать шестой параметр метода ОткрытьФорму – ОписаниеОповещенияОЗакрытии, который имеет тип ОписаниеОповещение.
Алгоритм такой: первым делом мы создаем новый объект с типом ОписаниеОповещения, в параметрах конструктора объекта указываем экспортную процедуру формы, которая сработает после выбора нужного значения с открытой формы. Создаем эту процедуру, где будем обрабатывать выбранное значение. Она должна иметь два параметра: РезультатВыбора и ДополнительныеПараметры. Вот такой должен получиться код:
&НаКлиенте
Процедура ВыбратьНоменклатуру(Команда)
ОписаниеВыбора = Новый ОписаниеОповещения(«ОбработатьВыборНоменклатуры»,ЭтаФорма);
КонецПроцедуры
&НаКлиенте
Процедура ОбработатьВыборНоменклатуры(РезультатЗакрытия,ДопПараметры) Экспорт
Если Не ЗначениеЗаполнено(РезультатЗакрытия) Тогда
Возврат;
КонецЕсли;
ВыбраннаяНоменклатура = РезультатЗакрытия;
КонецПроцедуры
Где ВыбраннаяНоменклатура это реквизит формы.
Заметьте, процедура ОбработатьВыборНоменклатуры, которую мы указали в описании оповещения, обязательно должна быть экспортной.
Теперь нам осталась указать объект описание выбора в шестом параметре метода ОткрытьФорму
&НаКлиенте
Процедура ВыбратьНоменклатуру(Команда)
ОписаниеВыбора = Новый ОписаниеОповещения(«ОбработатьВыборНоменклатуры»,ЭтаФорма);
ОткрытьФорму(«Справочник.Номенклатура.ФормаВыбора»,,,,,,
ОписаниеВыбора,
РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);
КонецПроцедуры
И всё! Сейчас при выполнении команды, откроется форма выбора, и если какая-то номенклатура будет выбрана, то она запишется в реквизит формы в процедуре ОбработатьВыборНоменклатуры.