feat(meta-compile,meta-decompile): мультиязычный синоним объекта + терминология spec (v1.22/v0.7)

Раундтрип-находка: синоним САМОГО объекта (уровня справочника) мультиязычен у 950 справочников
корпуса (все erp: ru+en), но компилятор стрингифаил его ($synonym → ru-only), декомпилятор брал
Get-MLru (ru-only) → потеря en.

- meta-compile (дуал-порт): $synonym/synonym пробрасывается без стрингификации (строка ИЛИ {ru,en})
  → Emit-MLText (уже мультиязычный). Гард на плоском Description-fallback (ScheduledJob) для не-строки.
- meta-decompile: синоним объекта через Get-MLValue (строка ru | {ru,en}).
- spec: терминология «каталог» → «справочник» (тип Catalog = Справочник; файловая директория не тронута).

Валидация: PS==PY; byte-match erp-справочника; −3772 (93459→89687); регресс 37/37; 1С-cert зелёный.
Остаток item/ToolTip того уровня — синоним/подсказка ТЧ + xr:ToolTip станд. реквизита (следующие заходы).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
Nick Shirokov
2026-07-03 14:58:00 +03:00
parent 5f53c3f02e
commit 72d6d47454
6 changed files with 21 additions and 11 deletions
+3 -3
View File
@@ -149,7 +149,7 @@ JSON DSL для описания объектов метаданных конф
| `createOnInput` | CreateOnInput | Auto | Auto/Use/DontUse |
| `quickChoice` | QuickChoice | Auto | Auto/Use/DontUse. Прощаем bool (форм-стиль): `true`→Use, `false`→DontUse |
| `dataHistory` | DataHistory | Use | Use/DontUse |
| `use` | Use | ForItem | ForItem/ForFolderAndItem/ForFolder (иерарх. каталог) |
| `use` | Use | ForItem | ForItem/ForFolderAndItem/ForFolder (иерарх. справочник) |
| `passwordMode` | PasswordMode | false | bool |
| `mask` | Mask | пусто | строка маски |
| `format` / `editFormat` | Format / EditFormat | пусто | строка/`{ru,en}` (ML, форматная строка 1С) |
@@ -268,7 +268,7 @@ JSON DSL для описания объектов метаданных конф
Блок `<StandardAttributes>` платформа материализует **только когда пользователь кастомизировал хотя бы один стандартный реквизит** (Наименование/Код/Владелец/…). Ни иерархия, ни владелец, ни предопределённые сами по себе блок не создают. В DSL это выражается **наличием ключа `standardAttributes`**:
- **Ключа нет** → блок не эмитится (обычный каталог: Наименование, Код, Владелец и т.д. остаются платформенными по умолчанию).
- **Ключа нет** → блок не эмитится (обычный справочник: Наименование, Код, Владелец и т.д. остаются платформенными по умолчанию).
- **Ключ есть** (даже пустой `{}`) → эмитится полный блок из всех стандартных реквизитов с **профилем материализованного блока**, поверх которого накладываются заданные переопределения.
Формат: `standardAttributes` — объект `{ ИмяРеквизита: { переопределения } }`. Имена реквизитов — как в XML: `PredefinedDataName`, `Predefined`, `Ref`, `DeletionMark`, `IsFolder`, `Owner`, `Parent`, `Description`, `Code`.
@@ -334,7 +334,7 @@ JSON DSL для описания объектов метаданных конф
"childItems": [ "Факс", "(7) Скайп [Скайп]" ] }
```
Тип кода в XML определяется свойством каталога `codeType`: `Number``<Code xsi:type="xs:decimal">`, `String``<Code>` (без типа); пустой код → `<Code/>`.
Тип кода в XML определяется свойством справочника `codeType`: `Number``<Code xsi:type="xs:decimal">`, `String``<Code>` (без типа); пустой код → `<Code/>`.
> Пока поддержано для **Catalog** (`CatalogPredefinedItems`). ChartOf*/ПВХ — при их проработке.