ОбъектXDTO.ПолучитьXDTO

Методы · GetXDTO

Получает значение XDTO для указанного свойства.

Синтаксис

ПолучитьXDTO(<Имя>)
ПолучитьXDTO(<Свойство>)
Полное описание, параметры и ограничения

ОбъектXDTO.ПолучитьXDTO (XDTODataObject.GetXDTO)

ОбъектXDTO (XDTODataObject)

ПолучитьXDTO (GetXDTO)

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

Вариант синтаксиса: По имени

Синтаксис:
ПолучитьXDTO(<Имя>)
Параметры:

<Имя> (обязательный)
Тип: Строка.
Имя свойства, значение которого необходимо получить.
Вариант синтаксиса: По свойству

Синтаксис:
ПолучитьXDTO(<Свойство>)
Параметры:

<Свойство> (обязательный)
Тип: СвойствоXDTO.
Свойство XDTO, значение которого необходимо получить.
Возвращаемое значение:
Тип: ОбъектXDTO, ЗначениеXDTO, Неопределено.

Описание:

Получает значение XDTO для указанного свойства.

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

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

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

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

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

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

Заполнить товар по собственному типу XDTO и проверить обязательные свойства

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

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

Учебная база: создайте серверный общий модуль УчебныеЗадачи (флаг Сервер). Код без директив вставьте в тело процедуры ВыполнитьПример() Экспорт. Вызовите её из серверного обработчика команды учебной обработки. Не запускайте в рабочей базе.

Подготовка

  1. Сначала прочитайте учебную XSD в начале кода: code обязателен, note необязателен; quantity — nonNegativeInteger.

  2. Каждый запуск создаёт собственную фабрику и товар в памяти. Никакой справочник Номенклатура не используется.

XSD = "<xs:schema xmlns:xs=""http://www.w3.org/2001/XMLSchema""
| xmlns:g=""urn:guide:product"" targetNamespace=""urn:guide:product""
| elementFormDefault=""qualified"" version=""1.0"" xml:lang=""ru"">
| <xs:annotation><xs:documentation>Учебный товар, не контракт внешнего API</xs:documentation></xs:annotation>
| <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:complexType name=""Product""><xs:sequence>
|  <xs:element name=""name"" type=""xs:string""/>
|  <xs:element name=""quantity"" type=""xs:nonNegativeInteger""/>
|  <xs:element name=""note"" type=""xs:string"" minOccurs=""0""/>
| </xs:sequence><xs:attribute name=""code"" type=""g:Sku"" use=""required""/>
| </xs:complexType>
| <xs:element name=""product"" type=""g:Product""/>
|</xs:schema>";
Чтение = Новый ЧтениеXML;
Чтение.УстановитьСтроку(XSD);
Попытка
    ЧтениеДерева = Новый ПостроительDOM;
    ДокументСхемы = ЧтениеДерева.Прочитать(Чтение);
    Чтение.Закрыть();
Исключение
    Чтение.Закрыть();
    ВызватьИсключение;
КонецПопытки;
Построитель = Новый ПостроительСхемXML;
Схема = Построитель.СоздатьСхемуXML(ДокументСхемы.ЭлементДокумента);
Если Схема = Неопределено Тогда
    ВызватьИсключение "Не удалось построить учебную схему";
КонецЕсли;
Набор = Новый НаборСхемXML;
Набор.Добавить(Схема);
Если Не Набор.Проверить() Тогда
    ВызватьИсключение "Учебная XSD не прошла проверку";
КонецЕсли;
Фабрика = Новый ФабрикаXDTO(Набор);
ТипТовара = Фабрика.Тип("urn:guide:product", "Product");
Если ТипТовара = Неопределено Тогда
    ВызватьИсключение "В фабрике не найден тип Product";
КонецЕсли;
Товар = Фабрика.Создать(ТипТовара);
Свойства = Товар.Свойства();
Код = Свойства.Получить("code");
Название = Свойства.Получить("name");
Количество = Свойства.Получить("quantity");
Примечание = Свойства.Получить("note");
Если Код = Неопределено Или Название = Неопределено
    Или Количество = Неопределено Или Примечание = Неопределено Тогда
    ВызватьИсключение "Не найдены четыре свойства учебной модели";
КонецЕсли;
Товар.Установить(Код, Фабрика.Создать(Код.Тип, "A001"));
Товар.Установить(Название, Фабрика.Создать(Название.Тип, "Книга"));
Товар.Установить(Количество, Фабрика.Создать(Количество.Тип, "3"));
Товар.Проверить();

