diff --git a/.claude/skills/meta-decompile/scripts/meta-decompile.ps1 b/.claude/skills/meta-decompile/scripts/meta-decompile.ps1 index aaff1e4d9..0a272c8e9 100644 --- a/.claude/skills/meta-decompile/scripts/meta-decompile.ps1 +++ b/.claude/skills/meta-decompile/scripts/meta-decompile.ps1 @@ -1,4 +1,4 @@ -# meta-decompile v0.68 — XML объекта метаданных 1С → JSON-черновик формата meta-compile +# meta-decompile v0.69 — XML объекта метаданных 1С → JSON-черновик формата meta-compile # Source: https://github.com/Nikolay-Shirokov/cc-1c-skills # # Поддержаны: Catalog, ExchangePlan, ChartOfCharacteristicTypes, ChartOfAccounts, ChartOfCalculationTypes, Document, @@ -1744,6 +1744,12 @@ if ($objType -eq 'ExternalDataSource') { if ((TP 'UseStandardCommands') -eq 'false') { $tbl['useStandardCommands'] = $false } if ((TP 'QuickChoice') -eq 'true') { $tbl['quickChoice'] = $true } $tet = TP 'EditType'; if ($tet -and $tet -cne 'InDialog') { $tbl['editType'] = $tet } + # Слоты форм — такая же часть свойств таблицы, как у прочих объектов (сами формы + # вне скоупа раундтрипа: это отдельные файлы, их делает навык form-add). + foreach ($fp in @(@('DefaultObjectForm','defaultObjectForm'), @('DefaultRecordForm','defaultRecordForm'), + @('DefaultListForm','defaultListForm'), @('DefaultChoiceForm','defaultChoiceForm'))) { + $fv = TP $fp[0]; if ($fv) { $tbl[$fp[1]] = $fv } + } $basedOn = [System.Collections.ArrayList]@() foreach ($it in @($tp.SelectNodes('md:BasedOn/xr:Item', $nsm))) { [void]$basedOn.Add($it.InnerText) } if ($basedOn.Count -gt 0) { $tbl['basedOn'] = $basedOn } diff --git a/.claude/skills/meta-decompile/scripts/meta-decompile.py b/.claude/skills/meta-decompile/scripts/meta-decompile.py index ff6fc4f6f..bdae93c71 100644 --- a/.claude/skills/meta-decompile/scripts/meta-decompile.py +++ b/.claude/skills/meta-decompile/scripts/meta-decompile.py @@ -1,5 +1,5 @@ #!/usr/bin/env python3 -# meta-decompile v0.68 — XML объекта метаданных 1С → JSON-черновик формата meta-compile +# meta-decompile v0.69 — XML объекта метаданных 1С → JSON-черновик формата meta-compile # Source: https://github.com/Nikolay-Shirokov/cc-1c-skills # # Зеркало meta-decompile.ps1 (КАНОН). Структура 1:1 — те же имена функций, порядок, комментарии. @@ -2272,6 +2272,15 @@ def main(): t_et = TP('EditType') if t_et and t_et != 'InDialog': tbl['editType'] = t_et + # Слоты форм — такая же часть свойств таблицы, как у прочих объектов (сами формы + # вне скоупа раундтрипа: это отдельные файлы, их делает навык form-add). + for xml_tag, dsl_key in (('DefaultObjectForm', 'defaultObjectForm'), + ('DefaultRecordForm', 'defaultRecordForm'), + ('DefaultListForm', 'defaultListForm'), + ('DefaultChoiceForm', 'defaultChoiceForm')): + fv = TP(xml_tag) + if fv: + tbl[dsl_key] = fv based_on = [_text(it) for it in tp.findall('md:BasedOn/xr:Item', NS)] if based_on: tbl['basedOn'] = based_on diff --git a/docs/meta-dsl-spec.md b/docs/meta-dsl-spec.md index 33bb79d38..153104c4d 100644 --- a/docs/meta-dsl-spec.md +++ b/docs/meta-dsl-spec.md @@ -2145,6 +2145,9 @@ ChildObjects и модулей. Неверная пара не отвергается схемой формы — она валит загрузку всей конфигурации «Исключением XDTO при чтении файла», не называя причины, поэтому `form-add` проверяет её сам. +- Слоты `default*Form` таблицы декомпилятор снимает — как у прочих объектов. Собранная из такого + DSL конфигурация сама по себе не загрузится («Неизвестный объект метаданных — …Form.ФормаСписка»): файлы форм + создаёт навык `form-add`. Это та же договорённость, что для справочников и документов. - **Таблица без ключевых полей** собирается: загрузку XML платформа принимает молча, хотя Конфигуратор интерактивно ключ требует. `meta-validate` предупреждает, но не отвергает — рабочие конфигурации без ключей существуют. Без ключа недоступны форма записи и набор записей. diff --git a/tests/skills/cases/meta-decompile/external-data-source.json b/tests/skills/cases/meta-decompile/external-data-source.json index 3f8270fd7..bbb05fcf6 100644 --- a/tests/skills/cases/meta-decompile/external-data-source.json +++ b/tests/skills/cases/meta-decompile/external-data-source.json @@ -31,7 +31,8 @@ "nameInDataSource": "cost_net", "readOnly": true } - ] + ], + "defaultListForm": "ExternalDataSource.PG.Table.products.Form.ФормаСписка" } }, "functions": { @@ -67,7 +68,8 @@ "photo: BinaryData | nullable", "\"nameInDataSource\": \"cost_net\"", "\"nextKey\": \"NEXT VALUE FOR public.seq_key\"", - "sig: BinaryData(256,fixed) | nullable" + "sig: BinaryData(256,fixed) | nullable", + "\"defaultListForm\": \"ExternalDataSource.PG.Table.products.Form.ФормаСписка\"" ] } ], diff --git a/tests/skills/cases/meta-decompile/snapshots/external-data-source/ExternalDataSources/PG/Tables/products.xml b/tests/skills/cases/meta-decompile/snapshots/external-data-source/ExternalDataSources/PG/Tables/products.xml index a1716bda7..95f299015 100644 --- a/tests/skills/cases/meta-decompile/snapshots/external-data-source/ExternalDataSources/PG/Tables/products.xml +++ b/tests/skills/cases/meta-decompile/snapshots/external-data-source/ExternalDataSources/PG/Tables/products.xml @@ -66,7 +66,7 @@ Auto - + ExternalDataSource.PG.Table.products.Form.ФормаСписка diff --git a/tests/skills/cases/meta-decompile/snapshots/external-data-source/draft.json b/tests/skills/cases/meta-decompile/snapshots/external-data-source/draft.json index dcf5e2d0a..7ba5a3cdc 100644 --- a/tests/skills/cases/meta-decompile/snapshots/external-data-source/draft.json +++ b/tests/skills/cases/meta-decompile/snapshots/external-data-source/draft.json @@ -10,6 +10,7 @@ "keyFields": ["id"], "presentationField": "name", "transactionsIsolationLevel": "ReadUncommitted", + "defaultListForm": "ExternalDataSource.PG.Table.products.Form.ФормаСписка", "fields": [ "id: Number(10,0)", "name: String(150)",