mirror of
https://github.com/Nikolay-Shirokov/cc-1c-skills.git
synced 2026-09-03 16:50:52 +03:00
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:
co-authored by
Claude Opus 4.8
parent
47134425f3
commit
edc8474ddd
@@ -1,4 +1,4 @@
|
||||
# meta-decompile v0.44 — XML объекта метаданных 1С → JSON-черновик формата meta-compile
|
||||
# meta-decompile v0.45 — XML объекта метаданных 1С → JSON-черновик формата meta-compile
|
||||
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
|
||||
#
|
||||
# Поддержаны: Catalog, ExchangePlan, ChartOfCharacteristicTypes, ChartOfAccounts, ChartOfCalculationTypes, Document,
|
||||
@@ -92,8 +92,8 @@ foreach ($c in $rootEl.ChildNodes) { if ($c.NodeType -eq 'Element') { $objNode =
|
||||
if (-not $objNode) { [Console]::Error.WriteLine("meta-decompile: пустой MetaDataObject"); exit 3 }
|
||||
$objType = $objNode.LocalName
|
||||
|
||||
if ($objType -notin @('Catalog', 'ExchangePlan', 'ChartOfCharacteristicTypes', 'ChartOfAccounts', 'ChartOfCalculationTypes', 'Document', 'InformationRegister', 'AccumulationRegister', 'AccountingRegister', 'CalculationRegister', 'BusinessProcess', 'Task', 'Enum', 'Report', 'DataProcessor', 'Constant', 'DefinedType')) {
|
||||
[Console]::Error.WriteLine("meta-decompile: тип '$objType' пока не поддержан (Catalog, ExchangePlan, ChartOfCharacteristicTypes, ChartOfAccounts, ChartOfCalculationTypes, Document, InformationRegister, AccumulationRegister, AccountingRegister, CalculationRegister, BusinessProcess, Task, Enum, Report, DataProcessor, Constant, DefinedType)"); exit 3
|
||||
if ($objType -notin @('Catalog', 'ExchangePlan', 'ChartOfCharacteristicTypes', 'ChartOfAccounts', 'ChartOfCalculationTypes', 'Document', 'InformationRegister', 'AccumulationRegister', 'AccountingRegister', 'CalculationRegister', 'BusinessProcess', 'Task', 'Enum', 'Report', 'DataProcessor', 'Constant', 'DefinedType', 'FunctionalOption')) {
|
||||
[Console]::Error.WriteLine("meta-decompile: тип '$objType' пока не поддержан (Catalog, ExchangePlan, ChartOfCharacteristicTypes, ChartOfAccounts, ChartOfCalculationTypes, Document, InformationRegister, AccumulationRegister, AccountingRegister, CalculationRegister, BusinessProcess, Task, Enum, Report, DataProcessor, Constant, DefinedType, FunctionalOption)"); exit 3
|
||||
}
|
||||
|
||||
$props = $objNode.SelectSingleNode('md:Properties', $nsm)
|
||||
@@ -599,6 +599,16 @@ if ($objType -eq 'DefinedType') {
|
||||
$vt = Get-TypeShorthand ($props.SelectSingleNode('md:Type', $nsm))
|
||||
if ($vt) { $dsl['valueType'] = $vt }
|
||||
}
|
||||
# FunctionalOption — функциональная опция: Location (хранилище значения) + PrivilegedGetMode + Content (зависимые объекты).
|
||||
if ($objType -eq 'FunctionalOption') {
|
||||
$loc = P 'Location'; if ($loc) { $dsl['location'] = $loc }
|
||||
Add-BoolProp 'privilegedGetMode' 'PrivilegedGetMode' $true # корпус 2864/2864 true → дефолт true, ловим false
|
||||
$contentNode = $props.SelectSingleNode('md:Content', $nsm)
|
||||
if ($contentNode) {
|
||||
$items = @($contentNode.SelectNodes('xr:Object', $nsm) | ForEach-Object { $_.InnerText })
|
||||
if ($items.Count -gt 0) { $dsl['content'] = [System.Collections.ArrayList]@($items) }
|
||||
}
|
||||
}
|
||||
# Constant — богатый одиночный реквизит: Type + свойства значения (как у реквизита) + object-уровень.
|
||||
if ($objType -eq 'Constant') {
|
||||
$vt = Get-TypeShorthand ($props.SelectSingleNode('md:Type', $nsm))
|
||||
|
||||
Reference in New Issue
Block a user