Сообщить(Свойства.Количество() = 4);
Сообщить(Товар.Тип().Имя = "Product");
Сообщить(Товар.Тип().URIПространстваИмен = "urn:guide:product");
Сообщить(Товар.Установлено(Код));
Сообщить(Не Товар.Установлено(Примечание));
Сообщить(Код.НижняяГраница = 1 И Код.ВерхняяГраница = 1);
Сообщить(Примечание.НижняяГраница = 0 И Примечание.ВерхняяГраница = 1);
Сообщить("Форма свойства code: " + Строка(Код.Форма));
Сообщить("Имя свойства: " + Код.Имя + "; локальное имя: " + Код.ЛокальноеИмя);
Сообщить("URI свойства code: " + Код.URIПространстваИмен);
Сообщить("Квалифицированное: " + Строка(Код.Квалифицированное));
Сообщить("Возможно пустое: " + Строка(Код.ВозможноПустое));
Сообщить("Фиксированное: " + Строка(Код.Фиксированное));
Сообщить(Код.ТипВладелец.Имя = "Product");
ЗначениеКода = Товар.ПолучитьXDTO(Код);
ЗначениеНазвания = Товар.ПолучитьXDTO(Название);
ЗначениеКоличества = Товар.ПолучитьXDTO(Количество);
Сообщить(ЗначениеКода.Значение = "A001");
Сообщить(ЗначениеНазвания.Значение = "Книга");
Сообщить(ЗначениеКоличества.Значение = 3);
Товар.Установить(Примечание, Фабрика.Создать(Примечание.Тип, ""));
Сообщить(Товар.Установлено(Примечание));
Товар.Сбросить(Примечание);
Сообщить(Не Товар.Установлено(Примечание));
Товар.Проверить();

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

  1. Тип Product получаем из фабрики по URI и имени; Создать возвращает новый ОбъектXDTO.

  2. Коллекция свойств описывает четыре поля. НижняяГраница 1 означает обязательность, 0 допускает отсутствие. ВерхняяГраница 1 ограничивает одиночное значение.

  3. Форма code — атрибут XML, name/quantity/note — элементы. Квалифицированное и URI определяют правила имени, а не значение SKU.

  4. Фабрика.Создать по типу конкретного свойства даёт ЗначениеXDTO. Установить получает описатель и совместимое значение.

  5. ПолучитьXDTO возвращает типизированное значение; у него .Значение содержит скаляр платформы.

  6. Пустая строка note всё ещё установлена. Сбросить удаляет установленность необязательного поля, не записывает пустую строку вместо отсутствия.

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

  1. Четыре свойства, тип Product и URI urn:guide:product.

  2. code/name/quantity заполнены как A001/Книга/3, note первоначально отсутствует.

  3. После назначения пустой строки note установлено, после Сбросить снова не установлено; окончательная проверка модели проходит.

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

Конкретный учебный товар заполнен и проверен по XSD с различием отсутствующего и пустого необязательного поля.

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

  1. ЗначениеЗаполнено не заменяет Установлено XDTO: пустая строка может быть установленным значением.

  2. Проверка схемы не гарантирует, что название соответствует справочнику или товар разрешён к продаже.

  3. Нельзя присваивать отрицательное количество: его тип в учебной схеме nonNegativeInteger.

  4. Свойства схемы только читаем; для другого контракта создавайте согласованную схему, не меняйте внешнюю модель наугад.

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

Записать учебный товар в XML и проверить восстановленные поля

После проверки модели используем фабрику именно нашей схемы. Явно задаём корневой элемент product и URI, а при чтении — ожидаемый Product.

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

Учебная база: создайте серверный общий модуль УчебныеЗадачи (флаг Сервер). Код без директив вставьте в тело процедуры ВыполнитьПример() Экспорт. Вызовите её из серверного обработчика команды учебной обработки. Не запускайте в рабочей базе.

Подготовка

  1. Не заменяйте учебный XML ответом реального сервиса: его схема может быть другой.

  2. Фабрика создана в памяти из одного собственного набора; экспортируется только URI urn:guide:product.

XSD = "<xs:schema xmlns:xs=""http://www.w3.org/2001/XMLSchema""
| xmlns:g=""urn:guide:product"" targetNamespace=""urn:guide:product""
| elementFormDefault=""qualified"" version=""1.0"" xml:lang=""ru"">
| <xs:annotation><xs:documentation>Учебный товар, не контракт внешнего API</xs:documentation></xs:annotation>
| <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:complexType name=""Product""><xs:sequence>
|  <xs:element name=""name"" type=""xs:string""/>
|  <xs:element name=""quantity"" type=""xs:nonNegativeInteger""/>
|  <xs:element name=""note"" type=""xs:string"" minOccurs=""0""/>
| </xs:sequence><xs:attribute name=""code"" type=""g:Sku"" use=""required""/>
| </xs:complexType>
| <xs:element name=""product"" type=""g:Product""/>
|</xs:schema>";
Чтение = Новый ЧтениеXML;
Чтение.УстановитьСтроку(XSD);
Попытка
    ЧтениеДерева = Новый ПостроительDOM;
    ДокументСхемы = ЧтениеДерева.Прочитать(Чтение);
    Чтение.Закрыть();
