Skip to content
Back to skills

Meta Edit

ASecurity

Типизированно изменить существующий объект метаданных 1С по логическому адресу одной транзакцией.

  • 213 stars
  • 0 votes
  • 0 copies
  • 3 views
  • Added June 11, 2026
tools

Works with

  • mcp

Security analysis

A100/100

Pro scans all 4 files and shows the line behind each finding

Scanned October 4, 2026

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

Installs into .claude/skills of the current project.

Are you the author of Meta Edit?

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

Security grade badge for Meta Edit
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/ingvarconsulting-meta-edit/badge)](https://www.skillsdirectory.com/skills/ingvarconsulting-meta-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: meta-edit
description: Типизированно изменить существующий объект метаданных 1С по логическому адресу одной транзакцией.
argument-hint: <at> <operations>
allowed-tools:
  - Read
  - Glob
---

# /unica:meta-edit — структурное редактирование метаданных

## MCP routing

- Preferred path: use MCP `unica` tool `unica.apply` с операциями изменения
  объекта метаданных.
- Объект и его коллекции называет адрес: `main:Catalog.Валюты` — сам объект,
  `main:Catalog.Валюты.Attribute` — его реквизиты. Физический путь остаётся
  внутренней деталью; наружу его отдаёт только аварийный `unica.resolve`.
- Имя набора даёт `unica.view {}`, адрес по имени — `unica.search {corpus:
  "names"}`. `"main"` ниже только пример.
- Сначала вызови `unica.apply` с `at` и `ops`: это план без записи.
  Когда пользователь поручил внести эту правку, вызови `unica.apply` только
  с `executionToken` из `data.executionToken` успешного плана.
- Операции одного вызова упорядочены: каждая видит результат предыдущих, и
  публикуются они одной транзакцией — либо все, либо ни одной.
- Читай из ответа `changed`, `effects` по порядку операций и диагностики.
  Ответ описывает правку семантическими `effects`, а не возвращает
  полный XML объекта.
- Проверка поддержки поставщика выполняется внутри `unica`. Для закрытого
  объекта используй путь расширения, а не прямую правку служебных файлов.
- Что операция допустима на этом узле, объявляет сам узел: `can` в ответе
  `unica.view {at}`.

## Операции

| Предмет | Операции |
|---|---|
| Свойства объекта | `props.set` |
| Реквизиты | `attribute.add`, `attribute.set`, `attribute.remove` |
| Табличные части | `tabularSection.add`, `tabularSection.set`, `tabularSection.remove` |
| Измерения и ресурсы | `dimension.*`, `resource.*` |
| Значения перечисления | `enumValue.add`, `enumValue.set`, `enumValue.remove` |
| Графы журнала | `column.add`, `column.set`, `column.remove` |
| Макеты и команды | `template.*`, `command.*` |
| Предопределённые элементы | `predefinedItem.add`, `predefinedItem.set`, `predefinedItem.remove` |
| Ссылки наружу | `relation.add`, `relation.replace`, `relation.remove` |
| Встроенная справка | `help.create` |
| Объект целиком | `object.remove` |

Допустимые свойства, коллекции, виды типов и связей берутся из опубликованной
схемы операции. Общие прикладные правила — в
[соглашениях по метаданным](../../references/platform/metadata-conventions.md).

**Адрес операции — сам объект**, а элемент называют `items` или `values`:
`attribute.add` с `at: "main:Catalog.Валюты"` и `items`, `tabularSection.set`
с `values`, несущим `name`. Исключение одно и оно полезное: `attribute.set` и
`attribute.remove` адресуют реквизит листом —
`main:Catalog.Валюты.Attribute.Код` — и через табличную часть:
`main:Catalog.Валюты.TabularSection.Курсы.Attribute.Курс`. Отдельного поля
области видимости при этом не нужно: область называет адрес.

Регистрация макета — `template.add` с `name` и необязательным `templateType`
из закрытого набора `HTMLDocument`, `TextDocument`, `SpreadsheetDocument` (по
умолчанию), `BinaryData`, `DataCompositionSchema`; снятие регистрации —
`template.remove`. Наполнение содержимого остаётся у предметных инструментов
своего вида.

`help.create` создаёт `Ext/Help.xml` и `Ext/Help/<lang>.html` владельца и
включает `IncludeHelpInContents` его формам; повтор — отказ, операция
создаёт только раз.

### Предопределённые элементы

Коллекция доступна только для `Catalog`, `ChartOfAccounts`,
`ChartOfCharacteristicTypes` и `ChartOfCalculationTypes`. Общие поля элемента:
`id`, `name`, `code`, `description`. Дополнительные поля закрыты видом
владельца:

- `Catalog`: `isFolder`;
- `ChartOfCharacteristicTypes`: `isFolder` и структурный `type` из
  опубликованной схемы, не строка и не QName;
- `ChartOfAccounts`: `accountType`, `offBalance`, `order`, `accountingFlags`,
  `extDimensionTypes`;
- `ChartOfCalculationTypes`: `actionPeriodIsBase`.

Для плана счетов `accountType` допускает `Active`, `Passive`,
`ActivePassive`; `accountingFlags` — закрытый объект `имя: boolean`;
`extDimensionTypes` — массив объектов с `name` и необязательными `turnover`,
`accountingFlags`. Явно переданные пустые `{}` и `[]` очищают соответственно
поддержанные `Flag` и `ExtDimensionType`; отсутствие поля сохраняет прежнее
значение.

`predefinedItem.add` создаёт только корневой элемент. Совпадающий UUID даёт
no-op только при эквивалентном образе, иначе `already_exists`.
`predefinedItem.set` принимает `values` с изменяемыми полями,
`predefinedItem.remove` — `values` с одним `id`. Обе находят UUID на любой
глубине; удаление родителя удаляет всё его поддерево. Неуказанные поля и неизвестные
XML-узлы сохраняются.

**Читателя у предопределённых элементов на канонической поверхности пока
нет.** Писать их можно, а прочитать обратно этим же путём — нет; не выдавай за
них соседний факт.

### Ссылки наружу

Владельцы справочника и движения документа меняются через `relation.replace`
со связью `owners` или `registerRecords`. Источник подписки заменяется той же
операцией со связью `source`; `targets: []` очищает список, но пустой
итоговый `Source` не является допустимым состоянием подписки, поэтому такой
запрос годится только как часть изменения, чей итог снова непуст.

Цели — закрытое логическое объединение `object`, `manager`, `recordSet`,
`definedType` и `family`. `targets` — wire-массив набора:
порядок его членов семантически незначим, и перестановка тех же целей
является exact-byte no-op. При изменении Unica выпускает цели в
детерминированном порядке.

Конфигурационные варианты передают логический `metadataPath`; Unica проверяет
регистрацию, дескриптор и совпадающий `GeneratedType` под тем же владельцем,
что и подписка. `DefinedType` разворачивается рекурсивно, а примитивы, ссылки
и `valueStorage` логическими источниками событий не являются.

## Границы

Не переноси поля снятого Meta JSON DSL по сходству имён:

- один вызов изменяет один объект; несколько объектов — несколько вызовов;
- вложенные шаблоны URL и методы HTTP-сервиса, операции и параметры
  веб-сервиса, расписания, реквизиты адресации и учётные признаки читаются, но
  типизированного писателя не имеют;
- shorthand-флаги `index`, `indexAdditional`, `nonneg`, `master`,
  `mainFilter`, `denyIncomplete`, `useInTotals` нельзя упаковывать в строку;
- не подставляй составное значение в `props.set` строкой и не заводи временный
  файл определения.

Тип значения константы задаётся через `props.set` по адресу константы:
`values: {"Type": {"variants": [{"kind": "boolean"}]}}`. При создании помести
эту операцию сразу после `object.create` в том же вызове. Для ссылки используй
вариант `{"kind": "reference", "metadataPath": "Catalog.Номенклатура"}`;
строка QName не принимается. Состав типов и квалификаторы те же, что у
реквизитов. `view` возвращает тип в `props.type` как компактную JSON-строку.

Если схема не представляет сценарий, остановись и скажи прямо, что оставшийся
шаг выполняется в Конфигураторе.

Скалярные свойства используй только под именем платформы в PascalCase и со
значением, опубликованным текущей схемой. Свойство наблюдения
`mutationCapability` во вход писателя не передаётся, и неизвестный QName
нельзя копировать из XML в аргументы.

## MCP examples

### Изменить свойства и реквизит

```json
{
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "name": "unica.apply",
    "arguments": {
      "at": "main:Catalog.Валюты",
      "ops": [
        {
          "op": "props.set",
          "args": {
            "at": "main:Catalog.Валюты",
            "values": {"Comment": "Справочник валют"}
          }
        },
        {
          "op": "attribute.set",
          "args": {
            "at": "main:Catalog.Валюты.Attribute.Код",
            "values": {"required": true}
          }
        }
      ]
    }
  }
}
```

### Правка реквизита табличной части и удаление

```json
{
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "name": "unica.apply",
    "arguments": {
      "at": "main:Catalog.Валюты",
      "ops": [
        {
          "op": "attribute.set",
          "args": {
            "at": "main:Catalog.Валюты.TabularSection.Курсы.Attribute.Курс",
            "values": {"required": true}
          }
        },
        {
          "op": "attribute.remove",
          "args": {
            "at": "main:Catalog.Валюты.TabularSection.Курсы.Attribute.Устарело"
          }
        }
      ]
    }
  }
}
```

### Предопределённые элементы

```json
{
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "name": "unica.apply",
    "arguments": {
      "at": "main:Catalog.Валюты",
      "ops": [
        {
          "op": "predefinedItem.add",
          "args": {
            "at": "main:Catalog.Валюты",
            "items": [
              {
                "id": "0f5f4f2a-1a2b-4c3d-8e4f-5a6b7c8d9e0f",
                "name": "Рубль",
                "code": "643",
                "description": "Российский рубль"
              }
            ]
          }
        },
        {
          "op": "predefinedItem.remove",
          "args": {
            "at": "main:Catalog.Валюты",
            "values": {"id": "1a2b3c4d-5e6f-4708-8910-1112131415ff"}
          }
        }
      ]
    }
  }
}
```

### Заменить источник подписки

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

```json
{
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "name": "unica.apply",
    "arguments": {
      "at": "main:EventSubscription.ПриЗаписи",
      "ops": [
        {
          "op": "relation.replace",
          "args": {
            "at": "main:EventSubscription.ПриЗаписи",
            "values": {
              "relation": "source",
              "targets": [
                {
                  "kind": "recordSet",
                  "metadataPath": "InformationRegister.ИсторияИзменений"
                }
              ]
            }
          }
        }
      ]
    }
  }
}
```

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

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

Files in this skill

  • SKILL.md8.5 KB
  • child-operations.md5.5 KB
  • json-dsl.md4.7 KB
  • properties-reference.md2.5 KB

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.