Тип: ТабличноеПоле, ПолеВвода, Форма, ПолеФормы, ФормаКлиентскогоПриложения, ТаблицаФормы. Содержит форму клиентского приложения или элемент управления, который является владельцем данной формы. При помощи этого свойства устанавливается связь между формой и владельцем формы. Например, форма элемента подчиненного справочника может иметь в качестве владельца форму элемента справочника владельца, из которой она была открыта. При открытии по текущей строке табличного поля в качестве владельца устанавливается табличное поле.
Полное описание, параметры и ограничения
ФормаКлиентскогоПриложения.ВладелецФормы (ClientApplicationForm.FormOwner)
ФормаКлиентскогоПриложения (ClientApplicationForm)
ВладелецФормы (FormOwner)
Доступен, начиная с версии 8.2.
Использование:
Чтение и запись.
Описание:
Тип: ТабличноеПоле, ПолеВвода, Форма, ПолеФормы, ФормаКлиентскогоПриложения, ТаблицаФормы.
Содержит форму клиентского приложения или элемент управления, который является владельцем данной формы. При помощи этого свойства устанавливается связь между формой и владельцем формы. Например, форма элемента подчиненного справочника может иметь в качестве владельца форму элемента справочника владельца, из которой она была открыта. При открытии по текущей строке табличного поля в качестве владельца устанавливается табличное поле.
Доступность:
Тонкий клиент, веб-клиент, мобильный клиент, толстый клиент, мобильное приложение (клиент).
Примечание:
Если у формы есть владелец, то в свойстве ЗакрыватьПриЗакрытииВладельца устанавливается необходимость закрытия данной формы при закрытии формы-владельца.
Использование в версии:
Доступен, начиная с версии 8.2.
Методическая информация
Практические примеры
Назначить владельца своему окну и закрывать его вместе с владельцем
ВладелецФормы изменяемый на клиенте: назначаем свою главную форму до открытия. Проверяем связь идентификаторами и включаем закрытие только этого дочернего экземпляра.
Где и как запускать
Полный модуль собственной общей управляемой формы УчебныеОкна85. Два экземпляра одной формы, тонкий клиент Windows; создание реквизитов на сервере, открытие/выбор/закрытие на клиенте.
Подготовка
Используйте отдельную пустую учебную конфигурацию 8.5.1.1343 без рабочих данных и тонкий управляемый клиент Windows. Создайте общую управляемую форму УчебныеОкна85; имя в дереве Общие → Общие формы должно совпадать с кодом.
На вкладке Параметры формы создайте Дочерняя, СтартовоеКоличество и КлючЗапроса. Значения передаются как Булево, Число и Строка. У всех трёх снимите Ключевой: пользовательский ключ уникальности задаётся отдельно четвёртым аргументом открытия.
Событию ПриСозданииНаСервере назначьте одноимённую процедуру. Вставьте весь приведённый модуль выбранного урока. Реквизиты, поле количества, команду и кнопку вручную не создавайте: их добавляет код.
Для запуска добавьте в свою учебную обработку пустую управляемую форму и команду ОткрытьУчебноеОкно. Через конструктор обработчика создайте клиентскую процедуру команды и поместите в её тело ровно ОткрытьФорму("ОбщаяФорма.УчебныеОкна85");. Эта внешняя кнопка открывает главное окно, а кнопки внутри урока открывают его дочерний экземпляр.
В каждом уроке используйте отдельную копию своей конфигурации/формы. Все экземпляры создаются из одного полного модуля: главное окно имеет Дочерняя=Ложь, второе получает Дочерняя=Истина и собственные параметры.
Количество главного окна первоначально 3, цена книги 250. В дочернем поле можно выбрать целое количество 1–10; никакой номенклатуры, документов, регистров, файлов, сети и печати не используется.
Запуск в 1С не проверялся. Статические проверки не доказывают появление окна, возврат событий или фактическое поведение темы: выполните контрольные действия только на своём учебном стенде.
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
Новые = Новый Массив;
ЧисловойТип = Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(2, 0, ДопустимыйЗнак.Неотрицательный));
Новые.Добавить(Новый РеквизитФормы("УчебноеКоличество", ЧисловойТип));
Новые.Добавить(Новый РеквизитФормы("ЭтоДочерняяФорма", Новый ОписаниеТипов("Булево")));
Новые.Добавить(Новый РеквизитФормы("УчебныйКлючЗапроса", Новый ОписаниеТипов("Строка")));
ЭтаФорма.ИзменитьРеквизиты(Новые);
ЭтаФорма.ЭтоДочерняяФорма = Ложь;
ЭтаФорма.УчебноеКоличество = 3;
ЭтаФорма.УчебныйКлючЗапроса = "";
Если ЭтаФорма.Параметры.Свойство("Дочерняя", ПризнакДочерней) Тогда
Если ТипЗнч(ПризнакДочерней) = Тип("Булево") Тогда
ЭтаФорма.ЭтоДочерняяФорма = ПризнакДочерней;
КонецЕсли;
КонецЕсли;
Если ЭтоДочерняяФорма Тогда
Если Не ЭтаФорма.Параметры.Свойство("СтартовоеКоличество", ПереданноеКоличество) Тогда
ВызватьИсключение "Нет собственного параметра СтартовоеКоличество";
КонецЕсли;
Если ТипЗнч(ПереданноеКоличество) <> Тип("Число") Тогда
ВызватьИсключение "СтартовоеКоличество должно быть числом";
КонецЕсли;
Если ПереданноеКоличество < 1 Или ПереданноеКоличество > 10 Или ПереданноеКоличество <> Цел(ПереданноеКоличество) Тогда
ВызватьИсключение "СтартовоеКоличество должно быть целым от 1 до 10";
КонецЕсли;
Если Не ЭтаФорма.Параметры.Свойство("КлючЗапроса", ПереданныйКлюч) Тогда
ВызватьИсключение "Нет собственного параметра КлючЗапроса";
КонецЕсли;
Если ТипЗнч(ПереданныйКлюч) <> Тип("Строка") Тогда
ВызватьИсключение "КлючЗапроса должен быть собственной строкой";
КонецЕсли;
Если ПустаяСтрока(ПереданныйКлюч) Тогда
ВызватьИсключение "Собственный ключ запроса не задан";
КонецЕсли;
ЭтаФорма.УчебноеКоличество = ПереданноеКоличество;
ЭтаФорма.УчебныйКлючЗапроса = ПереданныйКлюч;
КонецЕсли;
Поле = Элементы.Добавить("ПолеУчебногоКоличества", Тип("ПолеФормы"));
Поле.Вид = ВидПоляФормы.ПолеВвода;
Поле.ПутьКДанным = "УчебноеКоличество";
Поле.Заголовок = "Своих книг от 1 до 10";
Команда = Команды.Добавить("УчебноеДействие");
Команда.Действие = "ВыполнитьУчебноеДействие";
Команда.ИзменяетСохраняемыеДанные = Ложь;
Кнопка = Элементы.Добавить("КнопкаУчебногоДействия", Тип("КнопкаФормы"));
Кнопка.ИмяКоманды = Команда.Имя;
Если ЭтоДочерняяФорма Тогда
ЭтаФорма.Заголовок = "Собственное дочернее окно";
Команда.Заголовок = "Завершить собственный выбор";
Иначе
ЭтаФорма.Заголовок = "Главное учебное окно";
Команда.Заголовок = "Открыть собственное дочернее окно";
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ВыполнитьУчебноеДействие(Команда)
ПроверитьСвоёКоличество(УчебноеКоличество);
Если ЭтоДочерняяФорма Тогда
ЭтаФорма.Закрыть();
Возврат;
КонецЕсли;
ПараметрыДочерней = Новый Структура("Дочерняя,СтартовоеКоличество,КлючЗапроса", Истина, 3, "own-owner");
ДочерняяФорма = ПолучитьФорму("ОбщаяФорма.УчебныеОкна85", ПараметрыДочерней, Неопределено, Истина);
Если ДочерняяФорма = Неопределено Тогда
ВызватьИсключение "Своя общая форма не была получена";
КонецЕсли;
Если ТипЗнч(ДочерняяФорма) <> Тип("ФормаКлиентскогоПриложения") Тогда
ВызватьИсключение "Ожидалась своя управляемая форма";
КонецЕсли;
ДочерняяФорма.ВладелецФормы = ЭтаФорма;
ДочерняяФорма.ЗакрыватьПриЗакрытииВладельца = Истина;
ДочерняяФорма.РежимБлокировкиПриОткрытииОкна = РежимБлокировкиПриОткрытииОкнаФормы.НеБлокировать;
ДочерняяФорма.Открыть();
Сообщить(ДочерняяФорма.ВладелецФормы.УникальныйИдентификатор = ЭтаФорма.УникальныйИдентификатор);
Сообщить(ДочерняяФорма.ЗакрыватьПриЗакрытииВладельца);
Сообщить(ДочерняяФорма.Открыта());
Сообщить("Закройте своё главное окно крестиком: его собственное дочернее окно должно закрыться вместе с ним");
КонецПроцедуры
&НаКлиенте
Процедура ПроверитьСвоёКоличество(Знач Количество)
Если ТипЗнч(Количество) <> Тип("Число") Тогда
ВызватьИсключение "Количество должно быть числом";
КонецЕсли;
Если Количество < 1 Или Количество > 10 Или Количество <> Цел(Количество) Тогда
ВызватьИсключение "Выберите целое количество от 1 до 10";
КонецЕсли;
КонецПроцедуры
Разбор по шагам
Получить свой дочерний экземпляр без владельца. Проверить результат до настройки свойств.
ВладелецФормы в установленной справке имеет Чтение и запись и клиентскую доступность. Назначить ЭтаФорма до открытия; не объявлять это свойство readonly.
Установить ЗакрыватьПриЗакрытииВладельца=Истина только своему дочернему экземпляру.
Выбрать НеБлокировать, чтобы пользователь мог закрыть главное окно в этом опыте.
После открытия сравнить реальные идентификаторы назначенного владельца и текущей главной формы.
Закрыть главную форму вручную; наблюдать закрытие именно связанного дочернего окна, не всех окон клиента.
Как проверить результат
Три логические проверки Истина. При закрытии главного собственное дочернее окно тоже должно закрыться.
Для отдельного повторения поставьте ЗакрыватьПриЗакрытииВладельца=Ложь: дочернее останется открытым. Закройте его собственной кнопкой; не используйте потерянного владельца после закрытия.
Ожидаемый результат
Связь с владельцем создана реальным документированным присваиванием и используется в наблюдаемом жизненном цикле своих окон.
На что обратить внимание
Владелец может быть формой или элементом управления. Код этого урока назначает свою форму, поэтому чтение её УникальныйИдентификатор обосновано.
Свойство не отменяет обработчики запрета закрытия чужих форм. Здесь собственная учебная форма не хранит рабочие данные и не имеет такого обработчика.
После закрытия владельца не обращайтесь к его реквизитам через оставшуюся форму; во втором отрицательном опыте это намеренно не делается.
Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.