XDTO
Механизм работы с XML/JSON через строгую типизацию. Позволяет валидировать и преобразовывать данные по XSD-схемам вместо ручного разбора текста, автоматически создавать объекты и сериализовать их.
Ключевые компоненты: XDTO-пакеты (схемы в метаданных), фабрика (создает объекты), сериализатор (преобразует в XML/JSON). Используется для интеграции со сторонними системами, где важна валидация структуры данных.
Ключевые понятия
| Понятие | Описание | Аналогия |
|---|---|---|
| XSD-схема | Описание структуры данных в XML-формате | Чертеж здания |
| XDTO-пакет | Преобразованная XSD-схема в метаданных 1С | Чертеж в формате 1С |
| Фабрика XDTO | "Устройство" для создания объектов по схеме | Строитель по чертежу |
| Сериализатор XDTO | Преобразование объектов 1С ↔ XML/JSON | Переводчик |
Практическое применение
Основные сценарии:
- Интеграция с внешними системами — банки, гос.системы (ФНС)
- Стандартизированный обмен — унифицированные форматы
- Валидация данных — проверка структуры перед использованием
- Сериализация объектов — сохранение в файлы
Ответы на ключевые вопросы
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 | ❌ Ручная проверка |
| Типизация | ✅ Строгая типизация | ❌ Любые данные |
| Сложность | ⚠️ Нужна схема | ✅ Проще для простых случаев |
| Поддержка | ✅ Легче поддерживать | ❌ Сложно менять формат |
Производительность:
- Чтение с валидацией — медленнее, но безопаснее
- Чтение без валидации — быстрее, но риск ошибок
- Большие файлы — могут потребовать потоковой обработки