[ Вопрос дня ] В каком порядке будет установлена видимость элемента управляемой формы?

Доброго дня, коллеги!

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

Итак, общеизвестно, что в платформе есть метод глобального контекста ОткрытьФорму(), при помощи которого рекомендуется открывать управляемые формы. В одном из занятий курса по разработке интерфейсов и форм рассказывалось, что при использовании этого метода можно получить указатель на форму и выполнить с ней различные действия: например, управлять видимостью элементов и т.д. Наш внимательный слушатель сходу смоделировал такой кейс и задал следующий вопрос:

Вопрос

Открываем форму:

Форма = ОткрытьФорму("Справочник.Номенклатура.ФормаЭлемента");
Форма.Элементы.Наименование.Видимость = Ложь;

А в обработчике ПриОткрытии формы элемента укажем:

Элементы.Наименование.Видимость = Истина;

В каком порядке будет выполнен код? Насколько я понимаю, сначала будет выполнен тот код, который написан после помещения указателя на форму в переменную, а уже потом код в самой форме в методах ПриСозданииНаСервере и ПриОткрытии. Или еще проще: какое значение видимости будет у элемента «Наименование»?

Ответ

Значение видимости будет «Ложь»;

Теперь подробнее:

Форма = ОткрытьФорму(“Справочник.Номенклатура.ФормаЭлемента”); // в этот момент создается форма на сервере (срабатывает обработчик “ПриСозданииНаСервере”) и форма возвращается на клиент и открывается (срабатывает обработчик “ПриОткрытии”)
Форма.Элементы.Наименование.Видимость = Ложь; // далее срабатывает ваш код

Если же вместо ОткрытьФорму вы используете метод ПолучитьФорму

Форма = ПолучитьФорму(“Справочник.Номенклатура.ФормаЭлемента”); // в этот момент создается форма на сервере (срабатывает обработчик “ПриСозданииНаСервере”) и форма возвращается на клиент. Обработчик “При открытии” не срабатывает
Форма.Элементы.Наименование.Видимость = Ложь; // далее срабатывает ваш код
Форма.Открыть(); // срабатывает обработчик “ПриОткрытии”

Какой вывод можно сделать по разбору нашего вопроса?

Если мы хотим как-то параметризировать нашу форму при открытии (как в нашем случае – установив видимость какого-то элемента формы), то лучше передать какой-то параметр(-ы) в метод ОткрытьФорму(). У него как раз для этих целей служит второй параметр.

Кстати! В системе стандартов и методик разработки конфигураций для платформы «1С:Предприятие» есть отдельная статья, касающаяся использования данного метода, и мы настоятельно рекомендуем с ней ознакомиться.

Завтра рассмотрим вопрос, который рано или поздно задают большинство разработчиков 1С, сталкивающиеся с коллизией параллельной работы в платформе «1С:Предприятие 8» :)

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Вход на сайт

Зарегистрироваться

Подтверждение регистрации будет отправлено на указанный e-mail.

Я подтверждаю, что ознакомлен(а) с Пользовательским соглашением, принимаю его условия и даю свое согласие на обработку моих персональных данных.

Восстановить доступ

E-mail или логин

Ссылка на создание нового пароля будет отправлена на указанный e-mail.