mirror of
https://github.com/Nikolay-Shirokov/cc-1c-skills.git
synced 2026-09-07 18:50:53 +03:00
Дыра в сценарии: добавить таблицу или функцию к уже существующему источнику было нечем. Совет «пересоберите источник целиком через meta-compile» оказался вредным — повторная компиляция заменяет файл источника, выдаёт объекту НОВЫЙ uuid и оставляет файлы не упомянутых таблиц сиротами: в ChildObjects их уже нет, а на диске они остались. meta-edit на файле источника принимает add.tables и add.functions. Таблица — единственная операция навыка, создающая файл: <Источник>/Tables/<Имя>.xml плюс имя в ChildObjects. Синтаксис тот же, что у meta-compile. Формат файла таблицы обязан быть один и тот же, кем бы файл ни был создан, поэтому эмиттеры скопированы из meta-compile механически и зарегистрированы в check-inline-drift.mjs — гард теперь сверяет семь функций между двумя навыками. Чтобы копии не тянули за собой пол-navыка, две из них развязаны от эмиттеров-специфик: Build-EdsTableXml принимает готовый XML полей, Emit-EdsFunction — готовый XML типа. Каждый навык рендерит их своим эмиттером, вывод не изменился. meta-compile теперь предупреждает о перезаписи существующего объекта — для всех видов, не только внешних источников: молчаливая замена uuid ломает ссылки, а узнать об этом было неоткуда. Раундтрип на платформе 8.3.24.1691: таблица, добавленная через meta-edit, возвращается из выгрузки байт в байт. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01NBsZA5cr2WFThtgp7i5WVi
49 lines
1.6 KiB
JSON
49 lines
1.6 KiB
JSON
{
|
|
"name": "Таблица и функция в существующий внешний источник",
|
|
"setup": "empty-config",
|
|
"preRun": [
|
|
{
|
|
"script": "meta-compile/scripts/meta-compile",
|
|
"input": {
|
|
"type": "ExternalDataSource",
|
|
"name": "PG",
|
|
"tables": { "products": { "keyFields": ["id"], "fields": ["id: Number(10,0)"] } }
|
|
},
|
|
"args": { "-JsonPath": "{inputFile}", "-OutputDir": "{workDir}" }
|
|
}
|
|
],
|
|
"params": { "objectPath": "ExternalDataSources/PG.xml" },
|
|
"input": {
|
|
"add": {
|
|
"tables": {
|
|
"sales": {
|
|
"nameInDataSource": "eds.public.sales",
|
|
"tableDataType": "ObjectData",
|
|
"keyFields": ["id"],
|
|
"fields": ["id: Number(10,0)", "summa: Number(15,2)", "comment: String(0) | nullable"]
|
|
}
|
|
},
|
|
"functions": { "nextKey": "NEXT VALUE FOR public.seq_key" }
|
|
}
|
|
},
|
|
"expect": {
|
|
"stdoutContains": ["Added table: sales", "Added function: nextKey"],
|
|
"files": ["ExternalDataSources/PG/Tables/sales.xml", "ExternalDataSources/PG/Tables/products.xml"],
|
|
"fileContains": [
|
|
{
|
|
"file": "ExternalDataSources/PG.xml",
|
|
"text": ["<Table>products</Table>", "<Table>sales</Table>", "NEXT VALUE FOR public.seq_key"]
|
|
},
|
|
{
|
|
"file": "ExternalDataSources/PG/Tables/sales.xml",
|
|
"text": [
|
|
"<NameInDataSource>eds.public.sales</NameInDataSource>",
|
|
"<TableDataType>ObjectData</TableDataType>",
|
|
"<xr:Field>ExternalDataSource.PG.Table.sales.Field.id</xr:Field>",
|
|
"<xr:GeneratedType name=\"ExternalDataSourceTableRef.PG.sales\" category=\"Ref\">"
|
|
]
|
|
}
|
|
]
|
|
}
|
|
}
|