ПолеФормы.Родитель

Свойства · Parent

Тип: ГруппаФормы, ФормаКлиентскогоПриложения, ТаблицаФормы. Содержит ссылку на родительский элемент.

Полное описание, параметры и ограничения

ПолеФормы.Родитель (FormField.Parent)

ПолеФормы (FormField)

Родитель (Parent)

Доступен, начиная с версии 8.2.

Использование:
Только чтение.
Описание:
Тип: ГруппаФормы, ФормаКлиентскогоПриложения, ТаблицаФормы.
Содержит ссылку на родительский элемент.
Доступность:

Тонкий клиент, веб-клиент, мобильный клиент, сервер, толстый клиент, мобильное приложение (клиент), мобильное приложение (сервер), мобильный автономный сервер.

Использование в версии:

Доступен, начиная с версии 8.2.

Методическая информация

Практические примеры

Проверить, что поле действительно размещено в собственной таблице

Конкретный созданный элемент ТоварыКоличество должен быть ребёнком ТаблицаТоваров. Проверка помогает обнаружить ошибочную привязку или размещение поля вне таблицы.

Где и как запускать

Модуль новой управляемой формы учебной внешней обработки. Код содержит готовые процедуры с директивами; вставляйте на уровне модуля, не внутрь другого обработчика. Каждую задачу запускайте в отдельной копии формы.

Подготовка

  1. В учебной базе: Файл → Новый → Внешняя обработка. Создайте управляемую форму и назначьте её основной. Дайте обработке имя УчебнаяТаблица.

  2. Не добавляйте вручную реквизит Товары и одноимённые элементы: код создаст их при открытии. Модуль формы для этой задачи должен быть пустым.

  3. В свойствах формы → События свяжите ПриСозданииНаСервере с одноимённой процедурой. Сохраните отдельную учебную EPF и откройте через Файл → Открыть.

  4. Данные Книга/Ручка создаются в памяти формы. Справочники, документы и регистры вашей конфигурации не читаются и не записываются.

  5. Проверяйте в настольном тонком/толстом или веб-клиенте 8.5.1.1343, не в мобильном приложении. Для каждого урока отдельная учебная форма с пустым модулем.

  6. Изменение учебных строк остаётся только в открытой форме. При её новом открытии снова создаются Книга/3 и Ручка/1. Настройки таблицы не являются правами доступа к данным.


&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    НовыеРеквизиты = Новый Массив;
    НовыеРеквизиты.Добавить(Новый РеквизитФормы("Товары", Новый ОписаниеТипов("ТаблицаЗначений")));
    НовыеРеквизиты.Добавить(Новый РеквизитФормы("Код", Новый ОписаниеТипов("Строка"), "Товары", "Код"));
    НовыеРеквизиты.Добавить(Новый РеквизитФормы("Наименование", Новый ОписаниеТипов("Строка"), "Товары", "Название"));
    НовыеРеквизиты.Добавить(Новый РеквизитФормы("Количество", Новый ОписаниеТипов("Число",
        Новый КвалификаторыЧисла(9, 0, ДопустимыйЗнак.Неотрицательный)), "Товары", "Количество"));
    ЭтаФорма.ИзменитьРеквизиты(НовыеРеквизиты);
    Данные = Новый ТаблицаЗначений;
    Данные.Колонки.Добавить("Код", Новый ОписаниеТипов("Строка"));
    Данные.Колонки.Добавить("Наименование", Новый ОписаниеТипов("Строка"));
    Данные.Колонки.Добавить("Количество", Новый ОписаниеТипов("Число",
        Новый КвалификаторыЧисла(9, 0, ДопустимыйЗнак.Неотрицательный)));

    СтрокаТовара = Данные.Добавить();
    СтрокаТовара.Код = "A-01";
    СтрокаТовара.Наименование = "Книга";
    СтрокаТовара.Количество = 3;
    СтрокаТовара = Данные.Добавить();
    СтрокаТовара.Код = "B-02";
    СтрокаТовара.Наименование = "Ручка";
    СтрокаТовара.Количество = 1;

    ЭтаФорма.ЗначениеВРеквизитФормы(Данные, "Товары");
    Таблица = ЭтаФорма.Элементы.Добавить("ТаблицаТоваров", Тип("ТаблицаФормы"));
    Таблица.ПутьКДанным = "Товары";
    Таблица.Заголовок = "Учебные товары";
    Таблица.Шапка = Истина;
    Таблица.АвтоВводНезаполненного = Ложь;
    Таблица.АвтоВводНовойСтроки = Ложь;
    Для Каждого ИмяКолонки Из СтрРазделить("Код,Наименование,Количество", ",") Цикл
        Колонка = Элементы.Добавить("Товары" + ИмяКолонки, Тип("ПолеФормы"), Таблица);
        Колонка.Вид = ВидПоляФормы.ПолеВвода;
        Колонка.ПутьКДанным = "Товары." + ИмяКолонки;
        Колонка.Заголовок = ИмяКолонки;
    КонецЦикла;
    Поле = Элементы.ТоварыКоличество;
    Сообщить(Поле.Имя = "ТоварыКоличество");
    Сообщить(Поле.Родитель = Таблица);
    Сообщить(Поле.Таблица = Таблица);
    Сообщить(Поле.ПутьКДанным = "Товары.Количество");
    Сообщить(ЭтаФорма.Товары.Количество() = 2);
КонецПроцедуры

