На настоящем наборе из двух собственных записей проверяется состав структуры. Наличие поля Товар в строках не объявляется наличием одноимённого свойства всего набора.
Где и как запускать
Клиентская команда собственной управляемой формы; сервер создаёт два учебных элемента только в памяти.
Подготовка
В своей учебной конфигурации создайте независимый непериодический регистр сведений УчебныеСтрокиСвойств: измерения Номер Число 10.0 и Товар Строка 100, ресурс Количество Число 10.0. Записи в регистр для опыта сохранять не нужно.
Собственная общая управляемая форма: неосновной реквизит УчебныеЗаписи типа РегистрСведенийНаборЗаписей.УчебныеСтрокиСвойств. Перетащите его на форму таблицей, выведите Номер, Товар, Количество. Основной блок — команда РазобратьСвойстваСвоегоНабора.
Дополнительный обработчик назначьте ПриСозданииНаСервере той же формы. Он создаёт настоящий набор в памяти, заполняет две собственные записи и преобразует его в данные формы. Это ДанныеФормыСтруктураСКоллекцией, не ТаблицаЗначений и не заранее переданный абстрактный входной объект.
У универсальной структуры состав собственных именованных свойств зависит от представляемого объекта. Поэтому проверка выполняется на реальной модели до обращения УчебныеЗаписи.Товар. Обе ветки являются результатом диагностики, а не обещанием обязательно существующего свойства.
&НаКлиенте
Процедура РазобратьСвойстваСвоегоНабора(Команда)
Сообщить("Модель набора: " + Строка(ТипЗнч(УчебныеЗаписи)));
Сообщить("Собственных строк: " + Строка(УчебныеЗаписи.Количество()));
Если УчебныеЗаписи.Свойство("Товар") Тогда
ЗначениеНабора = УчебныеЗаписи.Товар;
Сообщить("В этой проекции есть собственное свойство набора Товар");
Сообщить("Тип его значения: " + Строка(ТипЗнч(ЗначениеНабора)));
Иначе
Сообщить("В этой проекции у самого набора нет свойства Товар");
КонецЕсли;
Для Каждого СтрокаНабора Из УчебныеЗаписи Цикл
Сообщить(СтрокаНабора.Товар + ": " + Строка(СтрокаНабора.Количество));
КонецЦикла;
КонецПроцедурыТот же модуль: настоящий собственный набор, без чтения / записи базы
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
Набор = РегистрыСведений.УчебныеСтрокиСвойств.СоздатьНаборЗаписей();
Книга = Набор.Добавить();
Книга.Номер = 1;
Книга.Товар = "Учебная книга";
Книга.Количество = 3;
Тетрадь = Набор.Добавить();
Тетрадь.Номер = 2;
Тетрадь.Товар = "Учебная тетрадь";
Тетрадь.Количество = 5;
ЗначениеВРеквизитФормы(Набор, "УчебныеЗаписи");
КонецПроцедурыРазбор по шагам
Создайте свой набор и преобразуйте его в форму.
Проверьте именованное свойство у всей структуры, не предполагая его по имени столбца.
Отдельно обойдите коллекцию и прочитайте Товар / Количество у каждой настоящей строки.
Как проверить результат
Проверка Свойство относится к самому ДанныеФормыСтруктураСКоллекцией. Успешная ветка читает одноимённое readonly-свойство; отрицательная честно сообщает, что конкретная проекция его не предоставляет. Ложь не подменяется пустой Структура с придуманным Товар.
Независимо от состава свойств структуры коллекция содержит две подготовленные строки: Учебная книга / 3 и Учебная тетрадь / 5. Поля строки читаются у СтрокаНабора. Две строки нельзя заменить одним общим значением Товар.
Это разбор границы применимости динамического имени, а не обещание универсального свойства Товар для всех наборов. Readonly-свойство набора не присваивается. Прочитать, Записать и операции базы не вызываются; BSL при сборке HTML не выполнялся.
Ожидаемый результат
Есть реальный источник данных и воспроизводимый разбор двух разных уровней обращения: структура набора и её строки.
На что обратить внимание
Не обращайтесь к неустановленному динамическому имени без проверки и не называйте поле одной строки свойством всего набора.
Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.