feat(meta-compile,meta-decompile): поддержка типа FunctionalOption (v1.54/v0.45)

18-й тип, 1381 объект acc+erp. Компилятор НЕ поддерживал FO вовсе (новый тип
с нуля): +validTypes/typePluralMap/dispatch/Emit-FunctionalOptionProperties +
рус.синоним ФункциональнаяОпция. FO без InternalInfo/ChildObjects/модулей —
Emit-InternalInfo уже раннее-возвращает без generatedTypes-записи, ChildObjects/
модули гейтятся списками типов → FO их не получает.

- Свойства: Location (хранилище значения), PrivilegedGetMode (дефолт true —
  корпус 2864/2864), Content (список зависимых объектов → <xr:Object>). Декомпилятор
  снят гейт +FO; захват location/privilegedGetMode(omit-true)/content.
- Прощающий ввод MDObjectRef-путей (Normalize-MDObjectRef): русские корни
  метаданных+подвидов (Документ→Document/ТабличнаяЧасть→TabularSection/Реквизит→
  Attribute/Измерение→Dimension/Ресурс→Resource/…) на чётных позициях-видах; имена
  не трогаются. Только компилятор (декомпилятор пишет полный англ. путь →
  роундтрип byte-exact). Location/Content — полные внешние ссылки, self-формы нет.

ПОЛНЫЙ КОРПУС 1381: 1380 byte-exact order-preserved + 1 MAX_PATH-артефакт харнеса
(имя 157 симв.; объект компилируется в короткий путь ✓). Регресс 55/55 ps1+py,
ps1==py identical. spec §7.7a, кейс functional-option.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
Nick Shirokov
2026-07-09 21:47:25 +03:00
parent 47134425f3
commit edc8474ddd
9 changed files with 470 additions and 6 deletions
+23
View File
@@ -963,6 +963,29 @@ true); `characteristics` (§7.1.4); `basedOn`/`inputByString`/`dataLockFields` (
{ "type": "DefinedType", "name": "ФлагАктивности", "valueType": "Boolean" }
```
### 7.7a FunctionalOption (Функциональная опция)
Функциональная опция: хранилище значения (Location) + список зависимых объектов (Content). Без InternalInfo,
ChildObjects и модулей.
| Поле JSON | Умолчание | XML элемент |
|-----------|----------|-------------|
| `location` | `""` | Location — где хранится значение опции: `Constant.X` / `InformationRegister.X.Resource.Y` / `<Тип>.X.Attribute.Y` (алиас `value`) |
| `content` | `[]` | Content — массив MDObjectRef-путей к реквизитам/измерениям/ресурсам, зависящим от опции (`<xr:Object>`) |
| `privilegedGetMode` | `true` | PrivilegedGetMode |
| `comment` | пусто | Comment |
`location`/`content` — **полные MDObjectRef-пути к внешним объектам** (короткой self-формы нет — опция ссылается
на реквизиты чужих объектов). Прощающий ввод: русские корни метаданных и подвидов (Документ→Document,
ТабличнаяЧасть→TabularSection, Реквизит→Attribute, Измерение→Dimension, Ресурс→Resource, Константа→Constant, …);
имена объектов не трогаются.
```json
{ "type": "FunctionalOption", "name": "ВестиУчетПоСкладам", "location": "Constant.ВестиУчетПоСкладам",
"content": ["Документ.РеализацияТоваров.ТабличнаяЧасть.Товары.Реквизит.Склад",
"РегистрНакопления.ОстаткиТоваров.Измерение.Склад"] }
```
### 7.8 CommonModule
| Поле JSON | Умолчание | XML элемент |