mirror of
https://github.com/Nikolay-Shirokov/cc-1c-skills.git
synced 2026-09-07 18:50:53 +03:00
docs(meta-edit): каскад инструкций по задачам вместо одной кучи
child-operations.md был на 191 строку и держал в одном файле реквизиты, поля внешнего источника, таблицы, функции, ТЧ, предопределённые и значения перечисления: модель, добавляющая реквизит, читала заодно про функции внешнего источника. Ось резки была механизмом (add/remove/ modify), а нужна сущность — как в meta-compile. SKILL.md: частое (команда, сводная таблица операций, быстрые примеры) плюс индекс «что правишь → файл». Остальное — reference/: attributes, tabular-sections, predefined, external-data-source, other-children, properties (бывший properties-reference), json-dsl. Попутно: везде «навык form-add», а не голое имя — иначе читается как команда оболочки или значение -Operation. Тексты предупреждений в обоих портах тоже. scripts/switch.py собирал .md только из корня навыка, подкаталоги не видел: команды запуска в reference/*.md молча остались бы на старом рантайме. Обход стал рекурсивным. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01NBsZA5cr2WFThtgp7i5WVi
This commit is contained in:
co-authored by
Claude Opus 5
parent
fb211a61ac
commit
b4bc02bc98
@@ -35,51 +35,28 @@ powershell.exe -NoProfile -File "${CLAUDE_SKILL_DIR}/scripts/meta-edit.ps1" -Def
|
|||||||
| DefinitionFile | JSON-файл с операциями (альтернатива Operation) |
|
| DefinitionFile | JSON-файл с операциями (альтернатива Operation) |
|
||||||
| NoValidate | Не запускать meta-validate после правки |
|
| NoValidate | Не запускать meta-validate после правки |
|
||||||
|
|
||||||
## Операции — сводная таблица
|
## Частые операции
|
||||||
|
|
||||||
Batch через `;;` во всех операциях. Подробный синтаксис — в файлах по ссылкам.
|
Batch через `;;` во всех операциях.
|
||||||
|
|
||||||
### Дочерние элементы — [child-operations.md](child-operations.md)
|
|
||||||
|
|
||||||
| Операция | Формат Value | Пример |
|
| Операция | Формат Value | Пример |
|
||||||
|----------|-------------|--------|
|
|----------|-------------|--------|
|
||||||
| `add-attribute` | `Имя: Тип \| флаги` | `"Сумма: Число(15,2) \| req, index"` |
|
| `add-attribute` | `Имя: Тип \| флаги` | `"Сумма: Число(15,2) \| req, index"` |
|
||||||
| `add-ts` | `ТЧ: Рекв1: Тип1, Рекв2: Тип2` | `"Товары: Ном: CatalogRef.Ном, Кол: Число(15,3)"` |
|
|
||||||
| `add-dimension` | `Имя: Тип \| флаги` | `"Организация: CatalogRef.Организации \| master"` |
|
| `add-dimension` | `Имя: Тип \| флаги` | `"Организация: CatalogRef.Организации \| master"` |
|
||||||
| `add-resource` | `Имя: Тип` | `"Сумма: Число(15,2)"` |
|
| `add-resource` | `Имя: Тип` | `"Сумма: Число(15,2)"` |
|
||||||
| `add-enumValue` | `Имя` | `"Значение1 ;; Значение2"` |
|
|
||||||
| `add-column` | `Имя: Тип` | `"Тип: EnumRef.ТипыДокументов"` |
|
| `add-column` | `Имя: Тип` | `"Тип: EnumRef.ТипыДокументов"` |
|
||||||
| `add-command` | `Имя` | `"ОткрытьДосье"` |
|
| `add-ts` | `ТЧ: Рекв1: Тип1, Рекв2: Тип2` | `"Товары: Ном: CatalogRef.Ном, Кол: Число(15,3)"` |
|
||||||
| `add-ts-attribute` | `ТЧ.Имя: Тип` | `"Товары.Скидка: Число(15,2)"` |
|
| `add-ts-attribute` | `ТЧ.Имя: Тип` | `"Товары.Скидка: Число(15,2)"` |
|
||||||
| `remove-*` | `Имя` | `"СтарыйРеквизит ;; ЕщёОдин"` |
|
| `remove-*` | `Имя` | `"СтарыйРеквизит ;; ЕщёОдин"` |
|
||||||
| `remove-ts-attribute` | `ТЧ.Имя` | `"Товары.УстаревшийРекв"` |
|
| `remove-ts-attribute` | `ТЧ.Имя` | `"Товары.УстаревшийРекв"` |
|
||||||
| `modify-attribute` | `Имя: ключ=значение` | `"СтароеИмя: name=НовоеИмя, type=Строка(500)"` |
|
| `modify-attribute` | `Имя: ключ=значение` | `"СтароеИмя: name=НовоеИмя, type=Строка(500)"` |
|
||||||
| `modify-ts-attribute` | `ТЧ.Имя: ключ=значение` | `"Товары.Рекв: name=НовоеИмя"` |
|
| `modify-ts-attribute` | `ТЧ.Имя: ключ=значение` | `"Товары.Рекв: name=НовоеИмя"` |
|
||||||
| `modify-ts` | `ТЧ: ключ=значение` | `"Товары: synonym=Товарный состав"` |
|
| `modify-ts` | `ТЧ: ключ=значение` | `"Товары: synonym=Товарный состав"` |
|
||||||
|
| `modify-property` | `Ключ=Значение` | `"CodeLength=11 ;; DescriptionLength=150"` |
|
||||||
|
|
||||||
Позиционная вставка: `"Склад: CatalogRef.Склады >> after Организация"`.
|
Позиционная вставка: `"Склад: CatalogRef.Склады >> after Организация"`.
|
||||||
|
|
||||||
Форма — `form-add` / `form-remove`, макет — `template-add` / `template-remove`: кроме записи в `ChildObjects`
|
Составной тип — через `+`: `"Значение: Строка + Число(15,2) + Дата"`.
|
||||||
у них есть собственные файлы, и `meta-edit` их не трогает.
|
|
||||||
|
|
||||||
`modify-attribute` умеет и структурные свойства реквизита — формат/подсказку, форму и параметры выбора,
|
|
||||||
значение заполнения, границы (`Format`, `ChoiceForm`, `ChoiceParameters`, `FillValue`, `MinValue`/`MaxValue` и др.).
|
|
||||||
|
|
||||||
### Свойства объекта — [properties-reference.md](properties-reference.md)
|
|
||||||
|
|
||||||
| Операция | Формат Value | Пример |
|
|
||||||
|----------|-------------|--------|
|
|
||||||
| `modify-property` | `Ключ=Значение` | `"CodeLength=11 ;; DescriptionLength=150"` |
|
|
||||||
| `add-owner` | `MetaType.Name` | `"Catalog.Контрагенты ;; Catalog.Организации"` |
|
|
||||||
| `add-registerRecord` | `MetaType.Name` | `"AccumulationRegister.ОстаткиТоваров"` |
|
|
||||||
| `add-basedOn` | `MetaType.Name` | `"Document.ЗаказКлиента"` |
|
|
||||||
| `add-inputByString` | `Путь поля` | `"StandardAttribute.Description"` |
|
|
||||||
| `set-owners` / `set-registerRecords` / `set-basedOn` / `set-inputByString` | Замена всего списка | `"Catalog.Орг ;; Catalog.Контр"` |
|
|
||||||
| `remove-owner` / `remove-registerRecord` / ... | Удаление из списка | `"Catalog.Контрагенты"` |
|
|
||||||
|
|
||||||
### JSON DSL — [json-dsl.md](json-dsl.md)
|
|
||||||
|
|
||||||
Для комбинированных операций (add + remove + modify в одном файле), синонимы ключей/типов, таблица поддерживаемых объектов.
|
|
||||||
|
|
||||||
## Быстрые примеры
|
## Быстрые примеры
|
||||||
|
|
||||||
@@ -87,9 +64,6 @@ Batch через `;;` во всех операциях. Подробный си
|
|||||||
# Добавить реквизиты
|
# Добавить реквизиты
|
||||||
-Operation add-attribute -Value "Комментарий: Строка(200) ;; Сумма: Число(15,2) | index"
|
-Operation add-attribute -Value "Комментарий: Строка(200) ;; Сумма: Число(15,2) | index"
|
||||||
|
|
||||||
# Составной тип (несколько типов через +)
|
|
||||||
-Operation add-attribute -Value "Значение: Строка + Число(15,2) + Дата + CatalogRef.Контрагенты"
|
|
||||||
|
|
||||||
# Добавить ТЧ с реквизитами
|
# Добавить ТЧ с реквизитами
|
||||||
-Operation add-ts -Value "Товары: Ном: CatalogRef.Ном | req, Кол: Число(15,3), Цена: Число(15,2)"
|
-Operation add-ts -Value "Товары: Ном: CatalogRef.Ном | req, Кол: Число(15,3), Цена: Число(15,2)"
|
||||||
|
|
||||||
@@ -106,6 +80,21 @@ Batch через `;;` во всех операциях. Подробный си
|
|||||||
-Operation set-owners -Value "Catalog.Контрагенты ;; Catalog.Организации"
|
-Operation set-owners -Value "Catalog.Контрагенты ;; Catalog.Организации"
|
||||||
```
|
```
|
||||||
|
|
||||||
|
## Индекс: что правишь → файл
|
||||||
|
|
||||||
|
| Что нужно | Файл |
|
||||||
|
|-----------|------|
|
||||||
|
| Реквизит, измерение, ресурс, графа: флаги, составные типы, структурные свойства (`Format`, `ChoiceParameters`, `FillValue`, …) | `reference/attributes.md` |
|
||||||
|
| Табличная часть и её реквизиты | `reference/tabular-sections.md` |
|
||||||
|
| Свойства самого объекта, списочные свойства (владельцы, движения, основание, ввод по строке) | `reference/properties.md` |
|
||||||
|
| Предопределённые элементы | `reference/predefined.md` |
|
||||||
|
| Значения перечисления, команды | `reference/other-children.md` |
|
||||||
|
| Внешний источник данных: поля, таблицы, функции | `reference/external-data-source.md` |
|
||||||
|
| Комбинированные операции в одном JSON, синонимы ключей и типов, какие дети допустимы у типа объекта | `reference/json-dsl.md` |
|
||||||
|
|
||||||
|
Форму добавляет и удаляет навык `form-add` / `form-remove`, макет — навык `template-add` /
|
||||||
|
`template-remove`: кроме записи в `ChildObjects` у них есть собственные файлы, и `meta-edit` их не трогает.
|
||||||
|
|
||||||
## Верификация
|
## Верификация
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|||||||
@@ -1,191 +0,0 @@
|
|||||||
# Inline-операции над дочерними элементами
|
|
||||||
|
|
||||||
Подробный справочник операций `add-*` / `remove-*` / `modify-*` для дочерних элементов объекта метаданных.
|
|
||||||
|
|
||||||
## Общие правила
|
|
||||||
|
|
||||||
**Batch-режим** — несколько элементов через `;;`:
|
|
||||||
```
|
|
||||||
-Value "Комментарий: Строка(200) ;; Сумма: Число(15,2) | index"
|
|
||||||
```
|
|
||||||
|
|
||||||
**Shorthand-формат** реквизитов: `ИмяРеквизита: Тип | флаги`
|
|
||||||
|
|
||||||
Флаги: `req` — обязательное заполнение; `index` — индексировать; `master` — ведущее измерение (только dimensions); `mainFilter` — основной отбор (только dimensions).
|
|
||||||
|
|
||||||
**Позиционная вставка**: `>> after ИмяЭлемента` или `<< before ИмяЭлемента`:
|
|
||||||
```powershell
|
|
||||||
-Operation add-attribute -Value "Склад: CatalogRef.Склады >> after Организация"
|
|
||||||
```
|
|
||||||
|
|
||||||
## Составные типы
|
|
||||||
|
|
||||||
Для реквизитов с несколькими допустимыми типами — разделитель `+`:
|
|
||||||
```powershell
|
|
||||||
-Operation add-attribute -Value "Значение: Строка + Число(15,2) + Дата + CatalogRef.Контрагенты"
|
|
||||||
-Operation add-attribute -Value "Значение: Строка + Число(15,2) | req"
|
|
||||||
-Operation modify-ts-attribute -Value "Данные.Значение: type=Строка + Число(15,2) + Дата"
|
|
||||||
```
|
|
||||||
|
|
||||||
В JSON DSL — массив в `type`:
|
|
||||||
```json
|
|
||||||
{ "name": "Значение", "type": ["Строка", "Число(15,2)", "Дата", "CatalogRef.Контрагенты"] }
|
|
||||||
```
|
|
||||||
|
|
||||||
## add-attribute / add-dimension / add-resource / add-column
|
|
||||||
|
|
||||||
```powershell
|
|
||||||
-Operation add-attribute -Value "Комментарий: Строка(200)"
|
|
||||||
-Operation add-attribute -Value "Сумма: Число(15,2) | req, index"
|
|
||||||
-Operation add-attribute -Value "Ном: CatalogRef.Номенклатура | req ;; Кол: Число(15,3)"
|
|
||||||
-Operation add-dimension -Value "Организация: CatalogRef.Организации | master, mainFilter"
|
|
||||||
-Operation add-resource -Value "Сумма: Число(15,2)"
|
|
||||||
-Operation add-column -Value "Тип: EnumRef.ТипыДокументов"
|
|
||||||
```
|
|
||||||
|
|
||||||
## add-field (таблица внешнего источника)
|
|
||||||
|
|
||||||
Поле задаётся как обычный реквизит, плюс три своих ключа: `nameInDataSource` (умолчание — имя поля),
|
|
||||||
`readOnly`, `allowNull`. Флаги строковой формы — `readonly`, `nullable`.
|
|
||||||
|
|
||||||
```json
|
|
||||||
{ "add": { "fields": [
|
|
||||||
"barcode: String(20) | nullable",
|
|
||||||
{ "name": "cost", "type": "Number(15,2)", "nameInDataSource": "cost_net", "readOnly": true }
|
|
||||||
] } }
|
|
||||||
```
|
|
||||||
|
|
||||||
## add-tables / add-functions (внешний источник данных)
|
|
||||||
|
|
||||||
На файле источника (`ExternalDataSources/<Имя>.xml`) добавляются таблицы и функции. Таблица —
|
|
||||||
единственная операция навыка, создающая **файл**: `<Источник>/Tables/<Имя>.xml` плюс имя в
|
|
||||||
`ChildObjects` источника. Синтаксис таблицы тот же, что в `meta-compile`
|
|
||||||
(см. `reference/external-data-source.md` там же).
|
|
||||||
|
|
||||||
```json
|
|
||||||
{ "add": {
|
|
||||||
"tables": { "sales": { "keyFields": ["id"], "fields": ["id: Number(10,0)", "summa: Number(15,2)"] } },
|
|
||||||
"functions": { "nextKey": "NEXT VALUE FOR public.seq_key" }
|
|
||||||
} }
|
|
||||||
```
|
|
||||||
|
|
||||||
Удалить таблицу — `meta-remove ExternalDataSource.<Источник>.Table.<Таблица>`.
|
|
||||||
|
|
||||||
## add-ts
|
|
||||||
|
|
||||||
Формат: `ИмяТЧ: Реквизит1: Тип1, Реквизит2: Тип2, ...`
|
|
||||||
|
|
||||||
```powershell
|
|
||||||
-Operation add-ts -Value "Товары: Ном: CatalogRef.Ном | req, Кол: Число(15,3), Цена: Число(15,2), Сумма: Число(15,2)"
|
|
||||||
```
|
|
||||||
|
|
||||||
## add-ts-attribute / remove-ts-attribute / modify-ts-attribute
|
|
||||||
|
|
||||||
Операции над реквизитами **внутри существующей ТЧ**. Формат: `ИмяТЧ.ОпределениеРеквизита` (dot-нотация).
|
|
||||||
|
|
||||||
```powershell
|
|
||||||
# Добавить реквизит в ТЧ
|
|
||||||
-Operation add-ts-attribute -Value "Товары.СтавкаНДС: EnumRef.СтавкиНДС"
|
|
||||||
-Operation add-ts-attribute -Value "Товары.Скидка: Число(15,2) ;; Товары.Бонус: Число(15,2)"
|
|
||||||
|
|
||||||
# Позиционная вставка в ТЧ
|
|
||||||
-Operation add-ts-attribute -Value "Товары.Скидка: Число(15,2) >> after Цена"
|
|
||||||
|
|
||||||
# Удалить реквизит из ТЧ
|
|
||||||
-Operation remove-ts-attribute -Value "Товары.УстаревшийРекв"
|
|
||||||
-Operation remove-ts-attribute -Value "Товары.Рекв1 ;; Товары.Рекв2"
|
|
||||||
|
|
||||||
# Изменить реквизит в ТЧ (rename, type change и т.д.)
|
|
||||||
-Operation modify-ts-attribute -Value "Товары.СтароеИмя: name=НовоеИмя, type=Строка(500)"
|
|
||||||
```
|
|
||||||
|
|
||||||
Batch через `;;` — можно указать разные ТЧ: `"Товары.А: Строка(50) ;; Услуги.Б: Число(10)"`.
|
|
||||||
|
|
||||||
## modify-ts
|
|
||||||
|
|
||||||
Изменение свойств **самой табличной части** (Synonym, FillChecking, Use и др.):
|
|
||||||
|
|
||||||
```powershell
|
|
||||||
-Operation modify-ts -Value "Товары: synonym=Товарный состав"
|
|
||||||
-Operation modify-ts -Value "Товары: fillChecking=ShowError"
|
|
||||||
```
|
|
||||||
|
|
||||||
Формат аналогичен `modify-attribute`: `ИмяТЧ: ключ=значение, ключ=значение`.
|
|
||||||
|
|
||||||
## add-predefined
|
|
||||||
|
|
||||||
Добавить предопределённые элементы (Catalog, ChartOfCharacteristicTypes). Существующие элементы и их
|
|
||||||
идентификаторы сохраняются, новые получают свежий id.
|
|
||||||
|
|
||||||
Inline — строка `(Код) Имя [Наименование]` (batch через `;;`; `[Наименование]` необязательно — иначе авто из имени):
|
|
||||||
```powershell
|
|
||||||
-Operation add-predefined -Value "(001) Основной ;; (002) Резервный [Резервный склад]"
|
|
||||||
```
|
|
||||||
|
|
||||||
JSON — строки и/или объекты (для групп с вложенными):
|
|
||||||
```json
|
|
||||||
{ "add": { "predefined": [
|
|
||||||
"(001) Основной",
|
|
||||||
{ "name": "Группа", "isFolder": true, "childItems": ["(002) Вложенный"] }
|
|
||||||
] } }
|
|
||||||
```
|
|
||||||
|
|
||||||
Ключи объекта: `name`, `code`, `description`, `isFolder`, `childItems` (дерево). Тип кода (строковый/числовой)
|
|
||||||
берётся из объекта автоматически.
|
|
||||||
|
|
||||||
## add-enumValue / add-command
|
|
||||||
|
|
||||||
Просто имена (batch через `;;`):
|
|
||||||
```powershell
|
|
||||||
-Operation add-enumValue -Value "Значение1 ;; Значение2 ;; Значение3"
|
|
||||||
-Operation add-command -Value "Команда1"
|
|
||||||
```
|
|
||||||
|
|
||||||
Команда создаётся вместе с заготовкой модуля `Commands/<Имя>/Ext/CommandModule.bsl`.
|
|
||||||
|
|
||||||
Формы и макеты этот навык не добавляет и не удаляет — у них есть собственные файлы:
|
|
||||||
`form-add` / `form-remove` и `template-add` / `template-remove`.
|
|
||||||
|
|
||||||
## remove-*
|
|
||||||
|
|
||||||
Имя элемента (или несколько через `;;`):
|
|
||||||
```powershell
|
|
||||||
-Operation remove-attribute -Value "СтарыйРеквизит ;; ЕщёОдин"
|
|
||||||
-Operation remove-ts -Value "УстаревшаяТЧ"
|
|
||||||
-Operation remove-enumValue -Value "НеиспользуемоеЗначение"
|
|
||||||
```
|
|
||||||
|
|
||||||
## modify-attribute / modify-dimension / modify-resource / modify-enumValue / modify-column
|
|
||||||
|
|
||||||
Формат: `ИмяЭлемента: ключ=значение, ключ=значение`
|
|
||||||
|
|
||||||
**Спец-операции** (строчные ключи): `name` (переименование), `type` (смена типа), `synonym`.
|
|
||||||
|
|
||||||
**Свойства** задавайте по имени свойства 1С (PascalCase, как в конфигураторе): `Indexing`, `FillChecking`,
|
|
||||||
`Use`, `FullTextSearch`, `DataHistory`, `PasswordMode`, `MultiLine`, `Mask`, `CreateOnInput`, `QuickChoice` и др.
|
|
||||||
Свойство можно задать, даже если у реквизита оно ещё не выставлено.
|
|
||||||
|
|
||||||
```powershell
|
|
||||||
-Operation modify-attribute -Value "СтароеИмя: name=НовоеИмя, type=Строка(500)"
|
|
||||||
-Operation modify-attribute -Value "Комментарий: Indexing=Index, FullTextSearch=Use"
|
|
||||||
-Operation modify-enumValue -Value "СтароеЗначение: name=НовоеЗначение"
|
|
||||||
```
|
|
||||||
|
|
||||||
### Структурные свойства реквизита
|
|
||||||
|
|
||||||
Свойства со сложным значением задавайте через JSON DSL (`{ "modify": { "attributes": { "Имя": { ... } } } }`):
|
|
||||||
|
|
||||||
| Ключ | Значение | Пример (JSON) |
|
|
||||||
|------|----------|---------------|
|
|
||||||
| `Format` / `EditFormat` / `ToolTip` | строка (мультиязычная) | `"Format": "ДФ=dd.MM.yyyy"` |
|
|
||||||
| `ChoiceForm` | путь формы выбора | `"ChoiceForm": "Catalog.Товары.Form.ФормаВыбора"` |
|
|
||||||
| `MinValue` / `MaxValue` | число или строка | `"MinValue": 0, "MaxValue": 100` |
|
|
||||||
| `FillValue` | значение заполнения | `"FillValue": "EmptyRef"` · `true` · `10` · `{"nil": true}` |
|
|
||||||
| `LinkByType` | `{dataPath, linkItem?}` | `"LinkByType": {"dataPath": "Вид", "linkItem": 0}` |
|
|
||||||
| `ChoiceParameterLinks` | `[{name, dataPath, valueChange?}]` | `["Отбор.Организация=Организация"]` |
|
|
||||||
| `ChoiceParameters` | `[{name, type?, value?}]` | `[{"name": "Отбор.ЭтоГруппа", "value": false}]` |
|
|
||||||
|
|
||||||
- `FillValue`: `"EmptyRef"` — пустая ссылка по типу реквизита; `{"emptyRef": true}` / `{"nil": true}` — явные маркеры.
|
|
||||||
- `ChoiceParameters` value — булево/число/строка/ссылочный путь или массив; укажите `type` (напр.
|
|
||||||
`EnumRef.СтавкиНДС`), чтобы задавать значения короткими именами (`"Оптовая"` вместо полного пути).
|
|
||||||
- В путях данных (`LinkByType`/`ChoiceParameterLinks`) можно писать короткое имя реквизита вместо полного пути.
|
|
||||||
@@ -0,0 +1,88 @@
|
|||||||
|
# Реквизиты, измерения, ресурсы, графы
|
||||||
|
|
||||||
|
Операции над «плоскими» дочерними элементами объекта: реквизит (`attribute`), измерение (`dimension`),
|
||||||
|
ресурс (`resource`), графа журнала (`column`). Синтаксис у всех один.
|
||||||
|
|
||||||
|
## Общие правила
|
||||||
|
|
||||||
|
**Batch-режим** — несколько элементов через `;;`:
|
||||||
|
```
|
||||||
|
-Value "Комментарий: Строка(200) ;; Сумма: Число(15,2) | index"
|
||||||
|
```
|
||||||
|
|
||||||
|
**Shorthand-формат**: `ИмяРеквизита: Тип | флаги`
|
||||||
|
|
||||||
|
Флаги: `req` — обязательное заполнение; `index` — индексировать; `master` — ведущее измерение (только
|
||||||
|
измерения); `mainFilter` — основной отбор (только измерения).
|
||||||
|
|
||||||
|
**Позиционная вставка**: `>> after ИмяЭлемента` или `<< before ИмяЭлемента`:
|
||||||
|
```powershell
|
||||||
|
-Operation add-attribute -Value "Склад: CatalogRef.Склады >> after Организация"
|
||||||
|
```
|
||||||
|
|
||||||
|
## Составные типы
|
||||||
|
|
||||||
|
Разделитель `+`:
|
||||||
|
```powershell
|
||||||
|
-Operation add-attribute -Value "Значение: Строка + Число(15,2) + Дата + CatalogRef.Контрагенты"
|
||||||
|
-Operation add-attribute -Value "Значение: Строка + Число(15,2) | req"
|
||||||
|
```
|
||||||
|
|
||||||
|
В JSON DSL — массив в `type`:
|
||||||
|
```json
|
||||||
|
{ "name": "Значение", "type": ["Строка", "Число(15,2)", "Дата", "CatalogRef.Контрагенты"] }
|
||||||
|
```
|
||||||
|
|
||||||
|
## add-attribute / add-dimension / add-resource / add-column
|
||||||
|
|
||||||
|
```powershell
|
||||||
|
-Operation add-attribute -Value "Комментарий: Строка(200)"
|
||||||
|
-Operation add-attribute -Value "Сумма: Число(15,2) | req, index"
|
||||||
|
-Operation add-attribute -Value "Ном: CatalogRef.Номенклатура | req ;; Кол: Число(15,3)"
|
||||||
|
-Operation add-dimension -Value "Организация: CatalogRef.Организации | master, mainFilter"
|
||||||
|
-Operation add-resource -Value "Сумма: Число(15,2)"
|
||||||
|
-Operation add-column -Value "Тип: EnumRef.ТипыДокументов"
|
||||||
|
```
|
||||||
|
|
||||||
|
## remove-*
|
||||||
|
|
||||||
|
Имя элемента (или несколько через `;;`):
|
||||||
|
```powershell
|
||||||
|
-Operation remove-attribute -Value "СтарыйРеквизит ;; ЕщёОдин"
|
||||||
|
-Operation remove-enumValue -Value "НеиспользуемоеЗначение"
|
||||||
|
```
|
||||||
|
|
||||||
|
## modify-attribute / modify-dimension / modify-resource / modify-enumValue / modify-column
|
||||||
|
|
||||||
|
Формат: `ИмяЭлемента: ключ=значение, ключ=значение`
|
||||||
|
|
||||||
|
**Спец-операции** (строчные ключи): `name` (переименование), `type` (смена типа), `synonym`.
|
||||||
|
|
||||||
|
**Свойства** задавайте по имени свойства 1С (PascalCase, как в конфигураторе): `Indexing`, `FillChecking`,
|
||||||
|
`Use`, `FullTextSearch`, `DataHistory`, `PasswordMode`, `MultiLine`, `Mask`, `CreateOnInput`, `QuickChoice` и др.
|
||||||
|
Свойство можно задать, даже если у реквизита оно ещё не выставлено.
|
||||||
|
|
||||||
|
```powershell
|
||||||
|
-Operation modify-attribute -Value "СтароеИмя: name=НовоеИмя, type=Строка(500)"
|
||||||
|
-Operation modify-attribute -Value "Комментарий: Indexing=Index, FullTextSearch=Use"
|
||||||
|
-Operation modify-enumValue -Value "СтароеЗначение: name=НовоеЗначение"
|
||||||
|
```
|
||||||
|
|
||||||
|
## Структурные свойства реквизита
|
||||||
|
|
||||||
|
Свойства со сложным значением задавайте через JSON DSL (`{ "modify": { "attributes": { "Имя": { ... } } } }`):
|
||||||
|
|
||||||
|
| Ключ | Значение | Пример (JSON) |
|
||||||
|
|------|----------|---------------|
|
||||||
|
| `Format` / `EditFormat` / `ToolTip` | строка (мультиязычная) | `"Format": "ДФ=dd.MM.yyyy"` |
|
||||||
|
| `ChoiceForm` | путь формы выбора | `"ChoiceForm": "Catalog.Товары.Form.ФормаВыбора"` |
|
||||||
|
| `MinValue` / `MaxValue` | число или строка | `"MinValue": 0, "MaxValue": 100` |
|
||||||
|
| `FillValue` | значение заполнения | `"FillValue": "EmptyRef"` · `true` · `10` · `{"nil": true}` |
|
||||||
|
| `LinkByType` | `{dataPath, linkItem?}` | `"LinkByType": {"dataPath": "Вид", "linkItem": 0}` |
|
||||||
|
| `ChoiceParameterLinks` | `[{name, dataPath, valueChange?}]` | `["Отбор.Организация=Организация"]` |
|
||||||
|
| `ChoiceParameters` | `[{name, type?, value?}]` | `[{"name": "Отбор.ЭтоГруппа", "value": false}]` |
|
||||||
|
|
||||||
|
- `FillValue`: `"EmptyRef"` — пустая ссылка по типу реквизита; `{"emptyRef": true}` / `{"nil": true}` — явные маркеры.
|
||||||
|
- `ChoiceParameters` value — булево/число/строка/ссылочный путь или массив; укажите `type` (напр.
|
||||||
|
`EnumRef.СтавкиНДС`), чтобы задавать значения короткими именами (`"Оптовая"` вместо полного пути).
|
||||||
|
- В путях данных (`LinkByType`/`ChoiceParameterLinks`) можно писать короткое имя реквизита вместо полного пути.
|
||||||
@@ -0,0 +1,44 @@
|
|||||||
|
# Внешние источники данных
|
||||||
|
|
||||||
|
Точечные правки внутри уже созданного источника: поле в таблицу, таблица и функция в источник.
|
||||||
|
Источник целиком собирает навык `meta-compile` — его повторный запуск заменяет файл источника,
|
||||||
|
выдаёт новый uuid и оставляет сиротами таблицы, которых нет в описании.
|
||||||
|
|
||||||
|
## add-field — поле таблицы
|
||||||
|
|
||||||
|
Правится файл таблицы: `ExternalDataSources/<Источник>/Tables/<Таблица>.xml`.
|
||||||
|
|
||||||
|
Поле задаётся как обычный реквизит, плюс три своих ключа: `nameInDataSource` (умолчание — имя поля),
|
||||||
|
`readOnly`, `allowNull`. Флаги строковой формы — `readonly`, `nullable`.
|
||||||
|
|
||||||
|
```json
|
||||||
|
{ "add": { "fields": [
|
||||||
|
"barcode: String(20) | nullable",
|
||||||
|
{ "name": "cost", "type": "Number(15,2)", "nameInDataSource": "cost_net", "readOnly": true }
|
||||||
|
] } }
|
||||||
|
```
|
||||||
|
|
||||||
|
Типы поля: `Number`, `String`, `Date`, `Boolean`, `UUID`, `BinaryData` и ссылка на таблицу того же
|
||||||
|
источника — `ExternalDataSourceTableRef.<Источник>.<Таблица>`. Составной тип платформа запрещает.
|
||||||
|
|
||||||
|
## add-tables / add-functions — в файле источника
|
||||||
|
|
||||||
|
Правится файл источника: `ExternalDataSources/<Источник>.xml`. Таблица — единственная операция
|
||||||
|
навыка, создающая **файл**: `<Источник>/Tables/<Имя>.xml` плюс имя в `ChildObjects` источника.
|
||||||
|
Синтаксис таблицы и функции тот же, что у навыка `meta-compile` (`reference/external-data-source.md` там же).
|
||||||
|
|
||||||
|
```json
|
||||||
|
{ "add": {
|
||||||
|
"tables": { "sales": { "keyFields": ["id"], "fields": ["id: Number(10,0)", "summa: Number(15,2)"] } },
|
||||||
|
"functions": { "nextKey": "NEXT VALUE FOR public.seq_key" }
|
||||||
|
} }
|
||||||
|
```
|
||||||
|
|
||||||
|
При добавлении таблицы не поддержаны ключи `characteristics` и `default*Form` — навык отвергает их,
|
||||||
|
а не проглатывает молча. Характеристики задаются при сборке источника навыком `meta-compile`,
|
||||||
|
форму назначает навык `form-add`.
|
||||||
|
|
||||||
|
## Удаление
|
||||||
|
|
||||||
|
Таблицу удаляет навык `meta-remove`: `ExternalDataSource.<Источник>.Table.<Таблица>` — вместе с файлом
|
||||||
|
и записью в `ChildObjects`. Весь источник — `ExternalDataSource.<Источник>`.
|
||||||
+2
-2
@@ -120,7 +120,7 @@ powershell.exe -NoProfile -File ${CLAUDE_SKILL_DIR}/scripts/meta-edit.ps1 -Defin
|
|||||||
| properties | свойства |
|
| properties | свойства |
|
||||||
|
|
||||||
Формы и макеты `meta-edit` не добавляет и не удаляет: кроме записи в `ChildObjects` у них есть собственные файлы.
|
Формы и макеты `meta-edit` не добавляет и не удаляет: кроме записи в `ChildObjects` у них есть собственные файлы.
|
||||||
Форма — `form-add` / `form-remove`, макет — `template-add` / `template-remove`. Команда файла не имеет — её `meta-edit` добавляет сам.
|
Форма — навыки `form-add` / `form-remove`, макет — `template-add` / `template-remove`. Команда файла не имеет — её `meta-edit` добавляет сам.
|
||||||
|
|
||||||
## Составные типы
|
## Составные типы
|
||||||
|
|
||||||
@@ -150,4 +150,4 @@ powershell.exe -NoProfile -File ${CLAUDE_SKILL_DIR}/scripts/meta-edit.ps1 -Defin
|
|||||||
| ExternalDataSource | tables, functions |
|
| ExternalDataSource | tables, functions |
|
||||||
| Table (таблица внешнего источника) | fields, commands |
|
| Table (таблица внешнего источника) | fields, commands |
|
||||||
|
|
||||||
У `Constant` добавлять нечего: единственный её ребёнок — форма, а форму добавляет `form-add`.
|
У `Constant` добавлять нечего: единственный её ребёнок — форма, а форму добавляет навык `form-add`.
|
||||||
@@ -0,0 +1,23 @@
|
|||||||
|
# Значения перечисления и команды
|
||||||
|
|
||||||
|
## add-enumValue / add-command
|
||||||
|
|
||||||
|
Просто имена (batch через `;;`):
|
||||||
|
```powershell
|
||||||
|
-Operation add-enumValue -Value "Значение1 ;; Значение2 ;; Значение3"
|
||||||
|
-Operation add-command -Value "ОткрытьДосье"
|
||||||
|
```
|
||||||
|
|
||||||
|
Команда создаётся вместе с заготовкой модуля `Commands/<Имя>/Ext/CommandModule.bsl`.
|
||||||
|
|
||||||
|
## Формы и макеты — другими навыками
|
||||||
|
|
||||||
|
Кроме записи в `ChildObjects` у формы и макета есть собственные файлы, поэтому `meta-edit` их
|
||||||
|
не добавляет и не удаляет:
|
||||||
|
|
||||||
|
| Что | Добавить | Удалить |
|
||||||
|
|-----|----------|---------|
|
||||||
|
| Форма | навык `form-add` | навык `form-remove` |
|
||||||
|
| Макет | навык `template-add` | навык `template-remove` |
|
||||||
|
|
||||||
|
Содержимое формы собирает навык `form-compile`.
|
||||||
@@ -0,0 +1,20 @@
|
|||||||
|
# Предопределённые элементы
|
||||||
|
|
||||||
|
Добавить предопределённые элементы (Catalog, ChartOfCharacteristicTypes). Существующие элементы и их
|
||||||
|
идентификаторы сохраняются, новые получают свежий id.
|
||||||
|
|
||||||
|
Inline — строка `(Код) Имя [Наименование]` (batch через `;;`; `[Наименование]` необязательно — иначе авто из имени):
|
||||||
|
```powershell
|
||||||
|
-Operation add-predefined -Value "(001) Основной ;; (002) Резервный [Резервный склад]"
|
||||||
|
```
|
||||||
|
|
||||||
|
JSON — строки и/или объекты (для групп с вложенными):
|
||||||
|
```json
|
||||||
|
{ "add": { "predefined": [
|
||||||
|
"(001) Основной",
|
||||||
|
{ "name": "Группа", "isFolder": true, "childItems": ["(002) Вложенный"] }
|
||||||
|
] } }
|
||||||
|
```
|
||||||
|
|
||||||
|
Ключи объекта: `name`, `code`, `description`, `isFolder`, `childItems` (дерево). Тип кода (строковый/числовой)
|
||||||
|
берётся из объекта автоматически.
|
||||||
@@ -0,0 +1,56 @@
|
|||||||
|
# Табличные части
|
||||||
|
|
||||||
|
Операции над табличной частью и её реквизитами. Общие правила shorthand-формата, флагов, batch и
|
||||||
|
позиционной вставки — в `attributes.md`.
|
||||||
|
|
||||||
|
## add-ts
|
||||||
|
|
||||||
|
Формат: `ИмяТЧ: Реквизит1: Тип1, Реквизит2: Тип2, ...`
|
||||||
|
|
||||||
|
```powershell
|
||||||
|
-Operation add-ts -Value "Товары: Ном: CatalogRef.Ном | req, Кол: Число(15,3), Цена: Число(15,2), Сумма: Число(15,2)"
|
||||||
|
```
|
||||||
|
|
||||||
|
## add-ts-attribute / remove-ts-attribute / modify-ts-attribute
|
||||||
|
|
||||||
|
Операции над реквизитами **внутри существующей ТЧ**. Формат: `ИмяТЧ.ОпределениеРеквизита` (dot-нотация).
|
||||||
|
|
||||||
|
```powershell
|
||||||
|
# Добавить реквизит в ТЧ
|
||||||
|
-Operation add-ts-attribute -Value "Товары.СтавкаНДС: EnumRef.СтавкиНДС"
|
||||||
|
-Operation add-ts-attribute -Value "Товары.Скидка: Число(15,2) ;; Товары.Бонус: Число(15,2)"
|
||||||
|
|
||||||
|
# Позиционная вставка в ТЧ
|
||||||
|
-Operation add-ts-attribute -Value "Товары.Скидка: Число(15,2) >> after Цена"
|
||||||
|
|
||||||
|
# Удалить реквизит из ТЧ
|
||||||
|
-Operation remove-ts-attribute -Value "Товары.УстаревшийРекв"
|
||||||
|
-Operation remove-ts-attribute -Value "Товары.Рекв1 ;; Товары.Рекв2"
|
||||||
|
|
||||||
|
# Изменить реквизит в ТЧ (rename, type change и т.д.)
|
||||||
|
-Operation modify-ts-attribute -Value "Товары.СтароеИмя: name=НовоеИмя, type=Строка(500)"
|
||||||
|
```
|
||||||
|
|
||||||
|
Batch через `;;` — можно указать разные ТЧ: `"Товары.А: Строка(50) ;; Услуги.Б: Число(10)"`.
|
||||||
|
|
||||||
|
Составной тип реквизита ТЧ:
|
||||||
|
```powershell
|
||||||
|
-Operation modify-ts-attribute -Value "Данные.Значение: type=Строка + Число(15,2) + Дата"
|
||||||
|
```
|
||||||
|
|
||||||
|
## modify-ts
|
||||||
|
|
||||||
|
Изменение свойств **самой табличной части** (Synonym, FillChecking, Use и др.):
|
||||||
|
|
||||||
|
```powershell
|
||||||
|
-Operation modify-ts -Value "Товары: synonym=Товарный состав"
|
||||||
|
-Operation modify-ts -Value "Товары: fillChecking=ShowError"
|
||||||
|
```
|
||||||
|
|
||||||
|
Формат аналогичен `modify-attribute`: `ИмяТЧ: ключ=значение, ключ=значение`.
|
||||||
|
|
||||||
|
## remove-ts
|
||||||
|
|
||||||
|
```powershell
|
||||||
|
-Operation remove-ts -Value "УстаревшаяТЧ"
|
||||||
|
```
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
# meta-edit v1.48 — Edit existing 1C metadata object XML
|
# meta-edit v1.49 — Edit existing 1C metadata object XML
|
||||||
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
|
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
|
||||||
[CmdletBinding(PositionalBinding=$false)]
|
[CmdletBinding(PositionalBinding=$false)]
|
||||||
param(
|
param(
|
||||||
@@ -2246,7 +2246,7 @@ function Process-Add($addDef) {
|
|||||||
if ($tv) {
|
if ($tv) {
|
||||||
foreach ($k in @("characteristics","defaultObjectForm","defaultRecordForm","defaultListForm","defaultChoiceForm")) {
|
foreach ($k in @("characteristics","defaultObjectForm","defaultRecordForm","defaultListForm","defaultChoiceForm")) {
|
||||||
if ($tv.$k) {
|
if ($tv.$k) {
|
||||||
Warn "Ключ '$k' не поддержан при добавлении таблицы: форму назначает form-add, характеристики — meta-compile. Таблица '$tblName' пропущена."
|
Warn "Ключ '$k' не поддержан при добавлении таблицы: форму назначает навык form-add, характеристики — навык meta-compile. Таблица '$tblName' пропущена."
|
||||||
$tblName = $null; break
|
$tblName = $null; break
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
#!/usr/bin/env python3
|
#!/usr/bin/env python3
|
||||||
# meta-edit v1.48 — Edit existing 1C metadata object XML
|
# meta-edit v1.49 — Edit existing 1C metadata object XML
|
||||||
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
|
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
|
||||||
|
|
||||||
import argparse
|
import argparse
|
||||||
@@ -2200,7 +2200,7 @@ def process_add(add_def):
|
|||||||
bad_key = next((k for k in ('characteristics', 'defaultObjectForm', 'defaultRecordForm',
|
bad_key = next((k for k in ('characteristics', 'defaultObjectForm', 'defaultRecordForm',
|
||||||
'defaultListForm', 'defaultChoiceForm') if tv.get(k)), None)
|
'defaultListForm', 'defaultChoiceForm') if tv.get(k)), None)
|
||||||
if bad_key:
|
if bad_key:
|
||||||
warn(f"Ключ '{bad_key}' не поддержан при добавлении таблицы: форму назначает form-add, характеристики — meta-compile. Таблица '{tbl_name}' пропущена.")
|
warn(f"Ключ '{bad_key}' не поддержан при добавлении таблицы: форму назначает навык form-add, характеристики — навык meta-compile. Таблица '{tbl_name}' пропущена.")
|
||||||
continue
|
continue
|
||||||
if tbl_name in existing_names:
|
if tbl_name in existing_names:
|
||||||
warn(f"Table '{tbl_name}' already exists, skipping")
|
warn(f"Table '{tbl_name}' already exists, skipping")
|
||||||
|
|||||||
@@ -26,7 +26,7 @@ python scripts/switch-to-python.py
|
|||||||
python scripts/switch-to-powershell.py
|
python scripts/switch-to-powershell.py
|
||||||
```
|
```
|
||||||
|
|
||||||
Скрипты обрабатывают все `.md` файлы в `.claude/skills/*/` (SKILL.md, json-dsl.md и др.). Идемпотентны — повторный запуск безопасен. Python-only навыки (img-grid) пропускаются при переключении на PowerShell.
|
Скрипты обрабатывают все `.md` файлы навыка, включая подкаталоги (SKILL.md, `reference/*.md` и др.). Идемпотентны — повторный запуск безопасен. Python-only навыки (img-grid) пропускаются при переключении на PowerShell.
|
||||||
|
|
||||||
## Принцип самодостаточности
|
## Принцип самодостаточности
|
||||||
|
|
||||||
|
|||||||
+6
-2
@@ -160,8 +160,12 @@ def scan_skills(skills_dir):
|
|||||||
|
|
||||||
|
|
||||||
def collect_md_files(skill_dir):
|
def collect_md_files(skill_dir):
|
||||||
"""Return list of .md files in a skill directory."""
|
"""Return list of .md files in a skill directory, including subdirectories.
|
||||||
return sorted(glob.glob(os.path.join(skill_dir, '*.md')))
|
|
||||||
|
Команды запуска живут не только в SKILL.md: у навыков с каскадом инструкций
|
||||||
|
они есть и в reference/*.md. Нерекурсивный обход молча оставлял бы их на старом рантайме.
|
||||||
|
"""
|
||||||
|
return sorted(glob.glob(os.path.join(skill_dir, '**', '*.md'), recursive=True))
|
||||||
|
|
||||||
|
|
||||||
def classify_skill_runtime(skill_dir):
|
def classify_skill_runtime(skill_dir):
|
||||||
|
|||||||
Reference in New Issue
Block a user