mirror of
https://github.com/Nikolay-Shirokov/cc-1c-skills.git
synced 2026-09-07 18:50:53 +03:00
Вид ExternalDataSource навыки meta-* не поддерживали вовсе: в корпусе выгрузок его нет ни одного, формат был неизвестен. Разведан на стенде (PostgreSQL в Docker + база 8.3.24) и по реальной выгрузке рабочего проекта. meta-compile собирает источник целиком одним JSON: сам источник, его таблицы с полями и функции. Единственный вид, у которого объект складывается более чем из одного XML — файл источника плюс по файлу на таблицу в <Источник>/Tables/. DSL без новых конвенций: tables — dict имя → массив полей ЛИБО объект (как tabularSections), поле — обычный реквизит плюс три своих ключа (nameInDataSource/readOnly/allowNull), ссылки на поля короткими именами (как inputByString у справочника), functions — dict имя → строка ИЛИ объект (как urlTemplates). Параметры функций не объекты метаданных: они живут в самом выражении как &1, &2. Инструкция под каскадом: в SKILL.md строка индекса, вся специфика — в reference/external-data-source.md. meta-validate принимает ExternalDataSource и Table, знает их наборы GeneratedType, состав ChildObjects и шестичастную ссылку на форму таблицы. Проверено на выгрузке платформы и на чужой рабочей выгрузке из другого проекта — обе проходят чисто. Раундтрип на платформе 8.3.24.1691: наш эмит → загрузка → выгрузка даёт файлы, идентичные поданным (с точностью до uuid). Два поведения платформы пришлось воспроизвести явно, оба измерены: ввод по строке выводится из поля представления, а заданное значение незаполненного родителя платформа при загрузке XML сбрасывает в пустую строку — задать его можно только интерактивно. Спека: раздел «Внешние источники данных» в 1c-config-objects-spec.md, формат ссылок, наборы GeneratedType, строка в индексе спек. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01NBsZA5cr2WFThtgp7i5WVi
72 lines
2.6 KiB
JSON
72 lines
2.6 KiB
JSON
{
|
|
"name": "Внешний источник данных: таблицы, поля, функция",
|
|
"input": {
|
|
"type": "ExternalDataSource",
|
|
"name": "PG",
|
|
"dataLockControlMode": "AutomaticAndManaged",
|
|
"tables": {
|
|
"prices": ["product_id: Number(10,0)", "period: Date", "price: Number(15,2)"],
|
|
"products": {
|
|
"nameInDataSource": "eds.public.products",
|
|
"tableDataType": "ObjectData",
|
|
"keyFields": ["id"],
|
|
"presentationField": "name",
|
|
"parentField": "parent_id",
|
|
"dataVersionField": "row_ver",
|
|
"transactionsIsolationLevel": "ReadUncommitted",
|
|
"dataLockFields": ["id"],
|
|
"fields": [
|
|
"id: Number(10,0)",
|
|
"name: String(150)",
|
|
"article: String(50) | nullable",
|
|
"parent_id: ExternalDataSourceTableRef.PG.products | nullable",
|
|
"row_ver: Number(19,0) | readonly"
|
|
]
|
|
},
|
|
"byParent": {
|
|
"tableType": "Expression",
|
|
"expressionInDataSource": "public.f_products_by_parent(&1)",
|
|
"fields": ["id: Number(10,0)", "name: String(150)"]
|
|
}
|
|
},
|
|
"functions": {
|
|
"total": { "expression": "public.f_total(&1, &2)", "returns": "Number(15,2)" },
|
|
"nextKey": "NEXT VALUE FOR public.seq_key"
|
|
}
|
|
},
|
|
"validatePath": "ExternalDataSources/PG",
|
|
"expect": {
|
|
"files": [
|
|
"ExternalDataSources/PG.xml",
|
|
"ExternalDataSources/PG/Tables/products.xml",
|
|
"ExternalDataSources/PG/Tables/prices.xml",
|
|
"ExternalDataSources/PG/Tables/byParent.xml"
|
|
],
|
|
"fileContains": [
|
|
{
|
|
"file": "ExternalDataSources/PG/Tables/products.xml",
|
|
"text": [
|
|
"<v8:Type>cfg:ExternalDataSourceTableRef.PG.products</v8:Type>",
|
|
"<xr:Field>ExternalDataSource.PG.Table.products.Field.id</xr:Field>",
|
|
"<PresentationField>ExternalDataSource.PG.Table.products.Field.name</PresentationField>",
|
|
"<UnfilledParentValue xsi:type=\"xs:string\"/>",
|
|
"<TransactionsIsolationLevel>ReadUncommitted</TransactionsIsolationLevel>",
|
|
"<NameInDataSource>eds.public.products</NameInDataSource>"
|
|
]
|
|
},
|
|
{
|
|
"file": "ExternalDataSources/PG/Tables/byParent.xml",
|
|
"text": ["<TableType>Expression</TableType>", "<NameInDataSource/>", "public.f_products_by_parent(&1)"]
|
|
},
|
|
{
|
|
"file": "ExternalDataSources/PG.xml",
|
|
"text": [
|
|
"<DataLockControlMode>AutomaticAndManaged</DataLockControlMode>",
|
|
"<Table>products</Table>",
|
|
"<ExpressionInDataSource>public.f_total(&1, &2)</ExpressionInDataSource>"
|
|
]
|
|
}
|
|
]
|
|
}
|
|
}
|