frame: отказ в дочерней вставке и чужом удалении

Учебные задачи

Учебная диагностика ограничения листового узла. Наличие методов в API не означает, что узел допускает дочерние элементы.

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

Синтаксический пример для серверного обработчика или толстого клиента. ЧтениеHTML и ПостроительDOM разбирают собственную строку в память; это не открытие страницы в браузере. Здесь код не выполнялся.

Подготовка

  1. Используется только собственная строка HTML. Лист и посторонний узел получаются из одного документа, новый узел — его собственная копия.

  2. Это намеренно отрицательный пример: дочерняя вставка в данный лист не является полезной успешной операцией.

Чтение = Новый ЧтениеHTML;
Чтение.УстановитьСтроку("<html><head></head><frameset><frame id=""leaf""><frame id=""other""></frameset></html>");
Построитель = Новый ПостроительDOM;
Документ = Построитель.Прочитать(Чтение);
Чтение.Закрыть();
Лист = Документ.ПолучитьЭлементПоИдентификатору("leaf");
Посторонний = Документ.ПолучитьЭлементПоИдентификатору("other");
НовыйУзел = Посторонний.КлонироватьУзел(Истина);
Попытка
    Лист.ВставитьПеред(НовыйУзел);
Исключение
    Сообщить("ВставитьПеред: получен отказ");
КонецПопытки;
Попытка
    Лист.ДобавитьДочерний(НовыйУзел);
Исключение
    Сообщить("ДобавитьДочерний: получен отказ");
КонецПопытки;
Попытка
    Лист.ЗаменитьДочерний(НовыйУзел, Посторонний);
Исключение
    Сообщить("ЗаменитьДочерний: получен отказ");
КонецПопытки;
Попытка
    Лист.УдалитьДочерний(Посторонний);
Исключение
    Сообщить("УдалитьДочерний: получен отказ");
КонецПопытки;
Сообщить("Дочерних узлов: " + Строка(Лист.ДочерниеУзлы.Количество()));

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

  1. Разберите строку и получите настоящий листовой узел.

  2. Отдельно проверьте четыре вызова на этом же получателе; перехват исключения нужен только для учебной диагностики.

  3. Посмотрите число дочерних узлов после вызовов, не объявляя отказ успешным редактированием.

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

  1. Для ВставитьПеред и ДобавитьДочерний ожидается отказ в недопустимой дочерней вставке; если поведение другое, не считайте ожидаемую диагностику подтверждённой.

  2. Посторонний не является дочерним этого листа: замена и удаление также должны отказать; исходный лист остаётся без дочерних узлов.

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

Приведён короткий пример синтаксиса и его ограничения. Здесь он не запускался в 1С; выполните проверки в своём учебном контексте.

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

  1. Исключение означает отказ, а не успешное добавление. Эти вызовы не следует использовать для создания содержимого листового элемента.

  2. ВставитьПеред и ДобавитьДочерний также могут отказаться из-за другого документа, предка или режима только чтения. Здесь узлы принадлежат собственному документу.

  3. В рабочем алгоритме ошибку нужно обрабатывать по задаче, а не безусловно продолжать четыре операции.

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

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

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

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

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