mirror of
https://github.com/Nikolay-Shirokov/cc-1c-skills.git
synced 2026-06-12 00:44:57 +03:00
Skip cfg: reference types in DCS valueType to fix XDTO build errors
Real 1C DCS files (12,495 analyzed) never include cfg:CatalogRef.XXX in <valueType> — the platform infers field types from query metadata. Emitting them causes XDTO exceptions when building EPF. Reference types in JSON DSL still set field roles but no longer emit valueType. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -60,7 +60,7 @@ powershell.exe -NoProfile -File .claude\skills\skd-compile\scripts\skd-compile.p
|
||||
"Служебное: string #noFilter #noOrder" — + ограничения
|
||||
```
|
||||
|
||||
Типы: `string`, `string(N)`, `decimal(D,F)`, `boolean`, `date`, `dateTime`, `CatalogRef.X`, `DocumentRef.X`, `EnumRef.X`, `StandardPeriod`.
|
||||
Типы: `string`, `string(N)`, `decimal(D,F)`, `boolean`, `date`, `dateTime`, `CatalogRef.X`, `DocumentRef.X`, `EnumRef.X`, `StandardPeriod`. Ссылочные типы (`CatalogRef`, `DocumentRef`, `EnumRef`) задают роли полей, но не эмитируются в `<valueType>` — платформа определяет их из запроса.
|
||||
|
||||
**Синонимы типов** (русские и альтернативные): `число` = decimal, `строка` = string, `булево` = boolean, `дата` = date, `датаВремя` = dateTime, `СтандартныйПериод` = StandardPeriod, `СправочникСсылка.X` = CatalogRef.X, `ДокументСсылка.X` = DocumentRef.X, `int`/`number` = decimal, `bool` = boolean. Регистронезависимые.
|
||||
|
||||
|
||||
@@ -195,18 +195,25 @@ function Emit-ValueType {
|
||||
return
|
||||
}
|
||||
|
||||
# cfg: references (CatalogRef.XXX, DocumentRef.XXX, EnumRef.XXX, etc.)
|
||||
# cfg: references — skip in DCS (platform infers types from query metadata)
|
||||
# Emitting cfg:CatalogRef.XXX causes XDTO errors; real DCS files never use them
|
||||
if ($typeStr -match '^(CatalogRef|DocumentRef|EnumRef|ChartOfAccountsRef|ChartOfCharacteristicTypesRef)\.') {
|
||||
X "$indent<v8:Type>cfg:$(Esc-Xml $typeStr)</v8:Type>"
|
||||
return
|
||||
}
|
||||
|
||||
# Fallback
|
||||
# Fallback — skip dot-qualified types (likely cfg: references)
|
||||
if ($typeStr.Contains('.')) {
|
||||
X "$indent<v8:Type>cfg:$(Esc-Xml $typeStr)</v8:Type>"
|
||||
} else {
|
||||
X "$indent<v8:Type>$(Esc-Xml $typeStr)</v8:Type>"
|
||||
return
|
||||
}
|
||||
|
||||
X "$indent<v8:Type>$(Esc-Xml $typeStr)</v8:Type>"
|
||||
}
|
||||
|
||||
function Is-RefType {
|
||||
param([string]$typeStr)
|
||||
if (-not $typeStr) { return $false }
|
||||
$resolved = Resolve-TypeStr $typeStr
|
||||
return ($resolved -match '^(CatalogRef|DocumentRef|EnumRef|ChartOfAccountsRef|ChartOfCharacteristicTypesRef)\.' -or ($resolved.Contains('.') -and $resolved -notmatch '^(string|decimal)'))
|
||||
}
|
||||
|
||||
# --- 5. Field shorthand parser ---
|
||||
@@ -576,8 +583,8 @@ function Emit-Field {
|
||||
X "$indent`t</role>"
|
||||
}
|
||||
|
||||
# ValueType
|
||||
if ($f.type) {
|
||||
# ValueType (skip for cfg: reference types — platform infers from query)
|
||||
if ($f.type -and -not (Is-RefType $f.type)) {
|
||||
X "$indent`t<valueType>"
|
||||
Emit-ValueType -typeStr $f.type -indent "$indent`t`t"
|
||||
X "$indent`t</valueType>"
|
||||
|
||||
@@ -147,12 +147,14 @@
|
||||
| `boolean` | `xs:boolean` | — |
|
||||
| `date` | `xs:dateTime` | DateFractions=Date |
|
||||
| `dateTime` | `xs:dateTime` | DateFractions=DateTime |
|
||||
| `CatalogRef.XXX` | `cfg:CatalogRef.XXX` | — |
|
||||
| `DocumentRef.XXX` | `cfg:DocumentRef.XXX` | — |
|
||||
| `EnumRef.XXX` | `cfg:EnumRef.XXX` | — |
|
||||
| `ChartOfAccountsRef.XXX` | `cfg:ChartOfAccountsRef.XXX` | — |
|
||||
| `CatalogRef.XXX` | *(не эмитируется)* | Роль поля сохраняется, `<valueType>` опускается |
|
||||
| `DocumentRef.XXX` | *(не эмитируется)* | Платформа определяет тип из запроса |
|
||||
| `EnumRef.XXX` | *(не эмитируется)* | |
|
||||
| `ChartOfAccountsRef.XXX` | *(не эмитируется)* | |
|
||||
| `StandardPeriod` | `v8:StandardPeriod` | — |
|
||||
|
||||
> **Ссылочные типы** (`CatalogRef.XXX`, `DocumentRef.XXX` и др.) указываются в JSON для задания ролей полей (`@dimension`, `@account` и т.д.), но **не эмитируются** в `<valueType>`. Реальные DCS-файлы 1С не содержат `cfg:` ссылок в valueType — платформа определяет типы полей автоматически из метаданных запроса. Включение `cfg:` типов приводит к ошибке XDTO при загрузке.
|
||||
|
||||
### Синонимы типов
|
||||
|
||||
Все имена типов регистронезависимые. Поддерживаются русские и альтернативные имена:
|
||||
|
||||
Reference in New Issue
Block a user