Разбор по шагам

  1. Элемент создан программно с явным родителем ТаблицаТоваров в подготовленном модуле.

  2. Имя относится к UI, ПутьКДанным связывает его с колонкой реквизита.

  3. Родитель проверяет непосредственное размещение; Таблица указывает таблицу, которой принадлежит поле.

  4. Отдельно считаем строки данных, не элементы интерфейса. Перемещение поля в группу изменило бы непосредственного родителя.

Как проверить результат

  1. Пять логических проверок Истина.

  2. Ни одна проверка не добавляет товары, не получает ссылку базы и не меняет количество.

Ожидаемый результат

Показана диагностическая проверка конкретной схемы формы, не универсальный getter неизвестного объекта.

На что обратить внимание

  1. Поле вне таблицы не обязано иметь тот же контракт размещения.

  2. Имена UI и реквизитов намеренно различаются. Не находите строки данных через коллекцию элементов формы.

Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.

Проверить родителя и состав собственной группы

Перебираем элементы интерфейса, не строки таблицы и не значения справочника. Проверка помогает найти элемент, случайно созданный вне группы.

Где и как запускать

Модуль новой управляемой формы учебной внешней обработки. Код содержит готовые процедуры с директивами; вставляйте на уровне модуля, не внутрь другого обработчика. Каждую задачу запускайте в отдельной копии формы.

Подготовка

  1. Создайте отдельную внешнюю обработку с новой пустой управляемой основной формой. Каждый урок — свой полный модуль и отдельная копия формы.

  2. Не создавайте вручную УчебноеНазвание, УчебнаяГруппа, ПолеУчебногоНазвания и УчебнаяНадпись: код добавляет их сам.

  3. В событиях формы назначьте ПриСозданииНаСервере одноимённому обработчику. Вставьте весь модуль на уровне модуля, включая клиентские процедуры.

  4. Откройте сохранённую учебную EPF в настольном тонком/толстом или веб-клиенте. Данные принадлежат только этой форме; справочники, документы и регистры не используются.

  5. Внешняя кнопка находится вне учебной группы и остаётся доступной для обратного переключения. Код не обходит ограничения на внешние обработки.

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    Новые = Новый Массив;
    Новые.Добавить(Новый РеквизитФормы("УчебноеНазвание", Новый ОписаниеТипов("Строка")));
    ЭтаФорма.ИзменитьРеквизиты(Новые);
    ЭтаФорма.УчебноеНазвание = "Книга";
    Группа = Элементы.Добавить("УчебнаяГруппа", Тип("ГруппаФормы"));
    Группа.Вид = ВидГруппыФормы.ОбычнаяГруппа;
    Группа.Заголовок = "Собственные учебные данные";
    Группа.Группировка = ГруппировкаПодчиненныхЭлементовФормы.Вертикальная;
    Поле = Элементы.Добавить("ПолеУчебногоНазвания", Тип("ПолеФормы"), Группа);
    Поле.Вид = ВидПоляФормы.ПолеВвода;
    Поле.ПутьКДанным = "УчебноеНазвание";
    Поле.Заголовок = "Название";
    Надпись = Элементы.Добавить("УчебнаяНадпись", Тип("ДекорацияФормы"), Группа);
    Надпись.Вид = ВидДекорацииФормы.Надпись;
    Надпись.Заголовок = "Данные только в памяти формы";
    Сообщить(Группа.Имя = "УчебнаяГруппа");
    Сообщить(Группа.Родитель = ЭтаФорма);
    Сообщить(Поле.Родитель = Группа);
    Сообщить(Надпись.Родитель = Группа);
    Для Каждого Элемент Из Группа.ПодчиненныеЭлементы Цикл
        Сообщить("Ребёнок группы: " + Элемент.Имя);
    КонецЦикла;
    Сообщить(Группа.ПодчиненныеЭлементы.Количество() = 2);


    КомандаДействия = ЭтаФорма.Команды.Добавить("УчебноеДействие");
    КомандаДействия.Действие = "УчебноеДействие";
    КомандаДействия.Заголовок = "Выполнить учебное действие";
    КомандаДействия.Подсказка = "Действие только над данными учебной формы";
    КомандаДействия.ИзменяетСохраняемыеДанные = Ложь;
    Кнопка = Элементы.Добавить("КнопкаУчебноеДействие", Тип("КнопкаФормы"));
    Кнопка.ИмяКоманды = КомандаДействия.Имя;
    Кнопка.Заголовок = КомандаДействия.Заголовок;
КонецПроцедуры

&НаКлиенте
Процедура УчебноеДействие(Команда)
    Сообщить("Одно значение реквизита: " + ЭтаФорма.УчебноеНазвание);
КонецПроцедуры

Разбор по шагам

  1. Группа создана непосредственно в форме, а поле/надпись — с её явным родителем.

  2. Проверяем технические имена и ссылки родителей, не подписи пользователя.

  3. ПодчиненныеЭлементы возвращает коллекцию UI с двумя созданными детьми.

  4. Скаляр УчебноеНазвание остаётся одним значением, хотя элементов в группе два.

Как проверить результат

  1. Пять логических проверок Истина; перечислены ПолеУчебногоНазвания и УчебнаяНадпись.

  2. Кнопка находится вне группы и не входит в её два дочерних элемента.

Ожидаемый результат

Получен проверяемый аудит размещения собственной группы и детей.

На что обратить внимание

  1. Это число элементов интерфейса, не число товаров.

  2. После добавления собственных новых детей ожидаемое количество нужно изменить, не скрывать расхождение.

Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.

Не хотите разбираться сами?

Адаптируем это решение под вашу базу. Оценка бесплатно.

Оставить задачу

1С, 1С:Предприятие — товарные знаки ООО «1С». Сайт не является официальным представительством фирмы «1С» и не аффилирован с ней.