mirror of
https://github.com/Nikolay-Shirokov/cc-1c-skills.git
synced 2026-08-21 02:29:42 +03:00
Auto-build: copilot (python) from 113dc9e
This commit is contained in:
@@ -0,0 +1,112 @@
|
||||
---
|
||||
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 уплощена в последовательность — выбор одного из вариантов не сохранён
|
||||
! Документ : кратность на вложенной частице (<xs:sequence minOccurs/maxOccurs>) не выражается в модели 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`.
|
||||
|
||||
## Зависимости между пакетами
|
||||
|
||||
`<xs:import namespace="…"/>` разрешается по namespace среди пакетов конфигурации
|
||||
или расширения. Если пакета с таким пространством имён нет, платформа при загрузке
|
||||
молча подменит тип на `xs:anyType` — без ошибки. Собирай сначала зависимости, потом
|
||||
зависящий пакет, и проверяй результат через `/xdto-validate`.
|
||||
|
||||
Какие пакеты уже собраны, видно в `ChildObjects` файла `Configuration.xml`.
|
||||
|
||||
## Что XSD выразить не может
|
||||
|
||||
Две вещи модель XDTO умеет, а XML Schema — нет: `nillable` у атрибута и `qualified`
|
||||
у отдельного свойства. Они пишутся атрибутами из пространства имён модели:
|
||||
|
||||
```xml
|
||||
<xs:attribute name="Представление" type="xs:string"
|
||||
xmlns:xdto="http://v8.1c.ru/8.1/xdto" xdto:nillable="true"/>
|
||||
```
|
||||
|
||||
Схема остаётся валидной — валидаторы такие атрибуты игнорируют. Полный список
|
||||
и таблица соответствий XSD ↔ XDTO — в [xsd-reference.md](xsd-reference.md).
|
||||
|
||||
Свойства объекта метаданных можно задать прямо в схеме:
|
||||
|
||||
```xml
|
||||
<xs:annotation>
|
||||
<xs:appinfo>
|
||||
<xdto:package xmlns:xdto="http://v8.1c.ru/8.1/xdto">
|
||||
<xdto:name>ОбменСБанком</xdto:name>
|
||||
<xdto:synonym lang="ru">Обмен с банком</xdto:synonym>
|
||||
</xdto:package>
|
||||
</xs:appinfo>
|
||||
</xs:annotation>
|
||||
```
|
||||
|
||||
## Типичный 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`.
|
||||
Reference in New Issue
Block a user