Files
cc-1c-skills/tests/skills/cases/meta-decompile/external-data-source.json
T
Nick ShirokovandClaude Opus 5 41e2eca638 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
2026-09-06 20:34:23 +03:00

84 lines
2.4 KiB
JSON

{
"name": "Декомпиляция внешнего источника: таблицы из отдельных файлов, функции, поля",
"preRun": [
{
"script": "meta-compile/scripts/meta-compile",
"input": {
"type": "ExternalDataSource",
"name": "PG",
"dataLockControlMode": "AutomaticAndManaged",
"tables": {
"prices": [
"product_id: Number(10,0)",
"price: Number(15,2)"
],
"products": {
"nameInDataSource": "eds.public.products",
"tableDataType": "ObjectData",
"keyFields": [
"id"
],
"presentationField": "name",
"transactionsIsolationLevel": "ReadUncommitted",
"fields": [
"id: Number(10,0)",
"name: String(150)",
"photo: BinaryData | nullable",
"sig: BinaryData(256,fixed) | nullable",
{
"name": "cost",
"type": "Number(15,2)",
"nameInDataSource": "cost_net",
"readOnly": true
}
],
"defaultListForm": "ExternalDataSource.PG.Table.products.Form.ФормаСписка"
}
},
"functions": {
"total": {
"expression": "public.f_total(&1, &2)",
"returns": "Number(15,2)"
},
"nextKey": "NEXT VALUE FOR public.seq_key"
}
},
"args": {
"-JsonPath": "{inputFile}",
"-OutputDir": "{workDir}"
}
}
],
"params": {
"objectPath": "ExternalDataSources/PG.xml",
"outputPath": "draft.json"
},
"expect": {
"files": [
"draft.json"
],
"fileContains": [
{
"file": "draft.json",
"text": [
"\"dataLockControlMode\": \"AutomaticAndManaged\"",
"\"keyFields\": [\"id\"]",
"\"nameInDataSource\": \"eds.public.products\"",
"\"transactionsIsolationLevel\": \"ReadUncommitted\"",
"photo: BinaryData | nullable",
"\"nameInDataSource\": \"cost_net\"",
"\"nextKey\": \"NEXT VALUE FOR public.seq_key\"",
"sig: BinaryData(256,fixed) | nullable",
"\"defaultListForm\": \"ExternalDataSource.PG.Table.products.Form.ФормаСписка\""
]
}
],
"fileNotContains": [
{
"file": "draft.json",
"text": "ValueStorage"
}
]
}
}