Рассмотрим несколько основных примеров открытия управляемых форм для разных случаев.
1) Необходимо открыть форму нового объекта (документа, справочника или др.) на примере документа Реализация товаров и услуг:
&НаКлиенте
Процедура КомандаОткрытьФорму(Команда)
СтруктураПараметров = Новый Структура;
ФормаДокумента = ОткрытьФорму("Документ.РеализацияТоваровУслуг.ФормаОбъекта",СтруктураПараметров,ЭтаФорма);
// По необходимости можно сразу же заполнить нужные реквизиты объекта
ФормаДокумента.Объект.Комментарий = "Документ создан без основания";
КонецПроцедуры
В данном примере создается новый объект и заполняется по умолчанию без основания, как прописано в обработке заполнения в модуле объекта. В СтруктураПараметров по надобности можно передать необходимые параметры, которые можно обработать в открываемой форме в обработчике ПриСозданииНаСервере.
2) Необходимо открыть форму нового объекта (документа, справочника или др.) на примере документа Реализация товаров и услуг, и произвести заполнение на основании Заказа клиента:
&НаКлиенте
Процедура КомандаОткрытьФорму(Команда)
// ЗаказКлиента - это ссылка на конкретный документ
СтруктураПараметров = Новый Структура("Основание", ЗаказКлиента);
ФормаДокумента = ОткрытьФорму("Документ.РеализацияТоваровУслуг.ФормаОбъекта",СтруктураПараметров,ЭтаФорма);
// По необходимости можно сразу же заполнить нужные реквизиты объекта
ФормаДокумента.Объект.Комментарий = "Документ создан на основании документа Заказ клиента";
КонецПроцедуры
В данном примере создается новый объект и заполняется на оснвании документа Заказ клиента, как прописано в обработке заполнения в модуле объекта. В СтруктураПараметров по надобности можно передать необходимые параметры, которые можно обработать в открываемой форме в обработчике ПриСозданииНаСервере.
3) Необходимо открыть форму уже созданного объекта (документа, справочника или др.) на примере документа Заказ клиента:
&НаКлиенте
Процедура КомандаОткрытьФорму(Команда)
// ЗаказКлиента - это ссылка на конкретный документ
СтруктураПараметров = Новый Структура("Ключ", ЗаказКлиента);
ФормаДокумента = ОткрытьФорму("Документ.ЗаказКлиента.ФормаОбъекта",СтруктураПараметров,ЭтаФорма);
КонецПроцедуры
В данном примере, по сути, открывается форма уже записанного документа в базе данных.
4) Необходимо открыть форму выбора Заказов клиента, и произвести программную обработку выбранного документа.
Первый способ - воспользуемся стандартным обработчиком ОбработкаВыбора на форме, из которой производим открытие формы выбора Заказов клиента.
Здесь важно обязательно в методе ОткрытьФорму передать третьим параметром значение ЭтаФорма, который указывает, что владельцем для открываемой формы выбора является данная форма, из которой мы производим открытие:
&НаКлиенте
Процедура КомандаОткрытьФорму(Команда)
ПараметрыФормы = Новый Структура;
ФормаВыбора = ОткрытьФорму("Документ.ЗаказКлиента.ФормаВыбора",ПараметрыФормы,ЭтаФорма);
КонецПроцедуры
В обработчике ОбработкаВыбора обрабатываем полученный результат:
&НаКлиенте
Процедура ОбработкаВыбора(ВыбранноеЗначение, ИсточникВыбора)
// Получаем выбранный Заказ клиента и производим с ним необходимые действия
ВыбранныйЗаказКлиента = ВыбранноеЗначение;
КонецПроцедуры
Второй способ - воспользуемся методом оповещения:
&НаКлиенте
Процедура КомандаОткрытьФорму(Команда)
ПараметрыОповещения = Новый Структура;
ПараметрыОповещения.Вставить("ПараметрДляПримера",100); // Данный параметр передали для примера
Оповещение = Новый ОписаниеОповещения("ВыборЗаказаКлиентаЗавершение",ЭтотОбъект,ПараметрыОповещения);
ПараметрыФормы = Новый Структура;
ФормаДокумента = ОткрытьФорму("Документ.ЗаказКлиента.ФормаВыбора",ПараметрыФормы,,,,,Оповещение);
КонецПроцедуры
&НаКлиенте
Процедура ВыборЗаказаКлиентаЗавершение(ВыбранноеЗначение, ДополнительныеПараметры) Экспорт
Если ВыбранноеЗначение <> Неопределено Тогда
// Получаем выбранный Заказ клиента и производим с ним необходимые действия
ВыбранныйЗаказКлиента = ВыбранноеЗначение;
// в структуре ДополнительныеПараметры будет находится свойство "ПараметрДляПримера" со значением 100, которое было передано в ПараметрыОповещения
КонецЕсли;
КонецПроцедуры
5) Необходимо просто открыть форму обработки и заполнить ее какой-либо реквизит:
&НаКлиенте
Процедура КомандаОткрытьФорму(Команда)
СтруктураПараметров = Новый Структура;
ФормаОбработки = ОткрытьФорму("Обработка.ПечатьЦенника.Форма",СтруктураПараметров,ЭтаФорма);
ФормаОбработки.Объект.Штрихкод = "123456789";
КонецПроцедуры
6) Необходимо открыть любую произвольную форму и обработать результат после ее закрытия. Например, в Заказе клиента мы хотим открыть специальную форму, на которой нужно выбрать сборщика и при утверждении закрыть эту форму и вернуть выбранного сборщика. Здесь также воспользуемся методом оповещения:
&НаКлиенте
Процедура КомандаОткрытьФорму(Команда)
ПараметрыОповещения = Новый Структура;
Оповещение = Новый ОписаниеОповещения("УстановкаСборщикаЗавершение",ЭтотОбъект,ПараметрыОповещения);
ПараметрыФормы = Новый Структура;
ФормаДокумента = ОткрытьФорму("Документ.ЗаказКлиента.Форма.ФормаДляУстановкиСборщика",ПараметрыФормы,,,,,Оповещение);
КонецПроцедуры
В открываемой форме для указания сборщика ФормаДляУстановкиСборщика будет находиться поле для выбора сборщика и, например, кнопка "Выбрать сборщика" с кодом:
&НаКлиенте
Процедура ВыбратьСборщика(Команда)
Закрыть(ВыбранныйСборщик);
КонецПроцедуры
И на форме Заказа клиента, откуда открывали форму для выбора сборщика, ловим оповещение:
&НаКлиенте
Процедура УстановкаСборщикаЗавершение(ВыбранноеЗначение, ПараметрыОповещения) Экспорт
Если ВыбранноеЗначение <> Неопределено Тогда
// Получаем выбранного сборщика и производим с ним необходимые действия
ВыбранныйСборщик = ВыбранноеЗначение;
КонецЕсли;
КонецПроцедуры