Files
cc-1c-skills/.claude/skills/skd-edit/SKILL.md
T
Nick Shirokov 6d119eb473 feat(skd-edit): значение-список параметра в шортхенде (+skd-compile)
Значение по умолчанию у параметра СКД может быть списком (несколько <value>
подряд при valueListAllowed=true). Раньше задать список можно было только через
объектную модель skd-compile; шортхенд (add/modify-parameter, parameters) парсил
value= как скаляр.

Теперь в шортхенде: value=v1, v2, v3 задаёт список (кавычки '...' для запятой
внутри значения). Если задан список (>=2 элементов), valueListAllowed выводится
автоматически. Авто-вывод только в шортхенде — объектная модель остаётся
буквальной (bit-perfect round-trip сохранён).

skd-edit (ps1+py v1.25):
- Split-QuotedCsv/Parse-ValueList — токенайзер по запятым с учётом кавычек, БЕЗ
  разреза по ':' (важно для дат вида 2024-01-01T12:30:45)
- add-parameter: эмит N <value>
- modify-parameter: пред-выемка value=-списка, удаление ВСЕХ старых <value>,
  авто valueListAllowed; scalar value= теперь тоже схлопывает список в один <value>

skd-compile (ps1+py v1.105): тот же разбор списка в Parse-ParamShorthand;
объектная модель не тронута.

Документация: skd-edit/skd-compile SKILL.md (поведение), docs/1c-dcs-spec.md и
docs/skd-dsl-spec.md (формат).

Тесты: add-list, modify list<->scalar, список дат (двоеточия целы), compile-
шортхенд. Полный регресс 413/413 на ps1 и py.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-04 12:26:57 +03:00

23 KiB
Raw Blame History

name, description, argument-hint, allowed-tools
name description argument-hint allowed-tools
skd-edit Точечное редактирование схемы компоновки данных 1С (СКД). Используй когда нужно модифицировать существующую СКД — добавить поля, итоги, фильтры, параметры, изменить текст запроса <TemplatePath> -Operation <op> -Value <value>
Bash
Read
Write
Glob

/skd-edit — точечное редактирование СКД (Template.xml)

Атомарные операции модификации существующей схемы компоновки данных: добавление, удаление и модификация полей, итогов, фильтров, параметров, настроек варианта, управление структурой, замена запроса.

Параметры и команда

Параметр Описание
TemplatePath Путь к Template.xml (или к папке — автодополнение Ext/Template.xml)
Operation Операция (см. список ниже)
Value Значение операции (shorthand-строка или текст запроса)
DataSet (опц.) Имя набора данных (умолч. первый)
Variant (опц.) Имя варианта настроек (умолч. первый)
NoSelection (опц.) Не добавлять поле в selection варианта
powershell.exe -NoProfile -File "${CLAUDE_SKILL_DIR}/scripts/skd-edit.ps1" -TemplatePath "<path>" -Operation <op> -Value "<value>"

Пакетный режим (batch)

Несколько значений в одном вызове через разделитель ;;:

-Operation add-field -Value "Цена: decimal(15,2) ;; Количество: decimal(15,3) ;; Сумма: decimal(15,2)"

Работает для всех операций кроме set-query, set-structure и add-dataSet.

Операции

add-field — добавить поле в набор данных

Shorthand: "Имя [Заголовок]: тип @роль #ограничение".

"Цена: decimal(15,2)"
"Организация [Орг-ция]: CatalogRef.Организации @dimension"
"Служебное: string #noFilter #noOrder"

Поле добавляется в набор и в selection варианта (если нет -NoSelection). Дубликат dataPath — предупреждение, пропуск.

Чтобы поле попало в selection не варианта, а конкретной группировки структуры — используй -NoSelection и затем add-selection "Имя @group=ИмяГруппы".

add-total — добавить итог

Shorthand: "<dataPath>: <выражение>". Если выражение — известная аггрегатная функция без скобок (Сумма, Количество, Минимум, Максимум, Среднее), оно автоматически оборачивается в Func(dataPath). Если функция со скобками или произвольное выражение — используется как есть.

"Цена: Среднее"                  # → Среднее(Цена)
"Стоимость: Сумма(Кол * Цена)"   # → как есть
"Проверка: Проверка"             # identity: выражение = Проверка

add-calculated-field — добавить вычисляемое поле

Shorthand: "Имя [Заголовок]: тип = Выражение #noFilter #noOrder #noGroup".

