From c3ec51e1740bce7b8b0c929d1a7b2c88e019cd10 Mon Sep 17 00:00:00 2001 From: Nick Shirokov Date: Tue, 21 Apr 2026 11:51:07 +0300 Subject: [PATCH] =?UTF-8?q?feat(template-add):=20=D0=B0=D0=B2=D1=82=D0=BE?= =?UTF-8?q?=D0=BF=D0=BE=D0=B8=D1=81=D0=BA=20SrcDir=20=D0=BF=D0=BE=20=D1=81?= =?UTF-8?q?=D1=82=D0=B0=D0=BD=D0=B4=D0=B0=D1=80=D1=82=D0=BD=D1=8B=D0=BC=20?= =?UTF-8?q?=D0=BF=D0=BE=D0=B4=D0=BF=D0=B0=D0=BF=D0=BA=D0=B0=D0=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Если /.xml не найден — сканирует Reports, DataProcessors, Documents, Catalogs и другие папки типа объектов. При 1 совпадении расширяет SrcDir, при нескольких — ошибка со списком. Попутно — уточнение описания SrcDir, обезличенный пример, флаг -SetMainSKD в PS-стиле. Co-Authored-By: Claude Opus 4.7 (1M context) --- .claude/skills/template-add/SKILL.md | 12 +++++-- .../template-add/scripts/add-template.ps1 | 27 ++++++++++++++-- .../template-add/scripts/add-template.py | 31 ++++++++++++++++--- 3 files changed, 60 insertions(+), 10 deletions(-) diff --git a/.claude/skills/template-add/SKILL.md b/.claude/skills/template-add/SKILL.md index aee90e17..1de925d4 100644 --- a/.claude/skills/template-add/SKILL.md +++ b/.claude/skills/template-add/SKILL.md @@ -27,8 +27,8 @@ allowed-tools: | TemplateName | да | — | Имя макета | | TemplateType | да | — | Тип: HTML, Text, SpreadsheetDocument, BinaryData, DataCompositionSchema | | Synonym | нет | = TemplateName | Синоним макета | -| SrcDir | нет | `src` | Каталог исходников | -| --SetMainSKD | нет | — | Принудительно установить MainDataCompositionSchema | +| SrcDir | нет | `src` | Путь к папке типа объектов (`Reports`, `DataProcessors`, `Catalogs`, `Documents`...), внутри которой лежит `.xml`. Дефолт `src` подходит для каталогов с внешними обработками/отчётами, лежащими рядом | +| -SetMainSKD | нет | — | Принудительно установить MainDataCompositionSchema | ## Команда @@ -36,6 +36,14 @@ allowed-tools: powershell.exe -NoProfile -File .claude/skills/template-add/scripts/add-template.ps1 -ObjectName "" -TemplateName "" -TemplateType "" [-Synonym ""] [-SrcDir ""] [-SetMainSKD] ``` +## Пример + +Добавить основную СКД к отчёту в расширении: + +```powershell +powershell.exe -NoProfile -File .claude/skills/template-add/scripts/add-template.ps1 -ObjectName "ОтчётПродажи" -TemplateName "ОсновнаяСхемаКомпоновкиДанных" -TemplateType "DataCompositionSchema" -SrcDir "src/cfe/МоёРасширение/Reports" +``` + ## Маппинг типов Пользователь может указать тип в свободной форме. Определи нужный по контексту: diff --git a/.claude/skills/template-add/scripts/add-template.ps1 b/.claude/skills/template-add/scripts/add-template.ps1 index 98ebd718..d4fea048 100644 --- a/.claude/skills/template-add/scripts/add-template.ps1 +++ b/.claude/skills/template-add/scripts/add-template.ps1 @@ -1,4 +1,4 @@ -# template-add v1.3 — Add template to 1C object +# template-add v1.4 — Add template to 1C object # Source: https://github.com/Nikolay-Shirokov/cc-1c-skills param( [Parameter(Mandatory)] @@ -35,10 +35,31 @@ $tmpl = $typeMap[$TemplateType] # --- Проверки --- +$objectTypeFolders = @( + "Reports", "DataProcessors", "Documents", "Catalogs", + "InformationRegisters", "AccumulationRegisters", + "ChartsOfCharacteristicTypes", "ChartsOfAccounts", "ChartsOfCalculationTypes", + "BusinessProcesses", "Tasks", "ExchangePlans" +) + $rootXmlPath = Join-Path $SrcDir "$ObjectName.xml" if (-not (Test-Path $rootXmlPath)) { - Write-Error "Корневой файл объекта не найден: $rootXmlPath`nОжидается: //.xml`nПодсказка: SrcDir должен указывать на папку типа объектов (например Reports), а не на корень конфигурации" - exit 1 + $candidates = @() + foreach ($folder in $objectTypeFolders) { + $probe = Join-Path (Join-Path $SrcDir $folder) "$ObjectName.xml" + if (Test-Path $probe) { $candidates += (Join-Path $SrcDir $folder) } + } + if ($candidates.Count -eq 1) { + $SrcDir = $candidates[0] + $rootXmlPath = Join-Path $SrcDir "$ObjectName.xml" + Write-Host "[INFO] SrcDir расширен до: $SrcDir" + } elseif ($candidates.Count -gt 1) { + Write-Error "Объект '$ObjectName' найден в нескольких подпапках: $($candidates -join ', ')`nУкажи SrcDir явно" + exit 1 + } else { + Write-Error "Корневой файл объекта не найден: $rootXmlPath`nОжидается: /.xml`nПодсказка: SrcDir должен указывать на папку типа объектов (например Reports), а не на корень конфигурации" + exit 1 + } } $processorDir = Join-Path $SrcDir $ObjectName diff --git a/.claude/skills/template-add/scripts/add-template.py b/.claude/skills/template-add/scripts/add-template.py index a6054538..fc7f93fb 100644 --- a/.claude/skills/template-add/scripts/add-template.py +++ b/.claude/skills/template-add/scripts/add-template.py @@ -1,5 +1,5 @@ #!/usr/bin/env python3 -# add-template v1.3 — Add template to 1C object +# add-template v1.4 — Add template to 1C object # Source: https://github.com/Nikolay-Shirokov/cc-1c-skills import argparse @@ -80,12 +80,33 @@ def main(): # --- Checks --- + object_type_folders = [ + "Reports", "DataProcessors", "Documents", "Catalogs", + "InformationRegisters", "AccumulationRegisters", + "ChartsOfCharacteristicTypes", "ChartsOfAccounts", "ChartsOfCalculationTypes", + "BusinessProcesses", "Tasks", "ExchangePlans", + ] + root_xml_path = os.path.join(src_dir, f"{object_name}.xml") if not os.path.exists(root_xml_path): - print(f"Корневой файл объекта не найден: {root_xml_path}", file=sys.stderr) - print(f"Ожидается: //.xml", file=sys.stderr) - print(f"Подсказка: SrcDir должен указывать на папку типа объектов (например Reports), а не на корень конфигурации", file=sys.stderr) - sys.exit(1) + candidates = [] + for folder in object_type_folders: + probe = os.path.join(src_dir, folder, f"{object_name}.xml") + if os.path.exists(probe): + candidates.append(os.path.join(src_dir, folder)) + if len(candidates) == 1: + src_dir = candidates[0] + root_xml_path = os.path.join(src_dir, f"{object_name}.xml") + print(f"[INFO] SrcDir расширен до: {src_dir}") + elif len(candidates) > 1: + print(f"Объект '{object_name}' найден в нескольких подпапках: {', '.join(candidates)}", file=sys.stderr) + print(f"Укажи SrcDir явно", file=sys.stderr) + sys.exit(1) + else: + print(f"Корневой файл объекта не найден: {root_xml_path}", file=sys.stderr) + print(f"Ожидается: /.xml", file=sys.stderr) + print(f"Подсказка: SrcDir должен указывать на папку типа объектов (например Reports), а не на корень конфигурации", file=sys.stderr) + sys.exit(1) processor_dir = os.path.join(src_dir, object_name) templates_dir = os.path.join(processor_dir, "Templates")