ДокументHTML.По умолчанию

Конструкторы

Создает документ HTML и создает элемент TITLE в разделе HEAD.

Синтаксис

Новый ДокументHTML(<Заголовок>)
Полное описание, параметры и ограничения

ДокументHTML.По умолчанию

ДокументHTML (HTMLDocument)

Документ HTML с заголовком

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

Синтаксис:
Новый ДокументHTML(<Заголовок>)
Параметры:

<Заголовок> (обязательный)
Тип: Строка.
Заголовок HTML документа. Если параметр установлен, то в документе будет создан элемент TITLE, и содержимое заголовка будет помещено внутри него.
Описание:

Создает документ HTML и создает элемент TITLE в разделе HEAD.

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

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

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

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

Создать пустой HTML-документ с заголовком и настройками тела

Конструктор ДокументHTML создаёт заголовок документа. Настройки тела не являются данными заказа или настройками управляемой формы 1С.

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

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

Подготовка

  1. Используйте учебную базу платформы 8.5.1.1343 и серверную процедуру учебного общего модуля. Каждый пример выполняйте отдельно.

  2. Все данные заказа вымышлены и находятся в строке. ЧтениеHTML разбирает данные, но не является браузером: форма не отправляется, ссылки не открываются, картинки не скачиваются.

  3. Никакие файлы, адреса сайтов, токены и документы информационной базы не нужны. Не заменяйте учебную строку произвольным внешним HTML без отдельной проверки безопасности.

  4. Индексы коллекций начинаются с нуля. Перед обращением к найденному узлу проверяйте Неопределено; перед специальными свойствами элемента проверяйте его тип.

Документ = Новый ДокументHTML("Учебный отчёт");
Тело = Документ.Тело;
Если Тело = Неопределено Тогда
    ВызватьИсключение "У созданного документа не получено тело; изучите результат конструктора";
КонецЕсли;
Тело.ЦветФона = "#ffffff";
Тело.ЦветТекста = "#17212b";
Сообщить(Документ.Заголовок = "Учебный отчёт");
Сообщить(Тело.ЦветФона = "#ffffff");
Сообщить(СтрНайти(Документ.ИзвлечьТолькоТекст(), "Книга: 3") = 0);

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

  1. Конструктор получает настоящий заголовок, не путь к файлу.

  2. Тело — отдельный элемент, перед использованием проверяем его наличие.

  3. Тело возвращает объект настроек ЭлементТелоHTML; используем его документированные свойства цветов, не приписываем ему методы общего DOM-узла.

  4. Заголовок читаем отдельно от извлечённого текста; строки товаров ещё не добавлены.

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

  1. Три сравнения Истина: заголовок задан, цвет тела задан, текста Книга: 3 в новом документе нет.

  2. В тексте тела нет автоматически созданной записи информационной базы; это только собственное дерево.

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

Создан самостоятельный HTML-документ в памяти.

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

  1. Нельзя передавать текст заголовка как URL открытия страницы.

  2. Внешнюю строку, которую нужно показать как текст, безопаснее добавлять текстовым узлом, а не исполняемой разметкой.

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

Импортировать покупателя во второй HTML-документ

ИмпортироватьУзел создаёт копию для другого документа. Оригинал не удаляется из формы, а пользовательские данные не переносятся.

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

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

Подготовка

  1. Используйте учебную базу платформы 8.5.1.1343 и серверную процедуру учебного общего модуля. Каждый пример выполняйте отдельно.

  2. Все данные заказа вымышлены и находятся в строке. ЧтениеHTML разбирает данные, но не является браузером: форма не отправляется, ссылки не открываются, картинки не скачиваются.

  3. Никакие файлы, адреса сайтов, токены и документы информационной базы не нужны. Не заменяйте учебную строку произвольным внешним HTML без отдельной проверки безопасности.

  4. Индексы коллекций начинаются с нуля. Перед обращением к найденному узлу проверяйте Неопределено; перед специальными свойствами элемента проверяйте его тип.

HTML = "<html><head><title>Учебный заказ</title><meta id='meta' name='description' content='Вымышленный заказ'></head>
|<body id='body'><p id='note'>Заказ существует только в памяти</p><pre id='code'>A-01: 3
|B-02: 1</pre>
|<form id='order' name='order' action='' method='get'>
|<input id='customer' name='customer' type='text' value='Учебный покупатель'>
|<input id='accepted' name='accepted' type='checkbox' value='yes'>
|<button id='preview' name='preview' type='button' value='preview'>Предпросмотр</button></form>
|<table id='items' summary='Книга и ручка'><caption id='caption'>Товары</caption><colgroup><col id='column'></colgroup><tbody>
|<tr id='book'><td id='book-name'>Книга</td><td>3</td></tr><tr id='pen'><td>Ручка</td><td>1</td></tr>
|</tbody></table><a id='help' name='help' href='#note'>Пояснение</a><img id='logo' alt='Учебная картинка без источника'>
|</body></html>";
Чтение = Новый ЧтениеHTML;
Чтение.УстановитьСтроку(HTML);
Попытка
    Построитель = Новый ПостроительDOM;
    Документ = Построитель.Прочитать(Чтение);
Исключение
    Чтение.Закрыть();
    ВызватьИсключение;
КонецПопытки;
Чтение.Закрыть();
Если ТипЗнч(Документ) <> Тип("ДокументHTML") Тогда
    ВызватьИсключение "Ожидался ДокументHTML, а не XML-документ";
КонецЕсли;
Покупатель = Документ.ПолучитьЭлементПоИдентификатору("customer");
Если Покупатель = Неопределено Тогда
    ВызватьИсключение "Не найден учебный элемент customer";
КонецЕсли;
Если ТипЗнч(Покупатель) <> Тип("ЭлементВводаHTML") Тогда
    ВызватьИсключение "Неожиданный тип учебного элемента customer";
КонецЕсли;
Покупатель.УстановитьПользовательскиеДанные("lesson", "A-01");
ДругойДокумент = Новый ДокументHTML("Копия покупателя");
Копия = ДругойДокумент.ИмпортироватьУзел(Покупатель, Истина);
Если ТипЗнч(Копия) <> Тип("ЭлементВводаHTML") Тогда
    ВызватьИсключение "Перед специальным Значение проверяем тип импортированного узла";
КонецЕсли;
Сообщить(Копия.ДокументВладелец = ДругойДокумент);
Сообщить(Копия.РодительскийУзел = Неопределено);
Сообщить(Копия.Значение = "Учебный покупатель");
Сообщить(Копия.ПолучитьПользовательскиеДанные("lesson") = Неопределено);
Сообщить(Не Покупатель.УзелИдентичен(Копия));
Сообщить(Покупатель.Форма() <> Неопределено);
Сообщить(Покупатель.ДокументВладелец = Документ);

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

  1. На оригинальном поле сохраняем служебную пометку, не HTML-атрибут.

  2. Создаём другой документ и импортируем поле рекурсивно; не пытаемся импортировать весь ДокументHTML.

  3. Копия принадлежит новому документу, но ещё не вставлена в его дерево.

  4. Проверяем значение, отсутствие перенесённой пометки и сохранность оригинального владельца.

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

  1. Семь сравнений дают Истина; оригинал остаётся внутри исходной формы.

  2. У нового документа не появилась форма от одного только импортирования input.

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

Сделана отдельная копия HTML-узла без изменения первого заказа.

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

  1. ДобавитьДочерний между разными документами не заменяет ИмпортироватьУзел.

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

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

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

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

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

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