"Маржа = Продажа - Закупка"
"Наценка [Наценка, %]: decimal(10,2) = Маржа / Закупка * 100"
"Служебное: string = \"\" #noFilter #noOrder #noGroup"

#noFilter, #noOrder, #noGroup, #noField<useRestriction> (аналогично add-field).

Также добавляется в selection варианта.

add-parameter — добавить параметр

"Период [Отчетный период]: StandardPeriod = LastMonth @autoDates"
"Организация: CatalogRef.Организации"

Shorthand: "Имя [Заголовок]: тип = значение [availableValue=список] [@флаги]". [Заголовок] опциональный — добавляет <title>.

Флаги:

  • @autoDates — генерирует пару скрытых параметров ДатаНачала/ДатаОкончания для StandardPeriod-параметра.
  • @hidden — скрывает параметр от пользовательских настроек (для параметров-констант, используемых в запросе).
  • @always — параметр всегда подставляется в запрос. Часто вместе с @hidden, но используется и отдельно (для видимых обязательных параметров типа отчётного периода).
  • @valueList — разрешает передавать в параметр список значений (при значении-списке ниже подразумевается автоматически, отдельно указывать не обязательно).

Значение-список: несколько значений по умолчанию задаются через запятую в значение. Для запятой внутри одного значения — кавычки '...'.

"Виды [Виды субконто]: ChartOfCharacteristicTypesRef.ВидыСубконтоХозрасчетные = ПланВидовХарактеристик.ВидыСубконтоХозрасчетные.Контрагенты, ПланВидовХарактеристик.ВидыСубконтоХозрасчетные.Договоры"
"ПС: CatalogRef.Контрагенты = Справочник.Контрагенты.ПустаяСсылка @hidden"
"Период: StandardPeriod = LastMonth @always"
"ПСчет: ChartOfAccountsRef.Хозрасчетный = ПланСчетов.Хозрасчетный.X @hidden @always"
"Округление: EnumRef.Округления = Окр1 availableValue=Перечисление.Округления.Окр1: руб., Перечисление.Округления.Окр1000: тыс."

availableValue= задаёт начальный список допустимых значений. Формат списка: v1[: p1], v2[: p2], ... — элементы через ,, представление после :. Если в значении или представлении встречается , или : — оборачивай в одинарные кавычки '...':

"Округление: ... = Окр1 availableValue=Окр1_00: 'руб., коп.', Окр1: руб."

modify-parameter — изменить существующий параметр

Shorthand: "ИмяПараметра [Заголовок] [ключ=значение]... [@флаги]". Находит параметр по имени, обновляет указанные свойства.

"ПорядокОкругления use=Always"
"ПорядокОкругления [Округление сумм] denyIncompleteValues=true"
"ПериодОтчета [Отчетный период]"                                  # только title
"ПорядокОкругления availableValue=Перечисление.Округления.Окр1: руб., Перечисление.Округления.Окр1000: тыс."
"СчетПС value=ПланСчетов.Хозрасчетный.КассаПредприятия"
"Виды value=ПланВидовХарактеристик.ВидыСубконтоХозрасчетные.Контрагенты, ПланВидовХарактеристик.ВидыСубконтоХозрасчетные.Договоры"
"Контрагент @hidden @always"

[Заголовок] опциональный — устанавливает или заменяет <title>. Можно вызывать без других kv-пар, чтобы только обновить title.

availableValue= заменяет весь список допустимых значений (старые удаляются). Формат и кавычки — те же, что в add-parameter.

value= заменяет значение параметра. Несколько значений через запятую → список значений (заменяет все прежние); для запятой внутри значения — кавычки '...'.

Флаги @hidden / @always — те же, что и в add-parameter. Идемпотентны.

rename-parameter — переименовать параметр

Shorthand: "OldName => NewName". Атомарно обновляет имя параметра, ссылки &Имя в выражениях других параметров (только полные совпадения, &ПериодX не задевается), и записи в dataParameters всех вариантов. Текст запроса не трогает — переименование строго в области параметров.

"Период => ПериодОтчета"

reorder-parameters — переставить параметры в указанном порядке

Shorthand: "Имя1, Имя2, Имя3". Частичный список — указанные параметры идут первыми в заданном порядке, остальные сохраняют исходный порядок и идут в конце. Параметры из списка, которых нет в схеме — warning, пропуск.

"ПериодОтчета, НачалоПериода, КонецПериода"

