From 2a4d2bf8df4ddd2feaae62084513cd63b1a90205 Mon Sep 17 00:00:00 2001 From: Nick Shirokov Date: Mon, 16 Feb 2026 17:58:32 +0300 Subject: [PATCH 1/6] fix(skd-edit): add query modification trigger to skill description Co-Authored-By: Claude Opus 4.6 --- .claude/skills/skd-edit/SKILL.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.claude/skills/skd-edit/SKILL.md b/.claude/skills/skd-edit/SKILL.md index 083e7fb3..660fdb81 100644 --- a/.claude/skills/skd-edit/SKILL.md +++ b/.claude/skills/skd-edit/SKILL.md @@ -1,6 +1,6 @@ --- name: skd-edit -description: Точечное редактирование схемы компоновки данных 1С (СКД). Используй когда нужно модифицировать существующую СКД — добавить поля, итоги, фильтры, параметры +description: Точечное редактирование схемы компоновки данных 1С (СКД). Используй когда нужно модифицировать существующую СКД — добавить поля, итоги, фильтры, параметры, изменить текст запроса argument-hint: -Operation -Value allowed-tools: - Bash From 7268b169d846a8120150c5183a29aed624b8c068 Mon Sep 17 00:00:00 2001 From: Nick Shirokov Date: Mon, 16 Feb 2026 18:29:00 +0300 Subject: [PATCH 2/6] feat(skd,subsystem): add -Value param to skd-compile, full mode to skd-info and subsystem-info - skd-compile: replace mandatory -JsonPath with -DefinitionFile/-Value pair, allowing inline JSON without temp files - skd-info: extract 6 mode bodies into functions, add -Mode full combining overview+query+fields+resources+params+variant in one call - subsystem-info: extract overview/content/ci into functions, add -Mode full combining all three in one call - Update SKILL.md docs and guides accordingly Co-Authored-By: Claude Opus 4.6 --- .claude/skills/skd-compile/SKILL.md | 11 +- .../skd-compile/scripts/skd-compile.ps1 | 27 +- .claude/skills/skd-info/SKILL.md | 5 +- .claude/skills/skd-info/scripts/skd-info.ps1 | 80 +++- .claude/skills/subsystem-info/SKILL.md | 7 +- .../subsystem-info/scripts/subsystem-info.ps1 | 346 +++++++++--------- docs/skd-guide.md | 4 +- docs/subsystem-guide.md | 2 +- 8 files changed, 278 insertions(+), 204 deletions(-) diff --git a/.claude/skills/skd-compile/SKILL.md b/.claude/skills/skd-compile/SKILL.md index c6e4098a..6f8c1ac7 100644 --- a/.claude/skills/skd-compile/SKILL.md +++ b/.claude/skills/skd-compile/SKILL.md @@ -1,7 +1,7 @@ --- name: skd-compile description: Компиляция схемы компоновки данных 1С (СКД) из компактного JSON-определения. Используй когда нужно создать СКД с нуля -argument-hint: +argument-hint: [-DefinitionFile | -Value ] -OutputPath allowed-tools: - Bash - Read @@ -17,11 +17,16 @@ allowed-tools: | Параметр | Описание | |----------|----------| -| `JsonPath` | Путь к JSON-определению СКД | +| `DefinitionFile` | Путь к JSON-файлу с определением СКД (взаимоисключающий с Value) | +| `Value` | JSON-строка с определением СКД (взаимоисключающий с DefinitionFile) | | `OutputPath` | Путь к выходному Template.xml | ```powershell -powershell.exe -NoProfile -File .claude\skills\skd-compile\scripts\skd-compile.ps1 -JsonPath "" -OutputPath "" +# Из файла +powershell.exe -NoProfile -File .claude\skills\skd-compile\scripts\skd-compile.ps1 -DefinitionFile "" -OutputPath "" + +# Из строки (без промежуточного файла) +powershell.exe -NoProfile -File .claude\skills\skd-compile\scripts\skd-compile.ps1 -Value '' -OutputPath "" ``` ## JSON DSL — краткий справочник diff --git a/.claude/skills/skd-compile/scripts/skd-compile.ps1 b/.claude/skills/skd-compile/scripts/skd-compile.ps1 index 6df434ed..0b7f12f0 100644 --- a/.claude/skills/skd-compile/scripts/skd-compile.ps1 +++ b/.claude/skills/skd-compile/scripts/skd-compile.ps1 @@ -1,9 +1,8 @@ # skd-compile v1.0 — Compile 1C DCS from JSON # Source: https://github.com/Nikolay-Shirokov/cc-1c-skills param( - [Parameter(Mandatory)] - [string]$JsonPath, - + [string]$DefinitionFile, + [string]$Value, [Parameter(Mandatory)] [string]$OutputPath ) @@ -13,12 +12,28 @@ $ErrorActionPreference = "Stop" # --- 1. Load and validate JSON --- -if (-not (Test-Path $JsonPath)) { - Write-Error "File not found: $JsonPath" +if ($DefinitionFile -and $Value) { + Write-Error "Cannot use both -DefinitionFile and -Value" + exit 1 +} +if (-not $DefinitionFile -and -not $Value) { + Write-Error "Either -DefinitionFile or -Value is required" exit 1 } -$json = Get-Content -Raw -Encoding UTF8 $JsonPath +if ($DefinitionFile) { + if (-not [System.IO.Path]::IsPathRooted($DefinitionFile)) { + $DefinitionFile = Join-Path (Get-Location).Path $DefinitionFile + } + if (-not (Test-Path $DefinitionFile)) { + Write-Error "Definition file not found: $DefinitionFile" + exit 1 + } + $json = Get-Content -Raw -Encoding UTF8 $DefinitionFile +} else { + $json = $Value +} + $def = $json | ConvertFrom-Json if (-not $def.dataSets -or $def.dataSets.Count -eq 0) { diff --git a/.claude/skills/skd-info/SKILL.md b/.claude/skills/skd-info/SKILL.md index c3d009be..b550ee06 100644 --- a/.claude/skills/skd-info/SKILL.md +++ b/.claude/skills/skd-info/SKILL.md @@ -1,7 +1,7 @@ --- name: skd-info description: Анализ структуры схемы компоновки данных 1С (СКД) — наборы, поля, параметры, варианты. Используй для понимания отчёта — источник данных (запрос), доступные поля, параметры -argument-hint: [-Mode overview|query|fields|links|calculated|resources|params|variant|templates|trace] [-Name ] +argument-hint: [-Mode overview|query|fields|links|calculated|resources|params|variant|templates|trace|full] [-Name ] allowed-tools: - Bash - Read @@ -54,8 +54,9 @@ powershell.exe -NoProfile -File .claude\skills\skd-info\scripts\skd-info.ps1 -Te | `variant` | Список вариантов | Структура группировок + фильтры + вывод | | `templates` | Карта привязок шаблонов (field/group) | Содержимое шаблона: строки, ячейки, выражения | | `trace` | — | Полная цепочка: набор → вычисление → ресурс | +| `full` | Полная сводка: overview + query + fields + resources + params + variant | — | -Паттерн: без `-Name` — карта/индекс, с `-Name` — деталь конкретного элемента. +Паттерн: без `-Name` — карта/индекс, с `-Name` — деталь конкретного элемента. Режим `full` объединяет 6 ключевых режимов в один вызов. ## Типичный workflow diff --git a/.claude/skills/skd-info/scripts/skd-info.ps1 b/.claude/skills/skd-info/scripts/skd-info.ps1 index 6dfc8a60..4dd75dae 100644 --- a/.claude/skills/skd-info/scripts/skd-info.ps1 +++ b/.claude/skills/skd-info/scripts/skd-info.ps1 @@ -3,7 +3,7 @@ param( [Parameter(Mandatory=$true)] [string]$TemplatePath, - [ValidateSet("overview", "query", "fields", "links", "calculated", "resources", "params", "variant", "trace", "templates")] + [ValidateSet("overview", "query", "fields", "links", "calculated", "resources", "params", "variant", "trace", "templates", "full")] [string]$Mode = "overview", [string]$Name, [int]$Batch = 0, @@ -289,11 +289,7 @@ for ($i = $pathParts.Count - 1; $i -ge 0; $i--) { $totalXmlLines = (Get-Content $resolvedPath).Count -# ============================================================ -# MODE: overview -# ============================================================ -if ($Mode -eq "overview") { - +function Show-Overview { $lines.Add("=== DCS: $templateName ($totalXmlLines lines) ===") $lines.Add("") @@ -482,7 +478,9 @@ if ($Mode -eq "overview") { $lines.Add(" [$varIdx] $vName$vPresStr$structStr$filterStr") } } +} +function Show-OverviewHints { # Hints — suggest next commands $lines.Add("") $hints = @() @@ -519,27 +517,35 @@ if ($Mode -eq "overview") { if ($totalCount -gt 0) { $hints += "-Mode resources resource aggregation ($totalCount)" } + $params = $root.SelectNodes("s:parameter", $ns) if ($params.Count -gt 0) { $hints += "-Mode params parameter details" } + $variants = $root.SelectNodes("s:settingsVariant", $ns) if ($variants.Count -eq 1) { $hints += "-Mode variant variant structure" } elseif ($variants.Count -gt 1) { $hints += "-Mode variant -Name variant structure (1..$($variants.Count))" } + $tplDefs = $root.SelectNodes("s:template", $ns) if ($tplDefs.Count -gt 0) { $hints += "-Mode templates template bindings and expressions" } $hints += "-Mode trace -Name trace field origin (by name or title)" + $hints += "-Mode full all sections at once" $lines.Add("Next:") foreach ($h in $hints) { $lines.Add(" $h") } } # ============================================================ -# MODE: query +# MODE: overview # ============================================================ -elseif ($Mode -eq "query") { +if ($Mode -eq "overview") { + Show-Overview + Show-OverviewHints +} +function Show-Query { # Find dataset $dataSets = $root.SelectNodes("s:dataSet", $ns) $targetDs = $null @@ -666,10 +672,13 @@ elseif ($Mode -eq "query") { } # ============================================================ -# MODE: fields +# MODE: query # ============================================================ -elseif ($Mode -eq "fields") { +if ($Mode -eq "query") { + Show-Query +} +function Show-Fields { $dataSets = $root.SelectNodes("s:dataSet", $ns) function Show-DataSetFields($dsNode) { @@ -881,6 +890,13 @@ elseif ($Mode -eq "fields") { } } +# ============================================================ +# MODE: fields +# ============================================================ +if ($Mode -eq "fields") { + Show-Fields +} + # ============================================================ # MODE: links # ============================================================ @@ -980,11 +996,7 @@ elseif ($Mode -eq "calculated") { } } -# ============================================================ -# MODE: resources -# ============================================================ -elseif ($Mode -eq "resources") { - +function Show-Resources { $totalFields = $root.SelectNodes("s:totalField", $ns) if ($totalFields.Count -eq 0) { $lines.Add("(no resources)") @@ -1031,10 +1043,13 @@ elseif ($Mode -eq "resources") { } # ============================================================ -# MODE: params +# MODE: resources # ============================================================ -elseif ($Mode -eq "params") { +if ($Mode -eq "resources") { + Show-Resources +} +function Show-Params { $params = $root.SelectNodes("s:parameter", $ns) $lines.Add("=== Parameters ($($params.Count)) ===") $lines.Add(" Name Type Default Visible Expression") @@ -1096,10 +1111,13 @@ elseif ($Mode -eq "params") { } # ============================================================ -# MODE: variant +# MODE: params # ============================================================ -elseif ($Mode -eq "variant") { +if ($Mode -eq "params") { + Show-Params +} +function Show-Variant { $variants = $root.SelectNodes("s:settingsVariant", $ns) if (-not $Name) { @@ -1274,6 +1292,30 @@ elseif ($Mode -eq "variant") { } # end else (variant detail) } +# ============================================================ +# MODE: variant +# ============================================================ +if ($Mode -eq "variant") { + Show-Variant +} + +# ============================================================ +# MODE: full +# ============================================================ +elseif ($Mode -eq "full") { + Show-Overview + $lines.Add(""); $lines.Add("--- query ---"); $lines.Add("") + Show-Query + $lines.Add(""); $lines.Add("--- fields ---"); $lines.Add("") + Show-Fields + $lines.Add(""); $lines.Add("--- resources ---"); $lines.Add("") + Show-Resources + $lines.Add(""); $lines.Add("--- params ---"); $lines.Add("") + Show-Params + $lines.Add(""); $lines.Add("--- variant ---"); $lines.Add("") + Show-Variant +} + # ============================================================ # MODE: trace # ============================================================ diff --git a/.claude/skills/subsystem-info/SKILL.md b/.claude/skills/subsystem-info/SKILL.md index 801d5f97..0b4b0724 100644 --- a/.claude/skills/subsystem-info/SKILL.md +++ b/.claude/skills/subsystem-info/SKILL.md @@ -1,7 +1,7 @@ --- name: subsystem-info description: Анализ структуры подсистемы 1С из XML-выгрузки — состав, дочерние подсистемы, командный интерфейс, дерево иерархии. Используй для изучения структуры подсистем и навигации по конфигурации -argument-hint: [-Mode overview|content|ci|tree] [-Name <элемент>] +argument-hint: [-Mode overview|content|ci|tree|full] [-Name <элемент>] allowed-tools: - Bash - Read @@ -17,7 +17,7 @@ allowed-tools: | Параметр | Описание | |----------|----------| | `SubsystemPath` | Путь к XML-файлу подсистемы, каталогу подсистемы или каталогу `Subsystems/` (для tree) | -| `Mode` | Режим: `overview` (default), `content`, `ci`, `tree` | +| `Mode` | Режим: `overview` (default), `content`, `ci`, `tree`, `full` | | `Name` | Drill-down: тип объекта в content, секция в ci, имя подсистемы в tree | | `Limit` / `Offset` | Пагинация (по умолчанию 150 строк) | | `OutFile` | Записать результат в файл (UTF-8 BOM) | @@ -26,7 +26,7 @@ allowed-tools: powershell.exe -NoProfile -File .claude\skills\subsystem-info\scripts\subsystem-info.ps1 -SubsystemPath "<путь>" ``` -## Четыре режима +## Пять режимов | Режим | Что показывает | |---|---| @@ -34,6 +34,7 @@ powershell.exe -NoProfile -File .claude\skills\subsystem-info\scripts\subsystem- | `content` | Список Content с группировкой по типу объекта. `-Name Catalog` — только каталоги | | `ci` | Разбор CommandInterface.xml: видимость, размещение, порядок команд/подсистем/групп | | `tree` | Рекурсивное дерево иерархии подсистем с маркерами [CI], [OneCmd], [Скрыт] | +| `full` | Полная сводка: overview + content + ci в одном вызове | ## Примеры diff --git a/.claude/skills/subsystem-info/scripts/subsystem-info.ps1 b/.claude/skills/subsystem-info/scripts/subsystem-info.ps1 index 77520980..82696f52 100644 --- a/.claude/skills/subsystem-info/scripts/subsystem-info.ps1 +++ b/.claude/skills/subsystem-info/scripts/subsystem-info.ps1 @@ -2,7 +2,7 @@ # Source: https://github.com/Nikolay-Shirokov/cc-1c-skills param( [Parameter(Mandatory=$true)][string]$SubsystemPath, - [ValidateSet("overview","content","ci","tree")] + [ValidateSet("overview","content","ci","tree","full")] [string]$Mode = "overview", [string]$Name, [int]$Limit = 150, @@ -113,6 +113,174 @@ function Get-SubsystemDir([string]$xmlPath) { return Join-Path $dir $baseName } +# --- Show functions for full mode --- +function Show-Overview { + Out "Подсистема: $subName" + if ($synonym -and $synonym -ne $subName) { Out "Синоним: $synonym" } + if ($commentText) { Out "Комментарий: $commentText" } + Out "ВключатьВКомандныйИнтерфейс: $inclCI" + Out "ИспользоватьОднуКоманду: $useOneCmd" + if ($explanation) { Out "Пояснение: $explanation" } + if ($picText) { Out "Картинка: $picText" } + if ($contentItems.Count -gt 0) { + $parts = @() + foreach ($type in $groups.Keys) { + $parts += "$type`: $($groups[$type].Count)" + } + Out "Состав: $($contentItems.Count) объектов ($($parts -join ', '))" + } else { + Out "Состав: пусто" + } + if ($childNames.Count -gt 0) { + Out "Дочерние подсистемы ($($childNames.Count)): $($childNames -join ', ')" + } + if ($hasCI) { + Out "Командный интерфейс: есть" + } +} + +function Show-Content { + Out "Состав подсистемы $subName ($($contentItems.Count) объектов):" + Out "" + if ($Name) { + if ($groups.Contains($Name)) { + $filtered = $groups[$Name] + Out "$Name ($($filtered.Count)):" + foreach ($n in $filtered) { Out " $n" } + } else { + Out "[INFO] Тип '$Name' не найден в составе." + Out "Доступные типы: $($groups.Keys -join ', ')" + } + } else { + foreach ($type in $groups.Keys) { + Out "$type ($($groups[$type].Count)):" + foreach ($n in $groups[$type]) { Out " $n" } + Out "" + } + } +} + +function Show-CI { + $localSubDir = Get-SubsystemDir $SubsystemPath + $localCiPath = Join-Path (Join-Path $localSubDir "Ext") "CommandInterface.xml" + + if (-not (Test-Path $localCiPath)) { + Out "Командный интерфейс: $subName" + Out "" + Out "Файл CommandInterface.xml не найден." + Out "Путь: $localCiPath" + } else { + [xml]$ciDoc = Get-Content -Path $localCiPath -Encoding UTF8 + $ciNs = New-Object System.Xml.XmlNamespaceManager($ciDoc.NameTable) + $ciNs.AddNamespace("ci", "http://v8.1c.ru/8.3/xcf/extrnprops") + $ciNs.AddNamespace("xr", "http://v8.1c.ru/8.3/xcf/readable") + + $ciRoot = $ciDoc.DocumentElement + + Out "Командный интерфейс: $subName" + Out "" + + # --- CommandsVisibility --- + $visSection = $ciRoot.SelectSingleNode("ci:CommandsVisibility", $ciNs) + if ($visSection) { + $hidden = @(); $shown = @() + foreach ($cmd in $visSection.SelectNodes("ci:Command", $ciNs)) { + $cmdName = $cmd.GetAttribute("name") + $vis = $cmd.SelectSingleNode("ci:Visibility/xr:Common", $ciNs) + if ($vis -and $vis.InnerText -eq "false") { $hidden += $cmdName } + else { $shown += $cmdName } + } + $total = $hidden.Count + $shown.Count + if (-not $Name -or $Name -eq "visibility") { + Out "Видимость ($total):" + if ($hidden.Count -gt 0) { + Out " СКРЫТО ($($hidden.Count)):" + foreach ($h in $hidden) { Out " $h" } + } + if ($shown.Count -gt 0) { + Out " ПОКАЗАНО ($($shown.Count)):" + foreach ($s in $shown) { Out " $s" } + } + Out "" + } + } + + # --- CommandsPlacement --- + $placeSection = $ciRoot.SelectSingleNode("ci:CommandsPlacement", $ciNs) + if ($placeSection) { + $placements = @() + foreach ($cmd in $placeSection.SelectNodes("ci:Command", $ciNs)) { + $cmdName = $cmd.GetAttribute("name") + $grp = $cmd.SelectSingleNode("ci:CommandGroup", $ciNs) + $pl = $cmd.SelectSingleNode("ci:Placement", $ciNs) + $grpText = if ($grp) { $grp.InnerText } else { "?" } + $plText = if ($pl) { $pl.InnerText } else { "?" } + $placements += @{ Name=$cmdName; Group=$grpText; Placement=$plText } + } + if ((-not $Name -or $Name -eq "placement") -and $placements.Count -gt 0) { + Out "Размещение ($($placements.Count)):" + $arrow = [char]0x2192 + foreach ($p in $placements) { + Out " $($p.Name) $arrow $($p.Group) ($($p.Placement))" + } + Out "" + } + } + + # --- CommandsOrder --- + $orderSection = $ciRoot.SelectSingleNode("ci:CommandsOrder", $ciNs) + if ($orderSection) { + $orderGroups = [ordered]@{} + foreach ($cmd in $orderSection.SelectNodes("ci:Command", $ciNs)) { + $cmdName = $cmd.GetAttribute("name") + $grp = $cmd.SelectSingleNode("ci:CommandGroup", $ciNs) + $grpText = if ($grp) { $grp.InnerText } else { "?" } + if (-not $orderGroups.Contains($grpText)) { $orderGroups[$grpText] = @() } + $orderGroups[$grpText] += $cmdName + } + $totalOrder = 0 + foreach ($k in $orderGroups.Keys) { $totalOrder += $orderGroups[$k].Count } + if ((-not $Name -or $Name -eq "order") -and $totalOrder -gt 0) { + Out "Порядок команд ($totalOrder):" + foreach ($grpName in $orderGroups.Keys) { + Out " [$grpName]:" + foreach ($c in $orderGroups[$grpName]) { Out " $c" } + } + Out "" + } + } + + # --- SubsystemsOrder --- + $subOrderSection = $ciRoot.SelectSingleNode("ci:SubsystemsOrder", $ciNs) + if ($subOrderSection) { + $subOrder = @() + foreach ($s in $subOrderSection.SelectNodes("ci:Subsystem", $ciNs)) { + $subOrder += $s.InnerText + } + if ((-not $Name -or $Name -eq "subsystems") -and $subOrder.Count -gt 0) { + Out "Порядок подсистем ($($subOrder.Count)):" + for ($i = 0; $i -lt $subOrder.Count; $i++) { + Out " $($i+1). $($subOrder[$i])" + } + Out "" + } + } + + # --- GroupsOrder --- + $grpOrderSection = $ciRoot.SelectSingleNode("ci:GroupsOrder", $ciNs) + if ($grpOrderSection) { + $grpOrder = @() + foreach ($g in $grpOrderSection.SelectNodes("ci:Group", $ciNs)) { + $grpOrder += $g.InnerText + } + if ((-not $Name -or $Name -eq "groups") -and $grpOrder.Count -gt 0) { + Out "Порядок групп ($($grpOrder.Count)):" + foreach ($g in $grpOrder) { Out " $g" } + } + } + } +} + # ============================================================ # Mode: tree # ============================================================ @@ -225,124 +393,7 @@ if ($Mode -eq "tree") { $props = $sub.SelectSingleNode("md:Properties", $ns) $subName = $props.SelectSingleNode("md:Name", $ns).InnerText - $subDir = Get-SubsystemDir $SubsystemPath - $ciPath = Join-Path (Join-Path $subDir "Ext") "CommandInterface.xml" - - if (-not (Test-Path $ciPath)) { - Out "Командный интерфейс: $subName" - Out "" - Out "Файл CommandInterface.xml не найден." - Out "Путь: $ciPath" - } else { - [xml]$ciDoc = Get-Content -Path $ciPath -Encoding UTF8 - $ciNs = New-Object System.Xml.XmlNamespaceManager($ciDoc.NameTable) - $ciNs.AddNamespace("ci", "http://v8.1c.ru/8.3/xcf/extrnprops") - $ciNs.AddNamespace("xr", "http://v8.1c.ru/8.3/xcf/readable") - - $ciRoot = $ciDoc.DocumentElement - - Out "Командный интерфейс: $subName" - Out "" - - # --- CommandsVisibility --- - $visSection = $ciRoot.SelectSingleNode("ci:CommandsVisibility", $ciNs) - if ($visSection) { - $hidden = @(); $shown = @() - foreach ($cmd in $visSection.SelectNodes("ci:Command", $ciNs)) { - $cmdName = $cmd.GetAttribute("name") - $vis = $cmd.SelectSingleNode("ci:Visibility/xr:Common", $ciNs) - if ($vis -and $vis.InnerText -eq "false") { $hidden += $cmdName } - else { $shown += $cmdName } - } - $total = $hidden.Count + $shown.Count - if (-not $Name -or $Name -eq "visibility") { - Out "Видимость ($total):" - if ($hidden.Count -gt 0) { - Out " СКРЫТО ($($hidden.Count)):" - foreach ($h in $hidden) { Out " $h" } - } - if ($shown.Count -gt 0) { - Out " ПОКАЗАНО ($($shown.Count)):" - foreach ($s in $shown) { Out " $s" } - } - Out "" - } - } - - # --- CommandsPlacement --- - $placeSection = $ciRoot.SelectSingleNode("ci:CommandsPlacement", $ciNs) - if ($placeSection) { - $placements = @() - foreach ($cmd in $placeSection.SelectNodes("ci:Command", $ciNs)) { - $cmdName = $cmd.GetAttribute("name") - $grp = $cmd.SelectSingleNode("ci:CommandGroup", $ciNs) - $pl = $cmd.SelectSingleNode("ci:Placement", $ciNs) - $grpText = if ($grp) { $grp.InnerText } else { "?" } - $plText = if ($pl) { $pl.InnerText } else { "?" } - $placements += @{ Name=$cmdName; Group=$grpText; Placement=$plText } - } - if ((-not $Name -or $Name -eq "placement") -and $placements.Count -gt 0) { - Out "Размещение ($($placements.Count)):" - $arrow = [char]0x2192 - foreach ($p in $placements) { - Out " $($p.Name) $arrow $($p.Group) ($($p.Placement))" - } - Out "" - } - } - - # --- CommandsOrder --- - $orderSection = $ciRoot.SelectSingleNode("ci:CommandsOrder", $ciNs) - if ($orderSection) { - $orderGroups = [ordered]@{} - foreach ($cmd in $orderSection.SelectNodes("ci:Command", $ciNs)) { - $cmdName = $cmd.GetAttribute("name") - $grp = $cmd.SelectSingleNode("ci:CommandGroup", $ciNs) - $grpText = if ($grp) { $grp.InnerText } else { "?" } - if (-not $orderGroups.Contains($grpText)) { $orderGroups[$grpText] = @() } - $orderGroups[$grpText] += $cmdName - } - $totalOrder = 0 - foreach ($k in $orderGroups.Keys) { $totalOrder += $orderGroups[$k].Count } - if ((-not $Name -or $Name -eq "order") -and $totalOrder -gt 0) { - Out "Порядок команд ($totalOrder):" - foreach ($grpName in $orderGroups.Keys) { - Out " [$grpName]:" - foreach ($c in $orderGroups[$grpName]) { Out " $c" } - } - Out "" - } - } - - # --- SubsystemsOrder --- - $subOrderSection = $ciRoot.SelectSingleNode("ci:SubsystemsOrder", $ciNs) - if ($subOrderSection) { - $subOrder = @() - foreach ($s in $subOrderSection.SelectNodes("ci:Subsystem", $ciNs)) { - $subOrder += $s.InnerText - } - if ((-not $Name -or $Name -eq "subsystems") -and $subOrder.Count -gt 0) { - Out "Порядок подсистем ($($subOrder.Count)):" - for ($i = 0; $i -lt $subOrder.Count; $i++) { - Out " $($i+1). $($subOrder[$i])" - } - Out "" - } - } - - # --- GroupsOrder --- - $grpOrderSection = $ciRoot.SelectSingleNode("ci:GroupsOrder", $ciNs) - if ($grpOrderSection) { - $grpOrder = @() - foreach ($g in $grpOrderSection.SelectNodes("ci:Group", $ciNs)) { - $grpOrder += $g.InnerText - } - if ((-not $Name -or $Name -eq "groups") -and $grpOrder.Count -gt 0) { - Out "Порядок групп ($($grpOrder.Count)):" - foreach ($g in $grpOrder) { Out " $g" } - } - } - } + Show-CI } else { # ============================================================ @@ -398,56 +449,15 @@ if ($Mode -eq "tree") { $hasCI = Test-Path $ciPath if ($Mode -eq "overview") { - Out "Подсистема: $subName" - if ($synonym -and $synonym -ne $subName) { Out "Синоним: $synonym" } - if ($commentText) { Out "Комментарий: $commentText" } - Out "ВключатьВКомандныйИнтерфейс: $inclCI" - Out "ИспользоватьОднуКоманду: $useOneCmd" - if ($explanation) { Out "Пояснение: $explanation" } - if ($picText) { Out "Картинка: $picText" } - - # Content summary - if ($contentItems.Count -gt 0) { - $parts = @() - foreach ($type in $groups.Keys) { - $parts += "$type`: $($groups[$type].Count)" - } - Out "Состав: $($contentItems.Count) объектов ($($parts -join ', '))" - } else { - Out "Состав: пусто" - } - - # Children - if ($childNames.Count -gt 0) { - Out "Дочерние подсистемы ($($childNames.Count)): $($childNames -join ', ')" - } - - # CI - if ($hasCI) { - Out "Командный интерфейс: есть" - } - + Show-Overview } elseif ($Mode -eq "content") { - Out "Состав подсистемы $subName ($($contentItems.Count) объектов):" - Out "" - - if ($Name) { - # Filter by type - if ($groups.Contains($Name)) { - $filtered = $groups[$Name] - Out "$Name ($($filtered.Count)):" - foreach ($n in $filtered) { Out " $n" } - } else { - Out "[INFO] Тип '$Name' не найден в составе." - Out "Доступные типы: $($groups.Keys -join ', ')" - } - } else { - foreach ($type in $groups.Keys) { - Out "$type ($($groups[$type].Count)):" - foreach ($n in $groups[$type]) { Out " $n" } - Out "" - } - } + Show-Content + } elseif ($Mode -eq "full") { + Show-Overview + Out ""; Out "--- content ---"; Out "" + Show-Content + Out ""; Out "--- ci ---"; Out "" + Show-CI } } diff --git a/docs/skd-guide.md b/docs/skd-guide.md index 7da5f855..656d121d 100644 --- a/docs/skd-guide.md +++ b/docs/skd-guide.md @@ -6,8 +6,8 @@ | Навык | Параметры | Описание | |-------|-----------|----------| -| `/skd-info` | ` [-Mode] [-Name]` | Анализ структуры СКД: наборы, поля, параметры, ресурсы, варианты (10 режимов) | -| `/skd-compile` | ` ` | Генерация Template.xml из JSON DSL: наборы, поля, итоги, параметры, варианты | +| `/skd-info` | ` [-Mode] [-Name]` | Анализ структуры СКД: наборы, поля, параметры, ресурсы, варианты (11 режимов, включая full) | +| `/skd-compile` | `[-DefinitionFile \| -Value ] -OutputPath ` | Генерация Template.xml из JSON DSL: наборы, поля, итоги, параметры, варианты | | `/skd-edit` | ` -Operation -Value ""` | Точечное редактирование: 25 атомарных операций (add/set/modify/clear/remove) | | `/skd-validate` | ` [-MaxErrors 20]` | Валидация структурной корректности: ~30 проверок | diff --git a/docs/subsystem-guide.md b/docs/subsystem-guide.md index 850cdd1c..cec1ecfb 100644 --- a/docs/subsystem-guide.md +++ b/docs/subsystem-guide.md @@ -6,7 +6,7 @@ | Навык | Параметры | Описание | |-------|-----------|----------| -| `/subsystem-info` | ` [-Mode] [-Name]` | Анализ структуры подсистемы: состав, дочерние, CI, дерево иерархии (4 режима) | +| `/subsystem-info` | ` [-Mode] [-Name]` | Анализ структуры подсистемы: состав, дочерние, CI, дерево иерархии (5 режимов, включая full) | | `/subsystem-compile` | ` [-Parent]` | Генерация подсистемы из JSON DSL: XML + регистрация в Configuration.xml | | `/subsystem-edit` | ` -Operation -Value ""` | Точечное редактирование: 5 операций (add/remove content/child, set-property) | | `/subsystem-validate` | ` [-MaxErrors 30]` | Валидация структурной корректности: 13 проверок | From 329d94dc55bdf61f45f4c4488dc3000f5df62439 Mon Sep 17 00:00:00 2001 From: Nick Shirokov Date: Mon, 16 Feb 2026 18:50:13 +0300 Subject: [PATCH 3/6] feat(cfe): add Russian type synonyms to cfe-borrow, improve cfe-diff description MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit cfe-borrow silently resolves Russian type names (Справочник→Catalog, etc.) as a fallback when the model uses the wrong type prefix. cfe-diff description updated with better trigger words for agent discovery. Co-Authored-By: Claude Opus 4.6 --- .claude/skills/cfe-borrow/SKILL.md | 1 - .../skills/cfe-borrow/scripts/cfe-borrow.ps1 | 24 +++++++++++++++++++ .claude/skills/cfe-diff/SKILL.md | 2 +- 3 files changed, 25 insertions(+), 2 deletions(-) diff --git a/.claude/skills/cfe-borrow/SKILL.md b/.claude/skills/cfe-borrow/SKILL.md index 2e6cc164..2e88a59e 100644 --- a/.claude/skills/cfe-borrow/SKILL.md +++ b/.claude/skills/cfe-borrow/SKILL.md @@ -31,7 +31,6 @@ allowed-tools: - `Document.РеализацияТоваров` — документ - `Enum.ВидыОплат` — перечисление - `Catalog.X ;; CommonModule.Y ;; Enum.Z` — несколько объектов - Поддерживаются все 44 типа объектов конфигурации. ## Команда diff --git a/.claude/skills/cfe-borrow/scripts/cfe-borrow.ps1 b/.claude/skills/cfe-borrow/scripts/cfe-borrow.ps1 index fcb0a76f..891b9df1 100644 --- a/.claude/skills/cfe-borrow/scripts/cfe-borrow.ps1 +++ b/.claude/skills/cfe-borrow/scripts/cfe-borrow.ps1 @@ -102,6 +102,27 @@ $childTypeDirMap = @{ "CommonAttribute"="CommonAttributes"; "Style"="Styles" } +# --- 4b. Russian synonym → English type --- +$synonymMap = @{ + "Справочник"="Catalog"; "Документ"="Document"; "Перечисление"="Enum" + "ОбщийМодуль"="CommonModule"; "ОбщаяКартинка"="CommonPicture" + "ОбщаяКоманда"="CommonCommand"; "ОбщийМакет"="CommonTemplate" + "ПланОбмена"="ExchangePlan"; "Отчет"="Report"; "Отчёт"="Report" + "Обработка"="DataProcessor"; "РегистрСведений"="InformationRegister" + "РегистрНакопления"="AccumulationRegister" + "ПланВидовХарактеристик"="ChartOfCharacteristicTypes" + "ПланСчетов"="ChartOfAccounts"; "РегистрБухгалтерии"="AccountingRegister" + "ПланВидовРасчета"="ChartOfCalculationTypes"; "РегистрРасчета"="CalculationRegister" + "БизнесПроцесс"="BusinessProcess"; "Задача"="Task" + "Подсистема"="Subsystem"; "Роль"="Role"; "Константа"="Constant" + "ФункциональнаяОпция"="FunctionalOption"; "ОпределяемыйТип"="DefinedType" + "ОбщаяФорма"="CommonForm"; "ЖурналДокументов"="DocumentJournal" + "ПараметрСеанса"="SessionParameter"; "ГруппаКоманд"="CommandGroup" + "ПодпискаНаСобытие"="EventSubscription"; "РегламентноеЗадание"="ScheduledJob" + "ОбщийРеквизит"="CommonAttribute"; "ПакетXDTO"="XDTOPackage" + "HTTPСервис"="HTTPService"; "СервисИнтеграции"="IntegrationService" +} + # --- 5. Canonical type order (44 types) --- $script:typeOrder = @( "Language","Subsystem","StyleItem","Style", @@ -519,6 +540,9 @@ foreach ($item in $items) { $typeName = $item.Substring(0, $dotIdx) $objName = $item.Substring($dotIdx + 1) + # Resolve Russian synonym to English type name + if ($synonymMap.ContainsKey($typeName)) { $typeName = $synonymMap[$typeName] } + if (-not $childTypeDirMap.ContainsKey($typeName)) { Write-Error "Unknown type '${typeName}'" exit 1 diff --git a/.claude/skills/cfe-diff/SKILL.md b/.claude/skills/cfe-diff/SKILL.md index 5214937a..39f21e5a 100644 --- a/.claude/skills/cfe-diff/SKILL.md +++ b/.claude/skills/cfe-diff/SKILL.md @@ -1,6 +1,6 @@ --- name: cfe-diff -description: Анализ расширения конфигурации 1С (CFE) — обзор изменений и проверка переноса. Используй для понимания что изменено в расширении или для проверки перенесены ли изменения из расширения в конфигурацию +description: Анализ расширения конфигурации 1С (CFE) — состав, заимствованные объекты, перехватчики, проверка переноса. Используй когда нужно понять что содержит расширение или проверить перенесены ли вставки в конфигурацию argument-hint: -ExtensionPath -ConfigPath [-Mode A|B] allowed-tools: - Bash From 8ecc5764ed3f59c0ab3109fd9298d3953312e3b6 Mon Sep 17 00:00:00 2001 From: Nick Shirokov Date: Mon, 16 Feb 2026 19:31:18 +0300 Subject: [PATCH 4/6] feat(db,epf): add .ps1 wrapper scripts for all 1cv8 CLI skills MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Wrap all remaining 1cv8.exe CLI calls with Start-Process .ps1 scripts to fix Cyrillic parameter corruption in PowerShell 5.1 when using & operator. New scripts (7): - db-update.ps1: DESIGNER /UpdateDBCfg with Dynamic/Server/WarningsAsErrors - db-dump-cf.ps1: DESIGNER /DumpCfg with Extension support - db-load-cf.ps1: DESIGNER /LoadCfg with Extension support - db-create.ps1: CREATEINFOBASE with UseTemplate/AddToList - db-run.ps1: ENTERPRISE with Execute/CParam/URL (background, no wait) - epf-build.ps1: DESIGNER /LoadExternalDataProcessorOrReportFromFiles (shared with erf-build) - epf-dump.ps1: DESIGNER /DumpExternalDataProcessorOrReportToFiles (shared with erf-dump) Updated SKILL.md (9): db-update, db-dump-cf, db-load-cf, db-create, db-run, epf-build, epf-dump, erf-build, erf-dump — all now reference powershell.exe -NoProfile -File invocation with parameter tables. Co-Authored-By: Claude Opus 4.6 --- .claude/skills/db-create/SKILL.md | 44 ++--- .../skills/db-create/scripts/db-create.ps1 | 163 ++++++++++++++++ .claude/skills/db-dump-cf/SKILL.md | 38 ++-- .../skills/db-dump-cf/scripts/db-dump-cf.ps1 | 166 ++++++++++++++++ .claude/skills/db-load-cf/SKILL.md | 37 ++-- .../skills/db-load-cf/scripts/db-load-cf.ps1 | 166 ++++++++++++++++ .claude/skills/db-run/SKILL.md | 51 +++-- .claude/skills/db-run/scripts/db-run.ps1 | 133 +++++++++++++ .claude/skills/db-update/SKILL.md | 46 ++--- .../skills/db-update/scripts/db-update.ps1 | 184 ++++++++++++++++++ .claude/skills/epf-build/SKILL.md | 40 ++-- .../skills/epf-build/scripts/epf-build.ps1 | 159 +++++++++++++++ .claude/skills/epf-dump/SKILL.md | 41 ++-- .claude/skills/epf-dump/scripts/epf-dump.ps1 | 166 ++++++++++++++++ .claude/skills/erf-build/SKILL.md | 40 ++-- .claude/skills/erf-dump/SKILL.md | 41 ++-- 16 files changed, 1337 insertions(+), 178 deletions(-) create mode 100644 .claude/skills/db-create/scripts/db-create.ps1 create mode 100644 .claude/skills/db-dump-cf/scripts/db-dump-cf.ps1 create mode 100644 .claude/skills/db-load-cf/scripts/db-load-cf.ps1 create mode 100644 .claude/skills/db-run/scripts/db-run.ps1 create mode 100644 .claude/skills/db-update/scripts/db-update.ps1 create mode 100644 .claude/skills/epf-build/scripts/epf-build.ps1 create mode 100644 .claude/skills/epf-dump/scripts/epf-dump.ps1 diff --git a/.claude/skills/db-create/SKILL.md b/.claude/skills/db-create/SKILL.md index 0f188377..00129c38 100644 --- a/.claude/skills/db-create/SKILL.md +++ b/.claude/skills/db-create/SKILL.md @@ -28,30 +28,25 @@ allowed-tools: Если `v8path` не задан — автоопределение: `Get-ChildItem "C:\Program Files\1cv8\*\bin\1cv8.exe" | Sort -Desc | Select -First 1` После создания базы предложи зарегистрировать через `/db-list add`. -## Команды +## Команда -### Файловая база - -```cmd -"\1cv8.exe" CREATEINFOBASE File="<путь>" /DisableStartupDialogs /Out "<лог>" +```powershell +powershell.exe -NoProfile -File .claude\skills\db-create\scripts\db-create.ps1 <параметры> ``` -### Серверная база +### Параметры скрипта -```cmd -"\1cv8.exe" CREATEINFOBASE Srvr="<сервер>";Ref="<имя>" /DisableStartupDialogs /Out "<лог>" -``` +| Параметр | Обязательный | Описание | +|----------|:------------:|----------| +| `-V8Path <путь>` | нет | Каталог bin платформы (или полный путь к 1cv8.exe) | +| `-InfoBasePath <путь>` | * | Путь к файловой базе | +| `-InfoBaseServer <сервер>` | * | Сервер 1С (для серверной базы) | +| `-InfoBaseRef <имя>` | * | Имя базы на сервере | +| `-UseTemplate <файл>` | нет | Создать из шаблона (.cf или .dt) | +| `-AddToList` | нет | Добавить в список баз 1С | +| `-ListName <имя>` | нет | Имя базы в списке | -### Параметры - -| Параметр | Описание | -|----------|----------| -| `File="<путь>"` | Строка соединения для файловой базы | -| `Srvr="<сервер>";Ref="<имя>"` | Строка соединения для серверной базы | -| `/AddToList [<имя>]` | Добавить в список баз 1С (необязательно) | -| `/UseTemplate <файл>` | Создать из шаблона (.cf или .dt) | -| `/DisableStartupDialogs` | Подавить диалоги | -| `/Out <файл>` | Лог-файл | +> `*` — нужен либо `-InfoBasePath`, либо пара `-InfoBaseServer` + `-InfoBaseRef` ## Коды возврата @@ -69,14 +64,15 @@ allowed-tools: ## Примеры ```powershell -$v8 = Get-ChildItem "C:\Program Files\1cv8\*\bin\1cv8.exe" | Sort-Object -Descending | Select-Object -First 1 - # Создать файловую базу -& $v8.FullName CREATEINFOBASE File="C:\Bases\NewDB" /DisableStartupDialogs /Out "create.log" +powershell.exe -NoProfile -File .claude\skills\db-create\scripts\db-create.ps1 -InfoBasePath "C:\Bases\NewDB" # Создать серверную базу -& $v8.FullName CREATEINFOBASE Srvr="srv01";Ref="MyApp_Test" /DisableStartupDialogs /Out "create.log" +powershell.exe -NoProfile -File .claude\skills\db-create\scripts\db-create.ps1 -InfoBaseServer "srv01" -InfoBaseRef "MyApp_Test" # Создать из шаблона CF -& $v8.FullName CREATEINFOBASE File="C:\Bases\NewDB" /UseTemplate "C:\Templates\config.cf" /DisableStartupDialogs /Out "create.log" +powershell.exe -NoProfile -File .claude\skills\db-create\scripts\db-create.ps1 -InfoBasePath "C:\Bases\NewDB" -UseTemplate "C:\Templates\config.cf" + +# Создать и добавить в список баз +powershell.exe -NoProfile -File .claude\skills\db-create\scripts\db-create.ps1 -InfoBasePath "C:\Bases\NewDB" -AddToList -ListName "Новая база" ``` diff --git a/.claude/skills/db-create/scripts/db-create.ps1 b/.claude/skills/db-create/scripts/db-create.ps1 new file mode 100644 index 00000000..71d9ea9b --- /dev/null +++ b/.claude/skills/db-create/scripts/db-create.ps1 @@ -0,0 +1,163 @@ +# db-create v1.0 — Create 1C information base +# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills +<# +.SYNOPSIS + Создание информационной базы 1С + +.DESCRIPTION + Создаёт новую информационную базу 1С (файловую или серверную). + Поддерживает создание из шаблона и добавление в список баз. + +.PARAMETER V8Path + Путь к каталогу bin платформы или к 1cv8.exe + +.PARAMETER InfoBasePath + Путь к файловой информационной базе + +.PARAMETER InfoBaseServer + Сервер 1С (для серверной базы) + +.PARAMETER InfoBaseRef + Имя базы на сервере + +.PARAMETER UseTemplate + Путь к файлу шаблона (.cf или .dt) + +.PARAMETER AddToList + Добавить в список баз 1С + +.PARAMETER ListName + Имя базы в списке + +.EXAMPLE + .\db-create.ps1 -InfoBasePath "C:\Bases\NewDB" + +.EXAMPLE + .\db-create.ps1 -InfoBaseServer "srv01" -InfoBaseRef "MyApp_Test" + +.EXAMPLE + .\db-create.ps1 -InfoBasePath "C:\Bases\NewDB" -UseTemplate "C:\Templates\config.cf" -AddToList -ListName "Новая база" +#> + +[CmdletBinding()] +param( + [Parameter(Mandatory=$false)] + [string]$V8Path, + + [Parameter(Mandatory=$false)] + [string]$InfoBasePath, + + [Parameter(Mandatory=$false)] + [string]$InfoBaseServer, + + [Parameter(Mandatory=$false)] + [string]$InfoBaseRef, + + [Parameter(Mandatory=$false)] + [string]$UseTemplate, + + [Parameter(Mandatory=$false)] + [switch]$AddToList, + + [Parameter(Mandatory=$false)] + [string]$ListName +) + +$OutputEncoding = [System.Text.Encoding]::UTF8 +[Console]::OutputEncoding = [System.Text.Encoding]::UTF8 + +# --- Resolve V8Path --- +if (-not $V8Path) { + $found = Get-ChildItem "C:\Program Files\1cv8\*\bin\1cv8.exe" -ErrorAction SilentlyContinue | Sort-Object FullName -Descending | Select-Object -First 1 + if ($found) { + $V8Path = $found.FullName + } else { + Write-Host "Error: 1cv8.exe not found. Specify -V8Path" -ForegroundColor Red + exit 1 + } +} elseif (Test-Path $V8Path -PathType Container) { + $V8Path = Join-Path $V8Path "1cv8.exe" +} + +if (-not (Test-Path $V8Path)) { + Write-Host "Error: 1cv8.exe not found at $V8Path" -ForegroundColor Red + exit 1 +} + +# --- Validate connection --- +if (-not $InfoBasePath -and (-not $InfoBaseServer -or -not $InfoBaseRef)) { + Write-Host "Error: specify -InfoBasePath or -InfoBaseServer + -InfoBaseRef" -ForegroundColor Red + exit 1 +} + +# --- Validate template --- +if ($UseTemplate -and -not (Test-Path $UseTemplate)) { + Write-Host "Error: template file not found: $UseTemplate" -ForegroundColor Red + exit 1 +} + +# --- Temp dir --- +$tempDir = Join-Path $env:TEMP "db_create_$(Get-Random)" +New-Item -ItemType Directory -Path $tempDir -Force | Out-Null + +try { + # --- Build arguments --- + $arguments = @("CREATEINFOBASE") + + if ($InfoBaseServer -and $InfoBaseRef) { + $arguments += "Srvr=`"$InfoBaseServer`";Ref=`"$InfoBaseRef`"" + } else { + $arguments += "File=`"$InfoBasePath`"" + } + + # --- Template --- + if ($UseTemplate) { + $arguments += "/UseTemplate", "`"$UseTemplate`"" + } + + # --- Add to list --- + if ($AddToList) { + if ($ListName) { + $arguments += "/AddToList", "`"$ListName`"" + } else { + $arguments += "/AddToList" + } + } + + # --- Output --- + $outFile = Join-Path $tempDir "create_log.txt" + $arguments += "/Out", "`"$outFile`"" + $arguments += "/DisableStartupDialogs" + + # --- Execute --- + Write-Host "Running: 1cv8.exe $($arguments -join ' ')" + $process = Start-Process -FilePath $V8Path -ArgumentList $arguments -NoNewWindow -Wait -PassThru + $exitCode = $process.ExitCode + + # --- Result --- + if ($exitCode -eq 0) { + if ($InfoBaseServer -and $InfoBaseRef) { + Write-Host "Information base created successfully: $InfoBaseServer/$InfoBaseRef" -ForegroundColor Green + } else { + Write-Host "Information base created successfully: $InfoBasePath" -ForegroundColor Green + } + } else { + Write-Host "Error creating information base (code: $exitCode)" -ForegroundColor Red + } + + if (Test-Path $outFile) { + $logContent = Get-Content $outFile -Raw -ErrorAction SilentlyContinue + if ($logContent) { + Write-Host "--- Log ---" + Write-Host $logContent + Write-Host "--- End ---" + } + } + + exit $exitCode + +} finally { + if (Test-Path $tempDir) { + Remove-Item -Path $tempDir -Recurse -Force -ErrorAction SilentlyContinue + } +} diff --git a/.claude/skills/db-dump-cf/SKILL.md b/.claude/skills/db-dump-cf/SKILL.md index 6f957755..a0e2b2e9 100644 --- a/.claude/skills/db-dump-cf/SKILL.md +++ b/.claude/skills/db-dump-cf/SKILL.md @@ -34,22 +34,25 @@ allowed-tools: ## Команда -```cmd -"\1cv8.exe" DESIGNER /F "<база>" /N"" /P"" /DumpCfg "<файл.cf>" /DisableStartupDialogs /Out "<лог>" +```powershell +powershell.exe -NoProfile -File .claude\skills\db-dump-cf\scripts\db-dump-cf.ps1 <параметры> ``` -Для серверной базы вместо `/F` используй `/S`: -```cmd -"\1cv8.exe" DESIGNER /S "/" /N"" /P"" /DumpCfg "<файл.cf>" /DisableStartupDialogs /Out "<лог>" -``` +### Параметры скрипта -### Параметры +| Параметр | Обязательный | Описание | +|----------|:------------:|----------| +| `-V8Path <путь>` | нет | Каталог bin платформы (или полный путь к 1cv8.exe) | +| `-InfoBasePath <путь>` | * | Файловая база | +| `-InfoBaseServer <сервер>` | * | Сервер 1С (для серверной базы) | +| `-InfoBaseRef <имя>` | * | Имя базы на сервере | +| `-UserName <имя>` | нет | Имя пользователя | +| `-Password <пароль>` | нет | Пароль | +| `-OutputFile <путь>` | да | Путь к выходному CF-файлу | +| `-Extension <имя>` | нет | Выгрузить расширение | +| `-AllExtensions` | нет | Выгрузить все расширения | -| Параметр | Описание | -|----------|----------| -| `/DumpCfg <файл>` | Путь к выходному CF-файлу | -| `-Extension <имя>` | Выгрузить расширение (вместо основной конфигурации) | -| `-AllExtensions` | Выгрузить все расширения (архив расширений) | +> `*` — нужен либо `-InfoBasePath`, либо пара `-InfoBaseServer` + `-InfoBaseRef` ## Коды возврата @@ -62,10 +65,15 @@ allowed-tools: Прочитай лог-файл и покажи результат. Если есть ошибки — покажи содержимое лога. -## Пример +## Примеры ```powershell -$v8 = Get-ChildItem "C:\Program Files\1cv8\*\bin\1cv8.exe" | Sort-Object -Descending | Select-Object -First 1 +# Выгрузка конфигурации (файловая база) +powershell.exe -NoProfile -File .claude\skills\db-dump-cf\scripts\db-dump-cf.ps1 -InfoBasePath "C:\Bases\MyDB" -UserName "Admin" -OutputFile "C:\backup\config.cf" -& $v8.FullName DESIGNER /F "C:\Bases\MyDB" /N"Admin" /P"" /DumpCfg "C:\backup\config.cf" /DisableStartupDialogs /Out "dump.log" +# Серверная база +powershell.exe -NoProfile -File .claude\skills\db-dump-cf\scripts\db-dump-cf.ps1 -InfoBaseServer "srv01" -InfoBaseRef "MyApp_Dev" -UserName "Admin" -Password "secret" -OutputFile "config.cf" + +# Выгрузка расширения +powershell.exe -NoProfile -File .claude\skills\db-dump-cf\scripts\db-dump-cf.ps1 -InfoBasePath "C:\Bases\MyDB" -UserName "Admin" -OutputFile "ext.cfe" -Extension "МоёРасширение" ``` diff --git a/.claude/skills/db-dump-cf/scripts/db-dump-cf.ps1 b/.claude/skills/db-dump-cf/scripts/db-dump-cf.ps1 new file mode 100644 index 00000000..45f3090c --- /dev/null +++ b/.claude/skills/db-dump-cf/scripts/db-dump-cf.ps1 @@ -0,0 +1,166 @@ +# db-dump-cf v1.0 — Dump 1C configuration to CF file +# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills +<# +.SYNOPSIS + Выгрузка конфигурации 1С в CF-файл + +.DESCRIPTION + Выгружает конфигурацию информационной базы в бинарный CF-файл. + Поддерживает выгрузку расширений. + +.PARAMETER V8Path + Путь к каталогу bin платформы или к 1cv8.exe + +.PARAMETER InfoBasePath + Путь к файловой информационной базе + +.PARAMETER InfoBaseServer + Сервер 1С (для серверной базы) + +.PARAMETER InfoBaseRef + Имя базы на сервере + +.PARAMETER UserName + Имя пользователя 1С + +.PARAMETER Password + Пароль пользователя + +.PARAMETER OutputFile + Путь к выходному CF-файлу + +.PARAMETER Extension + Имя расширения для выгрузки + +.PARAMETER AllExtensions + Выгрузить все расширения + +.EXAMPLE + .\db-dump-cf.ps1 -InfoBasePath "C:\Bases\MyDB" -OutputFile "config.cf" + +.EXAMPLE + .\db-dump-cf.ps1 -InfoBasePath "C:\Bases\MyDB" -OutputFile "ext.cfe" -Extension "МоёРасширение" +#> + +[CmdletBinding()] +param( + [Parameter(Mandatory=$false)] + [string]$V8Path, + + [Parameter(Mandatory=$false)] + [string]$InfoBasePath, + + [Parameter(Mandatory=$false)] + [string]$InfoBaseServer, + + [Parameter(Mandatory=$false)] + [string]$InfoBaseRef, + + [Parameter(Mandatory=$false)] + [string]$UserName, + + [Parameter(Mandatory=$false)] + [string]$Password, + + [Parameter(Mandatory=$true)] + [string]$OutputFile, + + [Parameter(Mandatory=$false)] + [string]$Extension, + + [Parameter(Mandatory=$false)] + [switch]$AllExtensions +) + +$OutputEncoding = [System.Text.Encoding]::UTF8 +[Console]::OutputEncoding = [System.Text.Encoding]::UTF8 + +# --- Resolve V8Path --- +if (-not $V8Path) { + $found = Get-ChildItem "C:\Program Files\1cv8\*\bin\1cv8.exe" -ErrorAction SilentlyContinue | Sort-Object FullName -Descending | Select-Object -First 1 + if ($found) { + $V8Path = $found.FullName + } else { + Write-Host "Error: 1cv8.exe not found. Specify -V8Path" -ForegroundColor Red + exit 1 + } +} elseif (Test-Path $V8Path -PathType Container) { + $V8Path = Join-Path $V8Path "1cv8.exe" +} + +if (-not (Test-Path $V8Path)) { + Write-Host "Error: 1cv8.exe not found at $V8Path" -ForegroundColor Red + exit 1 +} + +# --- Validate connection --- +if (-not $InfoBasePath -and (-not $InfoBaseServer -or -not $InfoBaseRef)) { + Write-Host "Error: specify -InfoBasePath or -InfoBaseServer + -InfoBaseRef" -ForegroundColor Red + exit 1 +} + +# --- Ensure output directory exists --- +$outDir = Split-Path $OutputFile -Parent +if ($outDir -and -not (Test-Path $outDir)) { + New-Item -ItemType Directory -Path $outDir -Force | Out-Null +} + +# --- Temp dir --- +$tempDir = Join-Path $env:TEMP "db_dump_cf_$(Get-Random)" +New-Item -ItemType Directory -Path $tempDir -Force | Out-Null + +try { + # --- Build arguments --- + $arguments = @("DESIGNER") + + if ($InfoBaseServer -and $InfoBaseRef) { + $arguments += "/S", "`"$InfoBaseServer/$InfoBaseRef`"" + } else { + $arguments += "/F", "`"$InfoBasePath`"" + } + + if ($UserName) { $arguments += "/N`"$UserName`"" } + if ($Password) { $arguments += "/P`"$Password`"" } + + $arguments += "/DumpCfg", "`"$OutputFile`"" + + # --- Extensions --- + if ($Extension) { + $arguments += "-Extension", "`"$Extension`"" + } elseif ($AllExtensions) { + $arguments += "-AllExtensions" + } + + # --- Output --- + $outFile = Join-Path $tempDir "dump_cf_log.txt" + $arguments += "/Out", "`"$outFile`"" + $arguments += "/DisableStartupDialogs" + + # --- Execute --- + Write-Host "Running: 1cv8.exe $($arguments -join ' ')" + $process = Start-Process -FilePath $V8Path -ArgumentList $arguments -NoNewWindow -Wait -PassThru + $exitCode = $process.ExitCode + + # --- Result --- + if ($exitCode -eq 0) { + Write-Host "Configuration dumped successfully to: $OutputFile" -ForegroundColor Green + } else { + Write-Host "Error dumping configuration (code: $exitCode)" -ForegroundColor Red + } + + if (Test-Path $outFile) { + $logContent = Get-Content $outFile -Raw -ErrorAction SilentlyContinue + if ($logContent) { + Write-Host "--- Log ---" + Write-Host $logContent + Write-Host "--- End ---" + } + } + + exit $exitCode + +} finally { + if (Test-Path $tempDir) { + Remove-Item -Path $tempDir -Recurse -Force -ErrorAction SilentlyContinue + } +} diff --git a/.claude/skills/db-load-cf/SKILL.md b/.claude/skills/db-load-cf/SKILL.md index fc348054..c9cd9ef6 100644 --- a/.claude/skills/db-load-cf/SKILL.md +++ b/.claude/skills/db-load-cf/SKILL.md @@ -35,22 +35,25 @@ allowed-tools: ## Команда -```cmd -"\1cv8.exe" DESIGNER /F "<база>" /N"" /P"" /LoadCfg "<файл.cf>" /DisableStartupDialogs /Out "<лог>" +```powershell +powershell.exe -NoProfile -File .claude\skills\db-load-cf\scripts\db-load-cf.ps1 <параметры> ``` -Для серверной базы вместо `/F` используй `/S`: -```cmd -"\1cv8.exe" DESIGNER /S "/" /N"" /P"" /LoadCfg "<файл.cf>" /DisableStartupDialogs /Out "<лог>" -``` +### Параметры скрипта -### Параметры +| Параметр | Обязательный | Описание | +|----------|:------------:|----------| +| `-V8Path <путь>` | нет | Каталог bin платформы (или полный путь к 1cv8.exe) | +| `-InfoBasePath <путь>` | * | Файловая база | +| `-InfoBaseServer <сервер>` | * | Сервер 1С (для серверной базы) | +| `-InfoBaseRef <имя>` | * | Имя базы на сервере | +| `-UserName <имя>` | нет | Имя пользователя | +| `-Password <пароль>` | нет | Пароль | +| `-InputFile <путь>` | да | Путь к CF-файлу | +| `-Extension <имя>` | нет | Загрузить как расширение | +| `-AllExtensions` | нет | Загрузить все расширения из архива | -| Параметр | Описание | -|----------|----------| -| `/LoadCfg <файл>` | Путь к CF-файлу | -| `-Extension <имя>` | Загрузить как расширение | -| `-AllExtensions` | Загрузить все расширения из архива | +> `*` — нужен либо `-InfoBasePath`, либо пара `-InfoBaseServer` + `-InfoBaseRef` ## Коды возврата @@ -67,14 +70,12 @@ allowed-tools: ## Примеры ```powershell -$v8 = Get-ChildItem "C:\Program Files\1cv8\*\bin\1cv8.exe" | Sort-Object -Descending | Select-Object -First 1 - # Файловая база -& $v8.FullName DESIGNER /F "C:\Bases\MyDB" /N"Admin" /LoadCfg "C:\backup\config.cf" /DisableStartupDialogs /Out "load.log" +powershell.exe -NoProfile -File .claude\skills\db-load-cf\scripts\db-load-cf.ps1 -InfoBasePath "C:\Bases\MyDB" -UserName "Admin" -InputFile "C:\backup\config.cf" # Серверная база -& $v8.FullName DESIGNER /S "srv01/MyApp_Test" /N"Admin" /P"secret" /LoadCfg "config.cf" /DisableStartupDialogs /Out "load.log" +powershell.exe -NoProfile -File .claude\skills\db-load-cf\scripts\db-load-cf.ps1 -InfoBaseServer "srv01" -InfoBaseRef "MyApp_Test" -UserName "Admin" -Password "secret" -InputFile "config.cf" -# Не забудь обновить БД после загрузки! -& $v8.FullName DESIGNER /F "C:\Bases\MyDB" /N"Admin" /UpdateDBCfg /DisableStartupDialogs /Out "update.log" +# Загрузка расширения +powershell.exe -NoProfile -File .claude\skills\db-load-cf\scripts\db-load-cf.ps1 -InfoBasePath "C:\Bases\MyDB" -UserName "Admin" -InputFile "ext.cfe" -Extension "МоёРасширение" ``` diff --git a/.claude/skills/db-load-cf/scripts/db-load-cf.ps1 b/.claude/skills/db-load-cf/scripts/db-load-cf.ps1 new file mode 100644 index 00000000..af516923 --- /dev/null +++ b/.claude/skills/db-load-cf/scripts/db-load-cf.ps1 @@ -0,0 +1,166 @@ +# db-load-cf v1.0 — Load 1C configuration from CF file +# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills +<# +.SYNOPSIS + Загрузка конфигурации 1С из CF-файла + +.DESCRIPTION + Загружает конфигурацию из бинарного CF-файла в информационную базу. + Поддерживает загрузку расширений. + +.PARAMETER V8Path + Путь к каталогу bin платформы или к 1cv8.exe + +.PARAMETER InfoBasePath + Путь к файловой информационной базе + +.PARAMETER InfoBaseServer + Сервер 1С (для серверной базы) + +.PARAMETER InfoBaseRef + Имя базы на сервере + +.PARAMETER UserName + Имя пользователя 1С + +.PARAMETER Password + Пароль пользователя + +.PARAMETER InputFile + Путь к CF-файлу для загрузки + +.PARAMETER Extension + Загрузить как расширение + +.PARAMETER AllExtensions + Загрузить все расширения из архива + +.EXAMPLE + .\db-load-cf.ps1 -InfoBasePath "C:\Bases\MyDB" -InputFile "config.cf" + +.EXAMPLE + .\db-load-cf.ps1 -InfoBasePath "C:\Bases\MyDB" -InputFile "ext.cfe" -Extension "МоёРасширение" +#> + +[CmdletBinding()] +param( + [Parameter(Mandatory=$false)] + [string]$V8Path, + + [Parameter(Mandatory=$false)] + [string]$InfoBasePath, + + [Parameter(Mandatory=$false)] + [string]$InfoBaseServer, + + [Parameter(Mandatory=$false)] + [string]$InfoBaseRef, + + [Parameter(Mandatory=$false)] + [string]$UserName, + + [Parameter(Mandatory=$false)] + [string]$Password, + + [Parameter(Mandatory=$true)] + [string]$InputFile, + + [Parameter(Mandatory=$false)] + [string]$Extension, + + [Parameter(Mandatory=$false)] + [switch]$AllExtensions +) + +$OutputEncoding = [System.Text.Encoding]::UTF8 +[Console]::OutputEncoding = [System.Text.Encoding]::UTF8 + +# --- Resolve V8Path --- +if (-not $V8Path) { + $found = Get-ChildItem "C:\Program Files\1cv8\*\bin\1cv8.exe" -ErrorAction SilentlyContinue | Sort-Object FullName -Descending | Select-Object -First 1 + if ($found) { + $V8Path = $found.FullName + } else { + Write-Host "Error: 1cv8.exe not found. Specify -V8Path" -ForegroundColor Red + exit 1 + } +} elseif (Test-Path $V8Path -PathType Container) { + $V8Path = Join-Path $V8Path "1cv8.exe" +} + +if (-not (Test-Path $V8Path)) { + Write-Host "Error: 1cv8.exe not found at $V8Path" -ForegroundColor Red + exit 1 +} + +# --- Validate connection --- +if (-not $InfoBasePath -and (-not $InfoBaseServer -or -not $InfoBaseRef)) { + Write-Host "Error: specify -InfoBasePath or -InfoBaseServer + -InfoBaseRef" -ForegroundColor Red + exit 1 +} + +# --- Validate input file --- +if (-not (Test-Path $InputFile)) { + Write-Host "Error: input file not found: $InputFile" -ForegroundColor Red + exit 1 +} + +# --- Temp dir --- +$tempDir = Join-Path $env:TEMP "db_load_cf_$(Get-Random)" +New-Item -ItemType Directory -Path $tempDir -Force | Out-Null + +try { + # --- Build arguments --- + $arguments = @("DESIGNER") + + if ($InfoBaseServer -and $InfoBaseRef) { + $arguments += "/S", "`"$InfoBaseServer/$InfoBaseRef`"" + } else { + $arguments += "/F", "`"$InfoBasePath`"" + } + + if ($UserName) { $arguments += "/N`"$UserName`"" } + if ($Password) { $arguments += "/P`"$Password`"" } + + $arguments += "/LoadCfg", "`"$InputFile`"" + + # --- Extensions --- + if ($Extension) { + $arguments += "-Extension", "`"$Extension`"" + } elseif ($AllExtensions) { + $arguments += "-AllExtensions" + } + + # --- Output --- + $outFile = Join-Path $tempDir "load_cf_log.txt" + $arguments += "/Out", "`"$outFile`"" + $arguments += "/DisableStartupDialogs" + + # --- Execute --- + Write-Host "Running: 1cv8.exe $($arguments -join ' ')" + $process = Start-Process -FilePath $V8Path -ArgumentList $arguments -NoNewWindow -Wait -PassThru + $exitCode = $process.ExitCode + + # --- Result --- + if ($exitCode -eq 0) { + Write-Host "Configuration loaded successfully from: $InputFile" -ForegroundColor Green + } else { + Write-Host "Error loading configuration (code: $exitCode)" -ForegroundColor Red + } + + if (Test-Path $outFile) { + $logContent = Get-Content $outFile -Raw -ErrorAction SilentlyContinue + if ($logContent) { + Write-Host "--- Log ---" + Write-Host $logContent + Write-Host "--- End ---" + } + } + + exit $exitCode + +} finally { + if (Test-Path $tempDir) { + Remove-Item -Path $tempDir -Recurse -Force -ErrorAction SilentlyContinue + } +} diff --git a/.claude/skills/db-run/SKILL.md b/.claude/skills/db-run/SKILL.md index 5deb90d4..463f6eaf 100644 --- a/.claude/skills/db-run/SKILL.md +++ b/.claude/skills/db-run/SKILL.md @@ -35,49 +35,42 @@ allowed-tools: ## Команда -```cmd -"\1cv8.exe" ENTERPRISE /F "<база>" /N"" /P"" /DisableStartupDialogs +```powershell +powershell.exe -NoProfile -File .claude\skills\db-run\scripts\db-run.ps1 <параметры> ``` -Для серверной базы вместо `/F` используй `/S`: -```cmd -"\1cv8.exe" ENTERPRISE /S "/" /N"" /P"" /DisableStartupDialogs -``` +### Параметры скрипта -### Параметры +| Параметр | Обязательный | Описание | +|----------|:------------:|----------| +| `-V8Path <путь>` | нет | Каталог bin платформы (или полный путь к 1cv8.exe) | +| `-InfoBasePath <путь>` | * | Файловая база | +| `-InfoBaseServer <сервер>` | * | Сервер 1С (для серверной базы) | +| `-InfoBaseRef <имя>` | * | Имя базы на сервере | +| `-UserName <имя>` | нет | Имя пользователя | +| `-Password <пароль>` | нет | Пароль | +| `-Execute <файл.epf>` | нет | Запуск внешней обработки сразу после старта | +| `-CParam <строка>` | нет | Параметр запуска (/C) | +| `-URL <ссылка>` | нет | Навигационная ссылка (формат `e1cib/...`) | -| Параметр | Описание | -|----------|----------| -| `/Execute <файл.epf>` | Запуск внешней обработки сразу после старта | -| `/C <строка>` | Передача параметра в прикладное решение | -| `/URL <ссылка>` | Навигационная ссылка (формат `e1cib/...`) | - -> При указании `/Execute` параметр `/URL` игнорируется. +> `*` — нужен либо `-InfoBasePath`, либо пара `-InfoBaseServer` + `-InfoBaseRef` ## Важно -**Запуск в фоне** — не жди завершения процесса 1С. Используй `Start-Process` без `-Wait`: - -```powershell -Start-Process -FilePath "\1cv8.exe" -ArgumentList 'ENTERPRISE /F "<база>" /N"" /P"" /DisableStartupDialogs' -``` - -Или через Bash: -```bash -"/1cv8.exe" ENTERPRISE /F "<база>" /N"" /P"" /DisableStartupDialogs & -``` +Скрипт запускает 1С в фоне (`Start-Process` без `-Wait`) — управление возвращается сразу. ## Примеры ```powershell -$v8 = Get-ChildItem "C:\Program Files\1cv8\*\bin\1cv8.exe" | Sort-Object -Descending | Select-Object -First 1 - # Простой запуск -Start-Process -FilePath $v8.FullName -ArgumentList 'ENTERPRISE /F "C:\Bases\MyDB" /N"Admin" /P"" /DisableStartupDialogs' +powershell.exe -NoProfile -File .claude\skills\db-run\scripts\db-run.ps1 -InfoBasePath "C:\Bases\MyDB" -UserName "Admin" # Запуск с обработкой -Start-Process -FilePath $v8.FullName -ArgumentList 'ENTERPRISE /F "C:\Bases\MyDB" /N"Admin" /P"" /Execute "C:\epf\МояОбработка.epf" /DisableStartupDialogs' +powershell.exe -NoProfile -File .claude\skills\db-run\scripts\db-run.ps1 -InfoBasePath "C:\Bases\MyDB" -UserName "Admin" -Execute "C:\epf\МояОбработка.epf" # Открыть по навигационной ссылке -Start-Process -FilePath $v8.FullName -ArgumentList 'ENTERPRISE /F "C:\Bases\MyDB" /N"Admin" /P"" /URL "e1cib/data/Справочник.Номенклатура" /DisableStartupDialogs' +powershell.exe -NoProfile -File .claude\skills\db-run\scripts\db-run.ps1 -InfoBasePath "C:\Bases\MyDB" -UserName "Admin" -URL "e1cib/data/Справочник.Номенклатура" + +# Серверная база с параметром запуска +powershell.exe -NoProfile -File .claude\skills\db-run\scripts\db-run.ps1 -InfoBaseServer "srv01" -InfoBaseRef "MyDB" -UserName "Admin" -Password "secret" -CParam "ЗапуститьОбновление" ``` diff --git a/.claude/skills/db-run/scripts/db-run.ps1 b/.claude/skills/db-run/scripts/db-run.ps1 new file mode 100644 index 00000000..ba6aa70d --- /dev/null +++ b/.claude/skills/db-run/scripts/db-run.ps1 @@ -0,0 +1,133 @@ +# db-run v1.0 — Launch 1C:Enterprise +# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills +<# +.SYNOPSIS + Запуск 1С:Предприятие + +.DESCRIPTION + Запускает информационную базу в режиме 1С:Предприятие (пользовательский режим). + Запуск в фоне — не ждёт завершения процесса. + +.PARAMETER V8Path + Путь к каталогу bin платформы или к 1cv8.exe + +.PARAMETER InfoBasePath + Путь к файловой информационной базе + +.PARAMETER InfoBaseServer + Сервер 1С (для серверной базы) + +.PARAMETER InfoBaseRef + Имя базы на сервере + +.PARAMETER UserName + Имя пользователя 1С + +.PARAMETER Password + Пароль пользователя + +.PARAMETER Execute + Путь к внешней обработке для запуска + +.PARAMETER CParam + Параметр запуска (/C) + +.PARAMETER URL + Навигационная ссылка (e1cib/...) + +.EXAMPLE + .\db-run.ps1 -InfoBasePath "C:\Bases\MyDB" + +.EXAMPLE + .\db-run.ps1 -InfoBasePath "C:\Bases\MyDB" -Execute "C:\epf\МояОбработка.epf" + +.EXAMPLE + .\db-run.ps1 -InfoBasePath "C:\Bases\MyDB" -CParam "ЗапуститьОбновление" +#> + +[CmdletBinding()] +param( + [Parameter(Mandatory=$false)] + [string]$V8Path, + + [Parameter(Mandatory=$false)] + [string]$InfoBasePath, + + [Parameter(Mandatory=$false)] + [string]$InfoBaseServer, + + [Parameter(Mandatory=$false)] + [string]$InfoBaseRef, + + [Parameter(Mandatory=$false)] + [string]$UserName, + + [Parameter(Mandatory=$false)] + [string]$Password, + + [Parameter(Mandatory=$false)] + [string]$Execute, + + [Parameter(Mandatory=$false)] + [string]$CParam, + + [Parameter(Mandatory=$false)] + [string]$URL +) + +$OutputEncoding = [System.Text.Encoding]::UTF8 +[Console]::OutputEncoding = [System.Text.Encoding]::UTF8 + +# --- Resolve V8Path --- +if (-not $V8Path) { + $found = Get-ChildItem "C:\Program Files\1cv8\*\bin\1cv8.exe" -ErrorAction SilentlyContinue | Sort-Object FullName -Descending | Select-Object -First 1 + if ($found) { + $V8Path = $found.FullName + } else { + Write-Host "Error: 1cv8.exe not found. Specify -V8Path" -ForegroundColor Red + exit 1 + } +} elseif (Test-Path $V8Path -PathType Container) { + $V8Path = Join-Path $V8Path "1cv8.exe" +} + +if (-not (Test-Path $V8Path)) { + Write-Host "Error: 1cv8.exe not found at $V8Path" -ForegroundColor Red + exit 1 +} + +# --- Validate connection --- +if (-not $InfoBasePath -and (-not $InfoBaseServer -or -not $InfoBaseRef)) { + Write-Host "Error: specify -InfoBasePath or -InfoBaseServer + -InfoBaseRef" -ForegroundColor Red + exit 1 +} + +# --- Build arguments --- +$arguments = @("ENTERPRISE") + +if ($InfoBaseServer -and $InfoBaseRef) { + $arguments += "/S", "`"$InfoBaseServer/$InfoBaseRef`"" +} else { + $arguments += "/F", "`"$InfoBasePath`"" +} + +if ($UserName) { $arguments += "/N`"$UserName`"" } +if ($Password) { $arguments += "/P`"$Password`"" } + +# --- Optional params --- +if ($Execute) { + $arguments += "/Execute", "`"$Execute`"" +} +if ($CParam) { + $arguments += "/C", "`"$CParam`"" +} +if ($URL) { + $arguments += "/URL", "`"$URL`"" +} + +$arguments += "/DisableStartupDialogs" + +# --- Execute (background, no wait) --- +Write-Host "Running: 1cv8.exe $($arguments -join ' ')" +Start-Process -FilePath $V8Path -ArgumentList $arguments +Write-Host "1C:Enterprise launched" -ForegroundColor Green diff --git a/.claude/skills/db-update/SKILL.md b/.claude/skills/db-update/SKILL.md index eae5797f..0240a771 100644 --- a/.claude/skills/db-update/SKILL.md +++ b/.claude/skills/db-update/SKILL.md @@ -34,26 +34,27 @@ allowed-tools: ## Команда -```cmd -"\1cv8.exe" DESIGNER /F "<база>" /N"" /P"" /UpdateDBCfg /DisableStartupDialogs /Out "<лог>" +```powershell +powershell.exe -NoProfile -File .claude\skills\db-update\scripts\db-update.ps1 <параметры> ``` -Для серверной базы вместо `/F` используй `/S`: -```cmd -"\1cv8.exe" DESIGNER /S "/" /N"" /P"" /UpdateDBCfg /DisableStartupDialogs /Out "<лог>" -``` +### Параметры скрипта -### Параметры +| Параметр | Обязательный | Описание | +|----------|:------------:|----------| +| `-V8Path <путь>` | нет | Каталог bin платформы (или полный путь к 1cv8.exe) | +| `-InfoBasePath <путь>` | * | Файловая база | +| `-InfoBaseServer <сервер>` | * | Сервер 1С (для серверной базы) | +| `-InfoBaseRef <имя>` | * | Имя базы на сервере | +| `-UserName <имя>` | нет | Имя пользователя | +| `-Password <пароль>` | нет | Пароль | +| `-Extension <имя>` | нет | Обновить расширение | +| `-AllExtensions` | нет | Обновить все расширения | +| `-Dynamic <+/->` | нет | `+` — динамическое обновление, `-` — отключить | +| `-Server` | нет | Обновление на стороне сервера | +| `-WarningsAsErrors` | нет | Предупреждения считать ошибками | -| Параметр | Описание | -|----------|----------| -| `/UpdateDBCfg` | Обновить конфигурацию БД | -| `-Dynamic+` | Динамическое обновление (без монопольного доступа) | -| `-Dynamic-` | Отключить динамическое обновление | -| `-Server` | Обновление на стороне сервера | -| `-WarningsAsErrors` | Предупреждения считать ошибками | -| `-Extension <имя>` | Обновить расширение | -| `-AllExtensions` | Обновить все расширения | +> `*` — нужен либо `-InfoBasePath`, либо пара `-InfoBaseServer` + `-InfoBaseRef` ### Фоновое обновление (серверная база) @@ -78,14 +79,15 @@ allowed-tools: - Для серверных баз рекомендуется `-Dynamic+` для обновления без остановки - Если структура данных существенно изменилась (удаление реквизитов, изменение типов) — динамическое обновление может быть невозможно -## Пример +## Примеры ```powershell -$v8 = Get-ChildItem "C:\Program Files\1cv8\*\bin\1cv8.exe" | Sort-Object -Descending | Select-Object -First 1 +# Обычное обновление (файловая база) +powershell.exe -NoProfile -File .claude\skills\db-update\scripts\db-update.ps1 -InfoBasePath "C:\Bases\MyDB" -UserName "Admin" -# Обычное обновление -& $v8.FullName DESIGNER /F "C:\Bases\MyDB" /N"Admin" /P"" /UpdateDBCfg /DisableStartupDialogs /Out "update.log" +# Динамическое обновление (серверная база) +powershell.exe -NoProfile -File .claude\skills\db-update\scripts\db-update.ps1 -InfoBaseServer "srv01" -InfoBaseRef "MyDB" -UserName "Admin" -Password "secret" -Dynamic "+" -# Динамическое обновление -& $v8.FullName DESIGNER /S "srv01/MyDB" /N"Admin" /P"secret" /UpdateDBCfg -Dynamic+ /DisableStartupDialogs /Out "update.log" +# Обновление расширения +powershell.exe -NoProfile -File .claude\skills\db-update\scripts\db-update.ps1 -InfoBasePath "C:\Bases\MyDB" -UserName "Admin" -Extension "МоёРасширение" ``` diff --git a/.claude/skills/db-update/scripts/db-update.ps1 b/.claude/skills/db-update/scripts/db-update.ps1 new file mode 100644 index 00000000..fb83b73f --- /dev/null +++ b/.claude/skills/db-update/scripts/db-update.ps1 @@ -0,0 +1,184 @@ +# db-update v1.0 — Update 1C database configuration +# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills +<# +.SYNOPSIS + Обновление конфигурации базы данных 1С + +.DESCRIPTION + Применяет изменения основной конфигурации к конфигурации базы данных. + Поддерживает динамическое обновление, обновление расширений. + +.PARAMETER V8Path + Путь к каталогу bin платформы или к 1cv8.exe + +.PARAMETER InfoBasePath + Путь к файловой информационной базе + +.PARAMETER InfoBaseServer + Сервер 1С (для серверной базы) + +.PARAMETER InfoBaseRef + Имя базы на сервере + +.PARAMETER UserName + Имя пользователя 1С + +.PARAMETER Password + Пароль пользователя + +.PARAMETER Extension + Имя расширения для обновления + +.PARAMETER AllExtensions + Обновить все расширения + +.PARAMETER Dynamic + Динамическое обновление: "+" включить, "-" отключить + +.PARAMETER Server + Обновление на стороне сервера + +.PARAMETER WarningsAsErrors + Предупреждения считать ошибками + +.EXAMPLE + .\db-update.ps1 -InfoBasePath "C:\Bases\MyDB" + +.EXAMPLE + .\db-update.ps1 -InfoBasePath "C:\Bases\MyDB" -Dynamic "+" -Extension "МоёРасширение" +#> + +[CmdletBinding()] +param( + [Parameter(Mandatory=$false)] + [string]$V8Path, + + [Parameter(Mandatory=$false)] + [string]$InfoBasePath, + + [Parameter(Mandatory=$false)] + [string]$InfoBaseServer, + + [Parameter(Mandatory=$false)] + [string]$InfoBaseRef, + + [Parameter(Mandatory=$false)] + [string]$UserName, + + [Parameter(Mandatory=$false)] + [string]$Password, + + [Parameter(Mandatory=$false)] + [string]$Extension, + + [Parameter(Mandatory=$false)] + [switch]$AllExtensions, + + [Parameter(Mandatory=$false)] + [ValidateSet("+", "-")] + [string]$Dynamic, + + [Parameter(Mandatory=$false)] + [switch]$Server, + + [Parameter(Mandatory=$false)] + [switch]$WarningsAsErrors +) + +$OutputEncoding = [System.Text.Encoding]::UTF8 +[Console]::OutputEncoding = [System.Text.Encoding]::UTF8 + +# --- Resolve V8Path --- +if (-not $V8Path) { + $found = Get-ChildItem "C:\Program Files\1cv8\*\bin\1cv8.exe" -ErrorAction SilentlyContinue | Sort-Object FullName -Descending | Select-Object -First 1 + if ($found) { + $V8Path = $found.FullName + } else { + Write-Host "Error: 1cv8.exe not found. Specify -V8Path" -ForegroundColor Red + exit 1 + } +} elseif (Test-Path $V8Path -PathType Container) { + $V8Path = Join-Path $V8Path "1cv8.exe" +} + +if (-not (Test-Path $V8Path)) { + Write-Host "Error: 1cv8.exe not found at $V8Path" -ForegroundColor Red + exit 1 +} + +# --- Validate connection --- +if (-not $InfoBasePath -and (-not $InfoBaseServer -or -not $InfoBaseRef)) { + Write-Host "Error: specify -InfoBasePath or -InfoBaseServer + -InfoBaseRef" -ForegroundColor Red + exit 1 +} + +# --- Temp dir --- +$tempDir = Join-Path $env:TEMP "db_update_$(Get-Random)" +New-Item -ItemType Directory -Path $tempDir -Force | Out-Null + +try { + # --- Build arguments --- + $arguments = @("DESIGNER") + + if ($InfoBaseServer -and $InfoBaseRef) { + $arguments += "/S", "`"$InfoBaseServer/$InfoBaseRef`"" + } else { + $arguments += "/F", "`"$InfoBasePath`"" + } + + if ($UserName) { $arguments += "/N`"$UserName`"" } + if ($Password) { $arguments += "/P`"$Password`"" } + + $arguments += "/UpdateDBCfg" + + # --- Options --- + if ($Dynamic) { + $arguments += "-Dynamic$Dynamic" + } + if ($Server) { + $arguments += "-Server" + } + if ($WarningsAsErrors) { + $arguments += "-WarningsAsErrors" + } + + # --- Extensions --- + if ($Extension) { + $arguments += "-Extension", "`"$Extension`"" + } elseif ($AllExtensions) { + $arguments += "-AllExtensions" + } + + # --- Output --- + $outFile = Join-Path $tempDir "update_log.txt" + $arguments += "/Out", "`"$outFile`"" + $arguments += "/DisableStartupDialogs" + + # --- Execute --- + Write-Host "Running: 1cv8.exe $($arguments -join ' ')" + $process = Start-Process -FilePath $V8Path -ArgumentList $arguments -NoNewWindow -Wait -PassThru + $exitCode = $process.ExitCode + + # --- Result --- + if ($exitCode -eq 0) { + Write-Host "Database configuration updated successfully" -ForegroundColor Green + } else { + Write-Host "Error updating database configuration (code: $exitCode)" -ForegroundColor Red + } + + if (Test-Path $outFile) { + $logContent = Get-Content $outFile -Raw -ErrorAction SilentlyContinue + if ($logContent) { + Write-Host "--- Log ---" + Write-Host $logContent + Write-Host "--- End ---" + } + } + + exit $exitCode + +} finally { + if (Test-Path $tempDir) { + Remove-Item -Path $tempDir -Recurse -Force -ErrorAction SilentlyContinue + } +} diff --git a/.claude/skills/epf-build/SKILL.md b/.claude/skills/epf-build/SKILL.md index fccb10ae..37d880c4 100644 --- a/.claude/skills/epf-build/SKILL.md +++ b/.claude/skills/epf-build/SKILL.md @@ -36,21 +36,26 @@ allowed-tools: Если `v8path` не задан — автоопределение: `Get-ChildItem "C:\Program Files\1cv8\*\bin\1cv8.exe" | Sort -Desc | Select -First 1` Если использованная база не зарегистрирована — после выполнения предложи добавить через `/db-list add`. -## Команды +## Команда -### 1. Создать ИБ для сборки (если нет зарегистрированной базы) - -```cmd -"\1cv8.exe" CREATEINFOBASE File="./base" +```powershell +powershell.exe -NoProfile -File .claude\skills\epf-build\scripts\epf-build.ps1 <параметры> ``` -### 2. Сборка EPF из XML +### Параметры скрипта -Файловая база: -```cmd -"\1cv8.exe" DESIGNER /F "<база>" /DisableStartupDialogs /LoadExternalDataProcessorOrReportFromFiles "\.xml" "\.epf" /Out "\build.log" -``` -Серверная база — вместо `/F` используй `/S`, добавь `/N"" /P""` при наличии учётных данных. +| Параметр | Обязательный | Описание | +|----------|:------------:|----------| +| `-V8Path <путь>` | нет | Каталог bin платформы (или полный путь к 1cv8.exe) | +| `-InfoBasePath <путь>` | * | Файловая база | +| `-InfoBaseServer <сервер>` | * | Сервер 1С (для серверной базы) | +| `-InfoBaseRef <имя>` | * | Имя базы на сервере | +| `-UserName <имя>` | нет | Имя пользователя | +| `-Password <пароль>` | нет | Пароль | +| `-SourceFile <путь>` | да | Путь к корневому XML-файлу исходников | +| `-OutputFile <путь>` | да | Путь к выходному EPF/ERF-файлу | + +> `*` — нужен либо `-InfoBasePath`, либо пара `-InfoBaseServer` + `-InfoBaseRef` ## Коды возврата @@ -63,13 +68,12 @@ allowed-tools: Если обработка использует ссылочные типы конфигурации (`CatalogRef.XXX`, `DocumentRef.XXX`) — сборка в пустой базе упадёт с ошибкой XDTO. Зарегистрируй базу с целевой конфигурацией через `/db-list add`. -## Пример полного цикла +## Примеры ```powershell -# Параметры из .v8-project.json: -$v8path = "C:\Program Files\1cv8\8.3.25.1257\bin" # v8path -$base = "C:\Bases\MyDB" # databases[].path +# Сборка обработки (файловая база) +powershell.exe -NoProfile -File .claude\skills\epf-build\scripts\epf-build.ps1 -InfoBasePath "C:\Bases\MyDB" -SourceFile "src\МояОбработка.xml" -OutputFile "build\МояОбработка.epf" -# Собрать (база с конфигурацией — ссылочные типы резолвятся) -& "$v8path\1cv8.exe" DESIGNER /F $base /DisableStartupDialogs /LoadExternalDataProcessorOrReportFromFiles "src\МояОбработка.xml" "build\МояОбработка.epf" /Out "build\build.log" -``` \ No newline at end of file +# Серверная база +powershell.exe -NoProfile -File .claude\skills\epf-build\scripts\epf-build.ps1 -InfoBaseServer "srv01" -InfoBaseRef "MyDB" -UserName "Admin" -Password "secret" -SourceFile "src\МояОбработка.xml" -OutputFile "build\МояОбработка.epf" +``` diff --git a/.claude/skills/epf-build/scripts/epf-build.ps1 b/.claude/skills/epf-build/scripts/epf-build.ps1 new file mode 100644 index 00000000..36e92486 --- /dev/null +++ b/.claude/skills/epf-build/scripts/epf-build.ps1 @@ -0,0 +1,159 @@ +# epf-build v1.0 — Build external data processor or report (EPF/ERF) from XML sources +# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills +<# +.SYNOPSIS + Сборка внешней обработки/отчёта 1С из XML-исходников + +.DESCRIPTION + Собирает EPF/ERF-файл из XML-исходников с помощью платформы 1С. + Общий скрипт для epf-build и erf-build. + +.PARAMETER V8Path + Путь к каталогу bin платформы или к 1cv8.exe + +.PARAMETER InfoBasePath + Путь к файловой информационной базе + +.PARAMETER InfoBaseServer + Сервер 1С (для серверной базы) + +.PARAMETER InfoBaseRef + Имя базы на сервере + +.PARAMETER UserName + Имя пользователя 1С + +.PARAMETER Password + Пароль пользователя + +.PARAMETER SourceFile + Путь к корневому XML-файлу исходников + +.PARAMETER OutputFile + Путь к выходному EPF/ERF-файлу + +.EXAMPLE + .\epf-build.ps1 -InfoBasePath "C:\Bases\MyDB" -SourceFile "src\МояОбработка.xml" -OutputFile "build\МояОбработка.epf" + +.EXAMPLE + .\epf-build.ps1 -InfoBasePath "C:\Bases\MyDB" -SourceFile "src\МойОтчёт.xml" -OutputFile "build\МойОтчёт.erf" +#> + +[CmdletBinding()] +param( + [Parameter(Mandatory=$false)] + [string]$V8Path, + + [Parameter(Mandatory=$false)] + [string]$InfoBasePath, + + [Parameter(Mandatory=$false)] + [string]$InfoBaseServer, + + [Parameter(Mandatory=$false)] + [string]$InfoBaseRef, + + [Parameter(Mandatory=$false)] + [string]$UserName, + + [Parameter(Mandatory=$false)] + [string]$Password, + + [Parameter(Mandatory=$true)] + [string]$SourceFile, + + [Parameter(Mandatory=$true)] + [string]$OutputFile +) + +$OutputEncoding = [System.Text.Encoding]::UTF8 +[Console]::OutputEncoding = [System.Text.Encoding]::UTF8 + +# --- Resolve V8Path --- +if (-not $V8Path) { + $found = Get-ChildItem "C:\Program Files\1cv8\*\bin\1cv8.exe" -ErrorAction SilentlyContinue | Sort-Object FullName -Descending | Select-Object -First 1 + if ($found) { + $V8Path = $found.FullName + } else { + Write-Host "Error: 1cv8.exe not found. Specify -V8Path" -ForegroundColor Red + exit 1 + } +} elseif (Test-Path $V8Path -PathType Container) { + $V8Path = Join-Path $V8Path "1cv8.exe" +} + +if (-not (Test-Path $V8Path)) { + Write-Host "Error: 1cv8.exe not found at $V8Path" -ForegroundColor Red + exit 1 +} + +# --- Validate connection --- +if (-not $InfoBasePath -and (-not $InfoBaseServer -or -not $InfoBaseRef)) { + Write-Host "Error: specify -InfoBasePath or -InfoBaseServer + -InfoBaseRef" -ForegroundColor Red + exit 1 +} + +# --- Validate source file --- +if (-not (Test-Path $SourceFile)) { + Write-Host "Error: source file not found: $SourceFile" -ForegroundColor Red + exit 1 +} + +# --- Ensure output directory exists --- +$outDir = Split-Path $OutputFile -Parent +if ($outDir -and -not (Test-Path $outDir)) { + New-Item -ItemType Directory -Path $outDir -Force | Out-Null +} + +# --- Temp dir --- +$tempDir = Join-Path $env:TEMP "epf_build_$(Get-Random)" +New-Item -ItemType Directory -Path $tempDir -Force | Out-Null + +try { + # --- Build arguments --- + $arguments = @("DESIGNER") + + if ($InfoBaseServer -and $InfoBaseRef) { + $arguments += "/S", "`"$InfoBaseServer/$InfoBaseRef`"" + } else { + $arguments += "/F", "`"$InfoBasePath`"" + } + + if ($UserName) { $arguments += "/N`"$UserName`"" } + if ($Password) { $arguments += "/P`"$Password`"" } + + $arguments += "/LoadExternalDataProcessorOrReportFromFiles", "`"$SourceFile`"", "`"$OutputFile`"" + + # --- Output --- + $outFile = Join-Path $tempDir "build_log.txt" + $arguments += "/Out", "`"$outFile`"" + $arguments += "/DisableStartupDialogs" + + # --- Execute --- + Write-Host "Running: 1cv8.exe $($arguments -join ' ')" + $process = Start-Process -FilePath $V8Path -ArgumentList $arguments -NoNewWindow -Wait -PassThru + $exitCode = $process.ExitCode + + # --- Result --- + if ($exitCode -eq 0) { + Write-Host "Build completed successfully: $OutputFile" -ForegroundColor Green + } else { + Write-Host "Error building (code: $exitCode)" -ForegroundColor Red + } + + if (Test-Path $outFile) { + $logContent = Get-Content $outFile -Raw -ErrorAction SilentlyContinue + if ($logContent) { + Write-Host "--- Log ---" + Write-Host $logContent + Write-Host "--- End ---" + } + } + + exit $exitCode + +} finally { + if (Test-Path $tempDir) { + Remove-Item -Path $tempDir -Recurse -Force -ErrorAction SilentlyContinue + } +} diff --git a/.claude/skills/epf-dump/SKILL.md b/.claude/skills/epf-dump/SKILL.md index 6844cb70..2f049aea 100644 --- a/.claude/skills/epf-dump/SKILL.md +++ b/.claude/skills/epf-dump/SKILL.md @@ -35,21 +35,27 @@ allowed-tools: Если `v8path` не задан — автоопределение: `Get-ChildItem "C:\Program Files\1cv8\*\bin\1cv8.exe" | Sort -Desc | Select -First 1` Если использованная база не зарегистрирована — после выполнения предложи добавить через `/db-list add`. -## Команды +## Команда -### 1. Создать ИБ (если нет зарегистрированной базы) - -```cmd -"\1cv8.exe" CREATEINFOBASE File="./base" +```powershell +powershell.exe -NoProfile -File .claude\skills\epf-dump\scripts\epf-dump.ps1 <параметры> ``` -### 2. Разборка EPF в XML +### Параметры скрипта -Файловая база: -```cmd -"\1cv8.exe" DESIGNER /F "<база>" /DisableStartupDialogs /DumpExternalDataProcessorOrReportToFiles "" "" -Format Hierarchical /Out "\dump.log" -``` -Серверная база — вместо `/F` используй `/S`, добавь `/N"" /P""` при наличии учётных данных. +| Параметр | Обязательный | Описание | +|----------|:------------:|----------| +| `-V8Path <путь>` | нет | Каталог bin платформы (или полный путь к 1cv8.exe) | +| `-InfoBasePath <путь>` | * | Файловая база | +| `-InfoBaseServer <сервер>` | * | Сервер 1С (для серверной базы) | +| `-InfoBaseRef <имя>` | * | Имя базы на сервере | +| `-UserName <имя>` | нет | Имя пользователя | +| `-Password <пароль>` | нет | Пароль | +| `-InputFile <путь>` | да | Путь к EPF/ERF-файлу | +| `-OutputDir <путь>` | да | Каталог для выгрузки исходников | +| `-Format <формат>` | нет | `Hierarchical` (по умолч.) / `Plain` | + +> `*` — нужен либо `-InfoBasePath`, либо пара `-InfoBaseServer` + `-InfoBaseRef` ## Коды возврата @@ -82,13 +88,12 @@ allowed-tools: └── Template. ``` -## Пример полного цикла +## Примеры ```powershell -# Параметры из .v8-project.json: -$v8path = "C:\Program Files\1cv8\8.3.25.1257\bin" # v8path -$base = "C:\Bases\MyDB" # databases[].path +# Разборка обработки (файловая база) +powershell.exe -NoProfile -File .claude\skills\epf-dump\scripts\epf-dump.ps1 -InfoBasePath "C:\Bases\MyDB" -InputFile "build\МояОбработка.epf" -OutputDir "src" -# Разобрать -& "$v8path\1cv8.exe" DESIGNER /F $base /DisableStartupDialogs /DumpExternalDataProcessorOrReportToFiles "src" "build\МояОбработка.epf" -Format Hierarchical /Out "build\dump.log" -``` \ No newline at end of file +# Серверная база +powershell.exe -NoProfile -File .claude\skills\epf-dump\scripts\epf-dump.ps1 -InfoBaseServer "srv01" -InfoBaseRef "MyDB" -UserName "Admin" -Password "secret" -InputFile "build\МояОбработка.epf" -OutputDir "src" +``` diff --git a/.claude/skills/epf-dump/scripts/epf-dump.ps1 b/.claude/skills/epf-dump/scripts/epf-dump.ps1 new file mode 100644 index 00000000..4932d82d --- /dev/null +++ b/.claude/skills/epf-dump/scripts/epf-dump.ps1 @@ -0,0 +1,166 @@ +# epf-dump v1.0 — Dump external data processor or report (EPF/ERF) to XML sources +# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills +<# +.SYNOPSIS + Разборка внешней обработки/отчёта 1С в XML-исходники + +.DESCRIPTION + Разбирает EPF/ERF-файл во XML-исходники с помощью платформы 1С. + Общий скрипт для epf-dump и erf-dump. + +.PARAMETER V8Path + Путь к каталогу bin платформы или к 1cv8.exe + +.PARAMETER InfoBasePath + Путь к файловой информационной базе + +.PARAMETER InfoBaseServer + Сервер 1С (для серверной базы) + +.PARAMETER InfoBaseRef + Имя базы на сервере + +.PARAMETER UserName + Имя пользователя 1С + +.PARAMETER Password + Пароль пользователя + +.PARAMETER InputFile + Путь к EPF/ERF-файлу + +.PARAMETER OutputDir + Каталог для выгрузки исходников + +.PARAMETER Format + Формат выгрузки: Hierarchical или Plain (по умолчанию Hierarchical) + +.EXAMPLE + .\epf-dump.ps1 -InfoBasePath "C:\Bases\MyDB" -InputFile "build\МояОбработка.epf" -OutputDir "src" + +.EXAMPLE + .\epf-dump.ps1 -InfoBasePath "C:\Bases\MyDB" -InputFile "build\МойОтчёт.erf" -OutputDir "src" +#> + +[CmdletBinding()] +param( + [Parameter(Mandatory=$false)] + [string]$V8Path, + + [Parameter(Mandatory=$false)] + [string]$InfoBasePath, + + [Parameter(Mandatory=$false)] + [string]$InfoBaseServer, + + [Parameter(Mandatory=$false)] + [string]$InfoBaseRef, + + [Parameter(Mandatory=$false)] + [string]$UserName, + + [Parameter(Mandatory=$false)] + [string]$Password, + + [Parameter(Mandatory=$true)] + [string]$InputFile, + + [Parameter(Mandatory=$true)] + [string]$OutputDir, + + [Parameter(Mandatory=$false)] + [ValidateSet("Hierarchical", "Plain")] + [string]$Format = "Hierarchical" +) + +$OutputEncoding = [System.Text.Encoding]::UTF8 +[Console]::OutputEncoding = [System.Text.Encoding]::UTF8 + +# --- Resolve V8Path --- +if (-not $V8Path) { + $found = Get-ChildItem "C:\Program Files\1cv8\*\bin\1cv8.exe" -ErrorAction SilentlyContinue | Sort-Object FullName -Descending | Select-Object -First 1 + if ($found) { + $V8Path = $found.FullName + } else { + Write-Host "Error: 1cv8.exe not found. Specify -V8Path" -ForegroundColor Red + exit 1 + } +} elseif (Test-Path $V8Path -PathType Container) { + $V8Path = Join-Path $V8Path "1cv8.exe" +} + +if (-not (Test-Path $V8Path)) { + Write-Host "Error: 1cv8.exe not found at $V8Path" -ForegroundColor Red + exit 1 +} + +# --- Validate connection --- +if (-not $InfoBasePath -and (-not $InfoBaseServer -or -not $InfoBaseRef)) { + Write-Host "Error: specify -InfoBasePath or -InfoBaseServer + -InfoBaseRef" -ForegroundColor Red + exit 1 +} + +# --- Validate input file --- +if (-not (Test-Path $InputFile)) { + Write-Host "Error: input file not found: $InputFile" -ForegroundColor Red + exit 1 +} + +# --- Ensure output directory exists --- +if (-not (Test-Path $OutputDir)) { + New-Item -ItemType Directory -Path $OutputDir -Force | Out-Null +} + +# --- Temp dir --- +$tempDir = Join-Path $env:TEMP "epf_dump_$(Get-Random)" +New-Item -ItemType Directory -Path $tempDir -Force | Out-Null + +try { + # --- Build arguments --- + $arguments = @("DESIGNER") + + if ($InfoBaseServer -and $InfoBaseRef) { + $arguments += "/S", "`"$InfoBaseServer/$InfoBaseRef`"" + } else { + $arguments += "/F", "`"$InfoBasePath`"" + } + + if ($UserName) { $arguments += "/N`"$UserName`"" } + if ($Password) { $arguments += "/P`"$Password`"" } + + $arguments += "/DumpExternalDataProcessorOrReportToFiles", "`"$OutputDir`"", "`"$InputFile`"" + $arguments += "-Format", $Format + + # --- Output --- + $outFile = Join-Path $tempDir "dump_log.txt" + $arguments += "/Out", "`"$outFile`"" + $arguments += "/DisableStartupDialogs" + + # --- Execute --- + Write-Host "Running: 1cv8.exe $($arguments -join ' ')" + $process = Start-Process -FilePath $V8Path -ArgumentList $arguments -NoNewWindow -Wait -PassThru + $exitCode = $process.ExitCode + + # --- Result --- + if ($exitCode -eq 0) { + Write-Host "Dump completed successfully to: $OutputDir" -ForegroundColor Green + } else { + Write-Host "Error dumping (code: $exitCode)" -ForegroundColor Red + } + + if (Test-Path $outFile) { + $logContent = Get-Content $outFile -Raw -ErrorAction SilentlyContinue + if ($logContent) { + Write-Host "--- Log ---" + Write-Host $logContent + Write-Host "--- End ---" + } + } + + exit $exitCode + +} finally { + if (Test-Path $tempDir) { + Remove-Item -Path $tempDir -Recurse -Force -ErrorAction SilentlyContinue + } +} diff --git a/.claude/skills/erf-build/SKILL.md b/.claude/skills/erf-build/SKILL.md index a43ce63d..19afd565 100644 --- a/.claude/skills/erf-build/SKILL.md +++ b/.claude/skills/erf-build/SKILL.md @@ -11,7 +11,7 @@ allowed-tools: # /erf-build — Сборка отчёта -Собирает ERF-файл из XML-исходников с помощью платформы 1С. Использует ту же команду CLI, что и `/epf-build`. +Собирает ERF-файл из XML-исходников с помощью платформы 1С. Использует общий скрипт из `/epf-build`. ## Usage @@ -36,21 +36,28 @@ allowed-tools: Если `v8path` не задан — автоопределение: `Get-ChildItem "C:\Program Files\1cv8\*\bin\1cv8.exe" | Sort -Desc | Select -First 1` Если использованная база не зарегистрирована — после выполнения предложи добавить через `/db-list add`. -## Команды +## Команда -### 1. Создать ИБ для сборки (если нет зарегистрированной базы) +Используй общий скрипт из epf-build: -```cmd -"\1cv8.exe" CREATEINFOBASE File="./base" +```powershell +powershell.exe -NoProfile -File .claude\skills\epf-build\scripts\epf-build.ps1 <параметры> ``` -### 2. Сборка ERF из XML +### Параметры скрипта -Файловая база: -```cmd -"\1cv8.exe" DESIGNER /F "<база>" /DisableStartupDialogs /LoadExternalDataProcessorOrReportFromFiles "\.xml" "\.erf" /Out "\build.log" -``` -Серверная база — вместо `/F` используй `/S`, добавь `/N"" /P""` при наличии учётных данных. +| Параметр | Обязательный | Описание | +|----------|:------------:|----------| +| `-V8Path <путь>` | нет | Каталог bin платформы (или полный путь к 1cv8.exe) | +| `-InfoBasePath <путь>` | * | Файловая база | +| `-InfoBaseServer <сервер>` | * | Сервер 1С (для серверной базы) | +| `-InfoBaseRef <имя>` | * | Имя базы на сервере | +| `-UserName <имя>` | нет | Имя пользователя | +| `-Password <пароль>` | нет | Пароль | +| `-SourceFile <путь>` | да | Путь к корневому XML-файлу исходников | +| `-OutputFile <путь>` | да | Путь к выходному ERF-файлу | + +> `*` — нужен либо `-InfoBasePath`, либо пара `-InfoBaseServer` + `-InfoBaseRef` ## Коды возврата @@ -63,13 +70,12 @@ allowed-tools: Если отчёт использует ссылочные типы конфигурации (`CatalogRef.XXX`, `DocumentRef.XXX`) — сборка в пустой базе упадёт с ошибкой XDTO. Зарегистрируй базу с целевой конфигурацией через `/db-list add`. -## Пример полного цикла +## Примеры ```powershell -# Параметры из .v8-project.json: -$v8path = "C:\Program Files\1cv8\8.3.25.1257\bin" # v8path -$base = "C:\Bases\MyDB" # databases[].path +# Сборка отчёта (файловая база) +powershell.exe -NoProfile -File .claude\skills\epf-build\scripts\epf-build.ps1 -InfoBasePath "C:\Bases\MyDB" -SourceFile "src\МойОтчёт.xml" -OutputFile "build\МойОтчёт.erf" -# Собрать (база с конфигурацией — ссылочные типы резолвятся) -& "$v8path\1cv8.exe" DESIGNER /F $base /DisableStartupDialogs /LoadExternalDataProcessorOrReportFromFiles "src\МойОтчёт.xml" "build\МойОтчёт.erf" /Out "build\build.log" +# Серверная база +powershell.exe -NoProfile -File .claude\skills\epf-build\scripts\epf-build.ps1 -InfoBaseServer "srv01" -InfoBaseRef "MyDB" -UserName "Admin" -Password "secret" -SourceFile "src\МойОтчёт.xml" -OutputFile "build\МойОтчёт.erf" ``` diff --git a/.claude/skills/erf-dump/SKILL.md b/.claude/skills/erf-dump/SKILL.md index 5d64c7c4..ef08dbf5 100644 --- a/.claude/skills/erf-dump/SKILL.md +++ b/.claude/skills/erf-dump/SKILL.md @@ -11,7 +11,7 @@ allowed-tools: # /erf-dump — Разборка отчёта -Разбирает ERF-файл во XML-исходники с помощью платформы 1С (иерархический формат). Использует ту же команду CLI, что и `/epf-dump`. +Разбирает ERF-файл во XML-исходники с помощью платформы 1С (иерархический формат). Использует общий скрипт из `/epf-dump`. ## Usage @@ -35,21 +35,29 @@ allowed-tools: Если `v8path` не задан — автоопределение: `Get-ChildItem "C:\Program Files\1cv8\*\bin\1cv8.exe" | Sort -Desc | Select -First 1` Если использованная база не зарегистрирована — после выполнения предложи добавить через `/db-list add`. -## Команды +## Команда -### 1. Создать ИБ (если нет зарегистрированной базы) +Используй общий скрипт из epf-dump: -```cmd -"\1cv8.exe" CREATEINFOBASE File="./base" +```powershell +powershell.exe -NoProfile -File .claude\skills\epf-dump\scripts\epf-dump.ps1 <параметры> ``` -### 2. Разборка ERF в XML +### Параметры скрипта -Файловая база: -```cmd -"\1cv8.exe" DESIGNER /F "<база>" /DisableStartupDialogs /DumpExternalDataProcessorOrReportToFiles "" "" -Format Hierarchical /Out "\dump.log" -``` -Серверная база — вместо `/F` используй `/S`, добавь `/N"" /P""` при наличии учётных данных. +| Параметр | Обязательный | Описание | +|----------|:------------:|----------| +| `-V8Path <путь>` | нет | Каталог bin платформы (или полный путь к 1cv8.exe) | +| `-InfoBasePath <путь>` | * | Файловая база | +| `-InfoBaseServer <сервер>` | * | Сервер 1С (для серверной базы) | +| `-InfoBaseRef <имя>` | * | Имя базы на сервере | +| `-UserName <имя>` | нет | Имя пользователя | +| `-Password <пароль>` | нет | Пароль | +| `-InputFile <путь>` | да | Путь к ERF-файлу | +| `-OutputDir <путь>` | да | Каталог для выгрузки исходников | +| `-Format <формат>` | нет | `Hierarchical` (по умолч.) / `Plain` | + +> `*` — нужен либо `-InfoBasePath`, либо пара `-InfoBaseServer` + `-InfoBaseRef` ## Коды возврата @@ -82,13 +90,12 @@ allowed-tools: └── Template. ``` -## Пример полного цикла +## Примеры ```powershell -# Параметры из .v8-project.json: -$v8path = "C:\Program Files\1cv8\8.3.25.1257\bin" # v8path -$base = "C:\Bases\MyDB" # databases[].path +# Разборка отчёта (файловая база) +powershell.exe -NoProfile -File .claude\skills\epf-dump\scripts\epf-dump.ps1 -InfoBasePath "C:\Bases\MyDB" -InputFile "build\МойОтчёт.erf" -OutputDir "src" -# Разобрать -& "$v8path\1cv8.exe" DESIGNER /F $base /DisableStartupDialogs /DumpExternalDataProcessorOrReportToFiles "src" "build\МойОтчёт.erf" -Format Hierarchical /Out "build\dump.log" +# Серверная база +powershell.exe -NoProfile -File .claude\skills\epf-dump\scripts\epf-dump.ps1 -InfoBaseServer "srv01" -InfoBaseRef "MyDB" -UserName "Admin" -Password "secret" -InputFile "build\МойОтчёт.erf" -OutputDir "src" ``` From 544893b781231fbad89c0572ef9eac26ee1aa3a2 Mon Sep 17 00:00:00 2001 From: Nick Shirokov Date: Mon, 16 Feb 2026 20:01:30 +0300 Subject: [PATCH 5/6] fix(skills): use forward slashes in script paths per best practices MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Bash on Windows strips backslashes in unquoted paths, causing "file not found" errors. Forward slashes work cross-platform. Also fix pwsh → powershell.exe in epf-init and epf-add-form. Co-Authored-By: Claude Opus 4.6 --- .claude/skills/cf-edit/SKILL.md | 2 +- .claude/skills/cf-info/SKILL.md | 2 +- .claude/skills/cf-init/SKILL.md | 2 +- .claude/skills/cf-validate/SKILL.md | 2 +- .claude/skills/cfe-borrow/SKILL.md | 2 +- .claude/skills/cfe-diff/SKILL.md | 2 +- .claude/skills/cfe-init/SKILL.md | 2 +- .claude/skills/cfe-patch-method/SKILL.md | 2 +- .claude/skills/cfe-validate/SKILL.md | 2 +- .claude/skills/db-create/SKILL.md | 10 +++++----- .claude/skills/db-dump-cf/SKILL.md | 8 ++++---- .claude/skills/db-dump-xml/SKILL.md | 12 ++++++------ .claude/skills/db-load-cf/SKILL.md | 8 ++++---- .claude/skills/db-load-git/SKILL.md | 12 ++++++------ .claude/skills/db-load-xml/SKILL.md | 8 ++++---- .claude/skills/db-run/SKILL.md | 10 +++++----- .claude/skills/db-update/SKILL.md | 8 ++++---- .claude/skills/epf-add-form/SKILL.md | 2 +- .claude/skills/epf-build/SKILL.md | 6 +++--- .claude/skills/epf-dump/SKILL.md | 6 +++--- .claude/skills/epf-init/SKILL.md | 2 +- .claude/skills/epf-validate/SKILL.md | 2 +- .claude/skills/erf-build/SKILL.md | 6 +++--- .claude/skills/erf-dump/SKILL.md | 6 +++--- .claude/skills/erf-init/SKILL.md | 2 +- .claude/skills/erf-validate/SKILL.md | 2 +- .claude/skills/form-add/SKILL.md | 2 +- .claude/skills/form-compile/SKILL.md | 2 +- .claude/skills/form-edit/SKILL.md | 2 +- .claude/skills/form-info/SKILL.md | 4 ++-- .claude/skills/form-remove/SKILL.md | 2 +- .claude/skills/form-validate/SKILL.md | 2 +- .claude/skills/help-add/SKILL.md | 2 +- .claude/skills/interface-edit/SKILL.md | 2 +- .claude/skills/interface-validate/SKILL.md | 2 +- .claude/skills/meta-compile/SKILL.md | 2 +- .claude/skills/meta-edit/SKILL.md | 4 ++-- .claude/skills/meta-edit/json-dsl.md | 2 +- .claude/skills/meta-info/SKILL.md | 2 +- .claude/skills/meta-remove/SKILL.md | 2 +- .claude/skills/meta-validate/SKILL.md | 2 +- .claude/skills/role-compile/SKILL.md | 2 +- .claude/skills/role-info/SKILL.md | 2 +- .claude/skills/role-validate/SKILL.md | 2 +- .claude/skills/skd-compile/SKILL.md | 4 ++-- .claude/skills/skd-edit/SKILL.md | 2 +- .claude/skills/skd-info/SKILL.md | 2 +- .claude/skills/skd-validate/SKILL.md | 2 +- .claude/skills/subsystem-compile/SKILL.md | 2 +- .claude/skills/subsystem-edit/SKILL.md | 2 +- .claude/skills/subsystem-info/SKILL.md | 2 +- .claude/skills/subsystem-validate/SKILL.md | 2 +- .claude/skills/template-add/SKILL.md | 2 +- .claude/skills/template-remove/SKILL.md | 2 +- 54 files changed, 95 insertions(+), 95 deletions(-) diff --git a/.claude/skills/cf-edit/SKILL.md b/.claude/skills/cf-edit/SKILL.md index 0269df3d..2682b1f6 100644 --- a/.claude/skills/cf-edit/SKILL.md +++ b/.claude/skills/cf-edit/SKILL.md @@ -24,7 +24,7 @@ allowed-tools: | `NoValidate` | Пропустить авто-валидацию | ```powershell -powershell.exe -NoProfile -File .claude\skills\cf-edit\scripts\cf-edit.ps1 -ConfigPath '' -Operation modify-property -Value 'Version=1.0.0.1' +powershell.exe -NoProfile -File .claude/skills/cf-edit/scripts/cf-edit.ps1 -ConfigPath '' -Operation modify-property -Value 'Version=1.0.0.1' ``` ## Операции diff --git a/.claude/skills/cf-info/SKILL.md b/.claude/skills/cf-info/SKILL.md index 35395126..eccccecb 100644 --- a/.claude/skills/cf-info/SKILL.md +++ b/.claude/skills/cf-info/SKILL.md @@ -22,7 +22,7 @@ allowed-tools: | `OutFile` | Записать результат в файл (UTF-8 BOM) | ```powershell -powershell.exe -NoProfile -File .claude\skills\cf-info\scripts\cf-info.ps1 -ConfigPath "<путь>" +powershell.exe -NoProfile -File .claude/skills/cf-info/scripts/cf-info.ps1 -ConfigPath "<путь>" ``` ## Три режима diff --git a/.claude/skills/cf-init/SKILL.md b/.claude/skills/cf-init/SKILL.md index da1bf00c..2a666c13 100644 --- a/.claude/skills/cf-init/SKILL.md +++ b/.claude/skills/cf-init/SKILL.md @@ -24,7 +24,7 @@ allowed-tools: | `CompatibilityMode` | Режим совместимости (default: `Version8_3_24`) | ```powershell -powershell.exe -NoProfile -File .claude\skills\cf-init\scripts\cf-init.ps1 -Name "МояКонфигурация" +powershell.exe -NoProfile -File .claude/skills/cf-init/scripts/cf-init.ps1 -Name "МояКонфигурация" ``` ## Что создаётся diff --git a/.claude/skills/cf-validate/SKILL.md b/.claude/skills/cf-validate/SKILL.md index ed9afd8a..ab4c25fd 100644 --- a/.claude/skills/cf-validate/SKILL.md +++ b/.claude/skills/cf-validate/SKILL.md @@ -21,7 +21,7 @@ allowed-tools: | `OutFile` | Записать результат в файл (UTF-8 BOM) | ```powershell -powershell.exe -NoProfile -File .claude\skills\cf-validate\scripts\cf-validate.ps1 -ConfigPath "<путь>" +powershell.exe -NoProfile -File .claude/skills/cf-validate/scripts/cf-validate.ps1 -ConfigPath "<путь>" ``` ## Выполняемые проверки diff --git a/.claude/skills/cfe-borrow/SKILL.md b/.claude/skills/cfe-borrow/SKILL.md index 2e88a59e..eb6bd990 100644 --- a/.claude/skills/cfe-borrow/SKILL.md +++ b/.claude/skills/cfe-borrow/SKILL.md @@ -36,7 +36,7 @@ allowed-tools: ## Команда ```powershell -powershell.exe -NoProfile -File .claude\skills\cfe-borrow\scripts\cfe-borrow.ps1 -ExtensionPath src -ConfigPath C:\cfsrc\erp -Object "Catalog.Контрагенты" +powershell.exe -NoProfile -File .claude/skills/cfe-borrow/scripts/cfe-borrow.ps1 -ExtensionPath src -ConfigPath C:\cfsrc\erp -Object "Catalog.Контрагенты" ``` ## Примеры diff --git a/.claude/skills/cfe-diff/SKILL.md b/.claude/skills/cfe-diff/SKILL.md index 39f21e5a..3dd71dff 100644 --- a/.claude/skills/cfe-diff/SKILL.md +++ b/.claude/skills/cfe-diff/SKILL.md @@ -23,7 +23,7 @@ allowed-tools: ## Команда ```powershell -powershell.exe -NoProfile -File .claude\skills\cfe-diff\scripts\cfe-diff.ps1 -ExtensionPath src -ConfigPath C:\cfsrc\erp -Mode A +powershell.exe -NoProfile -File .claude/skills/cfe-diff/scripts/cfe-diff.ps1 -ExtensionPath src -ConfigPath C:\cfsrc\erp -Mode A ``` ## Mode A — обзор расширения diff --git a/.claude/skills/cfe-init/SKILL.md b/.claude/skills/cfe-init/SKILL.md index 295330a9..647035fb 100644 --- a/.claude/skills/cfe-init/SKILL.md +++ b/.claude/skills/cfe-init/SKILL.md @@ -39,7 +39,7 @@ allowed-tools: ## Команда ```powershell -powershell.exe -NoProfile -File .claude\skills\cfe-init\scripts\cfe-init.ps1 -Name "МоёРасширение" +powershell.exe -NoProfile -File .claude/skills/cfe-init/scripts/cfe-init.ps1 -Name "МоёРасширение" ``` ## Что создаётся diff --git a/.claude/skills/cfe-patch-method/SKILL.md b/.claude/skills/cfe-patch-method/SKILL.md index b51740f2..4246dca0 100644 --- a/.claude/skills/cfe-patch-method/SKILL.md +++ b/.claude/skills/cfe-patch-method/SKILL.md @@ -51,7 +51,7 @@ allowed-tools: ## Команда ```powershell -powershell.exe -NoProfile -File .claude\skills\cfe-patch-method\scripts\cfe-patch-method.ps1 -ExtensionPath src -ModulePath "Catalog.Контрагенты.ObjectModule" -MethodName "ПриЗаписи" -InterceptorType Before +powershell.exe -NoProfile -File .claude/skills/cfe-patch-method/scripts/cfe-patch-method.ps1 -ExtensionPath src -ModulePath "Catalog.Контрагенты.ObjectModule" -MethodName "ПриЗаписи" -InterceptorType Before ``` ## Примеры diff --git a/.claude/skills/cfe-validate/SKILL.md b/.claude/skills/cfe-validate/SKILL.md index af1b1067..131dd798 100644 --- a/.claude/skills/cfe-validate/SKILL.md +++ b/.claude/skills/cfe-validate/SKILL.md @@ -23,7 +23,7 @@ allowed-tools: ## Команда ```powershell -powershell.exe -NoProfile -File .claude\skills\cfe-validate\scripts\cfe-validate.ps1 -ExtensionPath src +powershell.exe -NoProfile -File .claude/skills/cfe-validate/scripts/cfe-validate.ps1 -ExtensionPath src ``` ## Проверки (9 шагов) diff --git a/.claude/skills/db-create/SKILL.md b/.claude/skills/db-create/SKILL.md index 00129c38..f98c940c 100644 --- a/.claude/skills/db-create/SKILL.md +++ b/.claude/skills/db-create/SKILL.md @@ -31,7 +31,7 @@ allowed-tools: ## Команда ```powershell -powershell.exe -NoProfile -File .claude\skills\db-create\scripts\db-create.ps1 <параметры> +powershell.exe -NoProfile -File .claude/skills/db-create/scripts/db-create.ps1 <параметры> ``` ### Параметры скрипта @@ -65,14 +65,14 @@ powershell.exe -NoProfile -File .claude\skills\db-create\scripts\db-create.ps1 < ```powershell # Создать файловую базу -powershell.exe -NoProfile -File .claude\skills\db-create\scripts\db-create.ps1 -InfoBasePath "C:\Bases\NewDB" +powershell.exe -NoProfile -File .claude/skills/db-create/scripts/db-create.ps1 -InfoBasePath "C:\Bases\NewDB" # Создать серверную базу -powershell.exe -NoProfile -File .claude\skills\db-create\scripts\db-create.ps1 -InfoBaseServer "srv01" -InfoBaseRef "MyApp_Test" +powershell.exe -NoProfile -File .claude/skills/db-create/scripts/db-create.ps1 -InfoBaseServer "srv01" -InfoBaseRef "MyApp_Test" # Создать из шаблона CF -powershell.exe -NoProfile -File .claude\skills\db-create\scripts\db-create.ps1 -InfoBasePath "C:\Bases\NewDB" -UseTemplate "C:\Templates\config.cf" +powershell.exe -NoProfile -File .claude/skills/db-create/scripts/db-create.ps1 -InfoBasePath "C:\Bases\NewDB" -UseTemplate "C:\Templates\config.cf" # Создать и добавить в список баз -powershell.exe -NoProfile -File .claude\skills\db-create\scripts\db-create.ps1 -InfoBasePath "C:\Bases\NewDB" -AddToList -ListName "Новая база" +powershell.exe -NoProfile -File .claude/skills/db-create/scripts/db-create.ps1 -InfoBasePath "C:\Bases\NewDB" -AddToList -ListName "Новая база" ``` diff --git a/.claude/skills/db-dump-cf/SKILL.md b/.claude/skills/db-dump-cf/SKILL.md index a0e2b2e9..f7f4f0df 100644 --- a/.claude/skills/db-dump-cf/SKILL.md +++ b/.claude/skills/db-dump-cf/SKILL.md @@ -35,7 +35,7 @@ allowed-tools: ## Команда ```powershell -powershell.exe -NoProfile -File .claude\skills\db-dump-cf\scripts\db-dump-cf.ps1 <параметры> +powershell.exe -NoProfile -File .claude/skills/db-dump-cf/scripts/db-dump-cf.ps1 <параметры> ``` ### Параметры скрипта @@ -69,11 +69,11 @@ powershell.exe -NoProfile -File .claude\skills\db-dump-cf\scripts\db-dump-cf.ps1 ```powershell # Выгрузка конфигурации (файловая база) -powershell.exe -NoProfile -File .claude\skills\db-dump-cf\scripts\db-dump-cf.ps1 -InfoBasePath "C:\Bases\MyDB" -UserName "Admin" -OutputFile "C:\backup\config.cf" +powershell.exe -NoProfile -File .claude/skills/db-dump-cf/scripts/db-dump-cf.ps1 -InfoBasePath "C:\Bases\MyDB" -UserName "Admin" -OutputFile "C:\backup\config.cf" # Серверная база -powershell.exe -NoProfile -File .claude\skills\db-dump-cf\scripts\db-dump-cf.ps1 -InfoBaseServer "srv01" -InfoBaseRef "MyApp_Dev" -UserName "Admin" -Password "secret" -OutputFile "config.cf" +powershell.exe -NoProfile -File .claude/skills/db-dump-cf/scripts/db-dump-cf.ps1 -InfoBaseServer "srv01" -InfoBaseRef "MyApp_Dev" -UserName "Admin" -Password "secret" -OutputFile "config.cf" # Выгрузка расширения -powershell.exe -NoProfile -File .claude\skills\db-dump-cf\scripts\db-dump-cf.ps1 -InfoBasePath "C:\Bases\MyDB" -UserName "Admin" -OutputFile "ext.cfe" -Extension "МоёРасширение" +powershell.exe -NoProfile -File .claude/skills/db-dump-cf/scripts/db-dump-cf.ps1 -InfoBasePath "C:\Bases\MyDB" -UserName "Admin" -OutputFile "ext.cfe" -Extension "МоёРасширение" ``` diff --git a/.claude/skills/db-dump-xml/SKILL.md b/.claude/skills/db-dump-xml/SKILL.md index 55964469..3e6df550 100644 --- a/.claude/skills/db-dump-xml/SKILL.md +++ b/.claude/skills/db-dump-xml/SKILL.md @@ -37,7 +37,7 @@ allowed-tools: ## Команда ```powershell -powershell.exe -NoProfile -File .claude\skills\db-dump-xml\scripts\db-dump-xml.ps1 <параметры> +powershell.exe -NoProfile -File .claude/skills/db-dump-xml/scripts/db-dump-xml.ps1 <параметры> ``` ### Параметры скрипта @@ -81,17 +81,17 @@ powershell.exe -NoProfile -File .claude\skills\db-dump-xml\scripts\db-dump-xml.p ```powershell # Полная выгрузка (файловая база) -powershell.exe -NoProfile -File .claude\skills\db-dump-xml\scripts\db-dump-xml.ps1 -V8Path "C:\Program Files\1cv8\8.3.25.1257\bin" -InfoBasePath "C:\Bases\MyDB" -UserName "Admin" -ConfigDir "C:\WS\cfsrc" -Mode Full +powershell.exe -NoProfile -File .claude/skills/db-dump-xml/scripts/db-dump-xml.ps1 -V8Path "C:\Program Files\1cv8\8.3.25.1257\bin" -InfoBasePath "C:\Bases\MyDB" -UserName "Admin" -ConfigDir "C:\WS\cfsrc" -Mode Full # Инкрементальная выгрузка -powershell.exe -NoProfile -File .claude\skills\db-dump-xml\scripts\db-dump-xml.ps1 -InfoBasePath "C:\Bases\MyDB" -UserName "Admin" -ConfigDir "C:\WS\cfsrc" -Mode Changes +powershell.exe -NoProfile -File .claude/skills/db-dump-xml/scripts/db-dump-xml.ps1 -InfoBasePath "C:\Bases\MyDB" -UserName "Admin" -ConfigDir "C:\WS\cfsrc" -Mode Changes # Частичная выгрузка -powershell.exe -NoProfile -File .claude\skills\db-dump-xml\scripts\db-dump-xml.ps1 -InfoBasePath "C:\Bases\MyDB" -UserName "Admin" -ConfigDir "C:\WS\cfsrc" -Mode Partial -Objects "Справочник.Номенклатура,Документ.Заказ" +powershell.exe -NoProfile -File .claude/skills/db-dump-xml/scripts/db-dump-xml.ps1 -InfoBasePath "C:\Bases\MyDB" -UserName "Admin" -ConfigDir "C:\WS\cfsrc" -Mode Partial -Objects "Справочник.Номенклатура,Документ.Заказ" # Серверная база -powershell.exe -NoProfile -File .claude\skills\db-dump-xml\scripts\db-dump-xml.ps1 -InfoBaseServer "srv01" -InfoBaseRef "MyApp_Dev" -UserName "Admin" -Password "secret" -ConfigDir "C:\WS\cfsrc" -Mode Full +powershell.exe -NoProfile -File .claude/skills/db-dump-xml/scripts/db-dump-xml.ps1 -InfoBaseServer "srv01" -InfoBaseRef "MyApp_Dev" -UserName "Admin" -Password "secret" -ConfigDir "C:\WS\cfsrc" -Mode Full # Выгрузка расширения -powershell.exe -NoProfile -File .claude\skills\db-dump-xml\scripts\db-dump-xml.ps1 -InfoBasePath "C:\Bases\MyDB" -UserName "Admin" -ConfigDir "C:\WS\ext_src" -Mode Full -Extension "МоёРасширение" +powershell.exe -NoProfile -File .claude/skills/db-dump-xml/scripts/db-dump-xml.ps1 -InfoBasePath "C:\Bases\MyDB" -UserName "Admin" -ConfigDir "C:\WS\ext_src" -Mode Full -Extension "МоёРасширение" ``` diff --git a/.claude/skills/db-load-cf/SKILL.md b/.claude/skills/db-load-cf/SKILL.md index c9cd9ef6..dcc43147 100644 --- a/.claude/skills/db-load-cf/SKILL.md +++ b/.claude/skills/db-load-cf/SKILL.md @@ -36,7 +36,7 @@ allowed-tools: ## Команда ```powershell -powershell.exe -NoProfile -File .claude\skills\db-load-cf\scripts\db-load-cf.ps1 <параметры> +powershell.exe -NoProfile -File .claude/skills/db-load-cf/scripts/db-load-cf.ps1 <параметры> ``` ### Параметры скрипта @@ -71,11 +71,11 @@ powershell.exe -NoProfile -File .claude\skills\db-load-cf\scripts\db-load-cf.ps1 ```powershell # Файловая база -powershell.exe -NoProfile -File .claude\skills\db-load-cf\scripts\db-load-cf.ps1 -InfoBasePath "C:\Bases\MyDB" -UserName "Admin" -InputFile "C:\backup\config.cf" +powershell.exe -NoProfile -File .claude/skills/db-load-cf/scripts/db-load-cf.ps1 -InfoBasePath "C:\Bases\MyDB" -UserName "Admin" -InputFile "C:\backup\config.cf" # Серверная база -powershell.exe -NoProfile -File .claude\skills\db-load-cf\scripts\db-load-cf.ps1 -InfoBaseServer "srv01" -InfoBaseRef "MyApp_Test" -UserName "Admin" -Password "secret" -InputFile "config.cf" +powershell.exe -NoProfile -File .claude/skills/db-load-cf/scripts/db-load-cf.ps1 -InfoBaseServer "srv01" -InfoBaseRef "MyApp_Test" -UserName "Admin" -Password "secret" -InputFile "config.cf" # Загрузка расширения -powershell.exe -NoProfile -File .claude\skills\db-load-cf\scripts\db-load-cf.ps1 -InfoBasePath "C:\Bases\MyDB" -UserName "Admin" -InputFile "ext.cfe" -Extension "МоёРасширение" +powershell.exe -NoProfile -File .claude/skills/db-load-cf/scripts/db-load-cf.ps1 -InfoBasePath "C:\Bases\MyDB" -UserName "Admin" -InputFile "ext.cfe" -Extension "МоёРасширение" ``` diff --git a/.claude/skills/db-load-git/SKILL.md b/.claude/skills/db-load-git/SKILL.md index 8417beaa..a5b7df57 100644 --- a/.claude/skills/db-load-git/SKILL.md +++ b/.claude/skills/db-load-git/SKILL.md @@ -38,7 +38,7 @@ allowed-tools: ## Команда ```powershell -powershell.exe -NoProfile -File .claude\skills\db-load-git\scripts\db-load-git.ps1 <параметры> +powershell.exe -NoProfile -File .claude/skills/db-load-git/scripts/db-load-git.ps1 <параметры> ``` ### Параметры скрипта @@ -94,17 +94,17 @@ powershell.exe -NoProfile -File .claude\skills\db-load-git\scripts\db-load-git.p ```powershell # Загрузить все незафиксированные изменения (файловая база) -powershell.exe -NoProfile -File .claude\skills\db-load-git\scripts\db-load-git.ps1 -V8Path "C:\Program Files\1cv8\8.3.25.1257\bin" -InfoBasePath "C:\Bases\MyDB" -UserName "Admin" -ConfigDir "C:\WS\cfsrc" -Source All +powershell.exe -NoProfile -File .claude/skills/db-load-git/scripts/db-load-git.ps1 -V8Path "C:\Program Files\1cv8\8.3.25.1257\bin" -InfoBasePath "C:\Bases\MyDB" -UserName "Admin" -ConfigDir "C:\WS\cfsrc" -Source All # Только staged -powershell.exe -NoProfile -File .claude\skills\db-load-git\scripts\db-load-git.ps1 -InfoBasePath "C:\Bases\MyDB" -UserName "Admin" -ConfigDir "C:\WS\cfsrc" -Source Staged +powershell.exe -NoProfile -File .claude/skills/db-load-git/scripts/db-load-git.ps1 -InfoBasePath "C:\Bases\MyDB" -UserName "Admin" -ConfigDir "C:\WS\cfsrc" -Source Staged # Серверная база -powershell.exe -NoProfile -File .claude\skills\db-load-git\scripts\db-load-git.ps1 -InfoBaseServer "srv01" -InfoBaseRef "MyApp_Dev" -UserName "Admin" -Password "secret" -ConfigDir "C:\WS\cfsrc" -Source All +powershell.exe -NoProfile -File .claude/skills/db-load-git/scripts/db-load-git.ps1 -InfoBaseServer "srv01" -InfoBaseRef "MyApp_Dev" -UserName "Admin" -Password "secret" -ConfigDir "C:\WS\cfsrc" -Source All # Из диапазона коммитов -powershell.exe -NoProfile -File .claude\skills\db-load-git\scripts\db-load-git.ps1 -InfoBasePath "C:\Bases\MyDB" -UserName "Admin" -ConfigDir "C:\WS\cfsrc" -Source Commit -CommitRange "HEAD~3..HEAD" +powershell.exe -NoProfile -File .claude/skills/db-load-git/scripts/db-load-git.ps1 -InfoBasePath "C:\Bases\MyDB" -UserName "Admin" -ConfigDir "C:\WS\cfsrc" -Source Commit -CommitRange "HEAD~3..HEAD" # Только посмотреть (DryRun) -powershell.exe -NoProfile -File .claude\skills\db-load-git\scripts\db-load-git.ps1 -InfoBasePath "C:\Bases\MyDB" -ConfigDir "C:\WS\cfsrc" -DryRun +powershell.exe -NoProfile -File .claude/skills/db-load-git/scripts/db-load-git.ps1 -InfoBasePath "C:\Bases\MyDB" -ConfigDir "C:\WS\cfsrc" -DryRun ``` diff --git a/.claude/skills/db-load-xml/SKILL.md b/.claude/skills/db-load-xml/SKILL.md index 8ee513df..3cf919d1 100644 --- a/.claude/skills/db-load-xml/SKILL.md +++ b/.claude/skills/db-load-xml/SKILL.md @@ -38,7 +38,7 @@ allowed-tools: ## Команда ```powershell -powershell.exe -NoProfile -File .claude\skills\db-load-xml\scripts\db-load-xml.ps1 <параметры> +powershell.exe -NoProfile -File .claude/skills/db-load-xml/scripts/db-load-xml.ps1 <параметры> ``` ### Параметры скрипта @@ -95,11 +95,11 @@ Documents/Заказ/Forms/ФормаДокумента.xml ```powershell # Полная загрузка -powershell.exe -NoProfile -File .claude\skills\db-load-xml\scripts\db-load-xml.ps1 -V8Path "C:\Program Files\1cv8\8.3.25.1257\bin" -InfoBasePath "C:\Bases\MyDB" -UserName "Admin" -ConfigDir "C:\WS\cfsrc" -Mode Full +powershell.exe -NoProfile -File .claude/skills/db-load-xml/scripts/db-load-xml.ps1 -V8Path "C:\Program Files\1cv8\8.3.25.1257\bin" -InfoBasePath "C:\Bases\MyDB" -UserName "Admin" -ConfigDir "C:\WS\cfsrc" -Mode Full # Частичная загрузка конкретных файлов -powershell.exe -NoProfile -File .claude\skills\db-load-xml\scripts\db-load-xml.ps1 -InfoBasePath "C:\Bases\MyDB" -UserName "Admin" -ConfigDir "C:\WS\cfsrc" -Mode Partial -Files "Catalogs/Номенклатура.xml,Catalogs/Номенклатура/Ext/ObjectModule.bsl" +powershell.exe -NoProfile -File .claude/skills/db-load-xml/scripts/db-load-xml.ps1 -InfoBasePath "C:\Bases\MyDB" -UserName "Admin" -ConfigDir "C:\WS\cfsrc" -Mode Partial -Files "Catalogs/Номенклатура.xml,Catalogs/Номенклатура/Ext/ObjectModule.bsl" # Загрузка расширения -powershell.exe -NoProfile -File .claude\skills\db-load-xml\scripts\db-load-xml.ps1 -InfoBasePath "C:\Bases\MyDB" -UserName "Admin" -ConfigDir "C:\WS\ext_src" -Mode Full -Extension "МоёРасширение" +powershell.exe -NoProfile -File .claude/skills/db-load-xml/scripts/db-load-xml.ps1 -InfoBasePath "C:\Bases\MyDB" -UserName "Admin" -ConfigDir "C:\WS\ext_src" -Mode Full -Extension "МоёРасширение" ``` diff --git a/.claude/skills/db-run/SKILL.md b/.claude/skills/db-run/SKILL.md index 463f6eaf..df00e4f3 100644 --- a/.claude/skills/db-run/SKILL.md +++ b/.claude/skills/db-run/SKILL.md @@ -36,7 +36,7 @@ allowed-tools: ## Команда ```powershell -powershell.exe -NoProfile -File .claude\skills\db-run\scripts\db-run.ps1 <параметры> +powershell.exe -NoProfile -File .claude/skills/db-run/scripts/db-run.ps1 <параметры> ``` ### Параметры скрипта @@ -63,14 +63,14 @@ powershell.exe -NoProfile -File .claude\skills\db-run\scripts\db-run.ps1 <пар ```powershell # Простой запуск -powershell.exe -NoProfile -File .claude\skills\db-run\scripts\db-run.ps1 -InfoBasePath "C:\Bases\MyDB" -UserName "Admin" +powershell.exe -NoProfile -File .claude/skills/db-run/scripts/db-run.ps1 -InfoBasePath "C:\Bases\MyDB" -UserName "Admin" # Запуск с обработкой -powershell.exe -NoProfile -File .claude\skills\db-run\scripts\db-run.ps1 -InfoBasePath "C:\Bases\MyDB" -UserName "Admin" -Execute "C:\epf\МояОбработка.epf" +powershell.exe -NoProfile -File .claude/skills/db-run/scripts/db-run.ps1 -InfoBasePath "C:\Bases\MyDB" -UserName "Admin" -Execute "C:\epf\МояОбработка.epf" # Открыть по навигационной ссылке -powershell.exe -NoProfile -File .claude\skills\db-run\scripts\db-run.ps1 -InfoBasePath "C:\Bases\MyDB" -UserName "Admin" -URL "e1cib/data/Справочник.Номенклатура" +powershell.exe -NoProfile -File .claude/skills/db-run/scripts/db-run.ps1 -InfoBasePath "C:\Bases\MyDB" -UserName "Admin" -URL "e1cib/data/Справочник.Номенклатура" # Серверная база с параметром запуска -powershell.exe -NoProfile -File .claude\skills\db-run\scripts\db-run.ps1 -InfoBaseServer "srv01" -InfoBaseRef "MyDB" -UserName "Admin" -Password "secret" -CParam "ЗапуститьОбновление" +powershell.exe -NoProfile -File .claude/skills/db-run/scripts/db-run.ps1 -InfoBaseServer "srv01" -InfoBaseRef "MyDB" -UserName "Admin" -Password "secret" -CParam "ЗапуститьОбновление" ``` diff --git a/.claude/skills/db-update/SKILL.md b/.claude/skills/db-update/SKILL.md index 0240a771..61a862f3 100644 --- a/.claude/skills/db-update/SKILL.md +++ b/.claude/skills/db-update/SKILL.md @@ -35,7 +35,7 @@ allowed-tools: ## Команда ```powershell -powershell.exe -NoProfile -File .claude\skills\db-update\scripts\db-update.ps1 <параметры> +powershell.exe -NoProfile -File .claude/skills/db-update/scripts/db-update.ps1 <параметры> ``` ### Параметры скрипта @@ -83,11 +83,11 @@ powershell.exe -NoProfile -File .claude\skills\db-update\scripts\db-update.ps1 < ```powershell # Обычное обновление (файловая база) -powershell.exe -NoProfile -File .claude\skills\db-update\scripts\db-update.ps1 -InfoBasePath "C:\Bases\MyDB" -UserName "Admin" +powershell.exe -NoProfile -File .claude/skills/db-update/scripts/db-update.ps1 -InfoBasePath "C:\Bases\MyDB" -UserName "Admin" # Динамическое обновление (серверная база) -powershell.exe -NoProfile -File .claude\skills\db-update\scripts\db-update.ps1 -InfoBaseServer "srv01" -InfoBaseRef "MyDB" -UserName "Admin" -Password "secret" -Dynamic "+" +powershell.exe -NoProfile -File .claude/skills/db-update/scripts/db-update.ps1 -InfoBaseServer "srv01" -InfoBaseRef "MyDB" -UserName "Admin" -Password "secret" -Dynamic "+" # Обновление расширения -powershell.exe -NoProfile -File .claude\skills\db-update\scripts\db-update.ps1 -InfoBasePath "C:\Bases\MyDB" -UserName "Admin" -Extension "МоёРасширение" +powershell.exe -NoProfile -File .claude/skills/db-update/scripts/db-update.ps1 -InfoBasePath "C:\Bases\MyDB" -UserName "Admin" -Extension "МоёРасширение" ``` diff --git a/.claude/skills/epf-add-form/SKILL.md b/.claude/skills/epf-add-form/SKILL.md index 7032dbc0..e339b46e 100644 --- a/.claude/skills/epf-add-form/SKILL.md +++ b/.claude/skills/epf-add-form/SKILL.md @@ -32,7 +32,7 @@ allowed-tools: ## Команда ```powershell -pwsh -NoProfile -File .claude/skills/epf-add-form/scripts/add-form.ps1 -ProcessorName "" -FormName "" [-Synonym ""] [-Main] [-SrcDir ""] +powershell.exe -NoProfile -File .claude/skills/epf-add-form/scripts/add-form.ps1 -ProcessorName "" -FormName "" [-Synonym ""] [-Main] [-SrcDir ""] ``` ## Что создаётся diff --git a/.claude/skills/epf-build/SKILL.md b/.claude/skills/epf-build/SKILL.md index 37d880c4..58e1419e 100644 --- a/.claude/skills/epf-build/SKILL.md +++ b/.claude/skills/epf-build/SKILL.md @@ -39,7 +39,7 @@ allowed-tools: ## Команда ```powershell -powershell.exe -NoProfile -File .claude\skills\epf-build\scripts\epf-build.ps1 <параметры> +powershell.exe -NoProfile -File .claude/skills/epf-build/scripts/epf-build.ps1 <параметры> ``` ### Параметры скрипта @@ -72,8 +72,8 @@ powershell.exe -NoProfile -File .claude\skills\epf-build\scripts\epf-build.ps1 < ```powershell # Сборка обработки (файловая база) -powershell.exe -NoProfile -File .claude\skills\epf-build\scripts\epf-build.ps1 -InfoBasePath "C:\Bases\MyDB" -SourceFile "src\МояОбработка.xml" -OutputFile "build\МояОбработка.epf" +powershell.exe -NoProfile -File .claude/skills/epf-build/scripts/epf-build.ps1 -InfoBasePath "C:\Bases\MyDB" -SourceFile "src\МояОбработка.xml" -OutputFile "build\МояОбработка.epf" # Серверная база -powershell.exe -NoProfile -File .claude\skills\epf-build\scripts\epf-build.ps1 -InfoBaseServer "srv01" -InfoBaseRef "MyDB" -UserName "Admin" -Password "secret" -SourceFile "src\МояОбработка.xml" -OutputFile "build\МояОбработка.epf" +powershell.exe -NoProfile -File .claude/skills/epf-build/scripts/epf-build.ps1 -InfoBaseServer "srv01" -InfoBaseRef "MyDB" -UserName "Admin" -Password "secret" -SourceFile "src\МояОбработка.xml" -OutputFile "build\МояОбработка.epf" ``` diff --git a/.claude/skills/epf-dump/SKILL.md b/.claude/skills/epf-dump/SKILL.md index 2f049aea..f7acf49e 100644 --- a/.claude/skills/epf-dump/SKILL.md +++ b/.claude/skills/epf-dump/SKILL.md @@ -38,7 +38,7 @@ allowed-tools: ## Команда ```powershell -powershell.exe -NoProfile -File .claude\skills\epf-dump\scripts\epf-dump.ps1 <параметры> +powershell.exe -NoProfile -File .claude/skills/epf-dump/scripts/epf-dump.ps1 <параметры> ``` ### Параметры скрипта @@ -92,8 +92,8 @@ powershell.exe -NoProfile -File .claude\skills\epf-dump\scripts\epf-dump.ps1 <п ```powershell # Разборка обработки (файловая база) -powershell.exe -NoProfile -File .claude\skills\epf-dump\scripts\epf-dump.ps1 -InfoBasePath "C:\Bases\MyDB" -InputFile "build\МояОбработка.epf" -OutputDir "src" +powershell.exe -NoProfile -File .claude/skills/epf-dump/scripts/epf-dump.ps1 -InfoBasePath "C:\Bases\MyDB" -InputFile "build\МояОбработка.epf" -OutputDir "src" # Серверная база -powershell.exe -NoProfile -File .claude\skills\epf-dump\scripts\epf-dump.ps1 -InfoBaseServer "srv01" -InfoBaseRef "MyDB" -UserName "Admin" -Password "secret" -InputFile "build\МояОбработка.epf" -OutputDir "src" +powershell.exe -NoProfile -File .claude/skills/epf-dump/scripts/epf-dump.ps1 -InfoBaseServer "srv01" -InfoBaseRef "MyDB" -UserName "Admin" -Password "secret" -InputFile "build\МояОбработка.epf" -OutputDir "src" ``` diff --git a/.claude/skills/epf-init/SKILL.md b/.claude/skills/epf-init/SKILL.md index da87304b..7cc1aa3f 100644 --- a/.claude/skills/epf-init/SKILL.md +++ b/.claude/skills/epf-init/SKILL.md @@ -30,7 +30,7 @@ allowed-tools: ## Команда ```powershell -pwsh -NoProfile -File .claude/skills/epf-init/scripts/init.ps1 -Name "" [-Synonym ""] [-SrcDir ""] +powershell.exe -NoProfile -File .claude/skills/epf-init/scripts/init.ps1 -Name "" [-Synonym ""] [-SrcDir ""] ``` ## Что создаётся diff --git a/.claude/skills/epf-validate/SKILL.md b/.claude/skills/epf-validate/SKILL.md index 7193632b..c253b434 100644 --- a/.claude/skills/epf-validate/SKILL.md +++ b/.claude/skills/epf-validate/SKILL.md @@ -33,7 +33,7 @@ allowed-tools: ## Команда ```powershell -powershell.exe -NoProfile -File .claude\skills\epf-validate\scripts\epf-validate.ps1 -ObjectPath "<путь>" +powershell.exe -NoProfile -File .claude/skills/epf-validate/scripts/epf-validate.ps1 -ObjectPath "<путь>" ``` ## Выполняемые проверки diff --git a/.claude/skills/erf-build/SKILL.md b/.claude/skills/erf-build/SKILL.md index 19afd565..b49645f9 100644 --- a/.claude/skills/erf-build/SKILL.md +++ b/.claude/skills/erf-build/SKILL.md @@ -41,7 +41,7 @@ allowed-tools: Используй общий скрипт из epf-build: ```powershell -powershell.exe -NoProfile -File .claude\skills\epf-build\scripts\epf-build.ps1 <параметры> +powershell.exe -NoProfile -File .claude/skills/epf-build/scripts/epf-build.ps1 <параметры> ``` ### Параметры скрипта @@ -74,8 +74,8 @@ powershell.exe -NoProfile -File .claude\skills\epf-build\scripts\epf-build.ps1 < ```powershell # Сборка отчёта (файловая база) -powershell.exe -NoProfile -File .claude\skills\epf-build\scripts\epf-build.ps1 -InfoBasePath "C:\Bases\MyDB" -SourceFile "src\МойОтчёт.xml" -OutputFile "build\МойОтчёт.erf" +powershell.exe -NoProfile -File .claude/skills/epf-build/scripts/epf-build.ps1 -InfoBasePath "C:\Bases\MyDB" -SourceFile "src\МойОтчёт.xml" -OutputFile "build\МойОтчёт.erf" # Серверная база -powershell.exe -NoProfile -File .claude\skills\epf-build\scripts\epf-build.ps1 -InfoBaseServer "srv01" -InfoBaseRef "MyDB" -UserName "Admin" -Password "secret" -SourceFile "src\МойОтчёт.xml" -OutputFile "build\МойОтчёт.erf" +powershell.exe -NoProfile -File .claude/skills/epf-build/scripts/epf-build.ps1 -InfoBaseServer "srv01" -InfoBaseRef "MyDB" -UserName "Admin" -Password "secret" -SourceFile "src\МойОтчёт.xml" -OutputFile "build\МойОтчёт.erf" ``` diff --git a/.claude/skills/erf-dump/SKILL.md b/.claude/skills/erf-dump/SKILL.md index ef08dbf5..8f74399c 100644 --- a/.claude/skills/erf-dump/SKILL.md +++ b/.claude/skills/erf-dump/SKILL.md @@ -40,7 +40,7 @@ allowed-tools: Используй общий скрипт из epf-dump: ```powershell -powershell.exe -NoProfile -File .claude\skills\epf-dump\scripts\epf-dump.ps1 <параметры> +powershell.exe -NoProfile -File .claude/skills/epf-dump/scripts/epf-dump.ps1 <параметры> ``` ### Параметры скрипта @@ -94,8 +94,8 @@ powershell.exe -NoProfile -File .claude\skills\epf-dump\scripts\epf-dump.ps1 <п ```powershell # Разборка отчёта (файловая база) -powershell.exe -NoProfile -File .claude\skills\epf-dump\scripts\epf-dump.ps1 -InfoBasePath "C:\Bases\MyDB" -InputFile "build\МойОтчёт.erf" -OutputDir "src" +powershell.exe -NoProfile -File .claude/skills/epf-dump/scripts/epf-dump.ps1 -InfoBasePath "C:\Bases\MyDB" -InputFile "build\МойОтчёт.erf" -OutputDir "src" # Серверная база -powershell.exe -NoProfile -File .claude\skills\epf-dump\scripts\epf-dump.ps1 -InfoBaseServer "srv01" -InfoBaseRef "MyDB" -UserName "Admin" -Password "secret" -InputFile "build\МойОтчёт.erf" -OutputDir "src" +powershell.exe -NoProfile -File .claude/skills/epf-dump/scripts/epf-dump.ps1 -InfoBaseServer "srv01" -InfoBaseRef "MyDB" -UserName "Admin" -Password "secret" -InputFile "build\МойОтчёт.erf" -OutputDir "src" ``` diff --git a/.claude/skills/erf-init/SKILL.md b/.claude/skills/erf-init/SKILL.md index bf22028e..1308a5c6 100644 --- a/.claude/skills/erf-init/SKILL.md +++ b/.claude/skills/erf-init/SKILL.md @@ -31,7 +31,7 @@ allowed-tools: ## Команда ```powershell -powershell.exe -NoProfile -File .claude\skills\erf-init\scripts\init.ps1 -Name "" [-Synonym ""] [-SrcDir ""] [-WithSKD] +powershell.exe -NoProfile -File .claude/skills/erf-init/scripts/init.ps1 -Name "" [-Synonym ""] [-SrcDir ""] [-WithSKD] ``` ## Что создаётся diff --git a/.claude/skills/erf-validate/SKILL.md b/.claude/skills/erf-validate/SKILL.md index 40e6d121..d18ddb70 100644 --- a/.claude/skills/erf-validate/SKILL.md +++ b/.claude/skills/erf-validate/SKILL.md @@ -33,7 +33,7 @@ allowed-tools: ## Команда ```powershell -powershell.exe -NoProfile -File .claude\skills\epf-validate\scripts\epf-validate.ps1 -ObjectPath "<путь>" +powershell.exe -NoProfile -File .claude/skills/epf-validate/scripts/epf-validate.ps1 -ObjectPath "<путь>" ``` ## Выполняемые проверки diff --git a/.claude/skills/form-add/SKILL.md b/.claude/skills/form-add/SKILL.md index e164ddca..d38bb0a9 100644 --- a/.claude/skills/form-add/SKILL.md +++ b/.claude/skills/form-add/SKILL.md @@ -32,7 +32,7 @@ allowed-tools: ## Команда ```powershell -powershell.exe -NoProfile -File .claude\skills\form-add\scripts\form-add.ps1 -ObjectPath "" -FormName "" [-Purpose ""] [-Synonym ""] [-SetDefault] +powershell.exe -NoProfile -File .claude/skills/form-add/scripts/form-add.ps1 -ObjectPath "" -FormName "" [-Purpose ""] [-Synonym ""] [-SetDefault] ``` ## Purpose — назначение формы diff --git a/.claude/skills/form-compile/SKILL.md b/.claude/skills/form-compile/SKILL.md index b1356d71..d2db3ba5 100644 --- a/.claude/skills/form-compile/SKILL.md +++ b/.claude/skills/form-compile/SKILL.md @@ -31,7 +31,7 @@ allowed-tools: ## Команда ```powershell -powershell.exe -NoProfile -File .claude\skills\form-compile\scripts\form-compile.ps1 -JsonPath "" -OutputPath "" +powershell.exe -NoProfile -File .claude/skills/form-compile/scripts/form-compile.ps1 -JsonPath "" -OutputPath "" ``` ## JSON DSL — справка diff --git a/.claude/skills/form-edit/SKILL.md b/.claude/skills/form-edit/SKILL.md index 797e4da4..03c663c7 100644 --- a/.claude/skills/form-edit/SKILL.md +++ b/.claude/skills/form-edit/SKILL.md @@ -29,7 +29,7 @@ allowed-tools: ## Команда ```powershell -powershell.exe -NoProfile -File .claude\skills\form-edit\scripts\form-edit.ps1 -FormPath "<путь>" -JsonPath "<путь>" +powershell.exe -NoProfile -File .claude/skills/form-edit/scripts/form-edit.ps1 -FormPath "<путь>" -JsonPath "<путь>" ``` ## JSON формат diff --git a/.claude/skills/form-info/SKILL.md b/.claude/skills/form-info/SKILL.md index a51d3b56..69944999 100644 --- a/.claude/skills/form-info/SKILL.md +++ b/.claude/skills/form-info/SKILL.md @@ -29,12 +29,12 @@ allowed-tools: ## Команда ```powershell -powershell.exe -NoProfile -File .claude\skills\form-info\scripts\form-info.ps1 -FormPath "<путь к Form.xml>" +powershell.exe -NoProfile -File .claude/skills/form-info/scripts/form-info.ps1 -FormPath "<путь к Form.xml>" ``` С пагинацией: ```powershell -powershell.exe -NoProfile -File .claude\skills\form-info\scripts\form-info.ps1 -FormPath "<путь>" -Offset 150 +powershell.exe -NoProfile -File .claude/skills/form-info/scripts/form-info.ps1 -FormPath "<путь>" -Offset 150 ``` ## Чтение вывода diff --git a/.claude/skills/form-remove/SKILL.md b/.claude/skills/form-remove/SKILL.md index b988b398..af7fad70 100644 --- a/.claude/skills/form-remove/SKILL.md +++ b/.claude/skills/form-remove/SKILL.md @@ -31,7 +31,7 @@ allowed-tools: ## Команда ```powershell -powershell.exe -NoProfile -File .claude\skills\form-remove\scripts\remove-form.ps1 -ObjectName "" -FormName "" [-SrcDir ""] +powershell.exe -NoProfile -File .claude/skills/form-remove/scripts/remove-form.ps1 -ObjectName "" -FormName "" [-SrcDir ""] ``` ## Что удаляется diff --git a/.claude/skills/form-validate/SKILL.md b/.claude/skills/form-validate/SKILL.md index 35ba8140..fd301e7a 100644 --- a/.claude/skills/form-validate/SKILL.md +++ b/.claude/skills/form-validate/SKILL.md @@ -28,7 +28,7 @@ allowed-tools: ## Команда ```powershell -powershell.exe -NoProfile -File .claude\skills\form-validate\scripts\form-validate.ps1 -FormPath "<путь>" +powershell.exe -NoProfile -File .claude/skills/form-validate/scripts/form-validate.ps1 -FormPath "<путь>" ``` ## Выполняемые проверки diff --git a/.claude/skills/help-add/SKILL.md b/.claude/skills/help-add/SKILL.md index 372ce59c..296d8ae0 100644 --- a/.claude/skills/help-add/SKILL.md +++ b/.claude/skills/help-add/SKILL.md @@ -30,7 +30,7 @@ allowed-tools: ## Команда ```powershell -powershell.exe -NoProfile -File .claude\skills\help-add\scripts\add-help.ps1 -ObjectName "" [-Lang ""] [-SrcDir ""] +powershell.exe -NoProfile -File .claude/skills/help-add/scripts/add-help.ps1 -ObjectName "" [-Lang ""] [-SrcDir ""] ``` ## Что создаётся diff --git a/.claude/skills/interface-edit/SKILL.md b/.claude/skills/interface-edit/SKILL.md index 54f75df6..0e40825a 100644 --- a/.claude/skills/interface-edit/SKILL.md +++ b/.claude/skills/interface-edit/SKILL.md @@ -14,5 +14,5 @@ allowed-tools: Операции: hide, show, place, order, subsystem-order, group-order. Подробнее: `.claude/skills/interface-edit/reference.md` ```powershell -powershell.exe -NoProfile -File '.claude\skills\interface-edit\scripts\interface-edit.ps1' -CIPath '' -Operation hide -Value '' +powershell.exe -NoProfile -File '.claude/skills/interface-edit/scripts/interface-edit.ps1' -CIPath '' -Operation hide -Value '' ``` diff --git a/.claude/skills/interface-validate/SKILL.md b/.claude/skills/interface-validate/SKILL.md index a337fac4..f126a335 100644 --- a/.claude/skills/interface-validate/SKILL.md +++ b/.claude/skills/interface-validate/SKILL.md @@ -23,7 +23,7 @@ allowed-tools: ## Команда ```powershell -powershell.exe -NoProfile -File '.claude\skills\interface-validate\scripts\interface-validate.ps1' -CIPath '' +powershell.exe -NoProfile -File '.claude/skills/interface-validate/scripts/interface-validate.ps1' -CIPath '' ``` ## Проверки (13) diff --git a/.claude/skills/meta-compile/SKILL.md b/.claude/skills/meta-compile/SKILL.md index dcc6496f..5bf94833 100644 --- a/.claude/skills/meta-compile/SKILL.md +++ b/.claude/skills/meta-compile/SKILL.md @@ -21,7 +21,7 @@ allowed-tools: | `OutputDir` | Корневая директория выгрузки конфигурации (где `Catalogs/`, `Documents/` и т.д.) | ```powershell -powershell.exe -NoProfile -File .claude\skills\meta-compile\scripts\meta-compile.ps1 -JsonPath "" -OutputDir "" +powershell.exe -NoProfile -File .claude/skills/meta-compile/scripts/meta-compile.ps1 -JsonPath "" -OutputDir "" ``` `OutputDir` — директория, содержащая подпапки типов (`Catalogs/`, `Documents/`, ...) и `Configuration.xml`. diff --git a/.claude/skills/meta-edit/SKILL.md b/.claude/skills/meta-edit/SKILL.md index 8f905846..e414d770 100644 --- a/.claude/skills/meta-edit/SKILL.md +++ b/.claude/skills/meta-edit/SKILL.md @@ -18,13 +18,13 @@ allowed-tools: ### Inline mode (простые операции) ```powershell -powershell.exe -NoProfile -File .claude\skills\meta-edit\scripts\meta-edit.ps1 -ObjectPath "" -Operation -Value "" +powershell.exe -NoProfile -File .claude/skills/meta-edit/scripts/meta-edit.ps1 -ObjectPath "" -Operation -Value "" ``` ### JSON mode (сложные/комбинированные) ```powershell -powershell.exe -NoProfile -File .claude\skills\meta-edit\scripts\meta-edit.ps1 -DefinitionFile "" -ObjectPath "" +powershell.exe -NoProfile -File .claude/skills/meta-edit/scripts/meta-edit.ps1 -DefinitionFile "" -ObjectPath "" ``` | Параметр | Описание | diff --git a/.claude/skills/meta-edit/json-dsl.md b/.claude/skills/meta-edit/json-dsl.md index 3c2d744b..f585d13b 100644 --- a/.claude/skills/meta-edit/json-dsl.md +++ b/.claude/skills/meta-edit/json-dsl.md @@ -3,7 +3,7 @@ Для сложных и комбинированных операций используйте JSON-файл вместо inline-режима. ```powershell -powershell.exe -NoProfile -File .claude\skills\meta-edit\scripts\meta-edit.ps1 -DefinitionFile "" -ObjectPath "" +powershell.exe -NoProfile -File .claude/skills/meta-edit/scripts/meta-edit.ps1 -DefinitionFile "" -ObjectPath "" ``` ## add — добавить элементы diff --git a/.claude/skills/meta-info/SKILL.md b/.claude/skills/meta-info/SKILL.md index b3501523..81e6c029 100644 --- a/.claude/skills/meta-info/SKILL.md +++ b/.claude/skills/meta-info/SKILL.md @@ -23,7 +23,7 @@ allowed-tools: | `OutFile` | Записать результат в файл (UTF-8 BOM) | ```powershell -powershell.exe -NoProfile -File .claude\skills\meta-info\scripts\meta-info.ps1 -ObjectPath "<путь>" +powershell.exe -NoProfile -File .claude/skills/meta-info/scripts/meta-info.ps1 -ObjectPath "<путь>" ``` ## Три режима diff --git a/.claude/skills/meta-remove/SKILL.md b/.claude/skills/meta-remove/SKILL.md index a531fff8..9bd3b5ca 100644 --- a/.claude/skills/meta-remove/SKILL.md +++ b/.claude/skills/meta-remove/SKILL.md @@ -32,7 +32,7 @@ allowed-tools: ## Команда ```powershell -powershell.exe -NoProfile -File .claude\skills\meta-remove\scripts\meta-remove.ps1 -ConfigDir "<путь>" -Object "Catalog.Товары" +powershell.exe -NoProfile -File .claude/skills/meta-remove/scripts/meta-remove.ps1 -ConfigDir "<путь>" -Object "Catalog.Товары" ``` ## Что делает diff --git a/.claude/skills/meta-validate/SKILL.md b/.claude/skills/meta-validate/SKILL.md index 933c9a6d..edeb31c2 100644 --- a/.claude/skills/meta-validate/SKILL.md +++ b/.claude/skills/meta-validate/SKILL.md @@ -31,7 +31,7 @@ allowed-tools: ## Команда ```powershell -powershell.exe -NoProfile -File .claude\skills\meta-validate\scripts\meta-validate.ps1 -ObjectPath "<путь>" +powershell.exe -NoProfile -File .claude/skills/meta-validate/scripts/meta-validate.ps1 -ObjectPath "<путь>" ``` ## Поддерживаемые типы (23) diff --git a/.claude/skills/role-compile/SKILL.md b/.claude/skills/role-compile/SKILL.md index 4e0dd1e1..9f2513cc 100644 --- a/.claude/skills/role-compile/SKILL.md +++ b/.claude/skills/role-compile/SKILL.md @@ -21,7 +21,7 @@ allowed-tools: | `RolesDir` | Каталог `Roles/` в исходниках конфигурации | ```powershell -powershell.exe -NoProfile -File .claude\skills\role-compile\scripts\role-compile.ps1 -JsonPath "" -OutputDir "" +powershell.exe -NoProfile -File .claude/skills/role-compile/scripts/role-compile.ps1 -JsonPath "" -OutputDir "" ``` `ИмяРоли` автоматически добавляется в `` файла `Configuration.xml` (ожидается в parent от `RolesDir`). diff --git a/.claude/skills/role-info/SKILL.md b/.claude/skills/role-info/SKILL.md index d39068ee..9e52d9c6 100644 --- a/.claude/skills/role-info/SKILL.md +++ b/.claude/skills/role-info/SKILL.md @@ -22,7 +22,7 @@ allowed-tools: ## Запуск скрипта ```powershell -powershell.exe -File .claude\skills\role-info\scripts\role-info.ps1 -RightsPath -OutFile +powershell.exe -File .claude/skills/role-info/scripts/role-info.ps1 -RightsPath -OutFile ``` ### Параметры diff --git a/.claude/skills/role-validate/SKILL.md b/.claude/skills/role-validate/SKILL.md index 53ce2b98..d2b2299d 100644 --- a/.claude/skills/role-validate/SKILL.md +++ b/.claude/skills/role-validate/SKILL.md @@ -20,7 +20,7 @@ allowed-tools: ## Запуск скрипта ```powershell -powershell.exe -NoProfile -File .claude\skills\role-validate\scripts\role-validate.ps1 -RightsPath [-MetadataPath ] [-OutFile ] +powershell.exe -NoProfile -File .claude/skills/role-validate/scripts/role-validate.ps1 -RightsPath [-MetadataPath ] [-OutFile ] ``` ### Параметры diff --git a/.claude/skills/skd-compile/SKILL.md b/.claude/skills/skd-compile/SKILL.md index 6f8c1ac7..b2dc520b 100644 --- a/.claude/skills/skd-compile/SKILL.md +++ b/.claude/skills/skd-compile/SKILL.md @@ -23,10 +23,10 @@ allowed-tools: ```powershell # Из файла -powershell.exe -NoProfile -File .claude\skills\skd-compile\scripts\skd-compile.ps1 -DefinitionFile "" -OutputPath "" +powershell.exe -NoProfile -File .claude/skills/skd-compile/scripts/skd-compile.ps1 -DefinitionFile "" -OutputPath "" # Из строки (без промежуточного файла) -powershell.exe -NoProfile -File .claude\skills\skd-compile\scripts\skd-compile.ps1 -Value '' -OutputPath "" +powershell.exe -NoProfile -File .claude/skills/skd-compile/scripts/skd-compile.ps1 -Value '' -OutputPath "" ``` ## JSON DSL — краткий справочник diff --git a/.claude/skills/skd-edit/SKILL.md b/.claude/skills/skd-edit/SKILL.md index 660fdb81..98a9f3dd 100644 --- a/.claude/skills/skd-edit/SKILL.md +++ b/.claude/skills/skd-edit/SKILL.md @@ -25,7 +25,7 @@ allowed-tools: | `NoSelection` | (опц.) Не добавлять поле в selection варианта | ```powershell -powershell.exe -NoProfile -File .claude\skills\skd-edit\scripts\skd-edit.ps1 -TemplatePath "" -Operation -Value "" +powershell.exe -NoProfile -File .claude/skills/skd-edit/scripts/skd-edit.ps1 -TemplatePath "" -Operation -Value "" ``` ## Пакетный режим (batch) diff --git a/.claude/skills/skd-info/SKILL.md b/.claude/skills/skd-info/SKILL.md index b550ee06..78a17848 100644 --- a/.claude/skills/skd-info/SKILL.md +++ b/.claude/skills/skd-info/SKILL.md @@ -24,7 +24,7 @@ allowed-tools: | `OutFile` | Записать результат в файл (UTF-8 BOM) | ```powershell -powershell.exe -NoProfile -File .claude\skills\skd-info\scripts\skd-info.ps1 -TemplatePath "<путь>" +powershell.exe -NoProfile -File .claude/skills/skd-info/scripts/skd-info.ps1 -TemplatePath "<путь>" ``` С указанием режима: diff --git a/.claude/skills/skd-validate/SKILL.md b/.claude/skills/skd-validate/SKILL.md index 1035c647..6d3f73d4 100644 --- a/.claude/skills/skd-validate/SKILL.md +++ b/.claude/skills/skd-validate/SKILL.md @@ -21,7 +21,7 @@ allowed-tools: | `OutFile` | Записать результат в файл | ```powershell -powershell.exe -NoProfile -File .claude\skills\skd-validate\scripts\skd-validate.ps1 -TemplatePath "<путь>" +powershell.exe -NoProfile -File .claude/skills/skd-validate/scripts/skd-validate.ps1 -TemplatePath "<путь>" ``` ## Проверки (~30) diff --git a/.claude/skills/subsystem-compile/SKILL.md b/.claude/skills/subsystem-compile/SKILL.md index 0e4ed2c7..3fc1de60 100644 --- a/.claude/skills/subsystem-compile/SKILL.md +++ b/.claude/skills/subsystem-compile/SKILL.md @@ -24,7 +24,7 @@ allowed-tools: | `NoValidate` | Пропустить авто-валидацию | ```powershell -powershell.exe -NoProfile -File '.claude\skills\subsystem-compile\scripts\subsystem-compile.ps1' -Value '' -OutputDir '' +powershell.exe -NoProfile -File '.claude/skills/subsystem-compile/scripts/subsystem-compile.ps1' -Value '' -OutputDir '' ``` ## JSON-определение diff --git a/.claude/skills/subsystem-edit/SKILL.md b/.claude/skills/subsystem-edit/SKILL.md index 593f8a4e..6e8e5a83 100644 --- a/.claude/skills/subsystem-edit/SKILL.md +++ b/.claude/skills/subsystem-edit/SKILL.md @@ -24,7 +24,7 @@ allowed-tools: | `NoValidate` | Пропустить авто-валидацию | ```powershell -powershell.exe -NoProfile -File '.claude\skills\subsystem-edit\scripts\subsystem-edit.ps1' -SubsystemPath '' -Operation add-content -Value 'Catalog.Товары' +powershell.exe -NoProfile -File '.claude/skills/subsystem-edit/scripts/subsystem-edit.ps1' -SubsystemPath '' -Operation add-content -Value 'Catalog.Товары' ``` ## Операции diff --git a/.claude/skills/subsystem-info/SKILL.md b/.claude/skills/subsystem-info/SKILL.md index 0b4b0724..4f231376 100644 --- a/.claude/skills/subsystem-info/SKILL.md +++ b/.claude/skills/subsystem-info/SKILL.md @@ -23,7 +23,7 @@ allowed-tools: | `OutFile` | Записать результат в файл (UTF-8 BOM) | ```powershell -powershell.exe -NoProfile -File .claude\skills\subsystem-info\scripts\subsystem-info.ps1 -SubsystemPath "<путь>" +powershell.exe -NoProfile -File .claude/skills/subsystem-info/scripts/subsystem-info.ps1 -SubsystemPath "<путь>" ``` ## Пять режимов diff --git a/.claude/skills/subsystem-validate/SKILL.md b/.claude/skills/subsystem-validate/SKILL.md index 171bcb13..6267c8e1 100644 --- a/.claude/skills/subsystem-validate/SKILL.md +++ b/.claude/skills/subsystem-validate/SKILL.md @@ -21,7 +21,7 @@ allowed-tools: | `OutFile` | Записать результат в файл | ```powershell -powershell.exe -NoProfile -File '.claude\skills\subsystem-validate\scripts\subsystem-validate.ps1' -SubsystemPath '<путь>' +powershell.exe -NoProfile -File '.claude/skills/subsystem-validate/scripts/subsystem-validate.ps1' -SubsystemPath '<путь>' ``` ## Проверки (13) diff --git a/.claude/skills/template-add/SKILL.md b/.claude/skills/template-add/SKILL.md index f99e4da4..aee90e17 100644 --- a/.claude/skills/template-add/SKILL.md +++ b/.claude/skills/template-add/SKILL.md @@ -33,7 +33,7 @@ allowed-tools: ## Команда ```powershell -powershell.exe -NoProfile -File .claude\skills\template-add\scripts\add-template.ps1 -ObjectName "" -TemplateName "" -TemplateType "" [-Synonym ""] [-SrcDir ""] [-SetMainSKD] +powershell.exe -NoProfile -File .claude/skills/template-add/scripts/add-template.ps1 -ObjectName "" -TemplateName "" -TemplateType "" [-Synonym ""] [-SrcDir ""] [-SetMainSKD] ``` ## Маппинг типов diff --git a/.claude/skills/template-remove/SKILL.md b/.claude/skills/template-remove/SKILL.md index 88b84fac..d1713cb8 100644 --- a/.claude/skills/template-remove/SKILL.md +++ b/.claude/skills/template-remove/SKILL.md @@ -31,7 +31,7 @@ allowed-tools: ## Команда ```powershell -powershell.exe -NoProfile -File .claude\skills\template-remove\scripts\remove-template.ps1 -ObjectName "" -TemplateName "" [-SrcDir ""] +powershell.exe -NoProfile -File .claude/skills/template-remove/scripts/remove-template.ps1 -ObjectName "" -TemplateName "" [-SrcDir ""] ``` ## Что удаляется From 48de4cdc2a34acc593ce4653e7f4d27afec43bd5 Mon Sep 17 00:00:00 2001 From: Nick Shirokov Date: Mon, 16 Feb 2026 20:15:20 +0300 Subject: [PATCH 6/6] fix(db-run): use single-string ArgumentList for Cyrillic /Execute paths MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Start-Process without -NoNewWindow uses ShellExecute API which corrupts Cyrillic characters when ArgumentList is passed as an array. Switching to a single concatenated string fixes file-not-found errors for paths like МояОбработка.epf. Co-Authored-By: Claude Opus 4.6 --- .claude/skills/db-run/scripts/db-run.ps1 | 27 +++++++++++++----------- 1 file changed, 15 insertions(+), 12 deletions(-) diff --git a/.claude/skills/db-run/scripts/db-run.ps1 b/.claude/skills/db-run/scripts/db-run.ps1 index ba6aa70d..2249bc1a 100644 --- a/.claude/skills/db-run/scripts/db-run.ps1 +++ b/.claude/skills/db-run/scripts/db-run.ps1 @@ -102,32 +102,35 @@ if (-not $InfoBasePath -and (-not $InfoBaseServer -or -not $InfoBaseRef)) { exit 1 } -# --- Build arguments --- -$arguments = @("ENTERPRISE") +# --- Build arguments as single string --- +# Note: Start-Process without -NoNewWindow uses ShellExecute. +# Passing ArgumentList as array can corrupt Cyrillic when ShellExecute +# re-joins elements. Single string avoids this. +$argString = "ENTERPRISE" if ($InfoBaseServer -and $InfoBaseRef) { - $arguments += "/S", "`"$InfoBaseServer/$InfoBaseRef`"" + $argString += " /S `"$InfoBaseServer/$InfoBaseRef`"" } else { - $arguments += "/F", "`"$InfoBasePath`"" + $argString += " /F `"$InfoBasePath`"" } -if ($UserName) { $arguments += "/N`"$UserName`"" } -if ($Password) { $arguments += "/P`"$Password`"" } +if ($UserName) { $argString += " /N`"$UserName`"" } +if ($Password) { $argString += " /P`"$Password`"" } # --- Optional params --- if ($Execute) { - $arguments += "/Execute", "`"$Execute`"" + $argString += " /Execute `"$Execute`"" } if ($CParam) { - $arguments += "/C", "`"$CParam`"" + $argString += " /C `"$CParam`"" } if ($URL) { - $arguments += "/URL", "`"$URL`"" + $argString += " /URL `"$URL`"" } -$arguments += "/DisableStartupDialogs" +$argString += " /DisableStartupDialogs" # --- Execute (background, no wait) --- -Write-Host "Running: 1cv8.exe $($arguments -join ' ')" -Start-Process -FilePath $V8Path -ArgumentList $arguments +Write-Host "Running: 1cv8.exe $argString" +Start-Process -FilePath $V8Path -ArgumentList $argString Write-Host "1C:Enterprise launched" -ForegroundColor Green