Files
cc-1c-skills/docs/xdto-guide.md
T
Nick ShirokovandClaude Opus 5 3eb805f7b0 docs(xdto-guide): примеры задачами, а не синтаксисом команд
Гайд адресован неподготовленному читателю, а основной сценарий — задача
в произвольной форме или её часть внутри большей. Синтаксис вызовов такого
читателя скорее отпугнёт, к тому же он уже описан в SKILL.md каждого навыка
и в гайде дублировался.

Каждый сценарий теперь начинается с того, как задачу формулируют словами
(«сформируй платёжку в формате клиент-банка», «обращение к Смена.Сотрудник
возвращает что-то бесструктурное»), дальше — что за этим происходит и на что
обратить внимание. За точным синтаксисом — ссылки на SKILL.md.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-07-26 14:13:48 +03:00

143 lines
9.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Работа с пакетами XDTO
Пакет XDTO описывает XML-формат: какие есть типы, из каких свойств состоят, что
обязательно. По нему платформа умеет читать и писать XML — через `ФабрикаXDTO`.
Встречается везде, где 1С обменивается данными наружу: ЭДО, ЕГАИС, ВЕТИС, ФСС,
клиент-банк, веб-сервисы, `EnterpriseData`.
Навыки вызываются агентом сами — задачу можно ставить обычными словами. Ниже
примеры формулировок и того, что за ними происходит.
## Навыки
| Навык | Задача |
|---|---|
| [`/xdto-info`](../.claude/skills/xdto-info/SKILL.md) | Что в пакете и как заполнять тип — в терминах 1С |
| [`/xdto-compile`](../.claude/skills/xdto-compile/SKILL.md) | Собрать пакет по XML-схеме |
| [`/xdto-decompile`](../.claude/skills/xdto-decompile/SKILL.md) | Выгрузить пакет в XML-схему |
| [`/xdto-edit`](../.claude/skills/xdto-edit/SKILL.md) | Точечно поправить существующий пакет |
| [`/xdto-validate`](../.claude/skills/xdto-validate/SKILL.md) | Проверить перед загрузкой в базу |
Формат описания — обычная XML-схема, своего DSL нет. Схема в реальных задачах
обычно уже есть: её присылает контрагент или публикует регулятор.
## Сценарии
### Написать код, который заполняет объект XDTO
> «Сформируй платёжное поручение в формате клиент-банка и выгрузи в файл»
>
> «Напиши обработку выгрузки заказов по нашему обмену с маркетплейсом»
Самая частая задача, и обычно она часть большей. Прежде чем писать код, агент
смотрит структуру типа: какой тип значения присваивать каждому свойству, что
обязательно, где нужно создать вложенный объект, какие значения допустимы.
Выводится это уже в терминах 1С — `Строка(6)`, `Число(18,2)`, `[обязательный]`, —
поэтому переводить `xs:decimal` и `lowerBound="0"` в голове не приходится.
Если тип большой, помогает срез только обязательных свойств: получается готовый
скелет заполнения.
### Разобрать входящий XML
> «Разбери входящий файл ЕГАИС и создай по нему документы»
>
> «Какому типу соответствует корень этого XML?»
Чтобы прочитать документ, надо знать, с какого типа начинать. Это **точки входа**
пакета — его глобальные объявления; агент покажет их вместе со списком типов.
### Добавить пакет по схеме контрагента
> «Контрагент прислал схему обмена заказами, добавь её в конфигурацию»
>
> «Нужен пакет XDTO по вот этой XSD от ФСС»
Пакет собирается по схеме и сразу регистрируется в конфигурации.
**Обрати внимание на предупреждения.** XML Schema выразительнее модели XDTO, и часть
конструкций переносится приближённо: вложенный `xs:choice` уплощается (ветки при этом
становятся необязательными), `xs:all` превращается в последовательность, кратность
на частице отбрасывается. Агент об этом сообщит — если упрощение недопустимо,
схему надо менять, а не игнорировать сообщение.
Если схема ссылается на чужое пространство имён через `<xs:import>`, сначала нужен
пакет-зависимость. Иначе платформа откажется принимать конфигурацию либо молча
подменит тип на «произвольный», и всплывёт это уже в рантайме.
### Поправить существующий пакет
> «Добавь в платёжное поручение необязательный комментарий, не длиннее 200 символов»
>
> «Убери из обмена устаревшее поле СтарыйКод»
>
> «Добавь в перечисление видов документов значение Инкассо»
Точечная правка не требует читать схему целиком — для больших пакетов вроде
`EnterpriseData` это единственный практичный путь. После правки автоматически
запускается проверка.
Перед изменением существующего типа полезно узнать, кого оно затронет: агент
покажет, какие типы и пакеты на него ссылаются.
Если переработка широкая — «перепиши обмен под новую версию формата» — схема
выгружается целиком, правится и собирается обратно. Пара выгрузка-сборка
замыкается без потерь, включая имя, синоним и комментарий объекта метаданных.
### Новая версия пакета
> «Сделай версию 2.0 нашего обмена, старая должна продолжать работать»
Типовой приём: рядом со старым пакетом появляется новый с другим пространством
имён (`EnterpriseData_1_19``_1_20`), а старые потребители продолжают смотреть
на прежний namespace.
Если же надо сменить namespace **у существующего** пакета, агент перепишет все
внутренние ссылки и перечислит пакеты, которые импортируют старый — но менять
их не станет, потому что при версионировании это было бы ошибкой.
### Отдать схему контрагенту
> «Выгрузи схему нашего обмена, отправлю партнёру»
Получается валидная XSD, ничего не теряющая. Штатный «Экспорт XML-схемы»
в Конфигураторе для этого хуже: он теряет признак `nillable` у свойств-атрибутов.
### Разобраться, почему обмен ведёт себя странно
> «Обращение к Смена.Сотрудник возвращает что-то бесструктурное, разберись»
>
> «Пакет вроде загрузился, а обмен не работает»
Такой симптом почти всегда означает, что тип не разрешился и стал «произвольным».
Платформа об этом молчит: при импорте XML-схемы неразрешённый чужой тип заменяется
без единой ошибки, пакет выглядит загруженным. Проверка называет и симптом,
и причину — объявленный, но неиспользуемый импорт.
## Структура файлов
```
XDTOPackages/
├── ОбменСБанком.xml объект метаданных: Name, Synonym, Comment, Namespace
└── ОбменСБанком/
└── Ext/
└── Package.bin модель пакета (текстовый XML, несмотря на расширение)
```
Плюс регистрация в корневом `Configuration.xml` — без неё платформа пакет не увидит.
## Рабочий цикл
1. Посмотреть, что есть — `/xdto-info`
2. Изменить — `/xdto-compile` или `/xdto-edit`
3. Проверить до загрузки — `/xdto-validate`
4. Применить — `/db-load-xml` + `/db-update`
Точный синтаксис параметров каждого навыка — в его `SKILL.md` по ссылкам выше.
## Спецификации
- Формат исходников — [1c-xdto-spec.md](1c-xdto-spec.md)
- XML Schema как формат описания, таблица соответствий и аннотации `xdto:`
[xdto-dsl-spec.md](xdto-dsl-spec.md)