Работа с Фабрикой XDTO в 1С: доступные пространства имен (Namespaces)
Архитектура XDTO в платформе 1С
XDTO (XML Data Transfer Objects) — это универсальный механизм платформы 1С для работы с типизированными данными на основе схем XML (XSD). Объект ФабрикаXDTO является диспетчером, который знает структуру всех типов данных, описанных в конфигурации (в ветке XDTO-пакеты) и базовых типов платформы. Бизнес-риски: сбои при интеграции со сторонними веб-сервисами (SOAP/REST), государственными системами (ЕГАИС, Меркурий, Честный ЗНАК) из-за несоответствия пространств имен.
Базовые (встроенные) пространства имен 1С
| URI пространства имен (Namespace) | Назначение типов данных |
|---|---|
http://v8.1c.ru/8.1/data/core | Базовые типы: Строка (string), Число (decimal), Булево (boolean), Дата (date), УникальныйИдентификатор (UUID). |
http://v8.1c.ru/8.1/data/enterprise/current-config | Типы, специфичные для конкретной конфигурации 1С (ссылки на справочники, документы). |
http://v8.1c.ru/8.2/data/spreadsheet | Типы для работы с табличными документами в формате XML. |
Алгоритм работы с Фабрикой XDTO
Сценарий 1: Создание объекта простого типа и его сериализация
Для корректной работы веб-сервисов необходимо правильно инициализировать переменные через базовое пространство имен (namespace).
// 1. Получаем базовый тип XDTO "string" из пространства имен core
ТипСтрока = ФабрикаXDTO.Тип("http://v8.1c.ru/8.1/data/core", "string");
// 2. Создаем значение XDTO
ЗначениеXDTO = ФабрикаXDTO.Создать(ТипСтрока, "Тестовое сообщение");
// 3. Сериализуем объект в XML (через ЗаписьXML)
Запись = Новый ЗаписьXML;
Запись.УстановитьСтроку();
ФабрикаXDTO.ЗаписатьXML(Запись, ЗначениеXDTO);
XMLСтрока = Запись.Закрыть(); // Возвращает валидный XML узелСценарий 2: Чтение данных из сторонней XSD-схемы (Парсинг)
Если сервис (например, банк) прислал XML и свою схему (XSD), нужно создать локальную Фабрику XDTO, чтобы 1С знала структуру документа.
// Чтение стороннего XSD файла и создание фабрики
ЧтениеXSD = Новый ЧтениеXML;
ЧтениеXSD.ОткрытьФайл("C:\Integration\BankSchema.xsd");
Построитель = Новый ПостроительDOM;
СхемаXSD = Построитель.Прочитать(ЧтениеXSD);
ЧтениеXSD.Закрыть();
НаборСхем = Новый НаборСхемXML;
НаборСхем.Добавить(СхемаXSD);
// Локальная фабрика, не затрагивающая глобальную конфигурацию
ЛокальнаяФабрика = Новый ФабрикаXDTO(НаборСхем);
// Теперь можно безопасно читать XML по правилам банка
ТипОбъекта = ЛокальнаяФабрика.Тип("http://bank.ru/api/v1", "PaymentDocument");Типовые ошибки разработчиков
- Путаница между Глобальной и Локальной фабрикой: Использование глобальной
ФабрикаXDTOдля парсинга сторонних XML без добавления XDTO-пакета в конфигуратор приводит к ошибке «Тип не определен». Для временных структур используйтеНовый ФабрикаXDTO(НаборСхемXML). - Несовпадение регистра (Case Sensitivity): URI пространств имен чувствительны к регистру.
http://v8.1C.ru/8.1/data/core(большая 'C') выдаст ошибку, так как платформа ожидает строгоhttp://v8.1c.ru/8.1/data/core.
Ошибки сериализации XDTO и падения веб-сервисов тормозят бизнес-процессы. Разработчики ITSTM профессионально настроят обмены данными (КД3, EnterpriseData, прямые HTTP-запросы) между 1С и любыми сторонними системами (Сайты, маркетплейсы, WMS).
Частые вопросы (FAQ)
Что такое ФабрикаXDTO в 1С?
Это встроенный в ядро платформы 1С класс (объект), который отвечает за генерацию и чтение XML/JSON структур строго по заданным правилам (XSD схемам). Он проверяет типы данных (валидация), чтобы в числовое поле не попала строка.
Где посмотреть все доступные пространства имен моей базы 1С?
В конфигураторе откройте ветку 'Общие' -> 'XDTO-пакеты'. URI каждого пакета (поле URI пространства имен в свойствах) — это то, к чему вы должны обращаться в коде 1С (параметр URIПространстваИмен).
Почему метод ФабрикаXDTO.ПрочитатьXML выдает ошибку о несоответствии типа?
Входящий XML файл содержит теги, типы или пространства имен (xmlns:...), которых нет в XSD схеме, прикрепленной к этой фабрике. Необходима строгая синхронизация схемы (XSD) и фактического файла (XML).
Можно ли использовать XDTO для сериализации в JSON?
Да, начиная с версии платформы 8.3. ФабрикаXDTO поддерживает методы ПрочитатьJSON и ЗаписатьJSON, что сильно упрощает построение REST API на стороне 1С.