Skip to main content

XDTO

Механизм работы с XML/JSON через строгую типизацию. Позволяет валидировать и преобразовывать данные по XSD-схемам вместо ручного разбора текста, автоматически создавать объекты и сериализовать их.

Ключевые компоненты: XDTO-пакеты (схемы в метаданных), фабрика (создает объекты), сериализатор (преобразует в XML/JSON). Используется для интеграции со сторонними системами, где важна валидация структуры данных.

Ключевые понятия

ПонятиеОписаниеАналогия
XSD-схемаОписание структуры данных в XML-форматеЧертеж здания
XDTO-пакетПреобразованная XSD-схема в метаданных 1СЧертеж в формате 1С
Фабрика XDTO"Устройство" для создания объектов по схемеСтроитель по чертежу
Сериализатор XDTOПреобразование объектов 1С ↔ XML/JSONПереводчик

Практическое применение

Основные сценарии:

  1. Интеграция с внешними системами — банки, гос.системы (ФНС)
  2. Стандартизированный обмен — унифицированные форматы
  3. Валидация данных — проверка структуры перед использованием
  4. Сериализация объектов — сохранение в файлы

Ответы на ключевые вопросы

1. Свойство как список XDTO:

// В конфигураторе XDTO-пакета в свойствах типа объекта:
• Максимальное количество: -1 (неограниченное количество)
• Минимальное количество: 0 (может быть пустым)
// Результат: всегда возвращается список, даже если 1 элемент

2. Перечисления в XDTO:

// В конфигураторе:
1. Создать "ТипЗначения" (например, "СтатусЗаказа")
2. Добавить значения: "Новый", "ВРаботе", "Завершен"
3. Использовать как тип для свойства

3. Загрузка без XDTO-пакета в конфигурации:

// Чтение XML через фабрику из файла XSD
ФайлыXSD = Новый Массив;
ФайлыXSD.Добавить("C:\scheme.xsd");
Фабрика = СоздатьФабрикуXDTO(ФайлыXSD);

ЧтениеXML = Новый ЧтениеXML;
ЧтениеXML.ОткрытьФайл("data.xml");
ОбъектXDTO = Фабрика.ПрочитатьXML(ЧтениеXML);

4. Выгрузка таблицы значений:

Фабрика = Новый ФабрикаXDTO();
Сериализатор = Новый СериализаторXDTO(Фабрика);

// Выгрузка
ЗаписьXML = Новый ЗаписьXML();
Сериализатор.ЗаписатьXML(ЗаписьXML, ТаблицаЗначений);

// Загрузка
ЧтениеXML = Новый ЧтениеXML("data.xml");
Таблица = Сериализатор.ПрочитатьXML(
ЧтениеXML,
Тип("ТаблицаЗначений"));

5. Проверка наличия свойства:

Свойство = ОбъектXDTO.Свойства().Получить("НужноеСвойство");

6. Выгрузка в XML/JSON:

// XML
СериализаторXDTO.ЗаписатьXML(ЗаписьXML, Данные);
// или
ФабрикаXDTO.ЗаписатьXML(ЗаписьXML, Объект);

// JSON (только через сериализатор)
СериализаторXDTO.ЗаписатьJSON(ЗаписьJSON, Данные);

Критические нюансы

XDTO vs Прямая работа с XML

АспектXDTOПрямой разбор XML
Валидация✅ Автоматическая по XSD❌ Ручная проверка
Типизация✅ Строгая типизация❌ Любые данные
Сложность⚠️ Нужна схема✅ Проще для простых случаев
Поддержка✅ Легче поддерживать❌ Сложно менять формат

Производительность:

  • Чтение с валидацией — медленнее, но безопаснее
  • Чтение без валидации — быстрее, но риск ошибок
  • Большие файлы — могут потребовать потоковой обработки

Рекомендации по использованию

Когда использовать XDTO:

  • ✅ Интеграция по стандартным протоколам (ФНС, банки)
  • ✅ Сложная структура данных с валидацией
  • ✅ Частые изменения форматов (легче через схемы)
  • ✅ Требуется гарантия целостности данных