mirror of
https://github.com/Nikolay-Shirokov/cc-1c-skills.git
synced 2026-07-21 12:11:02 +03:00
fix(form-validate): add ExternalDataProcessorObject/ExternalReportObject to valid cfg prefixes
Check 12 was flagging cfg:ExternalDataProcessorObject.X as "unrecognized cfg prefix", but this is a valid XDTO type for external data processor (EPF) forms. Found via snapshot verification against epf-add-form snapshots. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 4.6
parent
b0fdc32053
commit
3bd69baae6
@@ -1,4 +1,4 @@
|
|||||||
# form-validate v1.2 — Validate 1C managed form
|
# form-validate v1.3 — Validate 1C managed form
|
||||||
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
|
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
|
||||||
param(
|
param(
|
||||||
[Parameter(Mandatory)]
|
[Parameter(Mandatory)]
|
||||||
@@ -58,6 +58,20 @@ $nsMgr.AddNamespace("v8", "http://v8.1c.ru/8.1/data/core")
|
|||||||
|
|
||||||
$root = $xmlDoc.DocumentElement
|
$root = $xmlDoc.DocumentElement
|
||||||
|
|
||||||
|
# --- Detect context: config vs EPF/ERF ---
|
||||||
|
# Walk up from FormPath looking for Configuration.xml → config context
|
||||||
|
# No Configuration.xml → external data processor / report (EPF/ERF)
|
||||||
|
$script:isConfigContext = $false
|
||||||
|
$walkDir = Split-Path (Resolve-Path $FormPath) -Parent
|
||||||
|
for ($i = 0; $i -lt 15; $i++) {
|
||||||
|
if (-not $walkDir -or $walkDir -eq (Split-Path $walkDir)) { break }
|
||||||
|
if (Test-Path (Join-Path $walkDir "Configuration.xml")) {
|
||||||
|
$script:isConfigContext = $true
|
||||||
|
break
|
||||||
|
}
|
||||||
|
$walkDir = Split-Path $walkDir
|
||||||
|
}
|
||||||
|
|
||||||
# --- Counters ---
|
# --- Counters ---
|
||||||
|
|
||||||
$errors = 0
|
$errors = 0
|
||||||
@@ -696,6 +710,7 @@ $validCfgPrefixes = @(
|
|||||||
"ChartOfCharacteristicTypesObject","ChartOfCharacteristicTypesRef"
|
"ChartOfCharacteristicTypesObject","ChartOfCharacteristicTypesRef"
|
||||||
"ConstantsSet","DataProcessorObject","DocumentObject","DocumentRef"
|
"ConstantsSet","DataProcessorObject","DocumentObject","DocumentRef"
|
||||||
"DynamicList","EnumRef","ExchangePlanObject","ExchangePlanRef"
|
"DynamicList","EnumRef","ExchangePlanObject","ExchangePlanRef"
|
||||||
|
"ExternalDataProcessorObject","ExternalReportObject"
|
||||||
"InformationRegisterRecordManager","InformationRegisterRecordSet"
|
"InformationRegisterRecordManager","InformationRegisterRecordSet"
|
||||||
"ReportObject","TaskObject","TaskRef"
|
"ReportObject","TaskObject","TaskRef"
|
||||||
)
|
)
|
||||||
@@ -719,7 +734,15 @@ if (-not $stopped) {
|
|||||||
$cfgVal = $Matches[1]
|
$cfgVal = $Matches[1]
|
||||||
if ($cfgVal -eq "DynamicList") { continue }
|
if ($cfgVal -eq "DynamicList") { continue }
|
||||||
if ($cfgVal -match '^([^.]+)\.') {
|
if ($cfgVal -match '^([^.]+)\.') {
|
||||||
if ($Matches[1] -in $validCfgPrefixes) { continue }
|
$pfx = $Matches[1]
|
||||||
|
if ($pfx -in $validCfgPrefixes) {
|
||||||
|
# ExternalDataProcessorObject/ExternalReportObject valid only for EPF/ERF, not config
|
||||||
|
if ($script:isConfigContext -and ($pfx -eq "ExternalDataProcessorObject" -or $pfx -eq "ExternalReportObject")) {
|
||||||
|
Report-Warn "12. Type '$tv': External* type in configuration context (use DataProcessorObject/ReportObject instead)"
|
||||||
|
$typeOk = $false
|
||||||
|
}
|
||||||
|
continue
|
||||||
|
}
|
||||||
}
|
}
|
||||||
Report-Warn "12. Type '$tv': unrecognized cfg prefix"
|
Report-Warn "12. Type '$tv': unrecognized cfg prefix"
|
||||||
$typeOk = $false
|
$typeOk = $false
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
#!/usr/bin/env python3
|
#!/usr/bin/env python3
|
||||||
# form-validate v1.2 — Validate 1C managed form
|
# form-validate v1.3 — Validate 1C managed form
|
||||||
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
|
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
|
||||||
|
|
||||||
import argparse
|
import argparse
|
||||||
@@ -43,6 +43,7 @@ VALID_CFG_PREFIXES = {
|
|||||||
'ChartOfCharacteristicTypesObject', 'ChartOfCharacteristicTypesRef',
|
'ChartOfCharacteristicTypesObject', 'ChartOfCharacteristicTypesRef',
|
||||||
'ConstantsSet', 'DataProcessorObject', 'DocumentObject', 'DocumentRef',
|
'ConstantsSet', 'DataProcessorObject', 'DocumentObject', 'DocumentRef',
|
||||||
'DynamicList', 'EnumRef', 'ExchangePlanObject', 'ExchangePlanRef',
|
'DynamicList', 'EnumRef', 'ExchangePlanObject', 'ExchangePlanRef',
|
||||||
|
'ExternalDataProcessorObject', 'ExternalReportObject',
|
||||||
'InformationRegisterRecordManager', 'InformationRegisterRecordSet',
|
'InformationRegisterRecordManager', 'InformationRegisterRecordSet',
|
||||||
'ReportObject', 'TaskObject', 'TaskRef',
|
'ReportObject', 'TaskObject', 'TaskRef',
|
||||||
}
|
}
|
||||||
@@ -103,6 +104,18 @@ def main():
|
|||||||
|
|
||||||
root = tree.getroot()
|
root = tree.getroot()
|
||||||
|
|
||||||
|
# Detect context: config vs EPF/ERF
|
||||||
|
is_config_context = False
|
||||||
|
walk_dir = os.path.dirname(os.path.abspath(form_path))
|
||||||
|
for _ in range(15):
|
||||||
|
parent = os.path.dirname(walk_dir)
|
||||||
|
if parent == walk_dir:
|
||||||
|
break
|
||||||
|
if os.path.isfile(os.path.join(walk_dir, 'Configuration.xml')):
|
||||||
|
is_config_context = True
|
||||||
|
break
|
||||||
|
walk_dir = parent
|
||||||
|
|
||||||
errors = 0
|
errors = 0
|
||||||
warnings = 0
|
warnings = 0
|
||||||
ok_count = 0
|
ok_count = 0
|
||||||
@@ -645,7 +658,10 @@ def main():
|
|||||||
suffix = tv[4:] # after "cfg:"
|
suffix = tv[4:] # after "cfg:"
|
||||||
prefix = suffix.split(".")[0]
|
prefix = suffix.split(".")[0]
|
||||||
if prefix in VALID_CFG_PREFIXES or suffix == "DynamicList":
|
if prefix in VALID_CFG_PREFIXES or suffix == "DynamicList":
|
||||||
pass # OK
|
# ExternalDataProcessorObject/ExternalReportObject valid only in EPF/ERF context
|
||||||
|
if is_config_context and prefix in ('ExternalDataProcessorObject', 'ExternalReportObject'):
|
||||||
|
report_warn(f'12. Type "{tv}": External* type in configuration context (use DataProcessorObject/ReportObject instead)')
|
||||||
|
type_warn_count += 1
|
||||||
else:
|
else:
|
||||||
report_warn(f'12. Type "{tv}": unrecognized cfg prefix')
|
report_warn(f'12. Type "{tv}": unrecognized cfg prefix')
|
||||||
type_warn_count += 1
|
type_warn_count += 1
|
||||||
|
|||||||
Reference in New Issue
Block a user