КомментарийDOM.УстановитьПользовательскиеДанные

Методы · SetUserData

Устанавливает данные пользователя.

Синтаксис

УстановитьПользовательскиеДанные(<Ключ>, <Данные>)
Полное описание, параметры и ограничения

КомментарийDOM.УстановитьПользовательскиеДанные (DOMComment.SetUserData)

КомментарийDOM (DOMComment)

УстановитьПользовательскиеДанные (SetUserData)

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

Синтаксис:
УстановитьПользовательскиеДанные(<Ключ>, <Данные>)
Параметры:

<Ключ> (обязательный)
Тип: Строка.
Ключ пользовательских данных.

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

Устанавливает данные пользователя.

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

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

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

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

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

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

Отличить неглубокую копию элемента от полной копии и служебных данных

Клонируем реальный элемент товара и его текст/комментарий/CDATA/инструкцию/атрибут/фрагмент. Копия равна по содержимому, но не идентична и не наследует локальную метку.

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

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

Подготовка

  1. Используйте весь приведённый код с собственной подготовкой восьми узлов.

  2. Метки source-row и training-tag — локальные учебные значения, не атрибуты XML и не номера строк источника конфигурации.

Документ = Новый ДокументDOM("urn:guide:nodes", "g:guide");
Корень = Документ.ЭлементДокумента;
Корень.УстановитьСоответствиеПространстваИмен("g", "urn:guide:nodes");
Атрибут = Документ.СоздатьАтрибут("code");
Атрибут.Значение = "A-01";
Корень.УстановитьУзелАтрибута(Атрибут);
Текст = Документ.СоздатьТекстовыйУзел("Книга");
Комментарий = Документ.СоздатьКомментарий("учебный комментарий");
CDATA = Документ.СоздатьСекциюCDATA("<данные>");
Инструкция = Документ.СоздатьИнструкциюОбработки("guide", "mode=test");
Корень.ДобавитьДочерний(Текст);
Корень.ДобавитьДочерний(Комментарий);
Корень.ДобавитьДочерний(CDATA);
Корень.ДобавитьДочерний(Инструкция);
Фрагмент = Документ.СоздатьФрагментДокумента();
Фрагмент.ДобавитьДочерний(Документ.СоздатьЭлемент("note"));
Узлы = Новый Массив;
Узлы.Добавить(Документ);
Узлы.Добавить(Корень);
Узлы.Добавить(Атрибут);
Узлы.Добавить(Текст);
Узлы.Добавить(Комментарий);
Узлы.Добавить(CDATA);
Узлы.Добавить(Инструкция);
Узлы.Добавить(Фрагмент);

Корень.УстановитьПользовательскиеДанные("source-row", 7);
НеглубокаяКопия = Корень.КлонироватьУзел(Ложь);
ПолнаяКопия = Корень.КлонироватьУзел(Истина);
Сообщить(НеглубокаяКопия.ДочерниеУзлы.Количество() = 0);
Сообщить(НеглубокаяКопия.ЕстьАтрибут("code"));
Сообщить(ПолнаяКопия.ДочерниеУзлы.Количество() = 4);
Сообщить(ПолнаяКопия.УзелРавен(Корень));
Сообщить(Не ПолнаяКопия.УзелИдентичен(Корень));
Сообщить(ПолнаяКопия.РодительскийУзел = Неопределено);
Сообщить(Корень.ПолучитьПользовательскиеДанные("source-row") = 7);
Сообщить(ПолнаяКопия.ПолучитьПользовательскиеДанные("source-row") = Неопределено);
// Документ не клонируем: остальные семь видов созданы именно в нём.
Узлы.Удалить(0);
Для Каждого Узел Из Узлы Цикл
    Узел.УстановитьПользовательскиеДанные("training-tag", "обработано");
    Копия = Узел.КлонироватьУзел(Истина);
    Сообщить(Узел.ПолучитьПользовательскиеДанные("training-tag") = "обработано");
    Сообщить(Копия.ПолучитьПользовательскиеДанные("training-tag") = Неопределено);
    Сообщить(Копия.УзелРавен(Узел));
    Сообщить(Не Копия.УзелИдентичен(Узел));
КонецЦикла;

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

  1. У элемента неглубокое клонирование сохраняет атрибуты, но не копирует детей. Полное копирует всё поддерево.

  2. УзелРавен сравнивает содержимое по правилам DOM; УзелИдентичен проверяет один и тот же узел.

  3. Копия отсоединена от родителя. Пользовательские данные не переносятся и не участвуют в равенстве.

  4. Отдельно клонируем семь конкретных видов: элемент, атрибут, текст, комментарий, CDATA, инструкцию и фрагмент. Документ из этого цикла исключён.

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

  1. Неглубокий элемент: 0 детей и сохранён code. Полный элемент: 4 ребёнка.

  2. Полная копия равна, не идентична исходному корню и не имеет родителя.

  3. Для всех семи отдельных видов копия не получает training-tag, хотя исходник её имеет.

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

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

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

  1. Клонирование не переносит узел в другой документ: для этого используйте ИмпортироватьУзел.

  2. Изменение копии не следует интерпретировать как изменение исходного элемента.

  3. Служебные данные DOM не сериализуются как XML-атрибуты; если нужен атрибут обмена, задайте его явно.

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

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

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

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

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