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