mirror of
https://github.com/Nikolay-Shirokov/cc-1c-skills.git
synced 2026-09-08 03:00:52 +03:00
feat(meta-compile): создание внешних источников данных
Вид 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
This commit is contained in:
co-authored by
Claude Opus 5
parent
c1f07f96ad
commit
6dde36a690
@@ -318,12 +318,13 @@ ClassId — фиксированные идентификаторы классо
|
||||
| `WSReference` | `WSReferenceManager`/Manager |
|
||||
| `DefinedType` | `DefinedType`/DefinedType |
|
||||
| `ExternalDataSource` | `ExternalDataSourceManager`/Manager, `ExternalDataSourceTablesManager`/TablesManager, `ExternalDataSourceCubesManager`/CubesManager |
|
||||
| `ExternalDataSource` → `Table` | `ExternalDataSourceTableManager`/Manager, `ExternalDataSourceTableObject`/Object, `ExternalDataSourceTableRef`/Ref, `ExternalDataSourceTableList`/List, `ExternalDataSourceTableRecord`/Record, `ExternalDataSourceTableRecordSet`/RecordSet, `ExternalDataSourceTableRecordKey`/RecordKey, `ExternalDataSourceTableRecordManager`/RecordManager |
|
||||
| `Table` | `ExternalDataSourceTableManager`/Manager, `ExternalDataSourceTableObject`/Object, `ExternalDataSourceTableRef`/Ref, `ExternalDataSourceTableList`/List, `ExternalDataSourceTableRecord`/Record, `ExternalDataSourceTableRecordSet`/RecordSet, `ExternalDataSourceTableRecordKey`/RecordKey, `ExternalDataSourceTableRecordManager`/RecordManager |
|
||||
|
||||
Таблица внешнего источника — единственный подчинённый объект со своим `<InternalInfo>` в отдельном файле;
|
||||
имя элемента у неё **трёхчастное**: `<префикс>.<ИмяИсточника>.<ИмяТаблицы>` (например
|
||||
`ExternalDataSourceTableRef.PG.eds_public_products`). У `<Field>` и `<Function>` блока `InternalInfo` нет —
|
||||
только атрибут `uuid`.
|
||||
`Table` — корневой элемент файла таблицы внешнего источника (`ExternalDataSources/<Источник>/Tables/<Имя>.xml`),
|
||||
единственный подчинённый объект со своим `<InternalInfo>` в отдельном файле. Имя элемента у него
|
||||
**трёхчастное**: `<префикс>.<ИмяИсточника>.<ИмяТаблицы>` (например
|
||||
`ExternalDataSourceTableRef.PG.eds_public_products`), поэтому навыки-эмиттеры строят его инлайном,
|
||||
а не из карты «вид → набор». У `<Field>` и `<Function>` блока `InternalInfo` нет — только атрибут `uuid`.
|
||||
|
||||
Табличные части объектов несут собственную пару в своём `<InternalInfo>`: `<Тип>TabularSection.<Объект>.<ТЧ>`/TabularSection и `<Тип>TabularSectionRow.<Объект>.<ТЧ>`/TabularSectionRow.
|
||||
|
||||
|
||||
Reference in New Issue
Block a user