ОбъектXDTO.Владелец

Методы · Owner

Получает объект-владелец данного объекта.

Синтаксис

Владелец()
Полное описание, параметры и ограничения

ОбъектXDTO.Владелец (XDTODataObject.Owner)

ОбъектXDTO (XDTODataObject)

Владелец (Owner)

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

Синтаксис:
Владелец()
Возвращаемое значение:
Тип: ОбъектXDTO.

Описание:

Получает объект-владелец данного объекта.

Доступность:

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

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

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

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

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

Связать вложенную строку заказа с владельцем и прочитать её значения

Владелец() и ВладеющееСвойство() здесь методы ОбъектXDTO, а не одноимённые свойства списка. Связь проверяется на добавленной в собственный заказ Книге.

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

Полный серверный общий модуль собственной отдельной учебной конфигурации.

Подготовка

  1. Создайте отдельную собственную конфигурацию с именем УчебнаяКонфигурацияСинтаксиса. Не используйте рабочую КА2, УНФ, УТ или БП.

  2. Создайте неглобальный общий модуль УчебнаяМодельXDTO85 с флагом Сервер. Вставьте весь выбранный пример, включая вспомогательные функции, если они присутствуют.

  3. Из серверной команды своей учебной обработки вызовите УчебнаяМодельXDTO85.ВыполнитьПример(). Передавать неизвестный объект или реквизиты чужой конфигурации не нужно.

  4. XSD целиком встроена в код: артикул Sku, цвет Color, список артикулов, объединение, абстрактный Base, строка Item, производный Order и смешанный Note.

  5. Справочники, документы и пакеты XDTO метаданных создавать не нужно. Схема и фабрика принадлежат только этому выполнению в памяти.

  6. urn:guide:model85 и URI стандартной XML Schema — идентификаторы пространств имён. Код не загружает их из Интернета; import/include, DTD и внешних файлов нет.

  7. Проверки Истина относятся к приведённой неизменённой учебной XSD. После её изменения сначала пересмотрите ожидаемые типы, границы и обязательность.

  8. Это полный учебный исходник с проверенными статически API, но запуск в 1С не проверялся. Ошибку подготовки схемы не следует принимать за успешную проверку данных.

