mirror of
https://github.com/Nikolay-Shirokov/cc-1c-skills.git
synced 2026-07-14 06:45:17 +03:00
feat(meta-compile,meta-decompile): предопределённые элементы Catalog (Ext/Predefined.xml) (v1.19/v0.5)
Раундтрип-находка (класс-3, непокрытый блок — крупнейшая категория ~56k). meta-compile вообще не генерил Ext/Predefined.xml. DSL спроектирован по данным корпуса (9309 элементов) + совместно. DSL `predefined` (массив; строка ИЛИ объект): - строка "(Код) Имя [Наименование]": Имя обяз.; Наименование — нет [..] → авто(Split-CamelCase), [] → пусто (системные/placeholder, 29% корпуса), [текст] → задано; - объект (группа/иерархия): name/code/description/isFolder/childItems + рус.синонимы имя/код/наименование/группа/подчиненные (прощающий ввод). - Код: по codeType каталога (Number→xs:decimal, String→без типа), пусто→<Code/>. meta-compile (дуал-порт): генерация Ext/Predefined.xml (root CatalogPredefinedItems + рекурсия Item). Заодно фикс: Esc-XmlText для ТЕКСТА элемента (& < > без экранирования кавычек — в тексте 1С держит raw). meta-decompile: захват predefined → компактный DSL (строка/объект). Фикс PS-ловушки распаковки одноэлементного @() из if → папки с ОДНИМ ребёнком теряли его. spec meta-dsl-spec.md v2.4 §7.1.2; тест-кейс catalog-predefined. Валидация: PS==PY паритет; predefined-категории 0 (PredefinedData/Item/ChildItems/Description/Code); полный прогон −56620 (218537→161917); регресс 36/36 (ps+py); 1С-cert зелёный (грузится в платформу). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
+40
-1
@@ -1,6 +1,6 @@
|
||||
# Meta DSL — спецификация JSON-формата для объектов метаданных 1С
|
||||
|
||||
Версия: 2.3
|
||||
Версия: 2.4
|
||||
|
||||
## Обзор
|
||||
|
||||
@@ -275,6 +275,45 @@ JSON DSL для описания объектов метаданных конф
|
||||
|
||||
> Пока поддержано для **Catalog**. У прочих типов объектов — свои стандартные реквизиты и профили (будут добавлены при их проработке).
|
||||
|
||||
#### 7.1.2 `predefined` — предопределённые элементы
|
||||
|
||||
Массив предопределённых элементов справочника → файл `Ext/Predefined.xml`. Ключа нет / пустой массив → файл не создаётся. Элемент — **строка** (короткая форма, плоский случай) ЛИБО **объект** (группа/иерархия).
|
||||
|
||||
**Строковая форма:** `"(Код) Имя [Наименование]"`
|
||||
- **Имя** — обязательный идентификатор (без пробелов).
|
||||
- **`(Код)`** — опциональный префикс.
|
||||
- **`[Наименование]`** — опциональный суффикс:
|
||||
- нет `[...]` → Наименование **авто** из Имени (Split-CamelCase, §2);
|
||||
- `[]` (пусто) → Наименование пустое (для системных/placeholder-элементов);
|
||||
- `[текст]` → заданное.
|
||||
|
||||
```json
|
||||
"predefined": [
|
||||
"Основной", // Наименование авто = "Основной"
|
||||
"(1) ДокументОПриемке [Документ о приемке]", // код + имя + Наименование
|
||||
"ПустоеЗначение []" // Наименование пустое
|
||||
]
|
||||
```
|
||||
|
||||
**Объектная форма** (группа/иерархия):
|
||||
|
||||
| Ключ | Синоним | Описание |
|
||||
|------|---------|----------|
|
||||
| `name` | `имя` | Имя (обязательно) |
|
||||
| `code` | `код` | Код |
|
||||
| `description` | `наименование` | Наименование (ключа нет → авто; `""` → пусто) |
|
||||
| `isFolder` | `группа` | Признак группы |
|
||||
| `childItems` | `подчиненные` | Вложенные элементы (строки/объекты, рекурсивно) |
|
||||
|
||||
```json
|
||||
{ "name": "Группа1", "isFolder": true, "description": "Прочие",
|
||||
"childItems": [ "Факс", "(7) Скайп [Скайп]" ] }
|
||||
```
|
||||
|
||||
Тип кода в XML определяется свойством каталога `codeType`: `Number` → `<Code xsi:type="xs:decimal">`, `String` → `<Code>` (без типа); пустой код → `<Code/>`.
|
||||
|
||||
> Пока поддержано для **Catalog** (`CatalogPredefinedItems`). ChartOf*/ПВХ — при их проработке.
|
||||
|
||||
### 7.2 Document
|
||||
|
||||
| Поле JSON | Умолчание | XML элемент |
|
||||
|
||||
Reference in New Issue
Block a user