Исключение
    Чтение.Закрыть();
    ВызватьИсключение;
КонецПопытки;
Построитель = Новый ПостроительСхемXML;
Схема = Построитель.СоздатьСхемуXML(ДокументСхемы.ЭлементДокумента);
Если Схема = Неопределено Тогда
    ВызватьИсключение "Не удалось построить учебную схему";
КонецЕсли;
Набор = Новый НаборСхемXML;
Набор.Добавить(Схема);
Если Не Набор.Проверить() Тогда
    ВызватьИсключение "Учебная XSD не прошла проверку";
КонецЕсли;
Фабрика = Новый ФабрикаXDTO(Набор);
ТипТовара = Фабрика.Тип("urn:guide:product", "Product");
Если ТипТовара = Неопределено Тогда
    ВызватьИсключение "В фабрике не найден тип Product";
КонецЕсли;
Товар = Фабрика.Создать(ТипТовара);
Свойства = Товар.Свойства();
Код = Свойства.Получить("code");
Название = Свойства.Получить("name");
Количество = Свойства.Получить("quantity");
Примечание = Свойства.Получить("note");
Если Код = Неопределено Или Название = Неопределено
    Или Количество = Неопределено Или Примечание = Неопределено Тогда
    ВызватьИсключение "Не найдены четыре свойства учебной модели";
КонецЕсли;
Товар.Установить(Код, Фабрика.Создать(Код.Тип, "A001"));
Товар.Установить(Название, Фабрика.Создать(Название.Тип, "Книга"));
Товар.Установить(Количество, Фабрика.Создать(Количество.Тип, "3"));
Товар.Проверить();

Запись = Новый ЗаписьXML;
Запись.УстановитьСтроку();
Попытка
    Фабрика.ЗаписатьXML(Запись, Товар, "product", "urn:guide:product");
    XML = Запись.Закрыть();
Исключение
    Запись.Закрыть();
    ВызватьИсключение;
КонецПопытки;
Сообщить(XML);
ЧтениеТовара = Новый ЧтениеXML;
ЧтениеТовара.УстановитьСтроку(XML);
Попытка
    Копия = Фабрика.ПрочитатьXML(ЧтениеТовара, ТипТовара);
    ЧтениеТовара.Закрыть();
Исключение
    ЧтениеТовара.Закрыть();
    ВызватьИсключение;
КонецПопытки;
Копия.Проверить();
КопияКода = Копия.ПолучитьXDTO("code");
КопияНазвания = Копия.ПолучитьXDTO("name");
КопияКоличества = Копия.ПолучитьXDTO("quantity");
Сообщить(КопияКода.Значение = "A001");
Сообщить(КопияНазвания.Значение = "Книга");
Сообщить(КопияКоличества.Значение = 3);
Сообщить(Не Копия.Установлено(Примечание));
ЭкспортированныйНабор = Фабрика.ЭкспортСхемыXML("urn:guide:product");
Сообщить(ЭкспортированныйНабор.Получить("urn:guide:product").ПространствоИмен = "urn:guide:product");

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

  1. Фабрика.ЗаписатьXML записывает данные модели, а не платформенный объект справочника.

  2. Корневой элемент и URI задаём явно. Префикс при сериализации может отличаться, поэтому сравниваем значения после чтения, а не текст XML целиком.

  3. Чтение использует ТипТовара из той же фабрики. Копия.Проверить проверяет восстановленный объект.

  4. ПолучитьXDTO по именам читает три поля, отсутствующее note проверяем через описатель Примечание.

  5. ЭкспортСхемыXML возвращает набор схем в памяти для конкретного пакета, не записывает файлы автоматически.

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

  1. После XML-цикла код A001, название Книга, количество 3; note всё ещё отсутствует.

  2. В XML code — атрибут, а название и количество — элементы.

  3. Экспортированный набор содержит схему пространства urn:guide:product. Нет файлов или сетевых запросов.

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

Учебный объект прошёл полный цикл собственная XSD → XDTO → XML → XDTO с проверкой значений и необязательного поля.

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

  1. Одинаковый локальный тег product с другим URI — другой контракт.

  2. Внешние XML проверяйте по согласованной схеме и ограничениям размера; этот урок читает только собственную короткую строку.

  3. Наличие свойства товара в XDTO не создаёт товар в 1С: нет записи в справочник или документ.

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

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

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

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

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