mirror of
https://github.com/Nikolay-Shirokov/cc-1c-skills.git
synced 2026-07-26 22:51:03 +03:00
refactor(xdto-info): легенда обозначений в выводе, а не в инструкции
Инструкция несла 14-строчный пример вывода — то самое, что модель увидит, запустив навык, но читаемое при каждой загрузке инструкции. Та же логика, по которой из xdto-validate убран каталог проверок. Легенда при этом нужна: ← Имя, [значение элемента], · Пакет из вывода сами не читаются. Поэтому она переехала в вывод и печатается только для тех обозначений, которые в нём реально встретились — на плоском типе легенды нет вовсе. В самом навыке уже был такой прецедент: режим списка пакетов поясняет свои колонки прямо в выводе. Инструкция сократилась с 99 до 77 строк. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5
parent
105ba67cb5
commit
1a1bbbac6f
@@ -57,38 +57,15 @@ powershell.exe -NoProfile -File "${CLAUDE_SKILL_DIR}/scripts/xdto-info.ps1" -Pac
|
||||
Если известно только имя типа — укажи `-Name` и корень исходников: тип найдётся
|
||||
по всем пакетам. При нескольких совпадениях навык покажет, где именно, чтобы уточнить.
|
||||
|
||||
## Как читать вывод
|
||||
## Что в выводе
|
||||
|
||||
```
|
||||
=== Тип XDTO: ПлатежныйДокумент ===
|
||||
Пакет: ClientBankExchange · urn:1C.ru:ClientBankExchange
|
||||
Свойства показаны так, как их предстоит заполнять в коде: тип значения — в нотации
|
||||
1С и с учётом ограничений (`Строка(6)`, `Число(18,2)`), обязательность и коллекции —
|
||||
флагами, для перечислимых типов перечислены допустимые значения. Непомеченное
|
||||
свойство необязательно.
|
||||
|
||||
Свойства (11):
|
||||
ИдДокумента Строка шаблон [a-fA-F0-9]{8}-…
|
||||
Номер Строка(6) [обязательный]
|
||||
Сумма Число(18,2) [обязательный] ← СуммаТип
|
||||
Квитанция объект Квитанция
|
||||
РеквизитыПлательщика объект РеквизитыПлательщика [обязательный]
|
||||
|
||||
Создание:
|
||||
Тип = ФабрикаXDTO.Тип("urn:1C.ru:ClientBankExchange", "ПлатежныйДокумент");
|
||||
Объект = ФабрикаXDTO.Создать(Тип);
|
||||
```
|
||||
|
||||
- **Тип значения** — уже в нотации 1С, с учётом ограничений: `Строка(6)`, `Число(18,2)`.
|
||||
- **`объект X`** — свойству нужно присвоить вложенный объект XDTO, а не значение.
|
||||
Раскрыть его состав — `-Depth 2` и больше.
|
||||
- **`[обязательный]`** — без заполнения запись XML не пройдёт. Непомеченное свойство
|
||||
необязательно. `[список]` — коллекция, заполняется через `.Добавить()`;
|
||||
`[до N]` — коллекция с ограничением сверху.
|
||||
- **`← СуммаТип`** — исходное имя типа из схемы; слева от стрелки уже развёрнутое значение.
|
||||
- **`[значение элемента]`** — свойство хранит собственное значение элемента,
|
||||
остальные свойства такого типа лежат в атрибутах XML.
|
||||
- Для перечислимых типов выводится список допустимых значений.
|
||||
|
||||
При разузловании вложенные объекты раскрываются отступом; тип из другого пакета
|
||||
подписывается его именем (`· FSS_Common_01`), повторное вхождение обрывается
|
||||
пометкой `(раскрыт выше)`.
|
||||
Обозначения, которые сами по себе неочевидны, навык поясняет прямо в выводе —
|
||||
и только те, что в нём встретились.
|
||||
|
||||
## Типичный workflow
|
||||
|
||||
|
||||
@@ -491,6 +491,23 @@ function Show-PackageOverview($pkg) {
|
||||
O "Следующий шаг: -Name <Тип> — структура типа для заполнения"
|
||||
}
|
||||
|
||||
# Легенда едет вместе с выводом, а не живёт в инструкции: показываем только те
|
||||
# обозначения, которые реально встретились, иначе она сама становится шумом.
|
||||
function Write-Legend($rows) {
|
||||
$text = ($rows | ForEach-Object { $_.Type + " " + ($_.Flags -join ",") + " " + ($_.Notes -join ",") }) -join " "
|
||||
$items = @()
|
||||
if ($text -match "объект ") { $items += "объект X — присвоить вложенный объект XDTO, состав раскрывает -Depth" }
|
||||
if ($text -match "←") { $items += "← Имя — исходный тип из схемы, слева от стрелки развёрнутое значение" }
|
||||
if ($text -match "список") { $items += "список — коллекция, заполняется через .Добавить()" }
|
||||
if ($text -match "до \d") { $items += "до N — коллекция с ограничением сверху" }
|
||||
if ($text -match "значение элемента") { $items += "значение элемента — собственное значение узла XML" }
|
||||
if ($text -match "·") { $items += "· Пакет — тип объявлен в другом пакете" }
|
||||
if ($items.Count -eq 0) { return }
|
||||
O ""
|
||||
O "Обозначения:"
|
||||
foreach ($i in $items) { O " $i" }
|
||||
}
|
||||
|
||||
function Show-Type($pkg, [string]$typeName) {
|
||||
$el = $pkg.Types[$typeName]
|
||||
$kind = $el.get_LocalName()
|
||||
@@ -525,6 +542,7 @@ function Show-Type($pkg, [string]$typeName) {
|
||||
$own = @($rows | Where-Object { $_.Indent -eq 0 })
|
||||
O "Свойства ($($own.Count)):"
|
||||
Write-Rows $rows
|
||||
Write-Legend $rows
|
||||
O ""
|
||||
O "Создание:"
|
||||
O " Тип = ФабрикаXDTO.Тип(`"$($pkg.Namespace)`", `"$typeName`");"
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
|
||||
import argparse
|
||||
import os
|
||||
import re
|
||||
import sys
|
||||
|
||||
from lxml import etree
|
||||
@@ -486,6 +487,31 @@ def show_package_overview(pkg):
|
||||
O("Следующий шаг: -Name <Тип> — структура типа для заполнения")
|
||||
|
||||
|
||||
# Легенда едет вместе с выводом, а не живёт в инструкции: показываем только те
|
||||
# обозначения, которые реально встретились, иначе она сама становится шумом.
|
||||
def write_legend(rows):
|
||||
text = " ".join(r["Type"] + " " + ",".join(r["Flags"]) + " " + ",".join(r["Notes"]) for r in rows)
|
||||
items = []
|
||||
if "объект " in text:
|
||||
items.append("объект X — присвоить вложенный объект XDTO, состав раскрывает -Depth")
|
||||
if "←" in text:
|
||||
items.append("← Имя — исходный тип из схемы, слева от стрелки развёрнутое значение")
|
||||
if "список" in text:
|
||||
items.append("список — коллекция, заполняется через .Добавить()")
|
||||
if re.search(r"до \d", text):
|
||||
items.append("до N — коллекция с ограничением сверху")
|
||||
if "значение элемента" in text:
|
||||
items.append("значение элемента — собственное значение узла XML")
|
||||
if "·" in text:
|
||||
items.append("· Пакет — тип объявлен в другом пакете")
|
||||
if not items:
|
||||
return
|
||||
O("")
|
||||
O("Обозначения:")
|
||||
for i in items:
|
||||
O(" " + i)
|
||||
|
||||
|
||||
def show_type(pkg, type_name):
|
||||
el = pkg.Types[type_name]
|
||||
if local(el) == "valueType":
|
||||
@@ -522,6 +548,7 @@ def show_type(pkg, type_name):
|
||||
own = [r for r in rows if r["Indent"] == 0]
|
||||
O(f"Свойства ({len(own)}):")
|
||||
write_rows(rows)
|
||||
write_legend(rows)
|
||||
O("")
|
||||
O("Создание:")
|
||||
O(f' Тип = ФабрикаXDTO.Тип("{pkg.Namespace}", "{type_name}");')
|
||||
|
||||
@@ -7,6 +7,10 @@
|
||||
Наименование Строка [обязательный]
|
||||
Потерянный объект НетТакого (пакет не найден: urn:test:отсутствует)
|
||||
|
||||
Обозначения:
|
||||
объект X — присвоить вложенный объект XDTO, состав раскрывает -Depth
|
||||
· Пакет — тип объявлен в другом пакете
|
||||
|
||||
Создание:
|
||||
Тип = ФабрикаXDTO.Тип("urn:test:uses", "Заявка");
|
||||
Объект = ФабрикаXDTO.Создать(Тип);
|
||||
|
||||
@@ -10,6 +10,11 @@
|
||||
Ид Строка [обязательный]
|
||||
__content Дата [обязательный, значение элемента]
|
||||
|
||||
Обозначения:
|
||||
объект X — присвоить вложенный объект XDTO, состав раскрывает -Depth
|
||||
список — коллекция, заполняется через .Добавить()
|
||||
значение элемента — собственное значение узла XML
|
||||
|
||||
Создание:
|
||||
Тип = ФабрикаXDTO.Тип("urn:test:nested", "Документ");
|
||||
Объект = ФабрикаXDTO.Создать(Тип);
|
||||
|
||||
@@ -17,6 +17,11 @@
|
||||
Коллекция Строка [список]
|
||||
ДоТрёх Строка [обязательный, до 3]
|
||||
|
||||
Обозначения:
|
||||
← Имя — исходный тип из схемы, слева от стрелки развёрнутое значение
|
||||
список — коллекция, заполняется через .Добавить()
|
||||
до N — коллекция с ограничением сверху
|
||||
|
||||
Создание:
|
||||
Тип = ФабрикаXDTO.Тип("urn:test:types", "Платёж");
|
||||
Объект = ФабрикаXDTO.Создать(Тип);
|
||||
|
||||
Reference in New Issue
Block a user