add-filter — добавить фильтр в вариант

Shorthand: "Поле оператор значение @флаги". Флаги: @off (use=false), @user (userSettingID=auto), @quickAccess, @normal, @inaccessible.

"Номенклатура = _ @off @user"
"Дата >= 2024-01-01T00:00:00"
"Статус filled"

add-dataParameter — добавить параметр данных в вариант

Shorthand: "Имя [= значение] @флаги".

"Период = LastMonth @user"
"Организация @off @user"

add-order — добавить сортировку

Shorthand: "Поле [desc]". По умолчанию asc. Auto — авто-элемент.

"Количество desc"
"Auto"

add-selection — добавить элемент выборки

"Номенклатура"
"Auto"
"Folder(Поступление: ПолеА, ПолеБ, ПолеВ)"

Folder(Название: поле1, поле2) — группа полей (SelectedItemFolder) с заголовком и placement=Auto.

@group=ИмяГруппировки — добавить в selection именованной группировки (вместо уровня варианта):

"Folder(Поступление: ПолеА, ПолеБ) @group=ДанныеОтчета"

Shorthand: "Источник > Приёмник on ВырИсточника = ВырПриёмника [param Имя]".

"Набор1 > Набор2 on Поле1 = Поле2"
"Набор1 > Набор2 on Поле1 = Поле2 [param Связь]"

add-dataSet — добавить набор данных

Shorthand: "Имя: ТЕКСТ_ЗАПРОСА" или "ТЕКСТ_ЗАПРОСА" (авто-имя НаборДанныхN).

"Доп: ВЫБРАТЬ 1 КАК Тест"
"ВЫБРАТЬ Ссылка ИЗ Справочник.Номенклатура"
"Продажи: @queries/sales.sql"

dataSource берётся из первого существующего. Дубликат имени — предупреждение, пропуск. Не поддерживает пакетный режим (запрос может содержать ;;).

add-variant — добавить вариант настроек

Shorthand: "Имя [Представление]". Представление опционально, по умолчанию = имя.

"Детальный"
"Детальный [Детальный отчёт]"

Создаёт вариант с Auto selection + detail group. Дубликат имени — предупреждение, пропуск.

add-conditionalAppearance — добавить условное оформление

Shorthand: "Параметр = значение [when условие] [for Поле1, Поле2]". Блок when — синтаксис add-filter (Поле оператор значение).

"ЦветТекста = web:Red when Сумма < 0"
"ЦветФона = web:LightGreen when Статус = Одобрен for Статус"
"МинимальнаяШирина = 50 for Организация"
"Формат = ЧДЦ=2 for Цена, Сумма"

Типы значений appearance (автодетект): web:*/style:*/win:* → Color, true/false → Boolean, параметр Формат/Текст/Заголовок → LocalStringType, иначе String.

Типы значений фильтра (автодетект): Перечисление.*/Справочник.*/ПланСчетов.*/Документ.* → DesignTimeValue, true/false → Boolean, дата → DateTime, числа → Decimal, иначе String.

OrGroup: несколько условий через or в when объединяются в FilterItemGroup/OrGroup:

"Формат = ЧЦ=15; ЧДЦ=0 when ПараметрыДанных.Округление = Перечисление.Округления.Окр1 or ПараметрыДанных.Округление = Перечисление.Округления.Окр1000"

Важно: для параметров данных используйте префикс ПараметрыДанных. в поле фильтра.

add-drilldown — подключить расшифровку к ресурсам в шаблонах

Value — имена ресурсов (как в полях/вычисляемых полях СКД) через запятую.

"ПоступлениеИзПроизводства, ВыбытиеПрочее"
"Сумма_Дт83, Сумма_Дт99, Сумма_68, Сумма_84"

Подключает DrillDown по ИмяРесурса ко всем шаблонам, содержащим указанные ресурсы. Идемпотентно.

set-query — заменить текст запроса

Не поддерживает пакетный режим. Value — полный текст запроса или @path/to/file.sql (ссылка на внешний файл). Путь разрешается относительно Template.xml, затем CWD.

Когда что: существенная переработка (добавить поля, соединения, переписать пакет) → выгрузи запрос через /skd-info <tpl> -Mode query -Name <набор> -Raw -OutFile file.sql, отредактируй файл, верни set-query @file. -Raw отдаёт запрос целиком без декораций, поэтому выгрузка ↔ возврат точны (включая многопакетные запросы). Точечная замена (переименовать идентификатор, заменить подстроку) → выгрузка не нужна, используй patch-query ниже.

