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