mirror of
https://github.com/Nikolay-Shirokov/cc-1c-skills.git
synced 2026-08-06 11:40:20 +03:00
feat(skd-compile): auto-detect DesignTimeValue в filter right
При парсинге shorthand "Поле = Перечисление.X.Y" Parse-FilterShorthand уже распознавал тип dcscor:DesignTimeValue. Но в auto-detect веток Emit-FilterItem (single-right и multi-right) этой проверки не было, поэтому ссылочные значения из object form (где valueType не сохранён) эмитились как xs:string. Добавлено в обе ветки: проверка regex ^(Перечисление|Справочник|... |Catalog|Enum|...)\. → dcscor:DesignTimeValue. Эффект на sample30: −326 строк diff. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 4.7
parent
4af51235db
commit
a9deeee2d0
@@ -1,4 +1,4 @@
|
|||||||
# skd-compile v1.56 — Compile 1C DCS from JSON
|
# skd-compile v1.57 — Compile 1C DCS from JSON
|
||||||
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
|
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
|
||||||
param(
|
param(
|
||||||
[string]$DefinitionFile,
|
[string]$DefinitionFile,
|
||||||
@@ -2026,6 +2026,7 @@ function Emit-FilterItem {
|
|||||||
elseif ($v -is [int] -or $v -is [long] -or $v -is [double]) { $vt = 'xs:decimal' }
|
elseif ($v -is [int] -or $v -is [long] -or $v -is [double]) { $vt = 'xs:decimal' }
|
||||||
elseif ("$v" -match '^\d{4}-\d{2}-\d{2}T') { $vt = 'xs:dateTime' }
|
elseif ("$v" -match '^\d{4}-\d{2}-\d{2}T') { $vt = 'xs:dateTime' }
|
||||||
elseif ("$v" -match '^-?\d+(\.\d+)?$') { $vt = 'xs:decimal' }
|
elseif ("$v" -match '^-?\d+(\.\d+)?$') { $vt = 'xs:decimal' }
|
||||||
|
elseif ("$v" -match '^(Перечисление|Справочник|ПланСчетов|Документ|ПланВидовХарактеристик|ПланВидовРасчета|БизнесПроцесс|Задача|РегистрСведений|ПланОбмена|Catalog|Enum|Document|ChartOfAccounts|ChartOfCharacteristicTypes|ChartOfCalculationTypes|BusinessProcess|Task|InformationRegister|ExchangePlan)\.') { $vt = 'dcscor:DesignTimeValue' }
|
||||||
else { $vt = 'xs:string' }
|
else { $vt = 'xs:string' }
|
||||||
}
|
}
|
||||||
$vStr = if ($v -is [bool]) { "$v".ToLower() } else { Esc-Xml "$v" }
|
$vStr = if ($v -is [bool]) { "$v".ToLower() } else { Esc-Xml "$v" }
|
||||||
@@ -2044,6 +2045,8 @@ function Emit-FilterItem {
|
|||||||
$vt = "xs:dateTime"
|
$vt = "xs:dateTime"
|
||||||
} elseif ("$v" -match '^-?\d+(\.\d+)?$') {
|
} elseif ("$v" -match '^-?\d+(\.\d+)?$') {
|
||||||
$vt = "xs:decimal"
|
$vt = "xs:decimal"
|
||||||
|
} elseif ("$v" -match '^(Перечисление|Справочник|ПланСчетов|Документ|ПланВидовХарактеристик|ПланВидовРасчета|БизнесПроцесс|Задача|РегистрСведений|ПланОбмена|Catalog|Enum|Document|ChartOfAccounts|ChartOfCharacteristicTypes|ChartOfCalculationTypes|BusinessProcess|Task|InformationRegister|ExchangePlan)\.') {
|
||||||
|
$vt = "dcscor:DesignTimeValue"
|
||||||
} else {
|
} else {
|
||||||
$vt = "xs:string"
|
$vt = "xs:string"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
#!/usr/bin/env python3
|
#!/usr/bin/env python3
|
||||||
# skd-compile v1.56 — Compile 1C DCS from JSON
|
# skd-compile v1.57 — Compile 1C DCS from JSON
|
||||||
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
|
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
|
||||||
import argparse
|
import argparse
|
||||||
import json
|
import json
|
||||||
@@ -1695,6 +1695,8 @@ def emit_filter_item(lines, item, indent):
|
|||||||
vt = 'xs:dateTime'
|
vt = 'xs:dateTime'
|
||||||
elif re.match(r'^-?\d+(\.\d+)?$', str(v)):
|
elif re.match(r'^-?\d+(\.\d+)?$', str(v)):
|
||||||
vt = 'xs:decimal'
|
vt = 'xs:decimal'
|
||||||
|
elif re.match(r'^(Перечисление|Справочник|ПланСчетов|Документ|ПланВидовХарактеристик|ПланВидовРасчета|БизнесПроцесс|Задача|РегистрСведений|ПланОбмена|Catalog|Enum|Document|ChartOfAccounts|ChartOfCharacteristicTypes|ChartOfCalculationTypes|BusinessProcess|Task|InformationRegister|ExchangePlan)\.', str(v)):
|
||||||
|
vt = 'dcscor:DesignTimeValue'
|
||||||
else:
|
else:
|
||||||
vt = 'xs:string'
|
vt = 'xs:string'
|
||||||
v_str = str(v).lower() if isinstance(v, bool) else esc_xml(str(v))
|
v_str = str(v).lower() if isinstance(v, bool) else esc_xml(str(v))
|
||||||
|
|||||||
Reference in New Issue
Block a user