Add /meta-edit skill: point editing of 1C metadata objects

New skill for adding/removing/modifying attributes, tabular sections,
dimensions, resources, enum values, forms, templates, commands in
existing metadata XML. Supports Russian/English DSL synonyms,
positional insertion, idempotent add, auto-validation via meta-validate.

Also adds missing Source comment to meta-compile.ps1.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
Nick Shirokov
2026-02-14 15:02:23 +03:00
parent 7c5700e40f
commit cb4b5ec935
3 changed files with 1943 additions and 0 deletions
@@ -1,4 +1,5 @@
# meta-compile v1.0 — Compile 1C metadata object from JSON
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
param(
[Parameter(Mandatory)]
[string]$JsonPath,
+203
View File
@@ -0,0 +1,203 @@
---
name: meta-edit
description: Точечное редактирование объекта метаданных 1С (добавление/удаление/модификация реквизитов, ТЧ, измерений, ресурсов, значений перечислений, свойств объекта)
argument-hint: <DefinitionFile> <ObjectPath> [-NoValidate]
allowed-tools:
- Bash
- Read
- Write
- Glob
---
# /meta-edit — точечное редактирование метаданных 1С
Атомарные операции модификации существующих XML объектов метаданных: добавление, удаление и модификация реквизитов, табличных частей, измерений, ресурсов, значений перечислений, свойств объекта.
## Параметры и команда
| Параметр | Обязательный | Описание |
|----------|:------------:|----------|
| DefinitionFile | да | JSON-файл с операциями |
| ObjectPath | да | XML-файл или директория объекта |
| NoValidate | нет | Не запускать meta-validate после правки |
```powershell
powershell.exe -NoProfile -File .claude\skills\meta-edit\scripts\meta-edit.ps1 -DefinitionFile "<json>" -ObjectPath "<path>"
```
`ObjectPath` авторезолв: если указана директория — ищет `<dirName>.xml` в ней.
## JSON DSL — три операции
### add — добавить элементы
```json
{
"add": {
"реквизиты": [
{ "name": "Комментарий", "type": "Строка(200)" },
{ "name": "Сумма", "type": "Число(15,2)", "indexing": "Index" }
],
"ТЧ": [{
"name": "Товары",
"attrs": [
{ "name": "Номенклатура", "type": "CatalogRef.Номенклатура" },
{ "name": "Количество", "type": "Число(15,3)" }
]
}],
"формы": ["ФормаЭлемента"],
"макеты": ["ПечатнаяФорма"]
}
}
```
### remove — удалить элементы
```json
{
"remove": {
"реквизиты": ["СтарыйРеквизит"],
"ТЧ": ["УстаревшаяТЧ"]
}
}
```
### modify — изменить существующие
```json
{
"modify": {
"properties": { "CodeLength": 11, "Hierarchical": true },
"реквизиты": {
"Комментарий": { "type": "Строка(500)" },
"СтароеИмя": { "name": "НовоеИмя" }
}
}
}
```
### Комбинирование
Все три операции можно указать в одном JSON-файле.
### Синонимы ключей (case-insensitive)
**Операции:** `add`/`добавить`, `remove`/`удалить`, `modify`/`изменить`
**Типы дочерних элементов:**
| Каноническое | Синонимы |
|-------------|----------|
| attributes | реквизиты, attrs |
| tabularSections | табличныеЧасти, тч, ts |
| dimensions | измерения, dims |
| resources | ресурсы, res |
| enumValues | значения, values |
| columns | графы, колонки |
| forms | формы |
| templates | макеты |
| commands | команды |
| properties | свойства |
### Синонимы типов
`Строка(200)`, `Число(15,2)`, `Булево`, `Дата`, `ДатаВремя`, `ХранилищеЗначения`, `СправочникСсылка.XXX`, `ДокументСсылка.XXX`, `ПеречислениеСсылка.XXX`, `ОпределяемыйТип.XXX`.
### Позиционная вставка (опционально)
```json
{ "name": "Склад", "type": "CatalogRef.Склады", "after": "Организация" }
{ "name": "Приоритет", "type": "Число(1)", "before": "Комментарий" }
```
Без указания — в конец группы однотипных элементов.
### Shorthand-формат реквизитов
```
"ИмяРеквизита: Тип | req, index"
```
## Поддерживаемые типы объектов
| Тип объекта | Допустимые add-типы |
|-------------|-------------------|
| Catalog, Document, ExchangePlan, ChartOf*, BP, Task, Report, DP | attributes, tabularSections, forms, templates, commands |
| Enum | enumValues, forms, templates, commands |
| *Register (4 типа) | dimensions, resources, attributes, forms, templates, commands |
| DocumentJournal | columns, forms, templates, commands |
| Constant | forms |
## Примеры
### Добавить реквизиты в справочник
```json
{
"add": {
"attributes": [
"Комментарий: String(200)",
{ "name": "Сумма", "type": "Number(15,2)", "indexing": "Index" }
]
}
}
```
### Добавить ТЧ в документ
```json
{
"add": {
"tabularSections": [{
"name": "Товары",
"attrs": [
"Номенклатура: CatalogRef.Номенклатура | req",
"Количество: Number(15,3)",
"Цена: Number(15,2)",
"Сумма: Number(15,2)"
]
}]
}
}
```
### Добавить измерения и ресурсы в регистр
```json
{
"add": {
"dimensions": ["Организация: CatalogRef.Организации | master, mainFilter"],
"resources": ["Сумма: Number(15,2)"]
}
}
```
### Удалить + изменить
```json
{
"remove": { "attributes": ["УстаревшийРеквизит"] },
"modify": {
"properties": { "DescriptionLength": 150 },
"attributes": {
"СтароеИмя": { "name": "НовоеИмя", "type": "String(500)" }
}
}
}
```
## Верификация
```
/meta-validate <ObjectPath> — валидация после редактирования
/meta-info <ObjectPath> — визуальная сводка
```
## Когда использовать
- **Добавление реквизитов/ТЧ** к существующим объектам конфигурации
- **Удаление устаревших** реквизитов, табличных частей
- **Переименование** реквизитов, смена типа
- **Изменение свойств** объекта (длина кода, иерархия и т.д.)
- **Добавление значений** перечислений
- **Добавление измерений/ресурсов** в регистры
File diff suppressed because it is too large Load Diff