ОбъектXDTO - Метод Установить() по выражению XPath: как пользоваться?

1. VKislitsin 1016 21.07.23 12:26 Сейчас в теме
Коллеги, доброго дня.

У объекта Платформы ОбъектXDTO есть метод Установить() с двумя вариантами синтаксиса:

--------------------------------------------

Вариант синтаксиса: По выражению XPath

Синтаксис:

Установить(<Выражение>)

--------------------------------------------

Вариант синтаксиса: По свойству

Синтаксис:

Установить(<Свойство>, <Значение>)

--------------------------------------------
Показать

Не могу сообразить как именно нужно использовать вариант синтаксиса по выражению XPath.

У него есть лишь один параметр <Выражение>, в котором требуется указать выражение XPath, т.е. путь к свойству.

А параметра для устанавливаемого значения - нет.

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

Поделитесь, пожалуйста, опытом: как правильно использовать этот метод?
Вознаграждение за ответ
Показать полностью
Найденные решения
24. Alias 176 01.08.23 09:18 Сейчас в теме +5 $m
Никогда не использовал этот метод, но ради интереса попробовал. Вот что получилось:

Во-первых, если сделать по первому варианту синтаксиса (по строке), для примитивного XDTO-объекта с одним свойством ИмяСвойства, ОбъектXDTO.Установить("ИмяСвойства"), то будет ошибка "недостаточно фактических параметров". Это уже говорит о том что в С-П скорее всего есть ошибка, и второй параметр (устанавливаемое значение) всё же требуется.

Попробуем его указать -- ОбъектXDTO.Установить("ИмяСвойства", "новое значение"). Ну ок, работает. Первый вариант, указание XPath, значение свойства установилось.
Попробуем усложнить, создадим вложенную структуру типов в XDTO, и попробуем XPath посложнее: ОбъектXDTO.Установить("ИмяСвойства1/ИмяСвойства2", "новое значение"). Тоже ок, всё сработало, установилось значение для вложенного свойства, с помощью XPath. XPath'ы типа ".ИмяСвойства1" тоже работают.

Т.к. в 1С XPath ограничен только одним значением, поэтому ни получить все свойства, ни установить сразу несколько с помощью XPath типа "//ИмяСвойства2" нельзя. ("Строго говоря, это не совсем XPath, а скорее несколько модифицированное подмножество XPath." - (с) ИТС)
saddy; VKislitsin; starik-2005; +3 Ответить
23. spacecraft 31.07.23 21:02 Сейчас в теме +0.5 $m
(1) да просто в СП ошибка.
На самом деле вариант синтаксиса должен выглядеть так:

Вариант синтаксиса: По выражению XPath

Синтаксис:

Установить(<Выражение>, <Значение>)



Просто 2 варианта, или с указанием СвойствоXDTO, или строковое выражение.
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. Timur.V 81 21.07.23 16:06 Сейчас в теме
(1)
XPath


Вот навигация по дереву
ЧтениеXML = Новый ЧтениеXML;
ЧтениеXML.УстановитьСтроку(Текст);
ПостроительDOM = Новый ПостроительDOM;
ДанныеDOM = ПостроительDOM.Прочитать(ЧтениеXML);
ЧтениеXML.Закрыть();

УзелКонтекста = ДанныеDOM.ПервыйДочерний;
Разыменователь = Новый РазыменовательПространствИменDOM(УзелКонтекста);

РезультатXPath = ДанныеDOM.ВычислитьВыражениеXPath("Объект[@Тип=""СправочникСсылка.ЯзыкиНародовМира""]", УзелКонтекста, Разыменователь);
Объект = РезультатXPath.ПолучитьСледующий();
Пока НЕ Объект = Неопределено Цикл 
    ГУИД = ДанныеDOM.ВычислитьВыражениеXPath("Ссылка/Свойство[@Имя = ""{УникальныйИдентификатор}""]/Значение", Объект, Разыменователь).ПолучитьСледующий().ТекстовоеСодержимое;
    Код = ДанныеDOM.ВычислитьВыражениеXPath("Ссылка/Свойство[@Имя = ""Код""]/Значение", Объект, Разыменователь).ПолучитьСледующий().ТекстовоеСодержимое;
    Наименование = ДанныеDOM.ВычислитьВыражениеXPath("Свойство[@Имя = ""Наименование""]/Значение", Объект, Разыменователь).ПолучитьСледующий().ТекстовоеСодержимое;
    ПометкаУдаления = ДанныеDOM.ВычислитьВыражениеXPath("Свойство[@Имя = ""ПометкаУдаления""]/Значение", Объект, Разыменователь).ПолучитьСледующий().ТекстовоеСодержимое;
    Сообщить(СтрШаблон("%1-%2-%3-%4", ГУИД, Код, Наименование, ПометкаУдаления));
    Объект = РезультатXPath.ПолучитьСледующий();
