Заполнить динамические свойства собственного типа XDTO Book

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

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

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

Серверный учебный модуль / собственная обработка толстого клиента; указанные макеты и функция фабрики подготовлены отдельно.

Подготовка

  1. Используйте серверную процедуру собственного учебного общего модуля или обработку в толстом клиенте. Основной блок вставьте в тело своей процедуры, не как отдельный getter неизвестного объекта.

  2. В тот же серверный общий модуль добавьте функцию из дополнительного блока. Она создаёт фабрику по собственной XSD в памяти; сетевые схемы не загружаются.

  3. Схема заранее определяет Book с обязательными name и quantity. Эти динамические свойства не угадываются по внешнему JSON.

ФабрикаКниги = СоздатьФабрикуКниги();
ТипКниги = ФабрикаКниги.Тип("urn:lesson:book", "Book");
Книга = ФабрикаКниги.Создать(ТипКниги);
Книга.name = "Учебная книга";
Книга.quantity = 3;
Книга.Проверить();
Сообщить(Книга.name);
Сообщить("Экземпляров: " + Строка(Книга.quantity));
Тот же серверный модуль: собственный контракт и фабрика
Функция СоздатьФабрикуКниги()
    XSD = "<xs:schema xmlns:xs=""http://www.w3.org/2001/XMLSchema""
    | targetNamespace=""urn:lesson:book"" elementFormDefault=""qualified"">
    | <xs:complexType name=""Book""><xs:sequence>
    |  <xs:element name=""name"" type=""xs:string""/>
    |  <xs:element name=""quantity"" type=""xs:nonNegativeInteger""/>
    | </xs:sequence></xs:complexType></xs:schema>";
    Чтение = Новый ЧтениеXML;
    Чтение.УстановитьСтроку(XSD);
    Попытка
        ДокументСхемы = Новый ПостроительDOM;
        DOM = ДокументСхемы.Прочитать(Чтение);
        Чтение.Закрыть();
    Исключение
        Чтение.Закрыть();
        ВызватьИсключение;
    КонецПопытки;
    Построитель = Новый ПостроительСхемXML;
    Схема = Построитель.СоздатьСхемуXML(DOM.ЭлементДокумента);
    Набор = Новый НаборСхемXML;
    Набор.Добавить(Схема);
    Если Не Набор.Проверить() Тогда
        ВызватьИсключение "Собственная схема книги не прошла проверку";
    КонецЕсли;
    Возврат Новый ФабрикаXDTO(Набор);
КонецФункции

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

  1. Создаём собственную структуру / объект либо подготавливаем указанный именованный макет.

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

  3. Проверяем конкретный текст / число / имя; readonly-элемент коллекции не заменяем присваиванием.

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

  1. Проверить проходит для name=Учебная книга и quantity=3; читаются настоящие свойства собственного типа XDTO.

  2. Если задать quantity=-1, проверка собственного nonNegativeInteger должна сообщить нарушение. Это не контракт Avito или другой внешней системы.

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

Именованный доступ связан с известным собственным производителем данных и точным типом элемента.

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

  1. Отсутствующее имя приводит к ошибке, а не к автоматическому созданию произвольного поля.

  2. Схема полей DBF, тип XDTO, имя рисунка, области и элемента графической схемы — разные источники динамических имён.

  3. Код 1С не выполнялся при сборке HTML. Реальные файлы и метаданные пользователем создаются только при ручной проверке урока.

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

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

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

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

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