mirror of
https://github.com/Nikolay-Shirokov/cc-1c-skills.git
synced 2026-09-13 05:21:32 +03:00
Четырём субагентам выданы реалистичные задачи по песочнице, навыки в формулировках не назывались. Разбор — в 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>
104 lines
6.2 KiB
Markdown
104 lines
6.2 KiB
Markdown
---
|
|
name: xdto-edit
|
|
description: Точечное редактирование пакета XDTO 1С. Используй когда нужно добавить, изменить или удалить тип или свойство в существующем пакете, переименовать пакет, сменить пространство имён
|
|
argument-hint: <PackagePath> -Operation <операция> [-Target <путь>] [-Value <значение>] [-NoValidate]
|
|
allowed-tools:
|
|
- Bash
|
|
- Read
|
|
- Glob
|
|
---
|
|
|
|
# /xdto-edit — Точечное редактирование пакета XDTO
|
|
|
|
Меняет один элемент пакета, не требуя читать и переписывать всю схему — для больших
|
|
пакетов (`EnterpriseData` — около мегабайта) это единственный практичный путь.
|
|
|
|
Если нужно переработать схему целиком или сперва разобраться, как она устроена, —
|
|
`/xdto-decompile` → правка XSD → `/xdto-compile -Force`.
|
|
|
|
## Параметры
|
|
|
|
| Параметр | Обязательный | Описание |
|
|
|----------|--------------|----------|
|
|
| `PackagePath` | да | Каталог пакета, `Ext/Package.bin` или `<Имя>.xml`. Псевдоним — `-Path` |
|
|
| `Operation` | да | Операция из таблицы ниже |
|
|
| `Target` | зависит | Адрес: имя типа или путь `Тип.Свойство` |
|
|
| `Value` | зависит | Фрагмент XSD, литерал, URI или текст. `@путь` — взять содержимое из файла |
|
|
| `NoValidate` | нет | Не запускать `xdto-validate` после правки |
|
|
|
|
```powershell
|
|
powershell.exe -NoProfile -File "${CLAUDE_SKILL_DIR}/scripts/xdto-edit.ps1" -PackagePath "<путь>" -Operation <op> -Target "<адрес>" -Value "<значение>"
|
|
```
|
|
|
|
## Операции
|
|
|
|
| Операция | `-Target` | `-Value` |
|
|
|---|---|---|
|
|
| `add-property` | имя типа | `<xs:element>` или `<xs:attribute>` |
|
|
| `replace-property` | `Тип.Свойство` | новое объявление целиком |
|
|
| `remove-property` | `Тип.Свойство` | — |
|
|
| `add-type` | — | `<xs:complexType>` или `<xs:simpleType>` |
|
|
| `remove-type` | имя типа | — |
|
|
| `add-enum` | имя типа значения | литерал |
|
|
| `add-import` | — | URI пространства имён |
|
|
| `rename` | — | новое имя объекта метаданных |
|
|
| `set-synonym` | — | синоним |
|
|
| `set-comment` | — | комментарий |
|
|
| `set-namespace` | — | новый URI пространства имён |
|
|
|
|
Батч через `;;` там, где перечисление осмысленно: `remove-property`, `remove-type`,
|
|
`add-enum`, `add-import`.
|
|
|
|
```powershell
|
|
... -Operation add-property -Target "Платёж" -Value '<xs:element name="Комментарий" type="xs:string" minOccurs="0"/>'
|
|
... -Operation remove-property -Target "Платёж.Комментарий ;; Платёж.Черновик"
|
|
... -Operation add-enum -Target "ВидДокумента" -Value "Инкассо ;; Аккредитив"
|
|
... -Operation rename -Value ОбменСБанком
|
|
```
|
|
|
|
Содержимое всегда описывается фрагментом XML-схемы — тем же языком, что и в
|
|
`/xdto-compile`. Отдельных параметров вида `-MinOccurs` нет: чтобы поменять свойство,
|
|
дай его новое объявление целиком через `replace-property`.
|
|
|
|
Ограничение длины и прочие фасеты задаются вложенным типом:
|
|
|
|
```xml
|
|
<xs:element name="Комментарий" minOccurs="0">
|
|
<xs:simpleType>
|
|
<xs:restriction base="xs:string"><xs:maxLength value="200"/></xs:restriction>
|
|
</xs:simpleType>
|
|
</xs:element>
|
|
```
|
|
|
|
Многострочный фрагмент передавай файлом: `-Value "@frag.xsd"`. Инлайн через оболочку
|
|
надёжен только для однострочных фрагментов без вложенных кавычек.
|
|
|
|
## Адресация
|
|
|
|
Путь `Тип.Свойство`. Точка безопасна: имена типов и свойств — идентификаторы 1С.
|
|
Путь продолжается внутрь встроенных типов: `ПлатежныйДокумент.ДатаСписано.ИдПлатежа`.
|
|
|
|
Посмотреть, что есть в пакете и как называется нужный тип, — `/xdto-info`.
|
|
Перед правкой типа полезно `/xdto-info -Mode used-by -Name <Тип>`: покажет,
|
|
кого затронет изменение.
|
|
|
|
## Что тянет за собой переименование и смена namespace
|
|
|
|
`rename` меняет имя в объекте метаданных, переименовывает файл `<Имя>.xml` и каталог
|
|
`<Имя>/`, правит регистрацию в `Configuration.xml`. Новое имя проверяется на
|
|
допустимость как идентификатор 1С и на занятость.
|
|
|
|
`set-namespace` меняет `targetNamespace`, все внутренние ссылки на собственные типы
|
|
и `<Namespace>` объекта метаданных. Пакеты, импортирующие старое пространство имён,
|
|
**не изменяются** — при версионировании они и должны продолжать смотреть на прежнее.
|
|
Навык их перечислит; если правка не версионная, поправь их импорты сам.
|
|
|
|
После правки автоматически запускается `/xdto-validate` — отключается через `-NoValidate`.
|
|
|
|
## Типичный workflow
|
|
|
|
1. `/xdto-info <пакет>` — найти нужный тип
|
|
2. `/xdto-info <пакет> -Mode used-by -Name <Тип>` — если меняешь существующее
|
|
3. `/xdto-edit <пакет> -Operation <op> …`
|
|
4. `/db-load-xml` + `/db-update`
|