mirror of
https://github.com/Nikolay-Shirokov/cc-1c-skills.git
synced 2026-07-31 00:37:47 +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` и корень исходников: тип найдётся
|
Если известно только имя типа — укажи `-Name` и корень исходников: тип найдётся
|
||||||
по всем пакетам. При нескольких совпадениях навык покажет, где именно, чтобы уточнить.
|
по всем пакетам. При нескольких совпадениях навык покажет, где именно, чтобы уточнить.
|
||||||
|
|
||||||
## Как читать вывод
|
## Что в выводе
|
||||||
|
|
||||||
```
|
Свойства показаны так, как их предстоит заполнять в коде: тип значения — в нотации
|
||||||
=== Тип XDTO: ПлатежныйДокумент ===
|
1С и с учётом ограничений (`Строка(6)`, `Число(18,2)`), обязательность и коллекции —
|
||||||
Пакет: ClientBankExchange · urn:1C.ru:ClientBankExchange
|
флагами, для перечислимых типов перечислены допустимые значения. Непомеченное
|
||||||
|
свойство необязательно.
|
||||||
|
|
||||||
Свойства (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
|
## Типичный workflow
|
||||||
|
|
||||||
|
|||||||
@@ -491,6 +491,23 @@ function Show-PackageOverview($pkg) {
|
|||||||
O "Следующий шаг: -Name <Тип> — структура типа для заполнения"
|
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) {
|
function Show-Type($pkg, [string]$typeName) {
|
||||||
$el = $pkg.Types[$typeName]
|
$el = $pkg.Types[$typeName]
|
||||||
$kind = $el.get_LocalName()
|
$kind = $el.get_LocalName()
|
||||||
@@ -525,6 +542,7 @@ function Show-Type($pkg, [string]$typeName) {
|
|||||||
$own = @($rows | Where-Object { $_.Indent -eq 0 })
|
$own = @($rows | Where-Object { $_.Indent -eq 0 })
|
||||||
O "Свойства ($($own.Count)):"
|
O "Свойства ($($own.Count)):"
|
||||||
Write-Rows $rows
|
Write-Rows $rows
|
||||||
|
Write-Legend $rows
|
||||||
O ""
|
O ""
|
||||||
O "Создание:"
|
O "Создание:"
|
||||||
O " Тип = ФабрикаXDTO.Тип(`"$($pkg.Namespace)`", `"$typeName`");"
|
O " Тип = ФабрикаXDTO.Тип(`"$($pkg.Namespace)`", `"$typeName`");"
|
||||||
|
|||||||
@@ -2,6 +2,7 @@
|
|||||||
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
|
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
|
||||||
import argparse
|
import argparse
|
||||||
import os
|
import os
|
||||||
|
import re
|
||||||
import sys
|
import sys
|
||||||
|
|
||||||
from lxml import etree
|
from lxml import etree
|
||||||
@@ -486,6 +487,31 @@ def show_package_overview(pkg):
|
|||||||
O("Следующий шаг: -Name <Тип> — структура типа для заполнения")
|
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):
|
def show_type(pkg, type_name):
|
||||||
el = pkg.Types[type_name]
|
el = pkg.Types[type_name]
|
||||||
if local(el) == "valueType":
|
if local(el) == "valueType":
|
||||||
@@ -522,6 +548,7 @@ def show_type(pkg, type_name):
|
|||||||
own = [r for r in rows if r["Indent"] == 0]
|
own = [r for r in rows if r["Indent"] == 0]
|
||||||
O(f"Свойства ({len(own)}):")
|
O(f"Свойства ({len(own)}):")
|
||||||
write_rows(rows)
|
write_rows(rows)
|
||||||
|
write_legend(rows)
|
||||||
O("")
|
O("")
|
||||||
O("Создание:")
|
O("Создание:")
|
||||||
O(f' Тип = ФабрикаXDTO.Тип("{pkg.Namespace}", "{type_name}");')
|
O(f' Тип = ФабрикаXDTO.Тип("{pkg.Namespace}", "{type_name}");')
|
||||||
|
|||||||
@@ -7,6 +7,10 @@
|
|||||||
Наименование Строка [обязательный]
|
Наименование Строка [обязательный]
|
||||||
Потерянный объект НетТакого (пакет не найден: urn:test:отсутствует)
|
Потерянный объект НетТакого (пакет не найден: urn:test:отсутствует)
|
||||||
|
|
||||||
|
Обозначения:
|
||||||
|
объект X — присвоить вложенный объект XDTO, состав раскрывает -Depth
|
||||||
|
· Пакет — тип объявлен в другом пакете
|
||||||
|
|
||||||
Создание:
|
Создание:
|
||||||
Тип = ФабрикаXDTO.Тип("urn:test:uses", "Заявка");
|
Тип = ФабрикаXDTO.Тип("urn:test:uses", "Заявка");
|
||||||
Объект = ФабрикаXDTO.Создать(Тип);
|
Объект = ФабрикаXDTO.Создать(Тип);
|
||||||
|
|||||||
@@ -10,6 +10,11 @@
|
|||||||
Ид Строка [обязательный]
|
Ид Строка [обязательный]
|
||||||
__content Дата [обязательный, значение элемента]
|
__content Дата [обязательный, значение элемента]
|
||||||
|
|
||||||
|
Обозначения:
|
||||||
|
объект X — присвоить вложенный объект XDTO, состав раскрывает -Depth
|
||||||
|
список — коллекция, заполняется через .Добавить()
|
||||||
|
значение элемента — собственное значение узла XML
|
||||||
|
|
||||||
Создание:
|
Создание:
|
||||||
Тип = ФабрикаXDTO.Тип("urn:test:nested", "Документ");
|
Тип = ФабрикаXDTO.Тип("urn:test:nested", "Документ");
|
||||||
Объект = ФабрикаXDTO.Создать(Тип);
|
Объект = ФабрикаXDTO.Создать(Тип);
|
||||||
|
|||||||
@@ -17,6 +17,11 @@
|
|||||||
Коллекция Строка [список]
|
Коллекция Строка [список]
|
||||||
ДоТрёх Строка [обязательный, до 3]
|
ДоТрёх Строка [обязательный, до 3]
|
||||||
|
|
||||||
|
Обозначения:
|
||||||
|
← Имя — исходный тип из схемы, слева от стрелки развёрнутое значение
|
||||||
|
список — коллекция, заполняется через .Добавить()
|
||||||
|
до N — коллекция с ограничением сверху
|
||||||
|
|
||||||
Создание:
|
Создание:
|
||||||
Тип = ФабрикаXDTO.Тип("urn:test:types", "Платёж");
|
Тип = ФабрикаXDTO.Тип("urn:test:types", "Платёж");
|
||||||
Объект = ФабрикаXDTO.Создать(Тип);
|
Объект = ФабрикаXDTO.Создать(Тип);
|
||||||
|
|||||||
Reference in New Issue
Block a user