КонецЦикла
Показать


Это читаете?
https://its.1c.ru/db/v837doc#bookmark:dev:TI000000771
3. VKislitsin 1016 21.07.23 18:19 Сейчас в теме
(2)
Это читаете?

Тимур, "это" я конечно же читал. Если покажете где там пример установки значения свойства ОбъектаXDTO по выражению XPath, буду безмерно благодарен.

Что касается, приведенного вами примера кода, то он относится во-первых к объекту DOM, а не ОбъектXDTO, а во-вторых, описывает получение значения свойства, а не его установку.
20. VKislitsin 1016 24.07.23 23:22 Сейчас в теме
(19) Сергей, ваша краткость достойна подражания.
Эту ссылку мне уже кидали заработчики стартманей публикацией сообщений в форуме. Разве что на чуть соседний пункт документации.
Там я всё до дыр зачитал еще до размещения вопроса (думал что достаточно ясно это в стартовом сообщении уточнил). Про установку значения укажете где там написано?
23. spacecraft 31.07.23 21:02 Сейчас в теме +0.5 $m
(1) да просто в СП ошибка.
На самом деле вариант синтаксиса должен выглядеть так:

Вариант синтаксиса: По выражению XPath

Синтаксис:

Установить(<Выражение>, <Значение>)



Просто 2 варианта, или с указанием СвойствоXDTO, или строковое выражение.
4. VKislitsin 1016 24.07.23 14:08 Сейчас в теме
Никто не знает? На партнерском форуме тоже молчок...
5. tango 546 24.07.23 14:58 Сейчас в теме
(4) Но, бро, очевидно же, выражение XPath содержит и свойство, и значение
6. VKislitsin 1016 24.07.23 15:05 Сейчас в теме
(5)
выражение XPath содержит и свойство, и значение

Михаил, научите очевидному? Особенно интересен вариант когда значение - не примитивный тип, а тоже ОбъектXDTO.
7. tango 546 24.07.23 15:15 Сейчас в теме
(6) ок. от вас - собственно ваш ОбъектXDTO и выражение, которым вы пытаетесь установить значение свойству
8. VKislitsin 1016 24.07.23 15:54 Сейчас в теме
(7) Я уж было подумал что вы и правда знаете. Можно не отвечать, я не стану продолжать.
9. tango 546 24.07.23 15:56 Сейчас в теме
(8) Хочешь по-чесноку, бро? Мне безразлично, что ты думаешь. Особенно когда ты думаешь, что кто-то будет работать вместо тебя.
10. пользователь 24.07.23 16:15
Сообщение было скрыто модератором.
...
11. Sashares 35 24.07.23 17:12 Сейчас в теме
12. пользователь 24.07.23 17:15
Сообщение было скрыто модератором.
...
13. tango 546 24.07.23 19:12 Сейчас в теме
(12) да ладно муксун уже выловлен, съешь как-нибудь
14. пользователь 24.07.23 19:26
Сообщение было скрыто модератором.
...
15. VKislitsin 1016 24.07.23 19:45 Сейчас в теме
Я смотрю, форум Инфостарта стремится превратиться в новую Мисту. Подозреваю, что скоро надо будет на СтекОверфлоу писать вопросы по 1С чтобы что-то дельное прочитать в ответе.
16. tango 546 24.07.23 20:10 Сейчас в теме
(15) Ок, ты прав, товарищь. Давай, напишем что-нибудь дельное. Пусть кое-кому станет стыдно кушать муксуна в одно лицо.

