Получает тип XDTO по индексу или имени.
Синтаксис
Получить(<Индекс>)Получить(<Имя>)Полное описание, параметры и ограничения
ПакетXDTO.Получить (XDTOPackage.Get)
ПакетXDTO (XDTOPackage)
Получить (Get)
Доступен, начиная с версии 8.1.
Вариант синтаксиса: По индексу
Синтаксис:
Получить(<Индекс>)
Параметры:
<Индекс> (обязательный)
Тип: Число.
Индекс элемента коллекции.
Вариант синтаксиса: По имени
Синтаксис:
Получить(<Имя>)
Параметры:
<Имя> (обязательный)
Тип: Строка.
Имя получаемого типа XDTO.
Возвращаемое значение:
Тип: ТипЗначенияXDTO, ТипОбъектаXDTO.
Описание:
Получает тип XDTO по индексу или имени.
Доступность:
Тонкий клиент, мобильный клиент, сервер, толстый клиент, внешнее соединение, мобильное приложение (клиент), мобильное приложение (сервер), мобильный автономный сервер.
Использование в версии:
Доступен, начиная с версии 8.1.
Методическая информация
Практические примеры
Получить настоящий пакет XDTO по URI метаданных
Свойство метаданных Пакет всегда Неопределено. Рабочий пакет получается через ФабрикаXDTO.Пакеты, как предписывает справка.
Где и как запускать
Полный серверный модуль учебной копии КА2 Progress 2.5.20.75; чтение метаданных и собственная память.
Подготовка
Отдельная учебная копия КА2 Progress 2.5.20.75 из C:\claude\KA2\Progress\XML_CF_KA2_PROGRESS, платформа 8.5.1.1343. Не рабочая база и не произвольная другая КА2.
Создайте серверный общий модуль УчебныеПаспортаМетаданных. Вставьте полный текст одного урока и вызовите УчебныеПаспортаМетаданных.ВыполнитьПример() из своей учебной команды.
Источники: CommandGroups\Документы.xml; Catalogs\Номенклатура.xml; XDTOPackages\Адрес.xml и Адрес\Ext\Package.bin; SessionParameters\АвторизованныйПользователь.xml.
Исходники и база не меняются. Код не выполняет команды интерфейса, не заполняет параметры настоящего сеанса, не отправляет адрес и не читает персональные данные пользователя.
URI пакета является идентификатором уже установленного XDTO, не адресом для HTTP-запроса. Учебный город и улица вымышленные, объект XDTO создаётся только в памяти.
Активные расширения и язык представлений могут менять сведения. Диагностические строки о расширениях не имеют фиксированного ожидаемого значения.
Процедура ВыполнитьПример() Экспорт
ОписаниеПакета = Метаданные.ПакетыXDTO.Найти("Адрес");
Если ОписаниеПакета = Неопределено Тогда
ВызватьИсключение "Нет подтверждённого пакета Адрес";
КонецЕсли;
Сообщить(ОписаниеПакета.Имя = "Адрес");
Сообщить(ОписаниеПакета.ПространствоИмен = "http://www.v8.1c.ru/ssl/contactinfo_ru");
Сообщить(ОписаниеПакета.Пакет = Неопределено);
Пакет = ФабрикаXDTO.Пакеты.Получить(ОписаниеПакета.ПространствоИмен);
Если Пакет = Неопределено Тогда
ВызватьИсключение "Нет runtime-пакета XDTO по подтверждённому URI";
КонецЕсли;
Сообщить(Пакет.URIПространстваИмен = ОписаниеПакета.ПространствоИмен);
ТипАдреса = Пакет.Получить("АдресРФ");
Сообщить(ТипАдреса <> Неопределено);
Сообщить(ТипАдреса = ФабрикаXDTO.Тип(ОписаниеПакета.ПространствоИмен, "АдресРФ"));
Сообщить(ОписаниеПакета.Синоним);
Сообщить(ОписаниеПакета.Комментарий);
Сообщить(ОписаниеПакета.ПолноеИмя());
Сообщить(ОписаниеПакета.Представление());
Сообщить(ОписаниеПакета.ПринадлежностьОбъекта);
Сообщить(ТипЗнч(ОписаниеПакета.ОбъектРасширяемойКонфигурации));
Сообщить(ОписаниеПакета.ЕстьИзмененияРасширениямиКонфигурации());
Сообщить(ТипЗнч(ОписаниеПакета.РасширениеКонфигурации()));
Сообщить(ОписаниеПакета.Родитель() = Метаданные);
КонецПроцедурыРазбор по шагам
Найти метаданные пакета Адрес и проверить его ПространствоИмен по исходному XML.
Прочитать Пакет: это Неопределено по контракту, не ошибка установки КА2.
В коллекции глобальной фабрики получить runtime-пакет по URI. Проверить его URI и получить именованный тип АдресРФ.
Сравнить два штатных способа получения типа: Пакет.Получить и ФабрикаXDTO.Тип. Вывести сведения происхождения метаданных отдельно от runtime-пакета.
Как проверить результат
Семь фиксированных булевых проверок дают Истина; диагностические сведения отдельно.
Тип АдресРФ подтверждён в Package.bin. HTTP-запросы и загрузка схем из интернета отсутствуют.
Ожидаемый результат
Готовый рецепт перехода от метаданных пакета к его реальному типу XDTO.
На что обратить внимание
Не вызывайте ОписаниеПакета.Пакет.Получить: свойство содержит Неопределено.
Имя Адрес не является URI пакета. Получить в коллекции пакетов принимает URI или индекс.
Схожий URI без www относится к другому пространству имён; используйте точную строку выгрузки.
Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.
Разобрать пакет своей модели: типы, корни XML и квалификация имён
Пакет получаем по URI собственной схемы. Тип Order и корневое свойство order — разные части модели; зависимости пакета не являются HTTP-запросами.
Где и как запускать
Полный серверный общий модуль собственной отдельной учебной конфигурации.
Подготовка
Создайте отдельную собственную конфигурацию с именем УчебнаяКонфигурацияСинтаксиса. Не используйте рабочую КА2, УНФ, УТ или БП.
Создайте неглобальный общий модуль УчебнаяМодельXDTO85 с флагом Сервер. Вставьте весь выбранный пример, включая вспомогательные функции, если они присутствуют.
Из серверной команды своей учебной обработки вызовите УчебнаяМодельXDTO85.ВыполнитьПример(). Передавать неизвестный объект или реквизиты чужой конфигурации не нужно.
XSD целиком встроена в код: артикул Sku, цвет Color, список артикулов, объединение, абстрактный Base, строка Item, производный Order и смешанный Note.
Справочники, документы и пакеты XDTO метаданных создавать не нужно. Схема и фабрика принадлежат только этому выполнению в памяти.
urn:guide:model85 и URI стандартной XML Schema — идентификаторы пространств имён. Код не загружает их из Интернета; import/include, DTD и внешних файлов нет.
Проверки Истина относятся к приведённой неизменённой учебной XSD. После её изменения сначала пересмотрите ожидаемые типы, границы и обязательность.
Это полный учебный исходник с проверенными статически 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");
Если Пакет = Неопределено Тогда
ВызватьИсключение "Не получен собственный пакет";
КонецЕсли;
Сообщить(Пакет.URIПространстваИмен = "urn:guide:model85");
Сообщить(Пакет.КвалифицированнаяФормаЭлемента);
Сообщить(НЕ Пакет.КвалифицированнаяФормаАтрибута);
Сообщить(Пакет.Количество() >= 8);
Для Индекс = 0 По Пакет.Количество() - 1 Цикл
ТипПакета = Пакет.Получить(Индекс);
Сообщить("Тип пакета: " + ТипПакета.Имя);
КонецЦикла;
Сообщить(Пакет.Получить("Order") = Фабрика.Тип("urn:guide:model85", "Order"));
Корни = Пакет.КорневыеСвойства;
КореньЗаказа = Корни.Получить("order");
КореньПояснения = Корни.Получить("note");
Если КореньЗаказа = Неопределено ИЛИ КореньПояснения = Неопределено Тогда
ВызватьИсключение "Не найдены оба собственных корня XML";
КонецЕсли;
Сообщить(Корни.Количество() = 2);
Сообщить(КореньЗаказа.Тип = Пакет.Получить("Order"));
Сообщить(КореньПояснения.Тип = Пакет.Получить("Note"));
Зависимости = Пакет.Зависимости;
Сообщить("Зависимостей модели: " + Строка(Зависимости.Количество()));
Для Индекс = 0 По Зависимости.Количество() - 1 Цикл
Зависимость = Зависимости.Получить(Индекс);
Сообщить("URI зависимости: " + Зависимость.URIПространстваИмен);
КонецЦикла;
КонецПроцедурыРазбор по шагам
Построить свою XSD и фабрику. Найти пакет строго по urn:guide:model85, а не взять первый чужой пакет конфигурации.
Сверить URI пакета. elementFormDefault=qualified задаёт квалификацию элементов, attributeFormDefault=unqualified — отсутствие квалификации атрибутов по умолчанию.
Обойти реальные типы пакета по индексам от 0 до Количество()-1. В схеме восемь именованных типов; порядок обхода не считаем постоянным.
Получить Order по имени и сопоставить с Фабрика.Тип. Не путать тип Order с элементом order в нижнем регистре.
Найти два корневых свойства и проверить, что их типы — Order и Note. Описатель корня задаёт XML-оболочку, а не новую строку заказа.
Получить зависимости модели и вывести только URI существующих пакетов. Их количество не задаём выдуманной константой.
Не присваивать флаги или коллекции пакета: они только для чтения, модель формируется исходной схемой.
Как проверить результат
Восемь булевых проверок дают Истина: URI, два флага, наличие восьми типов, совпадение Order, количество корней и два типа корней.
В перечне типов присутствуют Sku, Color, SkuList, QuantityOrCode, Base, Item, Order, Note. Их порядок не обещается.
Количество и URI зависимостей — результат построения модели; в коде нет загрузчика URL или файлов.
Ожидаемый результат
По своей схеме получена понятная карта: пакет → типы и корневые свойства → зависимости модели.
На что обратить внимание
Имя типа и имя XML-элемента чувствительны к регистру. Order и order нельзя менять местами.
Квалификация означает пространство имён XML, а не роль пользователя и не квалификацию разработчика.
Флаги по умолчанию схемы не отменяют локальный form у отдельного объявления, если вы добавите его позднее.
Количество типов не равно количеству XML-корней, товаров или строк заказа.
ПакетXDTO этой фабрики не является ОбъектМетаданныхПакетXDTO конфигурации.
Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.