Различить именованное свойство набора и поле каждой его строки

Учебные задачи

На настоящем наборе из двух собственных записей проверяется состав структуры. Наличие поля Товар в строках не объявляется наличием одноимённого свойства всего набора.

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

Клиентская команда собственной управляемой формы; сервер создаёт два учебных элемента только в памяти.

Подготовка

  1. В своей учебной конфигурации создайте независимый непериодический регистр сведений УчебныеСтрокиСвойств: измерения Номер Число 10.0 и Товар Строка 100, ресурс Количество Число 10.0. Записи в регистр для опыта сохранять не нужно.

  2. Собственная общая управляемая форма: неосновной реквизит УчебныеЗаписи типа РегистрСведенийНаборЗаписей.УчебныеСтрокиСвойств. Перетащите его на форму таблицей, выведите Номер, Товар, Количество. Основной блок — команда РазобратьСвойстваСвоегоНабора.

  3. Дополнительный обработчик назначьте ПриСозданииНаСервере той же формы. Он создаёт настоящий набор в памяти, заполняет две собственные записи и преобразует его в данные формы. Это ДанныеФормыСтруктураСКоллекцией, не ТаблицаЗначений и не заранее переданный абстрактный входной объект.

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

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

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

  1. Создайте свой набор и преобразуйте его в форму.

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

  3. Отдельно обойдите коллекцию и прочитайте Товар / Количество у каждой настоящей строки.

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

  1. Проверка Свойство относится к самому ДанныеФормыСтруктураСКоллекцией. Успешная ветка читает одноимённое readonly-свойство; отрицательная честно сообщает, что конкретная проекция его не предоставляет. Ложь не подменяется пустой Структура с придуманным Товар.

  2. Независимо от состава свойств структуры коллекция содержит две подготовленные строки: Учебная книга / 3 и Учебная тетрадь / 5. Поля строки читаются у СтрокаНабора. Две строки нельзя заменить одним общим значением Товар.

  3. Это разбор границы применимости динамического имени, а не обещание универсального свойства Товар для всех наборов. Readonly-свойство набора не присваивается. Прочитать, Записать и операции базы не вызываются; BSL при сборке HTML не выполнялся.

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

Есть реальный источник данных и воспроизводимый разбор двух разных уровней обращения: структура набора и её строки.

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

  1. Не обращайтесь к неустановленному динамическому имени без проверки и не называйте поле одной строки свойством всего набора.

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

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

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

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

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