Тип: ОбъектXDTO. Содержит объект-владелец данного списка.
Полное описание, параметры и ограничения
СписокXDTO.Владелец (XDTOList.Owner)
СписокXDTO (XDTOList)
Владелец (Owner)
Доступен, начиная с версии 8.1.
Использование:
Только чтение.
Описание:
Тип: ОбъектXDTO.
Содержит объект-владелец данного списка.
Доступность:
Тонкий клиент, мобильный клиент, сервер, толстый клиент, внешнее соединение, мобильное приложение (клиент), мобильное приложение (сервер), мобильный автономный сервер.
Использование в версии:
Доступен, начиная с версии 8.1.
Методическая информация
Практические примеры
Создать список трёх товаров по собственной схеме XDTO
Повторяющееся свойство item выдаёт СписокXDTO. Добавить/Вставить принимают типизированные элементы XDTO, а не произвольные строки.
Где и как запускать
Полный серверный общий модуль собственной учебной конфигурации.
Подготовка
В собственной отдельной конфигурации УчебнаяКонфигурацияСинтаксиса создайте серверный общий модуль УчебныеКоллекцииXDTO с флагом Сервер. Вставьте полный код выбранного урока.
Из серверной команды собственной учебной обработки вызовите УчебныеКоллекцииXDTO.ВыполнитьПример(). Метаданные справочников и документы не нужны.
В код встроена маленькая собственная XSD: Order содержит повторяющиеся строки item, Note — смешанный текст с числовыми элементами amount. Не подменяйте схему или XML данными неизвестного сервиса.
URI urn:guide:collections — идентификатор пространства имён, не адрес сервера. Схема не содержит import/include, DTD или внешних ссылок.
Все объекты и XML создаются в памяти. Нет файлов, сети, выполнения внешнего кода, записи базы или изменений пакетов XDTO конфигурации.
Процедура ВыполнитьПример() Экспорт
XSD = "<xs:schema xmlns:xs=""http://www.w3.org/2001/XMLSchema"" xmlns:g=""urn:guide:collections"" targetNamespace=""urn:guide:collections"" elementFormDefault=""qualified"">
|<xs:complexType name=""Order""><xs:sequence><xs:element name=""item"" type=""xs:string"" minOccurs=""0"" maxOccurs=""unbounded""/></xs:sequence></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:collections", "Order");
Если ТипЗаказа = Неопределено Тогда
ВызватьИсключение "В собственной фабрике не найден Order";
КонецЕсли;
Заказ = Фабрика.Создать(ТипЗаказа);
СвойствоТоваров = Заказ.Свойства().Получить("item");
Если СвойствоТоваров = Неопределено Тогда
ВызватьИсключение "Не найдено собственное повторяющееся свойство item";
КонецЕсли;
Товары = Заказ.ПолучитьСписок(СвойствоТоваров);
Если Товары = Неопределено Тогда
ВызватьИсключение "Не получен список собственного заказа";
КонецЕсли;
Книга = Товары.Добавить(Фабрика.Создать(СвойствоТоваров.Тип, "Книга"));
Товары.Добавить(Фабрика.Создать(СвойствоТоваров.Тип, "Коробка"));
Ручка = Товары.Вставить(1, Фабрика.Создать(СвойствоТоваров.Тип, "Ручка"));
Заказ.Проверить();
Сообщить(Товары.Количество() = 3);
Сообщить(Товары.Владелец = Заказ);
Сообщить(Товары.ВладеющееСвойство = СвойствоТоваров);
Сообщить(Товары.Получить(0) = "Книга");
Сообщить(Товары.Получить(1) = "Ручка");
Сообщить(Товары.Получить(2) = "Коробка");
Сообщить(Книга.Значение = "Книга");
Сообщить(Ручка.Значение = "Ручка");
Сообщить(Товары.ПолучитьXDTO(1).Значение = "Ручка");
КонецПроцедурыРазбор по шагам
Построить собственную XSD и фабрику, создать Order. Получить описатель повторяющегося item и его список.
Создавать каждое строковое значение через Фабрика.Создать с типом именно свойства item.
Добавить Книгу и Коробку, вставить Ручку между ними по индексу 1. Возвращённые элементы действительно относятся к созданному списку.
Проверить модель целиком. Получить выдаёт простое значение, ПолучитьXDTO — обёртку с типом и свойством Значение.
Прочитать два владельческих свойства списка: родительский объект и описатель item. Не присваивать их.
Как проверить результат
Девять булевых сообщений Истина. Порядок списка Книга, Ручка, Коробка.
Список получен из реальной собственной модели, не создан несуществующим конструктором.
Ожидаемый результат
Понятный полный пример фабрики, списка, его владельца и типизированных значений.
На что обратить внимание
У СписокXDTO нет конструктора. Повторяемость задаётся maxOccurs в схеме, не массивом неизвестного типа.
Владелец и ВладеющееСвойство только для чтения. Для другого владельца создавайте его собственный список.
Эти элементы не являются ссылками на товары 1С и не создают записи справочника.
Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.
Заменить товар, получить удалённый элемент и очистить собственный список
Установить заменяет выбранную позицию, Удалить возвращает удалённый элемент. Очистить не уничтожает схему или родительский объект.
Где и как запускать
Полный серверный общий модуль собственной учебной конфигурации.
Подготовка
В собственной отдельной конфигурации УчебнаяКонфигурацияСинтаксиса создайте серверный общий модуль УчебныеКоллекцииXDTO с флагом Сервер. Вставьте полный код выбранного урока.
Из серверной команды собственной учебной обработки вызовите УчебныеКоллекцииXDTO.ВыполнитьПример(). Метаданные справочников и документы не нужны.
В код встроена маленькая собственная XSD: Order содержит повторяющиеся строки item, Note — смешанный текст с числовыми элементами amount. Не подменяйте схему или XML данными неизвестного сервиса.
URI urn:guide:collections — идентификатор пространства имён, не адрес сервера. Схема не содержит import/include, DTD или внешних ссылок.
Все объекты и XML создаются в памяти. Нет файлов, сети, выполнения внешнего кода, записи базы или изменений пакетов XDTO конфигурации.
Процедура ВыполнитьПример() Экспорт
XSD = "<xs:schema xmlns:xs=""http://www.w3.org/2001/XMLSchema"" xmlns:g=""urn:guide:collections"" targetNamespace=""urn:guide:collections"" elementFormDefault=""qualified"">
|<xs:complexType name=""Order""><xs:sequence><xs:element name=""item"" type=""xs:string"" minOccurs=""0"" maxOccurs=""unbounded""/></xs:sequence></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:collections", "Order");
Если ТипЗаказа = Неопределено Тогда
ВызватьИсключение "В собственной фабрике не найден Order";
КонецЕсли;
Заказ = Фабрика.Создать(ТипЗаказа);
СвойствоТоваров = Заказ.Свойства().Получить("item");
Если СвойствоТоваров = Неопределено Тогда
ВызватьИсключение "Не найдено собственное повторяющееся свойство item";
КонецЕсли;
Товары = Заказ.ПолучитьСписок(СвойствоТоваров);
Если Товары = Неопределено Тогда
ВызватьИсключение "Не получен список собственного заказа";
КонецЕсли;
Товары.Добавить(Фабрика.Создать(СвойствоТоваров.Тип, "Книга"));
Товары.Добавить(Фабрика.Создать(СвойствоТоваров.Тип, "Ручка"));
Установленный = Товары.Установить(0, Фабрика.Создать(СвойствоТоваров.Тип, "Книга — образец"));
Сообщить(Установленный.Значение = "Книга — образец");
Сообщить(Товары.Количество() = 2);
Сообщить(Товары.Получить(0) = "Книга — образец");
Удалённый = Товары.Удалить(1);
Сообщить(Удалённый.Значение = "Ручка");
Сообщить(Товары.Количество() = 1);
Товары.Очистить();
Сообщить(Товары.Количество() = 0);
Сообщить(Товары.Владелец = Заказ);
Заказ.Проверить();
Сообщить("Пустой заказ допустим, потому что minOccurs у item равен 0");
КонецПроцедурыРазбор по шагам
Создать два типизированных значения собственного списка: Книга и Ручка.
Заменить позицию 0 новым значением. Метод Установить возвращает установленный элемент, не прежнюю Книгу.
Удалить по индексу 1 и прочитать реально возвращённую Ручку. Удалить принимает индекс, а не произвольную объектную ссылку.
Очистить только собственный список. Владельческий объект остаётся, проверка модели разрешает пустоту благодаря minOccurs=0.
Как проверить результат
Семь булевых сообщений Истина. После очистки список пуст, владелец по-прежнему Заказ.
Изменение minOccurs на 1 означает другую схему: пустой объект уже нельзя считать допустимым.
Ожидаемый результат
На конкретных товарах разобраны три разные операции и их возвращаемые значения.
На что обратить внимание
Установить не вставляет новую строку и не увеличивает количество.
Удалённый элемент больше не принадлежит текущему списку; не используйте его индекс как актуальную позицию.
Очистка этой модели не очищает информационную базу или пакеты XDTO конфигурации.
Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.