Процедура ВыполнитьПример() Экспорт
    XSD = "<xs:schema xmlns:xs=""http://www.w3.org/2001/XMLSchema"" xmlns:g=""urn:guide:model85"" targetNamespace=""urn:guide:model85"" elementFormDefault=""qualified"" attributeFormDefault=""unqualified"">
    |<xs:simpleType name=""Sku""><xs:restriction base=""xs:string""><xs:length value=""4""/><xs:pattern value=""[A-Z][0-9]{3}""/></xs:restriction></xs:simpleType>
    |<xs:simpleType name=""Color""><xs:restriction base=""xs:string""><xs:enumeration value=""red""/><xs:enumeration value=""blue""/></xs:restriction></xs:simpleType>
    |<xs:simpleType name=""SkuList""><xs:list itemType=""g:Sku""/></xs:simpleType>
    |<xs:simpleType name=""QuantityOrCode""><xs:union memberTypes=""xs:positiveInteger g:Sku""/></xs:simpleType>
    |<xs:complexType name=""Base"" abstract=""true""><xs:attribute name=""code"" type=""g:Sku"" use=""required""/></xs:complexType>
    |<xs:complexType name=""Item""><xs:sequence><xs:element name=""name"" type=""xs:string""/><xs:element name=""quantity"" type=""xs:nonNegativeInteger""/></xs:sequence></xs:complexType>
    |<xs:complexType name=""Order""><xs:complexContent><xs:extension base=""g:Base""><xs:sequence><xs:element name=""item"" type=""g:Item"" minOccurs=""0"" maxOccurs=""unbounded""/></xs:sequence></xs:extension></xs:complexContent></xs:complexType>
    |<xs:complexType name=""Note"" mixed=""true""><xs:sequence><xs:element name=""amount"" type=""xs:decimal"" minOccurs=""0"" maxOccurs=""unbounded""/></xs:sequence></xs:complexType>
    |<xs:element name=""order"" type=""g:Order""/><xs:element name=""note"" type=""g:Note""/>
    |</xs:schema>";
    ЧтениеСхемы = Новый ЧтениеXML;
    ЧтениеСхемы.УстановитьСтроку(XSD);
    Попытка
        Дерево = Новый ПостроительDOM;
        ДокументСхемы = Дерево.Прочитать(ЧтениеСхемы);
    Исключение
        ОшибкаСхемы = ОписаниеОшибки();
        Попытка
            ЧтениеСхемы.Закрыть();
        Исключение
            ВызватьИсключение ОшибкаСхемы + Символы.ПС + "Закрытие: " + ОписаниеОшибки();
        КонецПопытки;
        ВызватьИсключение ОшибкаСхемы;
    КонецПопытки;
    ЧтениеСхемы.Закрыть();
    ПостроительСхем = Новый ПостроительСхемXML;
    Схема = ПостроительСхем.СоздатьСхемуXML(ДокументСхемы.ЭлементДокумента);
    Если Схема = Неопределено Тогда
        ВызватьИсключение "Не построена собственная схема коллекций";
    КонецЕсли;
    НаборСхем = Новый НаборСхемXML;
    НаборСхем.Добавить(Схема);
    Если НЕ НаборСхем.Проверить() Тогда
        ВызватьИсключение "Собственная схема не прошла проверку";
    КонецЕсли;
    Фабрика = Новый ФабрикаXDTO(НаборСхем);
    ТипЗаказа = Фабрика.Тип("urn:guide:model85", "Order");
    ТипСтроки = Фабрика.Тип("urn:guide:model85", "Item");
    Если ТипЗаказа = Неопределено ИЛИ ТипСтроки = Неопределено Тогда
        ВызватьИсключение "В собственной модели не найдены Order и Item";
    КонецЕсли;
    Заказ = Фабрика.Создать(ТипЗаказа);
    СвойствоКода = Заказ.Свойства().Получить("code");
    СвойствоСтрок = Заказ.Свойства().Получить("item");
    СвойствоИмени = ТипСтроки.Свойства.Получить("name");
    СвойствоКоличества = ТипСтроки.Свойства.Получить("quantity");
    Если СвойствоКода = Неопределено ИЛИ СвойствоСтрок = Неопределено
        ИЛИ СвойствоИмени = Неопределено ИЛИ СвойствоКоличества = Неопределено Тогда
        ВызватьИсключение "В собственной модели не найдены четыре описателя";
    КонецЕсли;
    Заказ.Установить(СвойствоКода, Фабрика.Создать(СвойствоКода.Тип, "A001"));
    СтрокиЗаказа = Заказ.ПолучитьСписок(СвойствоСтрок);
    Книга = Фабрика.Создать(ТипСтроки);
    Книга.Установить(СвойствоИмени, Фабрика.Создать(СвойствоИмени.Тип, "Книга"));
    Книга.Установить(СвойствоКоличества, Фабрика.Создать(СвойствоКоличества.Тип, "3"));
    Книга = СтрокиЗаказа.Добавить(Книга);
    Если ТипЗнч(Книга) <> Тип("ОбъектXDTO") Тогда
        ВызватьИсключение "Добавленная строка должна быть составным объектом";
    КонецЕсли;
    Заказ.Проверить();
    Если Книга.Владелец() <> Заказ ИЛИ Книга.ВладеющееСвойство() <> СвойствоСтрок Тогда
        ВызватьИсключение "Строка не связана со своим учебным заказом";
    КонецЕсли;
    Сообщить(Книга.Фабрика() = Фабрика);
    Сообщить(Заказ.Фабрика() = Фабрика);
    Сообщить(Книга.Получить(СвойствоИмени) = "Книга");
    Сообщить(Книга.Получить(СвойствоКоличества) = 3);
    Сообщить(Книга.Получить("name") = "Книга");
    Сообщить(Заказ.Получить(СвойствоКода) = "A001");
    Сообщить(СтрокиЗаказа.ПолучитьXDTO(0) = Книга);
    Сообщить(СтрокиЗаказа.Владелец = Заказ);
    Сообщить(СтрокиЗаказа.ВладеющееСвойство = СвойствоСтрок);
    Книга.Установить(СвойствоКоличества, Фабрика.Создать(СвойствоКоличества.Тип, "4"));
    Заказ.Проверить();
    Сообщить(СтрокиЗаказа.ПолучитьXDTO(0).Получить(СвойствоКоличества) = 4);
КонецПроцедуры

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

  1. Создать новый заказ A001 с собственной строкой Книга, количество 3. При добавлении составного объекта возникает связь владения.

  2. Проверить методы владельца и владеющего описателя у Книги. Если они не совпали с нашим Заказом и item, остановиться.

  3. Проверить фабрику обоих объектов. Совпадение фабрики не заменяет проверку владельца: это разные отношения.

  4. Получить возвращает обычное значение свойства. Сравнить название со строкой и quantity с числом.

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

  6. ПолучитьXDTO списка возвращает ту же составную Книгу. Одноимённые владельческие поля списка читаются без скобок.

  7. Изменить quantity именно у принадлежащей заказу строки, проверить заказ целиком и прочитать новое число через список.

  8. Всё изменение ограничено своими объектами в памяти; реальный документ ЗаказКлиента не создаётся и не записывается.

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

  1. Десять булевых сообщений дают Истина; проверка двух владельческих методов не вызвала исключение.

  2. До изменения имя Книга, количество 3, код заказа A001. После изменения через список видно количество 4.

  3. Книга, Заказ и их фабрика имеют происхождение из одного полного примера, не из входного неизвестного объекта.

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

Собственная вложенная строка получила проверенное владение; показана разница между скаляром, описателем и объектом XDTO.

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

  1. ОбъектXDTO.Владелец() — метод; СписокXDTO.Владелец — свойство. Не копируйте синтаксис между ними.

  2. Получить и ПолучитьXDTO имеют разное назначение. У скалярного поля Получить даёт строку/число, не обёртку ЗначениеXDTO.

  3. Описатели берутся из той же модели. Не переносите СвойствоXDTO другой фабрики в этот объект без согласованного контракта.

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

  5. XPath name здесь локальное имя собственного поля; сложные пространства имён требуют отдельного разбора.

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

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

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

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

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