patch-query — точечная замена в тексте запроса

Shorthand: "старое => новое [@once]". По умолчанию заменяет все вхождения подстроки. Поддерживает пакетный режим и -DataSet.

"СубконтоДт1) В => СубконтоКт1) В"
"КАК ВТ_СтароеИмя => КАК ВТ_НовоеИмя @once"

@once — упасть с ошибкой, если в запросе не ровно одно вхождение. Защищает от случайных замен в комментариях и однотипных идентификаторах.

Многострочные подстроки поддерживаются.

set-outputParameter — установить параметр вывода

"Заголовок = Мой отчёт"
"ВыводитьЗаголовок = true"

Если параметр уже существует — заменяет значение.

set-structure — установить структуру варианта

Shorthand: "Поле1 > Поле2 > details". > — вложенный уровень группировки, , — несколько полей в одном уровне, details — детальные записи. Заменяет всю структуру полностью (включая Selection/order/filter/conditionalAppearance каждой группы). Для точечной модификации полей группировки с сохранением настроек — используй modify-structure. Не поддерживает пакетный режим.

"Организация > Номенклатура > details"
"Валюта, НаименованиеБанка, ИНН"
"details"
"СчетМеждународногоУчета @name=ДанныеОтчета"

@name=Имя — присваивает имя группировке (<dcsset:name>). Используется для привязки шаблонов через groupName.

modify-structure — изменить поля группировки существующей группы

Тот же shorthand что и set-structure. Находит группу по @name=, заменяет только <groupItems> (поля группировки). Selection/order/filter/conditionalAppearance/outputParameters группы сохраняются. Без @name= — ошибка.

"Валюта @name=ДанныеОтчета"
"Валюта, НаименованиеБанка @name=ДанныеОтчета"
"details @name=ДанныеОтчета"

modify-field — изменить существующее поле

Тот же shorthand что и add-field. Находит по dataPath, объединяет свойства (непустые переопределяют), сохраняет позицию.

"Цена [Цена USD]: decimal(10,4) @dimension"

set-field-role — установить роль поля

Shorthand: "<dataPath> [@флаги] [kv=значение]". Полностью заменяет роль поля. Если в значении только dataPath без флагов/kv — удаляет роль.

"Сумма"                                                                 # снять роль полностью
"СуммаОстаток @balance"                                                 # простая балансовая роль
"СуммаНач @balance balanceGroupName=Сумма balanceType=OpeningBalance"   # с уточнением
"Контрагент @dimension parentDimension=Группа"
"Период @period"                                                        # роль периода

Флаги: @balance, @dimension, @account, @period, @required, @autoOrder, @ignoreNullValues. KV: balanceGroupName, balanceType (OpeningBalance/ClosingBalance), parentDimension, accountTypeExpression, orderType (Asc/Desc), expression, periodNumber, periodType.

Поддерживает пакетный режим (;;).

modify-filter — изменить существующий фильтр

Тот же shorthand что и add-filter. Находит по полю, обновляет оператор/значение/флаги. См. правило для <use> ниже.

modify-dataParameter — изменить параметр данных

Тот же shorthand что и add-dataParameter. Находит по имени, обновляет значение/флаги. См. правило для <use> ниже.

Правило <use> для modify-filter / modify-dataParameter

В отличие от add-*, в modify-* поле <use> обновляется только если флаг задан явно:

  • @off — установить <use>false</use>
  • @on — убрать существующий <use>false</use> (включить параметр)
  • ни @off, ни @on не задано — <use> не трогается, существующее значение сохраняется (важно: это значит, что отключённый параметр останется отключённым после модификации других свойств)

remove-* и clear-*

Операция Value Действие
remove-field dataPath Удаляет поле из набора + из selection варианта
remove-total dataPath Удаляет итог
remove-calculated-field dataPath Удаляет вычисляемое поле + из selection
remove-parameter name Удаляет параметр
remove-filter поле Удаляет первый фильтр с указанным полем
clear-selection * Очищает все элементы selection
clear-order * Очищает все элементы order
clear-filter * Очищает все элементы filter
clear-conditionalAppearance * Очищает все правила условного оформления

Верификация

/skd-validate <TemplatePath>    — валидация структуры после редактирования
/skd-info <TemplatePath>        — визуальная сводка