diff --git a/.claude/skills/form-validate/scripts/form-validate.ps1 b/.claude/skills/form-validate/scripts/form-validate.ps1
index 418df381f..8146ae42d 100644
--- a/.claude/skills/form-validate/scripts/form-validate.ps1
+++ b/.claude/skills/form-validate/scripts/form-validate.ps1
@@ -1,4 +1,4 @@
-# form-validate v1.21 — Validate 1C managed form
+# form-validate v1.22 — Validate 1C managed form
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
[CmdletBinding(PositionalBinding=$false)]
param(
@@ -944,7 +944,9 @@ if (-not $stopped) {
if ($tv -in $validClosedTypes) { continue }
if ($tv -match '^cfg:(.+)$') {
$cfgVal = $Matches[1]
- if ($cfgVal -eq "DynamicList") { continue }
+ # Тип без имени объекта: динамический список, набор констант, любой отчёт — ровно те три,
+ # что встречаются в формах корпуса (УТ, ERP, БП, УНФ); иное без имени — вероятная опечатка
+ if ($cfgVal -cin @("DynamicList", "ConstantsSet", "ReportObject")) { continue }
if ($cfgVal -match '^([^.]+)\.') {
$pfx = $Matches[1]
if ($pfx -in $validCfgPrefixes) {
diff --git a/.claude/skills/form-validate/scripts/form-validate.py b/.claude/skills/form-validate/scripts/form-validate.py
index 05d09dc5a..33dedd682 100644
--- a/.claude/skills/form-validate/scripts/form-validate.py
+++ b/.claude/skills/form-validate/scripts/form-validate.py
@@ -1,5 +1,5 @@
#!/usr/bin/env python3
-# form-validate v1.21 — Validate 1C managed form
+# form-validate v1.22 — Validate 1C managed form
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
import argparse
@@ -900,7 +900,9 @@ def main():
elif tv.startswith("cfg:"):
suffix = tv[4:] # after "cfg:"
prefix = suffix.split(".")[0]
- if prefix in VALID_CFG_PREFIXES or suffix == "DynamicList":
+ # Тип без имени объекта: динамический список, набор констант, любой отчёт — ровно те три,
+ # что встречаются в формах корпуса (УТ, ERP, БП, УНФ); иное без имени — вероятная опечатка
+ if ("." in suffix and prefix in VALID_CFG_PREFIXES) or suffix in ("DynamicList", "ConstantsSet", "ReportObject"):
# ExternalDataProcessorObject/ExternalReportObject valid only in EPF/ERF context
if is_config_context and prefix in ('ExternalDataProcessorObject', 'ExternalReportObject'):
report_error(f'12. Type "{tv}": External* type in configuration context (use DataProcessorObject/ReportObject instead)')
diff --git a/tests/skills/cases/form-validate/bare-cfg-type-typo.json b/tests/skills/cases/form-validate/bare-cfg-type-typo.json
new file mode 100644
index 000000000..f2ca6fb2c
--- /dev/null
+++ b/tests/skills/cases/form-validate/bare-cfg-type-typo.json
@@ -0,0 +1,44 @@
+{
+ "name": "Опечатка в голом cfg-типе (cfg:ConstantSet) по-прежнему предупреждается",
+ "preRun": [
+ {
+ "script": "meta-compile/scripts/meta-compile",
+ "input": {
+ "type": "Constant",
+ "name": "Флаг",
+ "valueType": "Boolean"
+ },
+ "args": {
+ "-JsonPath": "{inputFile}",
+ "-OutputDir": "{workDir}"
+ }
+ },
+ {
+ "script": "meta-compile/scripts/meta-compile",
+ "input": {
+ "type": "CommonForm",
+ "name": "Настройки"
+ },
+ "args": {
+ "-JsonPath": "{inputFile}",
+ "-OutputDir": "{workDir}"
+ }
+ },
+ {
+ "writeFile": {
+ "path": "CommonForms/Настройки/Ext/Form.xml",
+ "content": "\n
"
+ }
+ }
+ ],
+ "params": {
+ "formPath": "CommonForms/Настройки"
+ },
+ "expect": {
+ "stdoutContains": [
+ "cfg:ConstantSet",
+ "unrecognized cfg prefix"
+ ]
+ },
+ "skipPlatformVerify": "намеренная опечатка в типе — платформа такую форму не загрузит"
+}
diff --git a/tests/skills/cases/form-validate/bare-cfg-types.json b/tests/skills/cases/form-validate/bare-cfg-types.json
new file mode 100644
index 000000000..5352fe53b
--- /dev/null
+++ b/tests/skills/cases/form-validate/bare-cfg-types.json
@@ -0,0 +1,40 @@
+{
+ "name": "Голые cfg:ConstantsSet и cfg:ReportObject — допустимые типы (набор констант, любой отчёт), без предупреждения",
+ "preRun": [
+ {
+ "script": "meta-compile/scripts/meta-compile",
+ "input": {
+ "type": "Constant",
+ "name": "Флаг",
+ "valueType": "Boolean"
+ },
+ "args": {
+ "-JsonPath": "{inputFile}",
+ "-OutputDir": "{workDir}"
+ }
+ },
+ {
+ "script": "meta-compile/scripts/meta-compile",
+ "input": {
+ "type": "CommonForm",
+ "name": "Настройки"
+ },
+ "args": {
+ "-JsonPath": "{inputFile}",
+ "-OutputDir": "{workDir}"
+ }
+ },
+ {
+ "writeFile": {
+ "path": "CommonForms/Настройки/Ext/Form.xml",
+ "content": "\n"
+ }
+ }
+ ],
+ "params": {
+ "formPath": "CommonForms/Настройки"
+ },
+ "expect": {
+ "stdoutNotContains": "unrecognized cfg prefix"
+ }
+}
diff --git a/tests/skills/cases/form-validate/snapshots/bare-cfg-type-typo/CommonForms/Настройки.xml b/tests/skills/cases/form-validate/snapshots/bare-cfg-type-typo/CommonForms/Настройки.xml
new file mode 100644
index 000000000..3e778a517
--- /dev/null
+++ b/tests/skills/cases/form-validate/snapshots/bare-cfg-type-typo/CommonForms/Настройки.xml
@@ -0,0 +1,24 @@
+
+
+
+
+ Настройки
+
+
+ ru
+ Настройки
+
+
+
+ Managed
+ false
+
+ PlatformApplication
+ MobilePlatformApplication
+
+ false
+
+
+
+
+
\ No newline at end of file
diff --git a/tests/skills/cases/form-validate/snapshots/bare-cfg-type-typo/CommonForms/Настройки/Ext/Form.xml b/tests/skills/cases/form-validate/snapshots/bare-cfg-type-typo/CommonForms/Настройки/Ext/Form.xml
new file mode 100644
index 000000000..b170027cb
--- /dev/null
+++ b/tests/skills/cases/form-validate/snapshots/bare-cfg-type-typo/CommonForms/Настройки/Ext/Form.xml
@@ -0,0 +1,39 @@
+
+
\ No newline at end of file
diff --git a/tests/skills/cases/form-validate/snapshots/bare-cfg-type-typo/CommonForms/Настройки/Ext/Form/Module.bsl b/tests/skills/cases/form-validate/snapshots/bare-cfg-type-typo/CommonForms/Настройки/Ext/Form/Module.bsl
new file mode 100644
index 000000000..e69de29bb
diff --git a/tests/skills/cases/form-validate/snapshots/bare-cfg-type-typo/Configuration.xml b/tests/skills/cases/form-validate/snapshots/bare-cfg-type-typo/Configuration.xml
new file mode 100644
index 000000000..2d4b780a7
--- /dev/null
+++ b/tests/skills/cases/form-validate/snapshots/bare-cfg-type-typo/Configuration.xml
@@ -0,0 +1,253 @@
+
+
+
+
+
+ UUID-002
+ UUID-003
+
+
+ UUID-004
+ UUID-005
+
+
+ UUID-006
+ UUID-007
+
+
+ UUID-008
+ UUID-009
+
+
+ UUID-010
+ UUID-011
+
+
+ UUID-012
+ UUID-013
+
+
+ UUID-014
+ UUID-015
+
+
+
+ TestConfig
+
+
+ ru
+ TestConfig
+
+
+
+
+ Version8_3_24
+ ManagedApplication
+
+ PlatformApplication
+
+ Russian
+
+
+
+
+ false
+ false
+ false
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Biometrics
+ true
+
+
+ Location
+ false
+
+
+ BackgroundLocation
+ false
+
+
+ BluetoothPrinters
+ false
+
+
+ WiFiPrinters
+ false
+
+
+ Contacts
+ false
+
+
+ Calendars
+ false
+
+
+ PushNotifications
+ false
+
+
+ LocalNotifications
+ false
+
+
+ InAppPurchases
+ false
+
+
+ PersonalComputerFileExchange
+ false
+
+
+ Ads
+ false
+
+
+ NumberDialing
+ false
+
+
+ CallProcessing
+ false
+
+
+ CallLog
+ false
+
+
+ AutoSendSMS
+ false
+
+
+ ReceiveSMS
+ false
+
+
+ SMSLog
+ false
+
+
+ Camera
+ false
+
+
+ Microphone
+ false
+
+
+ MusicLibrary
+ false
+
+
+ PictureAndVideoLibraries
+ false
+
+
+ AudioPlaybackAndVibration
+ false
+
+
+ BackgroundAudioPlaybackAndVibration
+ false
+
+
+ InstallPackages
+ false
+
+
+ OSBackup
+ true
+
+
+ ApplicationUsageStatistics
+ false
+
+
+ BarcodeScanning
+ false
+
+
+ BackgroundAudioRecording
+ false
+
+
+ AllFilesAccess
+ false
+
+
+ Videoconferences
+ false
+
+
+ NFC
+ false
+
+
+ DocumentScanning
+ false
+
+
+ SpeechToText
+ false
+
+
+ Geofences
+ false
+
+
+ IncomingShareRequests
+ false
+
+
+ AllIncomingShareRequestsTypesProcessing
+ false
+
+
+
+
+
+ Normal
+
+
+ Language.Русский
+
+
+
+
+
+ Managed
+ NotAutoFree
+ DontUse
+ DontUse
+ TaxiEnableVersion8_2
+ DontUse
+ Version8_3_24
+
+
+
+ Русский
+ Флаг
+ Настройки
+
+
+
\ No newline at end of file
diff --git a/tests/skills/cases/form-validate/snapshots/bare-cfg-type-typo/Constants/Флаг.xml b/tests/skills/cases/form-validate/snapshots/bare-cfg-type-typo/Constants/Флаг.xml
new file mode 100644
index 000000000..c6cf9335b
--- /dev/null
+++ b/tests/skills/cases/form-validate/snapshots/bare-cfg-type-typo/Constants/Флаг.xml
@@ -0,0 +1,58 @@
+
+
+
+
+
+ UUID-002
+ UUID-003
+
+
+ UUID-004
+ UUID-005
+
+
+ UUID-006
+ UUID-007
+
+
+
+ Флаг
+
+
+ ru
+ Флаг
+
+
+
+
+ xs:boolean
+
+ true
+
+
+
+ false
+
+
+
+ false
+
+ false
+ false
+
+
+ DontCheck
+ Items
+
+
+ Auto
+
+
+ Auto
+ Managed
+ DontUse
+ false
+ false
+
+
+
\ No newline at end of file
diff --git a/tests/skills/cases/form-validate/snapshots/bare-cfg-type-typo/Constants/Флаг/Ext/ManagerModule.bsl b/tests/skills/cases/form-validate/snapshots/bare-cfg-type-typo/Constants/Флаг/Ext/ManagerModule.bsl
new file mode 100644
index 000000000..e69de29bb
diff --git a/tests/skills/cases/form-validate/snapshots/bare-cfg-type-typo/Constants/Флаг/Ext/ValueManagerModule.bsl b/tests/skills/cases/form-validate/snapshots/bare-cfg-type-typo/Constants/Флаг/Ext/ValueManagerModule.bsl
new file mode 100644
index 000000000..e69de29bb
diff --git a/tests/skills/cases/form-validate/snapshots/bare-cfg-type-typo/Ext/ClientApplicationInterface.xml b/tests/skills/cases/form-validate/snapshots/bare-cfg-type-typo/Ext/ClientApplicationInterface.xml
new file mode 100644
index 000000000..3c1161b2d
--- /dev/null
+++ b/tests/skills/cases/form-validate/snapshots/bare-cfg-type-typo/Ext/ClientApplicationInterface.xml
@@ -0,0 +1,18 @@
+
+
+
+
+ UUID-002
+
+
+
+
+ UUID-004
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/tests/skills/cases/form-validate/snapshots/bare-cfg-type-typo/Languages/Русский.xml b/tests/skills/cases/form-validate/snapshots/bare-cfg-type-typo/Languages/Русский.xml
new file mode 100644
index 000000000..37c60d786
--- /dev/null
+++ b/tests/skills/cases/form-validate/snapshots/bare-cfg-type-typo/Languages/Русский.xml
@@ -0,0 +1,16 @@
+
+
+
+
+ Русский
+
+
+ ru
+ Русский
+
+
+
+ ru
+
+
+
\ No newline at end of file
diff --git a/tests/skills/cases/form-validate/snapshots/bare-cfg-types/CommonForms/Настройки.xml b/tests/skills/cases/form-validate/snapshots/bare-cfg-types/CommonForms/Настройки.xml
new file mode 100644
index 000000000..3e778a517
--- /dev/null
+++ b/tests/skills/cases/form-validate/snapshots/bare-cfg-types/CommonForms/Настройки.xml
@@ -0,0 +1,24 @@
+
+
+
+
+ Настройки
+
+
+ ru
+ Настройки
+
+
+
+ Managed
+ false
+
+ PlatformApplication
+ MobilePlatformApplication
+
+ false
+
+
+
+
+
\ No newline at end of file
diff --git a/tests/skills/cases/form-validate/snapshots/bare-cfg-types/CommonForms/Настройки/Ext/Form.xml b/tests/skills/cases/form-validate/snapshots/bare-cfg-types/CommonForms/Настройки/Ext/Form.xml
new file mode 100644
index 000000000..e6cfc2f80
--- /dev/null
+++ b/tests/skills/cases/form-validate/snapshots/bare-cfg-types/CommonForms/Настройки/Ext/Form.xml
@@ -0,0 +1,39 @@
+
+
\ No newline at end of file
diff --git a/tests/skills/cases/form-validate/snapshots/bare-cfg-types/CommonForms/Настройки/Ext/Form/Module.bsl b/tests/skills/cases/form-validate/snapshots/bare-cfg-types/CommonForms/Настройки/Ext/Form/Module.bsl
new file mode 100644
index 000000000..e69de29bb
diff --git a/tests/skills/cases/form-validate/snapshots/bare-cfg-types/Configuration.xml b/tests/skills/cases/form-validate/snapshots/bare-cfg-types/Configuration.xml
new file mode 100644
index 000000000..2d4b780a7
--- /dev/null
+++ b/tests/skills/cases/form-validate/snapshots/bare-cfg-types/Configuration.xml
@@ -0,0 +1,253 @@
+
+
+
+
+
+ UUID-002
+ UUID-003
+
+
+ UUID-004
+ UUID-005
+
+
+ UUID-006
+ UUID-007
+
+
+ UUID-008
+ UUID-009
+
+
+ UUID-010
+ UUID-011
+
+
+ UUID-012
+ UUID-013
+
+
+ UUID-014
+ UUID-015
+
+
+
+ TestConfig
+
+
+ ru
+ TestConfig
+
+
+
+
+ Version8_3_24
+ ManagedApplication
+
+ PlatformApplication
+
+ Russian
+
+
+
+
+ false
+ false
+ false
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Biometrics
+ true
+
+
+ Location
+ false
+
+
+ BackgroundLocation
+ false
+
+
+ BluetoothPrinters
+ false
+
+
+ WiFiPrinters
+ false
+
+
+ Contacts
+ false
+
+
+ Calendars
+ false
+
+
+ PushNotifications
+ false
+
+
+ LocalNotifications
+ false
+
+
+ InAppPurchases
+ false
+
+
+ PersonalComputerFileExchange
+ false
+
+
+ Ads
+ false
+
+
+ NumberDialing
+ false
+
+
+ CallProcessing
+ false
+
+
+ CallLog
+ false
+
+
+ AutoSendSMS
+ false
+
+
+ ReceiveSMS
+ false
+
+
+ SMSLog
+ false
+
+
+ Camera
+ false
+
+
+ Microphone
+ false
+
+
+ MusicLibrary
+ false
+
+
+ PictureAndVideoLibraries
+ false
+
+
+ AudioPlaybackAndVibration
+ false
+
+
+ BackgroundAudioPlaybackAndVibration
+ false
+
+
+ InstallPackages
+ false
+
+
+ OSBackup
+ true
+
+
+ ApplicationUsageStatistics
+ false
+
+
+ BarcodeScanning
+ false
+
+
+ BackgroundAudioRecording
+ false
+
+
+ AllFilesAccess
+ false
+
+
+ Videoconferences
+ false
+
+
+ NFC
+ false
+
+
+ DocumentScanning
+ false
+
+
+ SpeechToText
+ false
+
+
+ Geofences
+ false
+
+
+ IncomingShareRequests
+ false
+
+
+ AllIncomingShareRequestsTypesProcessing
+ false
+
+
+
+
+
+ Normal
+
+
+ Language.Русский
+
+
+
+
+
+ Managed
+ NotAutoFree
+ DontUse
+ DontUse
+ TaxiEnableVersion8_2
+ DontUse
+ Version8_3_24
+
+
+
+ Русский
+ Флаг
+ Настройки
+
+
+
\ No newline at end of file
diff --git a/tests/skills/cases/form-validate/snapshots/bare-cfg-types/Constants/Флаг.xml b/tests/skills/cases/form-validate/snapshots/bare-cfg-types/Constants/Флаг.xml
new file mode 100644
index 000000000..c6cf9335b
--- /dev/null
+++ b/tests/skills/cases/form-validate/snapshots/bare-cfg-types/Constants/Флаг.xml
@@ -0,0 +1,58 @@
+
+
+
+
+
+ UUID-002
+ UUID-003
+
+
+ UUID-004
+ UUID-005
+
+
+ UUID-006
+ UUID-007
+
+
+
+ Флаг
+
+
+ ru
+ Флаг
+
+
+
+
+ xs:boolean
+
+ true
+
+
+
+ false
+
+
+
+ false
+
+ false
+ false
+
+
+ DontCheck
+ Items
+
+
+ Auto
+
+
+ Auto
+ Managed
+ DontUse
+ false
+ false
+
+
+
\ No newline at end of file
diff --git a/tests/skills/cases/form-validate/snapshots/bare-cfg-types/Constants/Флаг/Ext/ManagerModule.bsl b/tests/skills/cases/form-validate/snapshots/bare-cfg-types/Constants/Флаг/Ext/ManagerModule.bsl
new file mode 100644
index 000000000..e69de29bb
diff --git a/tests/skills/cases/form-validate/snapshots/bare-cfg-types/Constants/Флаг/Ext/ValueManagerModule.bsl b/tests/skills/cases/form-validate/snapshots/bare-cfg-types/Constants/Флаг/Ext/ValueManagerModule.bsl
new file mode 100644
index 000000000..e69de29bb
diff --git a/tests/skills/cases/form-validate/snapshots/bare-cfg-types/Ext/ClientApplicationInterface.xml b/tests/skills/cases/form-validate/snapshots/bare-cfg-types/Ext/ClientApplicationInterface.xml
new file mode 100644
index 000000000..3c1161b2d
--- /dev/null
+++ b/tests/skills/cases/form-validate/snapshots/bare-cfg-types/Ext/ClientApplicationInterface.xml
@@ -0,0 +1,18 @@
+
+
+
+
+ UUID-002
+
+
+
+
+ UUID-004
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/tests/skills/cases/form-validate/snapshots/bare-cfg-types/Languages/Русский.xml b/tests/skills/cases/form-validate/snapshots/bare-cfg-types/Languages/Русский.xml
new file mode 100644
index 000000000..37c60d786
--- /dev/null
+++ b/tests/skills/cases/form-validate/snapshots/bare-cfg-types/Languages/Русский.xml
@@ -0,0 +1,16 @@
+
+
+
+
+ Русский
+
+
+ ru
+ Русский
+
+
+
+ ru
+
+
+
\ No newline at end of file