Глобальный контекст.XMLЗначение

Методы · XMLValue

Выполняет преобразование из строки, полученной из текста элемента или значения атрибута XML, в значение в соответствии с указанным типом. Выполняет действие обратное действию метода XMLСтрока.

Синтаксис

XMLЗначение(<Тип>, <СтрокаXML>)

Примеры платформы

ЧитаемДату = Ложь;
Пока ЧтениеXML.Прочитать() Цикл
    Если ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда
        Если ЧтениеXML.ЛокальноеИмя = "Дата" Тогда
            ЧитаемДату = Истина;
        КонецЕсли;
    ИначеЕсли ЧтениеXML.ТипУзла = ТипУзлаXML.Текст Тогда
        Если ЧитаемДату Тогда
            Дата = XMLЗначение(Тип("Дата"), ЧтениеXML.Значение);
        КонецЕсли
    КонецЕсли
КонецЕсли
Полное описание, параметры и ограничения

Глобальный контекст.XMLЗначение (Global context.XMLValue)

Глобальный контекст (Global context)

XMLЗначение (XMLValue)

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

Синтаксис:
XMLЗначение(<Тип>, <СтрокаXML>)
Параметры:

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

<СтрокаXML> (обязательный)
Тип: Строка.
Строка, содержащая строковое представление значения, полученное из XML.
Возвращаемое значение:
Тип: Null, Булево, Число, Строка, Дата, УникальныйИдентификатор, ДвоичныеДанные, ХранилищеЗначения; значения перечислений, значения системных перечислений (ВидСчета, ВидДвиженияБухгалтерии, ВидДвиженияНакопления, ДопустимыйЗнак, ДопустимаяДлина, ЧастиДаты, Неопределено или все ссылки на объекты базы данных.

Описание:

Выполняет преобразование из строки, полученной из текста элемента или значения атрибута XML, в значение в соответствии с указанным типом. Выполняет действие обратное действию метода XMLСтрока.

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

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

Пример:

ЧитаемДату = Ложь;
Пока ЧтениеXML.Прочитать() Цикл
Если ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда
Если ЧтениеXML.ЛокальноеИмя = "Дата" Тогда
ЧитаемДату = Истина;
КонецЕсли;
ИначеЕсли ЧтениеXML.ТипУзла = ТипУзлаXML.Текст Тогда
Если ЧитаемДату Тогда
Дата = XMLЗначение(Тип("Дата"), ЧтениеXML.Значение);
КонецЕсли
КонецЕсли
КонецЕсли

См. также:
Глобальный контекст, метод XMLСтрока

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

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

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

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

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

Сравниваем региональные настройки базы и сеанса. Для обмена показываем отдельный, независимый от оформления XML-формат числа.

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

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

Подготовка

  1. В учебной базе выполните код на сервере. Читаются настройки, не строки справочников и документов.

  2. В коде нет вызовов УстановитьРегиональныеНастройки, изменения индексов, монопольного режима или завершения сеансов.

  3. Результаты зависят от настроек вашей учебной базы и пользователя: фиксированных значений для всех конфигураций нет.

Процедура ВыполнитьПример() Экспорт
    База = ПолучитьРегиональныеНастройкиИнформационнойБазы();
    Сеанс = ПолучитьРегиональныеНастройкиСеанса();
    Сравнение = Новый ТаблицаЗначений;
    Сравнение.Колонки.Добавить("Параметр");
    Сравнение.Колонки.Добавить("База");
    Сравнение.Колонки.Добавить("Сеанс");
    ДобавитьСтрокуСравнения(Сравнение, "Код локализации", База.КодЛокализации, Сеанс.КодЛокализации);
    ДобавитьСтрокуСравнения(Сравнение, "Язык интерфейса", "Не задаётся этим объектом базы", Сеанс.КодЯзыкаИнтерфейса);
    ДобавитьСтрокуСравнения(Сравнение, "Использовать настройки сеанса", База.ИспользоватьНастройкиТекущегоСеанса, "Источник настроек сеанса");
    ДобавитьСтрокуСравнения(Сравнение, "Первый день недели", База.ПервыйДеньНедели, Сеанс.ПервыйДеньНедели);
    ДобавитьСтрокуСравнения(Сравнение, "Представление Истина", База.ПредставлениеБулевоИстина, Сеанс.ПредставлениеБулевоИстина);
    ДобавитьСтрокуСравнения(Сравнение, "Представление Ложь", База.ПредставлениеБулевоЛожь, Сеанс.ПредставлениеБулевоЛожь);
    ДобавитьСтрокуСравнения(Сравнение, "Отрицательные числа", База.ПредставлениеОтрицательныхЧисел, Сеанс.ПредставлениеОтрицательныхЧисел);
    ДобавитьСтрокуСравнения(Сравнение, "Разделитель групп", База.РазделительГруппЦифрЧисел, Сеанс.РазделительГруппЧисел);
    ДобавитьСтрокуСравнения(Сравнение, "Разделитель дробной части", База.РазделительДробнойЧастиЧисел, Сеанс.РазделительДробнойЧастиЧисел);
    ДобавитьСтрокуСравнения(Сравнение, "Группировка цифр", База.ФорматГруппировкиЦифрЧисел, Сеанс.ФорматГруппировкиЦифрЧисел);
    ДобавитьСтрокуСравнения(Сравнение, "Формат даты", База.ФорматПредставленияДаты, Сеанс.ФорматПредставленияДаты);
    ДобавитьСтрокуСравнения(Сравнение, "Формат времени", База.ФорматПредставленияВремени, Сеанс.ФорматПредставленияВремени);
    ДобавитьСтрокуСравнения(Сравнение, "Дополнительное свойство группировки сеанса", "Нет такого свойства", Сеанс.ГруппировкаЦифрЧисел);
    Для Каждого СтрокаСравнения Из Сравнение Цикл
        Сообщить(СтрокаСравнения.Параметр + ": база [" + СтрокаСравнения.База
            + "]; сеанс [" + СтрокаСравнения.Сеанс + "]");
    КонецЦикла;
    Сообщить(Сравнение.Количество() = 13);
    Сумма = 1234.5;
    Сообщить("Представление для человека: " + Формат(Сумма, "ЧДЦ=2"));
    XMLЧисло = XMLСтрока(Сумма);
    Сообщить("Машинный формат XML: " + XMLЧисло);
    ВосстановленнаяСумма = XMLЗначение(Тип("Число"), XMLЧисло);
    Сообщить(ВосстановленнаяСумма = Сумма);
    Сообщить(ТипЗнч(ВосстановленнаяСумма) = Тип("Число"));
КонецПроцедуры

Процедура ДобавитьСтрокуСравнения(Таблица, Название, ЗначениеБазы, ЗначениеСеанса)
    СтрокаСравнения = Таблица.Добавить();
    СтрокаСравнения.Параметр = Название;
    СтрокаСравнения.База = Строка(ЗначениеБазы);
    СтрокаСравнения.Сеанс = Строка(ЗначениеСеанса);
КонецПроцедуры

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

  1. Два метода возвращают разные объекты: настройки базы и настройки текущего сеанса.

  2. ИспользоватьНастройкиТекущегоСеанса определяет, нужно ли использовать параметры сеанса для представления значений.

  3. Пустая строка, 0 для дня недели и -1 для отрицательных чисел могут означать наследование настройки, а не ошибку.

  4. Сравнение содержит 13 конкретных параметров; язык интерфейса относится к сеансу и не равен обязательно локализации чисел.

  5. Формат создаёт представление для человека. XMLСтрока/XMLЗначение дают отдельный типизированный цикл для согласованного машинного контракта.

  6. Число после XML-цикла остаётся 1234.5; ни один параметр базы или сеанса не изменяется.

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

  1. Выводятся 13 строк сравнения; первая итоговая проверка Истина.

  2. После XML-цикла значение равно 1234.5 и его тип Число.

  3. Проверьте разделители и формат даты в другой учебной базе/сеансе: возможны отличия при той же числовой сумме.

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

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

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

  1. Нельзя разбивать произвольное Формат(Число) по запятой и считать это надёжным CSV или JSON.

  2. XML-лексическое представление не заменяет JSON-сериализатор и не задаёт валюту суммы.

  3. Пример читает региональные настройки, но не переключает язык или локализацию рабочего сеанса.

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

Передать число, дату и логическое значение в XML-формате

XMLСтрока формирует стандартное лексическое представление, XMLЗначение восстанавливает значение указанного типа без зависимости от запятой в интерфейсе.

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

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

Подготовка

  1. Можно выполнить на сервере или клиенте, доступном этим глобальным функциям.

  2. Дату трактуем как значение 1С без согласованного внешнего часового пояса; пример не описывает обмен UTC.

Цена = 12.35;
ЦенаXML = XMLСтрока(Цена);
ПрочитаннаяЦена = XMLЗначение(Тип("Число"), ЦенаXML);
Сообщить(ЦенаXML);
Сообщить(ПрочитаннаяЦена = Цена);
ПризнакXML = XMLСтрока(Истина);
ПрочитанныйПризнак = XMLЗначение(Тип("Булево"), ПризнакXML);
Сообщить(ПризнакXML);
Сообщить(ПрочитанныйПризнак);
Момент = Дата(2026, 10, 2, 14, 30, 0);
МоментXML = XMLСтрока(Момент);
ПрочитанныйМомент = XMLЗначение(Тип("Дата"), МоментXML);
Сообщить(МоментXML);
Сообщить(ПрочитанныйМомент = Момент);

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

  1. Преобразуем число функцией XMLСтрока: в лексическом XML используется точка, а не локальная запятая.

  2. XMLЗначение получает сначала тип результата, затем строку.

  3. Повторяем преобразование для Булево и Дата и сравниваем значения, не формат вывода интерфейса.

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

  1. Строка цены 12.35; обратное сравнение даёт Истина.

  2. Логическое представление true, дата восстанавливается равной исходной; все сравнения дают Истина.

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

Простые значения преобразованы туда и обратно без ручного форматирования.

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

  1. XMLЗначение не читает целый документ <product>...</product>: ему нужна лексическая строка отдельного значения.

  2. Для дат внешнего API отдельно согласуйте формат, смещение времени и семантику UTC; значение Дата само не решает этот вопрос.

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

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

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

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

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