Files
cc-1c-skills/.claude/skills/xdto-compile/SKILL.md
T
Nick ShirokovandClaude Opus 5 6486f433de fix(xdto-compile,xdto-info,xdto-edit): правки по итогам прогона на субагентах
Четырём субагентам выданы реалистичные задачи по песочнице, навыки в
формулировках не назывались. Разбор — в debug/xdto/FINDINGS.md, §13.

ГЛАВНОЕ — дефект компилятора. При уплощении вложенного xs:choice ветки
оставались обязательными: схема «самовывоз ИЛИ адрес доставки» давала пакет,
требующий заполнить оба, и ни один реальный документ в него не ложился.
Компилятор предупреждал о потере выбора, но молчал о последствии, а валидатор
показывал «0 ошибок, 0 предупреждений» — структурно пакет корректен,
семантически мёртв. Теперь ветки становятся необязательными (единственное
уплощение, оставляющее тип заполнимым), предупреждение называет их поимённо.
Корневой xs:choice не затронут: он отображается в ordered="false".

xdto-edit: -Value "@файл" по конвенции skd-edit — на кавычках при инлайновой
передаче XSD споткнулись двое агентов из четырёх, причём сырой LoadXml уводил
чинить схему вместо транспорта. При сбое разбора теперь понятное сообщение.

xdto-info: поиск, законно ничего не нашедший, падал throw'ом со стектрейсом и
читался как поломка инструмента — теперь строка и exit 1. Блок «Создание»
покрывал только корневой тип, хотя вся реальная работа в XDTO — вложенные и
анонимные типы; добавлены рецепты по факту наличия. Отсутствие раздела «Точки
входа» было неоднозначным — теперь явная строка. Новый -RequiredOnly даёт
скелет «заполни обязательное»: необязательный объект уходит вместе с поддеревом.
По умолчанию выключен — иначе список читался бы как полный.

xdto-validate: предупреждение про anyType описывало историю («платформа заменяет
при импорте»), хотя в файле уже зафиксирован anyType; сначала состояние, потом
происхождение.

Проверено: 40 тестов на обоих рантаймах, round-trip 760/760, валидатор
0 ложных срабатываний на корпусе.

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

7.1 KiB
Raw Blame History

name, description, argument-hint, allowed-tools
name description argument-hint allowed-tools
xdto-compile Создание пакета XDTO 1С из XML-схемы (XSD). Используй когда нужно добавить в конфигурацию пакет XDTO — под обмен, интеграцию, веб-сервис или внешний XML-формат -XsdPath <файл.xsd>|-Xsd <схема> -OutputDir <каталог-исходников> [-Name <имя>] [-Synonym <синоним>] [-Comment <текст>] [-Force]
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.exe -NoProfile -File "${CLAUDE_SKILL_DIR}/scripts/xdto-compile.ps1" -XsdPath "<схема.xsd>" -OutputDir "<каталог-исходников>"

Примеры:

... -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 у отдельного свойства. Они пишутся атрибутами из пространства имён модели:

<xs:attribute name="Представление" type="xs:string"
              xmlns:xdto="http://v8.1c.ru/8.1/xdto" xdto:nillable="true"/>

Схема остаётся валидной — валидаторы такие атрибуты игнорируют. Полный список и таблица соответствий XSD ↔ XDTO — в xsd-reference.md.

Свойства объекта метаданных можно задать прямо в схеме:

<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.