feat(meta-compile,meta-decompile): поддержка CommonPicture + CommonTemplate (v1.60/v0.51)

31-32-й типы, 4506 объектов acc+erp. Только МЕТАДАННЫЕ + регистрация; содержимое
(Ext/Picture*, Ext/Template.* — бинарь/MXL) вне скоупа (импорт/mxl-compile отдельно).

- CommonPicture: AvailabilityForChoice/AvailabilityForAppearance (дефолт false).
- CommonTemplate: TemplateType (дефолт SpreadsheetDocument, корпус 725).

ПОЛНЫЙ КОРПУС 4506/4506 byte-exact, TOTAL 0, 0 крашей (метаданные). Регресс 70/70
ps1+py, ps1==py identical. spec §7.15g, кейсы common-picture/common-template.
**Модель meta-compile: 32 типа метаданных.**

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
Nick Shirokov
2026-07-10 14:05:59 +03:00
co-authored by Claude Opus 4.8
parent df42f6cc79
commit 30d5174351
14 changed files with 679 additions and 6 deletions
@@ -1,4 +1,4 @@
# meta-decompile v0.50 — XML объекта метаданных 1С → JSON-черновик формата meta-compile
# meta-decompile v0.51 — 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', 'FunctionalOption', 'DocumentJournal', 'Sequence', 'FilterCriterion', 'DocumentNumerator', 'SettingsStorage', 'CommonModule', 'EventSubscription', 'ScheduledJob', 'CommonForm', 'SessionParameter', 'CommonCommand', 'CommandGroup', 'CommonAttribute', 'FunctionalOptionsParameter', 'WSReference')) {
[Console]::Error.WriteLine("meta-decompile: тип '$objType' пока не поддержан (…, SessionParameter, CommonCommand, CommandGroup, CommonAttribute, FunctionalOptionsParameter, WSReference)"); exit 3
if ($objType -notin @('Catalog', 'ExchangePlan', 'ChartOfCharacteristicTypes', 'ChartOfAccounts', 'ChartOfCalculationTypes', 'Document', 'InformationRegister', 'AccumulationRegister', 'AccountingRegister', 'CalculationRegister', 'BusinessProcess', 'Task', 'Enum', 'Report', 'DataProcessor', 'Constant', 'DefinedType', 'FunctionalOption', 'DocumentJournal', 'Sequence', 'FilterCriterion', 'DocumentNumerator', 'SettingsStorage', 'CommonModule', 'EventSubscription', 'ScheduledJob', 'CommonForm', 'SessionParameter', 'CommonCommand', 'CommandGroup', 'CommonAttribute', 'FunctionalOptionsParameter', 'WSReference', 'CommonPicture', 'CommonTemplate')) {
[Console]::Error.WriteLine("meta-decompile: тип '$objType' пока не поддержан (…, CommonPicture, CommonTemplate)"); exit 3
}
$props = $objNode.SelectSingleNode('md:Properties', $nsm)
@@ -704,6 +704,15 @@ if ($objType -eq 'FunctionalOptionsParameter') {
if ($objType -eq 'WSReference') {
$url = P 'LocationURL'; if ($url) { $dsl['locationURL'] = $url }
}
# CommonPicture — общая картинка: доступность (содержимое Ext/Picture вне скоупа).
if ($objType -eq 'CommonPicture') {
Add-BoolProp 'availabilityForChoice' 'AvailabilityForChoice' $false
Add-BoolProp 'availabilityForAppearance' 'AvailabilityForAppearance' $false
}
# CommonTemplate — общий макет: тип макета (содержимое Ext/Template.* вне скоупа).
if ($objType -eq 'CommonTemplate') {
Add-EnumProp 'templateType' 'TemplateType' 'SpreadsheetDocument'
}
# Общий захват структурного <Picture> (зеркало Emit-CommandPicture). Пишет в $tgt ключи picture/loadTransparent.
function Get-PictureToDsl { param($propsNode, $tgt)
$refN = $propsNode.SelectSingleNode('md:Picture/xr:Ref', $nsm)