--- name: xdto-compile description: Создание пакета XDTO 1С из XML-схемы (XSD). Используй когда нужно добавить в конфигурацию пакет XDTO — под обмен, интеграцию, веб-сервис или внешний XML-формат argument-hint: -XsdPath <файл.xsd>|-Xsd <схема> -OutputDir <каталог-исходников> [-Name <имя>] [-Synonym <синоним>] [-Comment <текст>] [-Force] allowed-tools: - Bash - Read - Glob --- # /xdto-compile — Создание пакета XDTO из XML-схемы Собирает пакет XDTO по XML-схеме: `XDTOPackages/<Имя>.xml`, `XDTOPackages/<Имя>/Ext/Package.bin` и регистрацию в `Configuration.xml`. Вход — обычная XML-схема, писать её нужно так же, как для любого другого инструмента. ## Параметры | Параметр | Обязательный | Описание | |----------|--------------|----------| | `XsdPath` | один из двух | Путь к файлу XML-схемы. Псевдоним — `-Path` | | `Xsd` | один из двух | Схема строкой, вместо `-XsdPath` | | `OutputDir` | да | Каталог исходников конфигурации или расширения — там, где лежит `Configuration.xml` | | `Name` | нет | Имя объекта метаданных. По умолчанию — из `xs:appinfo`, иначе имя файла XSD, санированное под идентификатор 1С | | `Synonym` | нет | Синоним (строка). По умолчанию — из `xs:appinfo`, иначе имя пакета. Для нескольких языков задавай синоним в схеме, блоком `xs:appinfo` | | `Comment` | нет | Комментарий. По умолчанию — из `xs:appinfo` | | `Force` | нет | Перезаписать существующий пакет. Без него навык откажется затирать уже собранный пакет | ```powershell python ".github/skills/xdto-compile/scripts/xdto-compile.py" -XsdPath "<схема.xsd>" -OutputDir "<каталог-исходников>" ``` Примеры: ```powershell ... -XsdPath bank.xsd -OutputDir src -Name ОбменСБанком -Synonym "Обмен с банком" ... -XsdPath fss.xsd -OutputDir src -Force ``` ## Читай предупреждения XSD выразительнее модели XDTO. Всё, что не переносится один в один, навык переносит приближённо и **пишет об этом**: ``` Предупреждения (2) — конструкции XSD без точного соответствия в модели XDTO: ! Документ : вложенная xs:choice уплощена в последовательность — выбор одного из вариантов не сохранён ! Документ : кратность на вложенной частице () не выражается в модели XDTO ``` Такое сообщение означает, что пакет собран, но схема упрощена. Если упрощение недопустимо — меняй схему (например, разноси варианты `xs:choice` по разным типам), а не игнорируй. Что переносится приближённо: вложенные `xs:sequence`/`xs:choice` (уплощаются в плоский список свойств), `xs:all` (становится последовательностью), кратность на частице, `substitutionGroup`, `xs:key`/`keyref`/`unique`, `xs:redefine`. `xs:group` и `xs:attributeGroup` раскрываются по ссылке — их содержимое попадает в тип. `xs:include` игнорируется: зависимости в XDTO разрешаются только по namespace, поэтому включаемую схему нужно собрать отдельным пакетом и заменить `include` на `import`. ## Посмотреть, что получилось Модель пакета лежит в `Ext/Package.bin`. Несмотря на расширение, это текстовый XML, но читать его напрямую обычно незачем: состав собранного пакета показывает `/xdto-info`, а полную схему — `/xdto-decompile`. ## Зависимости между пакетами `` разрешается по namespace среди пакетов конфигурации или расширения. Если пакета с таким пространством имён нет, платформа при загрузке молча подменит тип на `xs:anyType` — без ошибки. Собирай сначала зависимости, потом зависящий пакет, и проверяй результат через `/xdto-validate`. Какие пакеты уже собраны, видно в `ChildObjects` файла `Configuration.xml`. ## Что XSD выразить не может Две вещи модель XDTO умеет, а XML Schema — нет: `nillable` у атрибута и `qualified` у отдельного свойства. Они пишутся атрибутами из пространства имён модели: ```xml ``` Схема остаётся валидной — валидаторы такие атрибуты игнорируют. Полный список и таблица соответствий XSD ↔ XDTO — в [xsd-reference.md](xsd-reference.md). Свойства объекта метаданных можно задать прямо в схеме: ```xml ОбменСБанком Обмен с банком ``` ## Типичный workflow 1. Получить XSD от контрагента (или выгрузить схему существующего пакета: `/xdto-decompile`) 2. `/xdto-compile -XsdPath <файл> -OutputDir <каталог-исходников>` — прочитать предупреждения 3. `/xdto-validate <каталог-исходников>/XDTOPackages/<Имя>` — убедиться, что типы разрешились 4. `/db-load-xml` + `/db-update` Правка существующего пакета: точечно — `/xdto-edit`; переработать схему целиком — `/xdto-decompile` → правка XSD → `/xdto-compile -Force`.