diff --git a/.claude/skills/skd-edit/SKILL.md b/.claude/skills/skd-edit/SKILL.md
index f867dda4..76086832 100644
--- a/.claude/skills/skd-edit/SKILL.md
+++ b/.claude/skills/skd-edit/SKILL.md
@@ -82,7 +82,16 @@ Shorthand: `"Имя [Заголовок]: тип = Выражение #noFilter
Shorthand: `"Имя [Заголовок]: тип = значение @флаги"`. `[Заголовок]` опциональный — добавляет `
`.
-`@autoDates` генерирует пару скрытых параметров `ДатаНачала`/`ДатаОкончания` для StandardPeriod-параметра — для БСП-отчётов, чтобы получить пару полей «Начало/Конец» в панели быстрых настроек.
+Флаги:
+- `@autoDates` — генерирует пару скрытых параметров `ДатаНачала`/`ДатаОкончания` для StandardPeriod-параметра.
+- `@hidden` — скрывает параметр от пользовательских настроек (для параметров-констант, используемых в запросе).
+- `@always` — параметр всегда подставляется в запрос. Часто вместе с `@hidden`, но используется и отдельно (для видимых обязательных параметров типа отчётного периода).
+
+```
+"ПС: CatalogRef.Контрагенты = Справочник.Контрагенты.ПустаяСсылка @hidden"
+"Период: StandardPeriod = LastMonth @always"
+"ПСчет: ChartOfAccountsRef.Хозрасчетный = ПланСчетов.Хозрасчетный.X @hidden @always"
+```
### modify-parameter — изменить существующий параметр
@@ -93,12 +102,18 @@ Shorthand: `"Имя [Заголовок]: тип = значение @флаги"
"ПорядокОкругления [Округление сумм] denyIncompleteValues=true"
"ПериодОтчета [Отчетный период]" # только title
"ПорядокОкругления availableValue=Перечисление.Округления.Окр1 presentation=руб."
+"СчетПС value=ПланСчетов.Хозрасчетный.КассаПредприятия"
+"Контрагент @hidden @always"
```
`[Заголовок]` опциональный — устанавливает или заменяет ``. Можно вызывать без других kv-пар, чтобы только обновить title.
`availableValue=` добавляет один элемент списка допустимых значений (можно несколько через `;;`). Тип значения определяется автоматически (DesignTimeValue для ссылок).
+`value=` заменяет значение параметра (тип значения подбирается автоматически по объявленному типу параметра).
+
+Флаги `@hidden` / `@always` — те же, что и в `add-parameter`. Идемпотентны.
+
### rename-parameter — переименовать параметр
Shorthand: `"OldName => NewName"`. Атомарно обновляет имя параметра, ссылки `&Имя` в выражениях других параметров (только полные совпадения, `&ПериодX` не задевается), и записи в `dataParameters` всех вариантов. Текст запроса не трогает — переименование строго в области параметров.
diff --git a/.claude/skills/skd-edit/scripts/skd-edit.ps1 b/.claude/skills/skd-edit/scripts/skd-edit.ps1
index ac0dc892..0cf61b20 100644
--- a/.claude/skills/skd-edit/scripts/skd-edit.ps1
+++ b/.claude/skills/skd-edit/scripts/skd-edit.ps1
@@ -1,4 +1,4 @@
-# skd-edit v1.12 — Atomic 1C DCS editor
+# skd-edit v1.13 — Atomic 1C DCS editor
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
param(
[Parameter(Mandatory)]
@@ -297,13 +297,23 @@ function Parse-CalcShorthand {
function Parse-ParamShorthand {
param([string]$s)
- $result = @{ name = ""; type = ""; value = $null; autoDates = $false; title = $null }
+ $result = @{ name = ""; type = ""; value = $null; autoDates = $false; title = $null; hidden = $false; always = $false }
if ($s -match '@autoDates') {
$result.autoDates = $true
$s = $s -replace '\s*@autoDates', ''
}
+ if ($s -match '@hidden\b') {
+ $result.hidden = $true
+ $s = $s -replace '\s*@hidden\b', ''
+ }
+
+ if ($s -match '@always\b') {
+ $result.always = $true
+ $s = $s -replace '\s*@always\b', ''
+ }
+
# Extract optional [Title] (mirrors Parse-FieldShorthand)
if ($s -match '\[([^\]]*)\]') {
$result.title = $Matches[1].Trim()
@@ -873,6 +883,15 @@ function Build-ParamFragment {
foreach ($vl in $valueLines) { $lines += $vl }
}
+ if ($parsed.hidden) {
+ $lines += "$i`ttrue"
+ $lines += "$i`tfalse"
+ }
+
+ if ($parsed.always) {
+ $lines += "$i`t"
+ }
+
$lines += "$i"
$fragments += ($lines -join "`r`n")
@@ -1796,6 +1815,12 @@ switch ($Operation) {
$paramName = $parts[0].Trim()
$rest = if ($parts.Count -gt 1) { $parts[1].Trim() } else { "" }
+ # Extract @hidden / @always flags
+ $flagHidden = $false
+ $flagAlways = $false
+ if ($rest -match '@hidden\b') { $flagHidden = $true; $rest = ($rest -replace '\s*@hidden\b', '').Trim() }
+ if ($rest -match '@always\b') { $flagAlways = $true; $rest = ($rest -replace '\s*@always\b', '').Trim() }
+
# Find parameter element
$paramEl = Find-ElementByChildValue $xmlDoc.DocumentElement "parameter" "name" $paramName $schNs
if (-not $paramEl) {
@@ -1970,6 +1995,57 @@ switch ($Operation) {
}
Write-Host "[OK] Parameter `"$paramName`": availableValue added"
}
+
+ # Process @hidden / @always flags (idempotent)
+ if ($flagHidden) {
+ # useRestriction → true (insert after , before //...)
+ $urEl = $null
+ foreach ($ch in $paramEl.ChildNodes) {
+ if ($ch.NodeType -eq 'Element' -and $ch.LocalName -eq 'useRestriction' -and $ch.NamespaceURI -eq $schNs) { $urEl = $ch; break }
+ }
+ if ($urEl) {
+ if ($urEl.InnerText.Trim() -ne 'true') { $urEl.InnerText = 'true' }
+ } else {
+ $refNode = $null
+ foreach ($child in $paramEl.ChildNodes) {
+ if ($child.NodeType -eq 'Element' -and $child.LocalName -in @('expression','availableAsField','availableValue','denyIncompleteValues','use')) { $refNode = $child; break }
+ }
+ $nodes = Import-Fragment $xmlDoc "$childIndenttrue"
+ foreach ($node in $nodes) { Insert-BeforeElement $paramEl $node $refNode $childIndent }
+ }
+
+ # availableAsField → false (insert after , before //