fix(meta-decompile): слоты форм таблицы внешнего источника терялись при разборе

Раундтрип B на стенде вскрыл пробел: у таблицы внешнего источника декомпилятор не снимал
DefaultObjectForm/DefaultRecordForm/DefaultListForm/DefaultChoiceForm, хотя DSL их поддерживает,
компилятор эмитит, а у прочих объектов они снимаются. Пересборка стенда молча теряла назначенную
форму списка.

Сами формы вне скоупа раундтрипа (это отдельные файлы, их делает навык form-add), поэтому
собранная из такого DSL конфигурация не загрузится — ровно как и у справочника с формой.
Договорённость одна и та же, записана в docs/meta-dsl-spec.md.

Раундтрип B после правки: из выгрузки стенда → DSL → meta-compile → загрузка в базу →
выгрузка платформой = побайтово то же, что собрал компилятор. Против исходной выгрузки стенда
остаются два известных расхождения: UnfilledParentValue (загрузкой XML не задаётся, замерено
тремя опытами) и регистрация <Form> (вне скоупа).

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01NBsZA5cr2WFThtgp7i5WVi
This commit is contained in:
Nick Shirokov
2026-09-06 20:34:23 +03:00
co-authored by Claude Opus 5
parent 5c79b494cd
commit 41e2eca638
6 changed files with 26 additions and 5 deletions
@@ -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.ФормаСписка\""
]
}
],
@@ -66,7 +66,7 @@
<ChoiceHistoryOnInput>Auto</ChoiceHistoryOnInput>
<DefaultObjectForm/>
<DefaultRecordForm/>
<DefaultListForm/>
<DefaultListForm>ExternalDataSource.PG.Table.products.Form.ФормаСписка</DefaultListForm>
<DefaultChoiceForm/>
<ObjectPresentation/>
<ExtendedObjectPresentation/>
@@ -10,6 +10,7 @@
"keyFields": ["id"],
"presentationField": "name",
"transactionsIsolationLevel": "ReadUncommitted",
"defaultListForm": "ExternalDataSource.PG.Table.products.Form.ФормаСписка",
"fields": [
"id: Number(10,0)",
"name: String(150)",