1c-skd-edit · diff

git:20260428.73f4551 to git:20260828.2b87e3e

51 added, 51 removed. Audit A to A.

---
name: 1c-skd-edit
- description: Точечное редактирование схемы компоновки данных 1С (СКД). Используй когда нужно модифицировать существующую СКД — добавить поля, итоги, фильтры, параметры, изменить текст запроса
+ description: Точечное редактирование схемы компоновки данных 1С (СКД). Используй когда нужно модифицировать существующую СКД - добавить поля, итоги, фильтры, параметры, изменить текст запроса
argument-hint: <TemplatePath> -Operation <op> -Value <value>
allowed-tools:
- Bash
- Read
- Write
- Glob
---
- # /skd-edit — точечное редактирование СКД (Template.xml)
+ # /skd-edit - точечное редактирование СКД (Template.xml)
Атомарные операции модификации существующей схемы компоновки данных: добавление, удаление и модификация полей, итогов, фильтров, параметров, настроек варианта, управление структурой, замена запроса.
## Параметры и команда
| Параметр | Описание |
|----------|----------|
- | `TemplatePath` | Путь к Template.xml (или к папке — автодополнение Ext/Template.xml) |
+ | `TemplatePath` | Путь к Template.xml (или к папке - автодополнение Ext/Template.xml) |
| `Operation` | Операция (см. список ниже) |
| `Value` | Значение операции (shorthand-строка или текст запроса) |
| `DataSet` | (опц.) Имя набора данных (умолч. первый) |
| `Variant` | (опц.) Имя варианта настроек (умолч. первый) |
| `NoSelection` | (опц.) Не добавлять поле в selection варианта |
```powershell
powershell.exe -NoProfile -File skills/1c-skd-edit/scripts/skd-edit.ps1 -TemplatePath "<path>" -Operation <op> -Value "<value>"
```
## Пакетный режим (batch)
Несколько значений в одном вызове через разделитель `;;`:
```powershell
-Operation add-field -Value "Цена: decimal(15,2) ;; Количество: decimal(15,3) ;; Сумма: decimal(15,2)"
```
Работает для всех операций кроме `set-query`, `set-structure` и `add-dataSet`.
## Операции
- ### add-field — добавить поле в набор данных
+ ### add-field - добавить поле в набор данных
Shorthand: `"Имя [Заголовок]: тип @роль #ограничение"`.
```
"Цена: decimal(15,2)"
"Организация [Орг-ция]: CatalogRef.Организации @dimension"
"Служебное: string #noFilter #noOrder"
```
- Поле добавляется в набор и в selection варианта (если нет `-NoSelection`). Дубликат dataPath — предупреждение, пропуск.
+ Поле добавляется в набор и в selection варианта (если нет `-NoSelection`). Дубликат dataPath - предупреждение, пропуск.
- ### add-total — добавить итог
+ ### add-total - добавить итог
```
"Цена: Среднее"
"Стоимость: Сумма(Кол * Цена)"
```
- ### add-calculated-field — добавить вычисляемое поле
+ ### 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 — добавить параметр
+ ### add-parameter - добавить параметр
```
"Период [Отчетный период]: StandardPeriod = LastMonth @autoDates"
"Организация: CatalogRef.Организации"
```
- Shorthand: `"Имя [Заголовок]: тип = значение @флаги"`. `[Заголовок]` опциональный — добавляет `<title>`.
+ Shorthand: `"Имя [Заголовок]: тип = значение @флаги"`. `[Заголовок]` опциональный - добавляет `<title>`.
- `@autoDates` генерирует пару скрытых параметров `ДатаНачала`/`ДатаОкончания` для StandardPeriod-параметра — для БСП-отчётов, чтобы получить пару полей «Начало/Конец» в панели быстрых настроек.
+ `@autoDates` генерирует пару скрытых параметров `ДатаНачала`/`ДатаОкончания` для StandardPeriod-параметра - для БСП-отчетов, чтобы получить пару полей "Начало/Конец" в панели быстрых настроек.
- ### modify-parameter — изменить существующий параметр
+ ### modify-parameter - изменить существующий параметр
Находит параметр по имени, добавляет/обновляет свойства.
```
"ПорядокОкругления use=Always"
"ПорядокОкругления [Округление сумм] denyIncompleteValues=true"
"ПериодОтчета [Отчетный период]" # только title
"ПорядокОкругления availableValue=Перечисление.Округления.Окр1 presentation=руб."
```
- `[Заголовок]` опциональный — устанавливает или заменяет `<title>`. Можно вызывать без других kv-пар, чтобы только обновить title.
+ `[Заголовок]` опциональный - устанавливает или заменяет `<title>`. Можно вызывать без других kv-пар, чтобы только обновить title.
`availableValue=` добавляет один элемент списка допустимых значений (можно несколько через `;;`). Тип значения определяется автоматически (DesignTimeValue для ссылок).
- ### rename-parameter — переименовать параметр
+ ### rename-parameter - переименовать параметр
- Shorthand: `"OldName => NewName"`. Атомарно обновляет имя параметра, ссылки `&Имя` в выражениях других параметров (только полные совпадения, `&ПериодX` не задевается), и записи в `dataParameters` всех вариантов. Текст запроса не трогает — переименование строго в области параметров.
+ Shorthand: `"OldName => NewName"`. Атомарно обновляет имя параметра, ссылки `&Имя` в выражениях других параметров (только полные совпадения, `&ПериодX` не задевается), и записи в `dataParameters` всех вариантов. Текст запроса не трогает - переименование строго в области параметров.
```
"Период => ПериодОтчета"
```
- ### reorder-parameters — переставить параметры в указанном порядке
+ ### reorder-parameters - переставить параметры в указанном порядке
- Shorthand: `"Имя1, Имя2, Имя3"`. Частичный список — указанные параметры идут первыми в заданном порядке, остальные сохраняют исходный порядок и идут в конце. Параметры из списка, которых нет в схеме — warning, пропуск.
+ Shorthand: `"Имя1, Имя2, Имя3"`. Частичный список - указанные параметры идут первыми в заданном порядке, остальные сохраняют исходный порядок и идут в конце. Параметры из списка, которых нет в схеме - warning, пропуск.
```
"ПериодОтчета, НачалоПериода, КонецПериода"
```
- ### add-filter — добавить фильтр в вариант
+ ### add-filter - добавить фильтр в вариант
Shorthand: `"Поле оператор значение @флаги"`. Флаги: `@off` (use=false), `@user` (userSettingID=auto), `@quickAccess`, `@normal`, `@inaccessible`.
```
"Номенклатура = _ @off @user"
"Дата >= 2024-01-01T00:00:00"
"Статус filled"
```
- ### add-dataParameter — добавить параметр данных в вариант
+ ### add-dataParameter - добавить параметр данных в вариант
Shorthand: `"Имя [= значение] @флаги"`.
```
"Период = LastMonth @user"
"Организация @off @user"
```
- ### add-order — добавить сортировку
+ ### add-order - добавить сортировку
- Shorthand: `"Поле [desc]"`. По умолчанию asc. `Auto` — авто-элемент.
+ Shorthand: `"Поле [desc]"`. По умолчанию asc. `Auto` - авто-элемент.
```
"Количество desc"
"Auto"
```
- ### add-selection — добавить элемент выборки
+ ### add-selection - добавить элемент выборки
```
"Номенклатура"
"Auto"
"Folder(Поступление: ПолеА, ПолеБ, ПолеВ)"
```
- `Folder(Название: поле1, поле2)` — группа полей (SelectedItemFolder) с заголовком и `placement=Auto`.
+ `Folder(Название: поле1, поле2)` - группа полей (SelectedItemFolder) с заголовком и `placement=Auto`.
- `@group=ИмяГруппировки` — добавить в selection именованной группировки (вместо уровня варианта):
+ `@group=ИмяГруппировки` - добавить в selection именованной группировки (вместо уровня варианта):
```
"Folder(Поступление: ПолеА, ПолеБ) @group=ДанныеОтчета"
```
- ### add-dataSetLink — добавить связь наборов данных
+ ### add-dataSetLink - добавить связь наборов данных
- Shorthand: `"Источник > Приёмник on ВырИсточника = ВырПриёмника [param Имя]"`.
+ Shorthand: `"Источник > Приемник on ВырИсточника = ВырПриемника [param Имя]"`.
```
"Набор1 > Набор2 on Поле1 = Поле2"
"Набор1 > Набор2 on Поле1 = Поле2 [param Связь]"
```
- ### add-dataSet — добавить набор данных
+ ### add-dataSet - добавить набор данных
Shorthand: `"Имя: ТЕКСТ_ЗАПРОСА"` или `"ТЕКСТ_ЗАПРОСА"` (авто-имя `НаборДанныхN`).
```
"Доп: ВЫБРАТЬ 1 КАК Тест"
"ВЫБРАТЬ Ссылка ИЗ Справочник.Номенклатура"
"Продажи: @queries/sales.sql"
```
- `dataSource` берётся из первого существующего. Дубликат имени — предупреждение, пропуск. Не поддерживает пакетный режим (запрос может содержать `;;`).
+ `dataSource` берется из первого существующего. Дубликат имени - предупреждение, пропуск. Не поддерживает пакетный режим (запрос может содержать `;;`).
- ### add-variant — добавить вариант настроек
+ ### add-variant - добавить вариант настроек
Shorthand: `"Имя [Представление]"`. Представление опционально, по умолчанию = имя.
```
"Детальный"
- "Детальный [Детальный отчёт]"
+ "Детальный [Детальный отчет]"
```
- Создаёт вариант с Auto selection + detail group. Дубликат имени — предупреждение, пропуск.
+ Создает вариант с Auto selection + detail group. Дубликат имени - предупреждение, пропуск.
- ### add-conditionalAppearance — добавить условное оформление
+ ### add-conditionalAppearance - добавить условное оформление
- Shorthand: `"Параметр = значение [when условие] [for Поле1, Поле2]"`. Блок `when` — синтаксис `add-filter` (Поле оператор значение).
+ 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 — подключить расшифровку к ресурсам в шаблонах
+ ### add-drilldown - подключить расшифровку к ресурсам в шаблонах
- Value — имена ресурсов (как в полях/вычисляемых полях СКД) через запятую.
+ Value - имена ресурсов (как в полях/вычисляемых полях СКД) через запятую.
```
"ПоступлениеИзПроизводства, ВыбытиеПрочее"
"Сумма_Дт83, Сумма_Дт99, Сумма_68, Сумма_84"
```
Подключает DrillDown по `ИмяРесурса` ко всем шаблонам, содержащим указанные ресурсы. Идемпотентно.
- ### set-query — заменить текст запроса
+ ### set-query - заменить текст запроса
- Не поддерживает пакетный режим. Value — полный текст запроса или `@path/to/file.sql` (ссылка на внешний файл). Путь разрешается относительно Template.xml, затем CWD.
+ Не поддерживает пакетный режим. Value - полный текст запроса или `@path/to/file.sql` (ссылка на внешний файл). Путь разрешается относительно Template.xml, затем CWD.
- ### patch-query — точечная замена в тексте запроса
+ ### patch-query - точечная замена в тексте запроса
Shorthand: `"старое => новое"`. Заменяет все вхождения подстроки. Поддерживает пакетный режим и `-DataSet`.
```
"СубконтоДт1) В => СубконтоКт1) В"
"ЛЕВОЕ СОЕДИНЕНИЕ => ВНУТРЕННЕЕ СОЕДИНЕНИЕ"
```
- ### set-outputParameter — установить параметр вывода
+ ### set-outputParameter - установить параметр вывода
```
- "Заголовок = Мой отчёт"
+ "Заголовок = Мой отчет"
"ВыводитьЗаголовок = true"
```
- Если параметр уже существует — заменяет значение.
+ Если параметр уже существует - заменяет значение.
- ### set-structure — установить структуру варианта
+ ### set-structure - установить структуру варианта
- Shorthand: `"Поле1 > Поле2 > details"`. `details`/`детали` — детальные записи. Заменяет всю структуру. Не поддерживает пакетный режим.
+ Shorthand: `"Поле1 > Поле2 > details"`. `details`/`детали` - детальные записи. Заменяет всю структуру. Не поддерживает пакетный режим.
```
"Организация > Номенклатура > details"
"details"
"СчетМеждународногоУчета @name=ДанныеОтчета"
```
- `@name=Имя` — присваивает имя группировке (`<dcsset:name>`). Используется для привязки шаблонов через `groupName`.
+ `@name=Имя` - присваивает имя группировке (`<dcsset:name>`). Используется для привязки шаблонов через `groupName`.
- ### modify-field — изменить существующее поле
+ ### modify-field - изменить существующее поле
Тот же shorthand что и `add-field`. Находит по dataPath, объединяет свойства (непустые переопределяют), сохраняет позицию.
```
"Цена [Цена USD]: decimal(10,4) @dimension"
```
- ### modify-filter — изменить существующий фильтр
+ ### modify-filter - изменить существующий фильтр
Тот же shorthand что и `add-filter`. Находит по полю, обновляет оператор/значение/флаги. См. правило для `<use>` ниже.
- ### modify-dataParameter — изменить параметр данных
+ ### 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>` не трогается, существующее значение сохраняется (важно: это значит, что отключённый параметр останется отключённым после модификации других свойств)
+ - `@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 |
## Верификация
```
- /skd-validate <TemplatePath> — валидация структуры после редактирования
- /skd-info <TemplatePath> — визуальная сводка
+ /skd-validate <TemplatePath> - валидация структуры после редактирования
+ /skd-info <TemplatePath> - визуальная сводка
```