dcs-edit · git:20260903.a71231f · 2026-09-03 · sha256 48c3e1d16b668b8c

dcs-edit git:20260903.a71231fA

Immutable. This exact content is served forever at /api/v1/blob/48c3e1d16b668b8c.

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

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

## MCP routing

- Preferred path: use MCP `unica` tool `unica.dcs.edit`; `unica` owns XML/JSON DSL work and refreshes related workspace caches after mutations.
- Do not call internal MCP/CLI adapters directly. They are hidden behind `unica` and synchronized by the orchestrator.
- Execution path: call MCP `unica` tool `unica.dcs.edit`; skill-local operation scripts are not part of the workflow.
- For mutating operations, pass `dryRun: false` only when the user explicitly requested the change; otherwise keep the default dry run.
- Vendor support guard runs inside `unica`; if it blocks a locked/read-only supported object, prefer CFE/release-support or an explicit support-state change plan instead of editing raw support metadata.

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

## MCP параметры

| Параметр | Описание |
|----------|----------|
| `TemplatePath` | Путь к Template.xml (или к папке — автодополнение Ext/Template.xml) |
| `Operation` | Операция (см. список ниже) |
| `Value` | Значение операции (shorthand-строка или текст запроса) |
| `DataSet` | (опц.) Имя набора данных (умолч. первый) |
| `Variant` | (опц.) Имя варианта настроек (умолч. первый) |
| `NoSelection` | (опц.) Не добавлять поле в selection варианта |

```json
{
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "name": "unica.dcs.edit",
    "arguments": {
      "cwd": "<workspace>",
      "TemplatePath": "src/Reports/ОтчетПродажи/Templates/ОсновнаяСхемаКомпоновкиДанных",
      "Operation": "set-outputParameter",
      "Value": "Заголовок = Основной вариант",
      "dryRun": false
    }
  }
}
```

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

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

```json
{
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "name": "unica.dcs.edit",
    "arguments": {
      "cwd": "<workspace>",
      "TemplatePath": "src/Reports/ОтчетПродажи/Templates/ОсновнаяСхемаКомпоновкиДанных",
      "Operation": "add-field",
      "Value": "Цена: decimal(15,2) ;; Количество: decimal(15,3) ;; Сумма: decimal(15,2)",
      "dryRun": false
    }
  }
}
```

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

## Операции

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

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

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

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

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

```
"Цена: Среднее"
"Стоимость: Сумма(Кол * Цена)"
```

### 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], ...`; представление после `:` опционально. Если в значении или представлении встречается `,` или `:`, оборачивай элемент в одинарные кавычки:

```
"Округление: EnumRef.Округления = Окр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=ДанныеОтчета"
```

### add-dataSetLink — добавить связь наборов данных

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.

Когда что: существенная переработка запроса (добавить поля, соединения, переписать пакет) -> получи запрос через `unica.dcs.info` и возьми `data.dataSets[].query`; отредактируй текст и передай его в `set-query` как `Value`. `query` отдаёт сырой текст запроса целиком, с отступами строк продолжения `|`, поэтому передача точна, включая многопакетные запросы. Точечная замена идентификатора или подстроки не требует выгрузки: используй `patch-query`.

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

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

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

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

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

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

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

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

Shorthand: `"Поле1 > Поле2 > details"`. `details`/`детали` — детальные записи. Заменяет всю структуру. Не поддерживает пакетный режим.

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

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

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

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

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

### 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 |

## Верификация

### Валидация структуры после редактирования

```json
{
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "name": "unica.check",
    "arguments": {
      "at": "<sourceSet>:<Kind>.<Name>.Template.<Template>"
    }
  }
}
```

### Сводка схемы

```json
{
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "name": "unica.dcs.info",
    "arguments": {
      "cwd": "<workspace>",
      "TemplatePath": "<TemplatePath>"
    }
  }
}
```