mirror of
https://github.com/Nikolay-Shirokov/cc-1c-skills.git
synced 2026-07-30 08:26:55 +03:00
feat(meta-compile,meta-decompile): поддержка типов Report + DataProcessor (v1.52/v0.43)
14-й/15-й типы, 2546 объектов acc+erp. Рерайт Emit-ReportProperties/ Emit-DataProcessorProperties на общие хелперы (был легаси-хардкод Comment/ UseStandardCommands/формы/презентации). Декомпилятор: снят гейт +оба; Report-специфика (defaultForm/mainDataCompositionSchema/*SettingsForm/ defaultVariantForm/variantsStorage/settingsStorage/extendedPresentation), DataProcessor-специфика (defaultForm/auxiliaryForm/extendedPresentation). Общие фиксы (не только Report/DataProcessor): - Emit-VerbatimRef: ссылки форм/схем/хранилищ без Normalize-FormRef — имя формы может быть буквально «Форма» (Normalize перевёл бы имя-сегмент Форма→Form). - Пустой <Type/> (реквизит без типа): маркер typeEmpty (декомпилятор type:"", компилятор <Type/> + FillValue nil вместо xs:string). Отличаем present-"" от absent. - Платформенные типы v8:-префикса (ValueTable/ValueTree/ValueList/StandardPeriod/…), current-config cfg:-типы (ConstantsSet/ReportBuilder/*Object.X), выделенные ns (Chart/SettingsComposer/SpreadsheetDocument) — компилятор возвращал голое имя. - Expand-DataPath: голый (отрицательный) индекс-маркер (-8 в ChoiceParameterLinks) verbatim. Class-2: UseStandardCommands дефолт true (совместно с пользователем — авторски- безопасно: доступность через стандартный командный интерфейс; при false и без переопределения размещения команд объект доступен лишь по навигационной ссылке). Декомпилятор явно фиксирует false. У DataProcessor мода корпуса и так true. ПОЛНЫЙ КОРПУС 2546: match 2546/2546, TOTAL 0, byte-exact order-preserved (сверено с реальными 1С-файлами). Регресс 52/52 ps1+py, ps1==py identical. spec §7.11/§7.12, кейсы report-full/data-processor-full. 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
117a06ff3e
commit
db29324215
@@ -1,4 +1,4 @@
|
||||
# meta-decompile v0.42 — XML объекта метаданных 1С → JSON-черновик формата meta-compile
|
||||
# meta-decompile v0.43 — 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')) {
|
||||
[Console]::Error.WriteLine("meta-decompile: тип '$objType' пока не поддержан (Catalog, ExchangePlan, ChartOfCharacteristicTypes, ChartOfAccounts, ChartOfCalculationTypes, Document, InformationRegister, AccumulationRegister, AccountingRegister, CalculationRegister, BusinessProcess, Task, Enum)"); exit 3
|
||||
if ($objType -notin @('Catalog', 'ExchangePlan', 'ChartOfCharacteristicTypes', 'ChartOfAccounts', 'ChartOfCalculationTypes', 'Document', 'InformationRegister', 'AccumulationRegister', 'AccountingRegister', 'CalculationRegister', 'BusinessProcess', 'Task', 'Enum', 'Report', 'DataProcessor')) {
|
||||
[Console]::Error.WriteLine("meta-decompile: тип '$objType' пока не поддержан (Catalog, ExchangePlan, ChartOfCharacteristicTypes, ChartOfAccounts, ChartOfCalculationTypes, Document, InformationRegister, AccumulationRegister, AccountingRegister, CalculationRegister, BusinessProcess, Task, Enum, Report, DataProcessor)"); exit 3
|
||||
}
|
||||
|
||||
$props = $objNode.SelectSingleNode('md:Properties', $nsm)
|
||||
@@ -370,9 +370,12 @@ function Attr-ToDsl {
|
||||
$cplArr = Parse-ChoiceParameterLinks $ap 'md:ChoiceParameterLinks'; if ($null -ne $cplArr) { $extra['choiceParameterLinks'] = $cplArr }
|
||||
$cpArr = Parse-ChoiceParameters $ap 'md:ChoiceParameters'; if ($null -ne $cpArr) { $extra['choiceParameters'] = $cpArr }
|
||||
|
||||
if ($synCustom -or $synEmpty -or ($null -ne $ttVal) -or $extra.Count -gt 0) {
|
||||
# Пустой <Type/> (реквизит без типа / произвольный) → $ts=''. Отличаем от «дефолтного» отсутствия:
|
||||
# заставляем объектную форму с явным type:'' (компилятор без маркера подставил бы xs:string).
|
||||
$typeEmpty = ($ts -eq '')
|
||||
if ($synCustom -or $synEmpty -or ($null -ne $ttVal) -or $extra.Count -gt 0 -or $typeEmpty) {
|
||||
$o = [ordered]@{ name = $nm }
|
||||
if ($ts) { $o['type'] = $ts }
|
||||
if ($ts) { $o['type'] = $ts } elseif ($typeEmpty) { $o['type'] = '' }
|
||||
if ($synCustom) { $o['synonym'] = $synVal }
|
||||
elseif ($synEmpty) { $o['synonym'] = '' }
|
||||
if ($null -ne $ttVal) { $o['tooltip'] = $ttVal }
|
||||
@@ -434,7 +437,7 @@ Add-BoolProp 'quickChoice' 'QuickChoice' $(if ($objType -eq 'Enum')
|
||||
Add-EnumProp 'choiceMode' 'ChoiceMode' 'BothWays'
|
||||
Add-EnumProp 'dataLockControlMode' 'DataLockControlMode' $dataLockDef
|
||||
Add-EnumProp 'fullTextSearch' 'FullTextSearch' 'Use'
|
||||
Add-BoolProp 'useStandardCommands' 'UseStandardCommands' $(if ($objType -eq 'Enum') { $false } else { $true })
|
||||
Add-BoolProp 'useStandardCommands' 'UseStandardCommands' $(if ($objType -eq 'Enum') { $false } else { $true }) # Enum дефолт false (корпус); прочие (вкл. Report/DataProcessor) — true: авторски-безопасно (доступность через интерфейс), false фиксируем явно
|
||||
Add-EnumProp 'createOnInput' 'CreateOnInput' $createInpDef
|
||||
Add-EnumProp 'editType' 'EditType' 'InDialog'
|
||||
Add-BoolProp 'includeHelpInContents' 'IncludeHelpInContents' $false
|
||||
@@ -573,6 +576,24 @@ if ($objType -eq 'Task') {
|
||||
$cp = P 'CurrentPerformer'; if ($cp) { $dsl['currentPerformer'] = $cp }
|
||||
Add-EnumProp 'defaultPresentation' 'DefaultPresentation' 'AsDescription'
|
||||
}
|
||||
# Report-специфичные свойства: формы (плоские ref, не *ObjectForm), схема компоновки, хранилища вариантов/настроек.
|
||||
if ($objType -eq 'Report') {
|
||||
$dfm = P 'DefaultForm'; if ($dfm) { $dsl['defaultForm'] = $dfm }
|
||||
$afm = P 'AuxiliaryForm'; if ($afm) { $dsl['auxiliaryForm'] = $afm }
|
||||
$mdcs = P 'MainDataCompositionSchema'; if ($mdcs) { $dsl['mainDataCompositionSchema'] = $mdcs }
|
||||
$dsf = P 'DefaultSettingsForm'; if ($dsf) { $dsl['defaultSettingsForm'] = $dsf }
|
||||
$asf = P 'AuxiliarySettingsForm'; if ($asf) { $dsl['auxiliarySettingsForm'] = $asf }
|
||||
$dvf = P 'DefaultVariantForm'; if ($dvf) { $dsl['defaultVariantForm'] = $dvf }
|
||||
$vs = P 'VariantsStorage'; if ($vs) { $dsl['variantsStorage'] = $vs }
|
||||
$ss = P 'SettingsStorage'; if ($ss) { $dsl['settingsStorage'] = $ss }
|
||||
$ep = Get-MLValue ($props.SelectSingleNode('md:ExtendedPresentation', $nsm)); if ($null -ne $ep) { $dsl['extendedPresentation'] = $ep }
|
||||
}
|
||||
# DataProcessor-специфичные свойства: формы (плоские ref).
|
||||
if ($objType -eq 'DataProcessor') {
|
||||
$dfm = P 'DefaultForm'; if ($dfm) { $dsl['defaultForm'] = $dfm }
|
||||
$afm = P 'AuxiliaryForm'; if ($afm) { $dsl['auxiliaryForm'] = $afm }
|
||||
$ep = Get-MLValue ($props.SelectSingleNode('md:ExtendedPresentation', $nsm)); if ($null -ne $ep) { $dsl['extendedPresentation'] = $ep }
|
||||
}
|
||||
|
||||
# Короткая форма поля: <Type>.<Name>.StandardAttribute.X / .Attribute.X → StandardAttribute.X / Attribute.X
|
||||
# (Expand-DataPath компилятора разворачивает частичную форму обратно — dogfood резолвера).
|
||||
|
||||
Reference in New Issue
Block a user