Но мне, скажу сразу, не скрывая, не хватает твоей основательности в подходе. О чем мы с тобой будем писать что-нибудь дельное? Что ты обычно читаешь на СтекОверфлоу ?
17. пользователь 24.07.23 20:44
Сообщение было скрыто модератором.
...
18. VKislitsin 1016 24.07.23 21:16 Сейчас в теме
(17) Отличный стол! Да и судя по количеству пивных бокалов, лицо точно не одно. Так что лучше порадуемся за коллегу!
Дельного в чате ждать уже глупо - пойду и себе налью вкусняшки.
21. Alias 176 31.07.23 12:07 Сейчас в теме
Ответил на партфоруме.
22. VKislitsin 1016 31.07.23 19:20 Сейчас в теме
(21)
Ответил на партфоруме.

Александр, спасибо огромное!!! У меня руки не дошли пока до экспериментов (задача отложена немного из-за других суперсрочных). Продублируйте сюда пожалуйста, от своего имени - чтобы те, кто придет по поиску, могли воспользоваться. Ну и чтобы ответ пометить как решение.
24. Alias 176 01.08.23 09:18 Сейчас в теме +5 $m
Никогда не использовал этот метод, но ради интереса попробовал. Вот что получилось:

Во-первых, если сделать по первому варианту синтаксиса (по строке), для примитивного XDTO-объекта с одним свойством ИмяСвойства, ОбъектXDTO.Установить("ИмяСвойства"), то будет ошибка "недостаточно фактических параметров". Это уже говорит о том что в С-П скорее всего есть ошибка, и второй параметр (устанавливаемое значение) всё же требуется.

Попробуем его указать -- ОбъектXDTO.Установить("ИмяСвойства", "новое значение"). Ну ок, работает. Первый вариант, указание XPath, значение свойства установилось.
Попробуем усложнить, создадим вложенную структуру типов в XDTO, и попробуем XPath посложнее: ОбъектXDTO.Установить("ИмяСвойства1/ИмяСвойства2", "новое значение"). Тоже ок, всё сработало, установилось значение для вложенного свойства, с помощью XPath. XPath'ы типа ".ИмяСвойства1" тоже работают.

Т.к. в 1С XPath ограничен только одним значением, поэтому ни получить все свойства, ни установить сразу несколько с помощью XPath типа "//ИмяСвойства2" нельзя. ("Строго говоря, это не совсем XPath, а скорее несколько модифицированное подмножество XPath." - (с) ИТС)
saddy; VKislitsin; starik-2005; +3 Ответить
25. VKislitsin 1016 01.08.23 09:48 Сейчас в теме
(24) Супер! Спасибо! Вот ответ профессионала!

PS.
За "ради интереса попробовал" специально, из благодарности, вознаграждение поднял. Еще раз спасибо!
26. spacecraft 01.08.23 12:32 Сейчас в теме
(25) да уж... куда нам непрофессионалам.
Нам достаточно логики и пробовать запускать не понадобилось :)
27. VKislitsin 1016 01.08.23 12:42 Сейчас в теме
(26) Олег, я понимаю что вы считаете что ваш ответ был раньше, но на деле Александр написал первым и более развернуто (на партнерском). Сюда я сам попросил его продублировать.
В качестве утешительного приза отправил и вам вознаграждение (в начальном размере).

И да, вы тоже профессионал: ваш пост также по делу, без воды и заявлений об очевидности.
28. spacecraft 01.08.23 12:46 Сейчас в теме
(27) Вы не правильно поняли мой пост. Я не выпрашивал вознаграждения. У меня его и так хватает. Просто сам факт, что ответ был проигнорирован. Но, в любом случае - спасибо.
29. VKislitsin 1016 01.08.23 12:53 Сейчас в теме
(28)
ответ был проигнорирован

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

Совершенно не расценивал ваш пост о профессионализме как выпрашивание. Скорее, как указание на сложившуюся не очень справедливую ситуацию. Постарался исправить её в меру своего понимания справедливости. Надеюсь что и вы считаете примерно также.
starik-2005; +1 Ответить
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот