Skip to content
Back to skills

Dcs Edit

ASecurity

Точечное редактирование схемы компоновки данных 1С (СКД). Используй когда нужно модифицировать существующую СКД — добавить поля, итоги, фильтры, параметры, изменить текст запроса

  • 213 stars
  • 0 votes
  • 0 copies
  • 1 view
  • Added September 2, 2026
ai-agentsbashsqlnode

Works with

  • mcp

Security analysis

A100/100

Scanned October 3, 2026

npx -y skills add IngvarConsulting/unica --skill dcs-edit --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Dcs Edit?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Dcs Edit
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/ingvarconsulting-dcs-edit/badge)](https://www.skillsdirectory.com/skills/ingvarconsulting-dcs-edit)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: dcs-edit
description: Точечное редактирование схемы компоновки данных 1С (СКД). Используй когда нужно модифицировать существующую СКД — добавить поля, итоги, фильтры, параметры, изменить текст запроса
allowed-tools:
  - Bash
  - Read
  - Write
  - Glob
---

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

## MCP routing

- Preferred path: use MCP `unica` tool `unica.apply` с операциями СКД; адрес
  цели — логический, файлового селектора у поверхности нет.
- Не зови внутренние адаптеры напрямую: они спрятаны за MCP `unica`.
- Сначала вызови `unica.apply` с `at` и `ops`: это план без записи.
  Когда пользователь поручил внести эту правку, вызови `unica.apply` только
  с `executionToken` из `data.executionToken` успешного плана.
- Словарь операций узла даёт `unica.view {at}` в секции `can`: что не названо
  там, того поверхность не пишет.

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

## Адрес и операции

Цель — узел макета-схемы: `<набор>:<Вид>.<Имя>.Template.<Макет>`. Набор данных
и вариант, когда их несколько, называются продолжением адреса.

Двадцать операций словаря: `field.add`, `field.set`, `field.remove`,
`fieldRole.set`, `calculatedField.add`, `total.add`, `parameter.add`,
`parameter.set`, `parameter.remove`, `filter.add`, `filter.clear`,
`selection.add`, `selection.clear`, `order.clear`,
`conditionalAppearance.clear`, `query.set`, `query.patch`, `variant.add`,
`structure.set`, `structure.patch`.

```json
{
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "name": "unica.apply",
    "arguments": {
      "at": "main:Report.Продажи.Template.ОсновнаяСхема",
      "ops": [
        {"op": "field.add", "args": {"items": [{"dataPath": "Номенклатура", "title": "Товар"}]}}
      ]
    }
  }
}
```

Несколько правок идут одним `ops`: план собирается целиком и применяется
атомарно — отказ любой операции отменяет весь вызов.

Применение — вызов только с `executionToken` из `data.executionToken` успешного плана:

Сначала получи план этого изменения:

```json
{
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "name": "unica.apply",
    "arguments": {
      "at": "main:Report.Продажи.Template.ОсновнаяСхема",
      "ops": [
        {
          "op": "field.add",
          "args": {
            "items": [
              {
                "dataPath": "Номенклатура",
                "title": "Товар"
              }
            ]
          }
        }
      ]
    }
  }
}
```

Для исполнения передай `data.executionToken` из этого успешного плана:

```json
{
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "name": "unica.apply",
    "arguments": {
      "executionToken": "<data.executionToken из успешного плана>"
    }
  }
}
```

Изменившаяся схема отвечает `stale_revision` и называет обе ревизии: перечитай
превью и повтори.

## Чего словарь не пишет

Поверхность правит существующую схему двадцатью операциями выше. Остальное из
прежнего DSL канонической операции **не имеет**:

- наборы данных и их связи (`add-dataSet`, `add-dataSetLink`);
- параметры данных варианта (`add-dataParameter`, `modify-dataParameter`);
- добавление сортировки (`add-order` — есть только `order.clear`);
- добавление условного оформления (`add-conditionalAppearance` — есть только
  `conditionalAppearance.clear`);
- расшифровку ресурсов (`add-drilldown`);
- параметры вывода (`set-outputParameter`);
- переименование и перестановку параметров (`rename-parameter`,
  `reorder-parameters`);
- удаление итога, вычисляемого поля и отдельного фильтра (`remove-total`,
  `remove-calculated-field`, `remove-filter`).

Если задача требует одного из них — сообщи это как пробел контракта Unica MCP
и не подменяй его соседней операцией: `filter.clear` вместо удаления одного
фильтра сотрёт все.

## Операции

Заголовки ниже названы операциями словаря там, где операция есть; прежние имена
DSL, у которых канонической операции нет, помечены прямо в заголовке — их
значения остаются описанием формата, а не вызовом. Само значение (`values`,
`items`) в разделах описано в том же shorthand, что принимает операция.


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

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

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

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

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

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

### `calculatedField.add` — добавить вычисляемое поле

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

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

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

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

### `parameter.add` — добавить параметр

```
"Период [Отчетный период]: 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: руб."
```

### `parameter.set` — изменить существующий параметр

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

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

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

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

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

Флаги `@hidden` и `@always` работают так же, как в `parameter.add`, и идемпотентны.

### rename-parameter — переименовать параметр — канонической операции нет

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

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

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

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

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

### `filter.add` — добавить фильтр в вариант

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"
```

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

```
"Номенклатура"
"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` берётся из первого существующего. Дубликат имени — предупреждение, пропуск. Не поддерживает пакетный режим (запрос может содержать `;;`).

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

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

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

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

### add-conditionalAppearance — добавить условное оформление — канонической операции нет

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

```
"ЦветТекста = 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 по `ИмяРесурса` ко всем шаблонам, содержащим указанные ресурсы. Идемпотентно.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

### `field.set` — изменить существующее поле

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

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

### modify-filter — изменить существующий фильтр — канонической операции нет

Тот же shorthand что и `filter.add`. Находит по полю, обновляет оператор/значение/флаги. См. правило для `<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 | Действие |
|----------|-------|----------|
| `field.remove` | dataPath | Удаляет поле из набора + из selection варианта |
| remove-total | dataPath | Удаляет итог — **канонической операции нет** |
| remove-calculated-field | dataPath | Удаляет вычисляемое поле — **канонической операции нет** |
| `parameter.remove` | name | Удаляет параметр |
| remove-filter | поле | Удаляет один фильтр — **канонической операции нет**; `filter.clear` стирает все |
| `selection.clear` | `*` | Очищает все элементы selection |
| `order.clear` | `*` | Очищает все элементы order |
| `filter.clear` | `*` | Очищает все элементы 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.view",
    "arguments": {
      "cwd": "<workspace>",
      "at": "<набор>:Report.<Отчёт>.Template.<Макет>"
    }
  }
}
```

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.