diff --git a/.claude/skills/form-decompile/scripts/form-decompile.ps1 b/.claude/skills/form-decompile/scripts/form-decompile.ps1
index 16e0a874d..ae9b1edf0 100644
--- a/.claude/skills/form-decompile/scripts/form-decompile.ps1
+++ b/.claude/skills/form-decompile/scripts/form-decompile.ps1
@@ -1,4 +1,4 @@
-# form-decompile v0.150 — Decompile 1C managed Form.xml to JSON DSL (draft)
+# form-decompile v0.151 — Decompile 1C managed Form.xml to JSON DSL (draft)
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
# ВНИМАНИЕ: раундтрип не гарантируется. Навык исключён из авто-использования моделью.
[CmdletBinding(PositionalBinding=$false)]
@@ -1493,8 +1493,13 @@ function Build-DLParameter {
if ($titleNode) {
$t = Get-LangText $titleNode
if ($null -ne $t) {
+ # Сравнение байт в байт: эталон — компилятор, он пишет заголовок как есть. -eq
+ # регистронезависим, и заголовок, отличающийся от авто-вывода только регистром
+ # («Организации ВетИС» при авто «Организации ВЕТИС»), терялся молча. Даже -ceq мало:
+ # он культурный, мягкий перенос и NFD-разложение для него — ноль. Нужен Ordinal,
+ # он же и есть зеркало питоновского ==.
$auto = Title-FromName -name $name
- if (-not (($t -is [string]) -and ($t -eq $auto))) { $o['title'] = $t }
+ if (-not (($t -is [string]) -and [string]::Equals($t, $auto, [StringComparison]::Ordinal))) { $o['title'] = $t }
}
}
# valueType
@@ -2691,7 +2696,10 @@ if ($attrsNode) {
if ($tNode) {
$t = Get-LangTextWS $tNode # восстановление значимого пробела (whitespace-заголовок реквизита)
if ($null -ne $t) {
- if ($isMain -or -not ($t -is [string]) -or $t -ne (Title-FromName $ao['name'])) { $ao['title'] = $t }
+ # Ordinal, а не -ne/-ceq: заголовок опускаем только при ТОЧНОМ, побайтовом совпадении
+ # с авто-выводом — компилятор восстановит его как есть, значим и регистр, и мягкий
+ # перенос, и форма нормализации.
+ if ($isMain -or -not ($t -is [string]) -or -not [string]::Equals($t, (Title-FromName $ao['name']), [StringComparison]::Ordinal)) { $ao['title'] = $t }
}
} elseif (-not $isMain) {
$ao['title'] = ''
diff --git a/.claude/skills/form-decompile/scripts/form-decompile.py b/.claude/skills/form-decompile/scripts/form-decompile.py
index 0b0e0089d..da93ba014 100644
--- a/.claude/skills/form-decompile/scripts/form-decompile.py
+++ b/.claude/skills/form-decompile/scripts/form-decompile.py
@@ -1,5 +1,5 @@
#!/usr/bin/env python3
-# form-decompile v0.150 — Decompile 1C managed Form.xml to JSON DSL (draft)
+# form-decompile v0.151 — Decompile 1C managed Form.xml to JSON DSL (draft)
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
# ВНИМАНИЕ: раундтрип не гарантируется. Навык исключён из авто-использования моделью.
#
@@ -618,12 +618,6 @@ def _ps_truthy(v):
return True
-# Зеркало PowerShell -eq/-ne для строк: регистронезависимое сравнение (PS по умолчанию ignore-case).
-# Нужно там, где сравниваются произвольно-регистровые строки (заголовок vs авто-вывод из имени).
-def _ps_ieq(a, b):
- return a.lower() == b.lower()
-
-
# Зеркало PowerShell "$v" (строковая интерполяция): bool→True/False, float без хвостового .0,
# $null→'', иначе str(). Используется везде, где канон делает "$value".
def _ps_str(v):
@@ -1689,8 +1683,12 @@ def build_dl_parameter(p_node):
if title_node is not None:
t = get_lang_text(title_node)
if t is not None:
+ # Сравнение байт в байт (в ps1 — [string]::Equals(..., Ordinal)): эталон — компилятор,
+ # он пишет заголовок как есть. Регистронезависимое сравнение теряло заголовок,
+ # отличающийся от авто-вывода только регистром («Организации ВетИС» при авто
+ # «Организации ВЕТИС»).
auto = title_from_name(name)
- if not (isinstance(t, str) and _ps_ieq(t, auto)):
+ if not (isinstance(t, str) and t == auto):
o['title'] = t
vt_node = p_node.find('dcssch:valueType', NS)
type_val = None
@@ -3333,7 +3331,10 @@ def main():
if t_node is not None:
t = get_lang_text_ws(t_node)
if t is not None:
- if is_main or not isinstance(t, str) or not _ps_ieq(t, title_from_name(ao['name'])):
+ # Заголовок опускаем только при ТОЧНОМ, побайтовом совпадении с авто-выводом
+ # (в ps1 — [string]::Equals(..., Ordinal)): компилятор восстановит его как есть,
+ # значим и регистр, и мягкий перенос, и форма нормализации.
+ if is_main or not isinstance(t, str) or t != title_from_name(ao['name']):
ao['title'] = t
elif not is_main:
ao['title'] = ''
diff --git a/tests/skills/cases/form-decompile/attribute-title-case.json b/tests/skills/cases/form-decompile/attribute-title-case.json
new file mode 100644
index 000000000..455cf4247
--- /dev/null
+++ b/tests/skills/cases/form-decompile/attribute-title-case.json
@@ -0,0 +1,37 @@
+{
+ "name": "Заголовок реквизита, отличающийся от авто-вывода только регистром или невидимым символом, не теряется",
+ "preRun": [
+ {
+ "script": "meta-compile/scripts/meta-compile",
+ "input": { "type": "DataProcessor", "name": "Регистр" },
+ "args": { "-JsonPath": "{inputFile}", "-OutputDir": "{workDir}" }
+ },
+ {
+ "script": "form-add/scripts/form-add",
+ "args": { "-ObjectPath": "{workDir}/DataProcessors/Регистр.xml", "-FormName": "Форма" }
+ },
+ {
+ "script": "form-compile/scripts/form-compile",
+ "input": {
+ "title": "Регистр",
+ "elements": [{ "input": "Организации", "path": "ОрганизацииВЕТИС" }],
+ "attributes": [
+ { "name": "Объект", "type": "DataProcessorObject.Регистр", "main": true },
+ { "name": "ОрганизацииВЕТИС", "type": "string", "title": "Организации ВетИС" },
+ { "name": "СуммаДокумента", "type": "string", "title": "Сумма документа" }
+ ]
+ },
+ "args": {
+ "-JsonPath": "{inputFile}",
+ "-OutputPath": "{workDir}/DataProcessors/Регистр/Forms/Форма/Ext/Form.xml"
+ }
+ }
+ ],
+ "params": {
+ "formPath": "DataProcessors/Регистр/Forms/Форма/Ext/Form.xml",
+ "outputPath": "draft.json"
+ },
+ "expect": {
+ "files": ["draft.json"]
+ }
+}
diff --git a/tests/skills/cases/form-decompile/dl-parameter-title-case.json b/tests/skills/cases/form-decompile/dl-parameter-title-case.json
new file mode 100644
index 000000000..258299db9
--- /dev/null
+++ b/tests/skills/cases/form-decompile/dl-parameter-title-case.json
@@ -0,0 +1,45 @@
+{
+ "name": "Заголовок параметра динамического списка, отличающийся от авто-вывода только регистром, не теряется",
+ "preRun": [
+ {
+ "script": "meta-compile/scripts/meta-compile",
+ "input": { "type": "DataProcessor", "name": "Регистр" },
+ "args": { "-JsonPath": "{inputFile}", "-OutputDir": "{workDir}" }
+ },
+ {
+ "script": "form-add/scripts/form-add",
+ "args": { "-ObjectPath": "{workDir}/DataProcessors/Регистр.xml", "-FormName": "Форма" }
+ },
+ {
+ "script": "form-compile/scripts/form-compile",
+ "input": {
+ "title": "Регистр",
+ "attributes": [
+ { "name": "Объект", "type": "DataProcessorObject.Регистр", "main": true },
+ {
+ "name": "Список",
+ "type": "DynamicList",
+ "settings": {
+ "query": "ВЫБРАТЬ 1 КАК Поле ГДЕ 1 = &ОрганизацииВЕТИС",
+ "keyType": "RowNumber",
+ "parameters": [
+ { "name": "ОрганизацииВЕТИС", "title": "Организации ВетИС", "type": "string" }
+ ]
+ }
+ }
+ ]
+ },
+ "args": {
+ "-JsonPath": "{inputFile}",
+ "-OutputPath": "{workDir}/DataProcessors/Регистр/Forms/Форма/Ext/Form.xml"
+ }
+ }
+ ],
+ "params": {
+ "formPath": "DataProcessors/Регистр/Forms/Форма/Ext/Form.xml",
+ "outputPath": "draft.json"
+ },
+ "expect": {
+ "files": ["draft.json"]
+ }
+}
diff --git a/tests/skills/cases/form-decompile/snapshots/attribute-title-case/Configuration.xml b/tests/skills/cases/form-decompile/snapshots/attribute-title-case/Configuration.xml
new file mode 100644
index 000000000..f03cdbdb0
--- /dev/null
+++ b/tests/skills/cases/form-decompile/snapshots/attribute-title-case/Configuration.xml
@@ -0,0 +1,252 @@
+
+
+
+
+
+ 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-decompile/snapshots/attribute-title-case/DataProcessors/Регистр.xml b/tests/skills/cases/form-decompile/snapshots/attribute-title-case/DataProcessors/Регистр.xml
new file mode 100644
index 000000000..253f546ab
--- /dev/null
+++ b/tests/skills/cases/form-decompile/snapshots/attribute-title-case/DataProcessors/Регистр.xml
@@ -0,0 +1,34 @@
+
+
+
+
+
+ UUID-002
+ UUID-003
+
+
+ UUID-004
+ UUID-005
+
+
+
+ Регистр
+
+
+ ru
+ Регистр
+
+
+
+ true
+ DataProcessor.Регистр.Form.Форма
+
+ false
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/tests/skills/cases/form-decompile/snapshots/attribute-title-case/DataProcessors/Регистр/Ext/ManagerModule.bsl b/tests/skills/cases/form-decompile/snapshots/attribute-title-case/DataProcessors/Регистр/Ext/ManagerModule.bsl
new file mode 100644
index 000000000..e69de29bb
diff --git a/tests/skills/cases/form-decompile/snapshots/attribute-title-case/DataProcessors/Регистр/Ext/ObjectModule.bsl b/tests/skills/cases/form-decompile/snapshots/attribute-title-case/DataProcessors/Регистр/Ext/ObjectModule.bsl
new file mode 100644
index 000000000..e69de29bb
diff --git a/tests/skills/cases/form-decompile/snapshots/attribute-title-case/DataProcessors/Регистр/Forms/Форма.xml b/tests/skills/cases/form-decompile/snapshots/attribute-title-case/DataProcessors/Регистр/Forms/Форма.xml
new file mode 100644
index 000000000..dffeea014
--- /dev/null
+++ b/tests/skills/cases/form-decompile/snapshots/attribute-title-case/DataProcessors/Регистр/Forms/Форма.xml
@@ -0,0 +1,22 @@
+
+
+
+
\ No newline at end of file
diff --git a/tests/skills/cases/form-decompile/snapshots/attribute-title-case/DataProcessors/Регистр/Forms/Форма/Ext/Form.xml b/tests/skills/cases/form-decompile/snapshots/attribute-title-case/DataProcessors/Регистр/Forms/Форма/Ext/Form.xml
new file mode 100644
index 000000000..327b4f7f2
--- /dev/null
+++ b/tests/skills/cases/form-decompile/snapshots/attribute-title-case/DataProcessors/Регистр/Forms/Форма/Ext/Form.xml
@@ -0,0 +1,56 @@
+
+
\ No newline at end of file
diff --git a/tests/skills/cases/form-decompile/snapshots/attribute-title-case/DataProcessors/Регистр/Forms/Форма/Ext/Form/Module.bsl b/tests/skills/cases/form-decompile/snapshots/attribute-title-case/DataProcessors/Регистр/Forms/Форма/Ext/Form/Module.bsl
new file mode 100644
index 000000000..8ead4cec0
--- /dev/null
+++ b/tests/skills/cases/form-decompile/snapshots/attribute-title-case/DataProcessors/Регистр/Forms/Форма/Ext/Form/Module.bsl
@@ -0,0 +1,19 @@
+#Область ОбработчикиСобытийФормы
+
+#КонецОбласти
+
+#Область ОбработчикиСобытийЭлементовФормы
+
+#КонецОбласти
+
+#Область ОбработчикиКомандФормы
+
+#КонецОбласти
+
+#Область ОбработчикиОповещений
+
+#КонецОбласти
+
+#Область СлужебныеПроцедурыИФункции
+
+#КонецОбласти
\ No newline at end of file
diff --git a/tests/skills/cases/form-decompile/snapshots/attribute-title-case/Ext/ClientApplicationInterface.xml b/tests/skills/cases/form-decompile/snapshots/attribute-title-case/Ext/ClientApplicationInterface.xml
new file mode 100644
index 000000000..3c1161b2d
--- /dev/null
+++ b/tests/skills/cases/form-decompile/snapshots/attribute-title-case/Ext/ClientApplicationInterface.xml
@@ -0,0 +1,18 @@
+
+
+
+
+ UUID-002
+
+
+
+
+ UUID-004
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/tests/skills/cases/form-decompile/snapshots/attribute-title-case/Languages/Русский.xml b/tests/skills/cases/form-decompile/snapshots/attribute-title-case/Languages/Русский.xml
new file mode 100644
index 000000000..37c60d786
--- /dev/null
+++ b/tests/skills/cases/form-decompile/snapshots/attribute-title-case/Languages/Русский.xml
@@ -0,0 +1,16 @@
+
+
+
+
+ Русский
+
+
+ ru
+ Русский
+
+
+
+ ru
+
+
+
\ No newline at end of file
diff --git a/tests/skills/cases/form-decompile/snapshots/attribute-title-case/draft.json b/tests/skills/cases/form-decompile/snapshots/attribute-title-case/draft.json
new file mode 100644
index 000000000..0bd3737ae
--- /dev/null
+++ b/tests/skills/cases/form-decompile/snapshots/attribute-title-case/draft.json
@@ -0,0 +1,9 @@
+{
+ "title": "Регистр",
+ "elements": [{ "input": "Организации", "path": "ОрганизацииВЕТИС" }],
+ "attributes": [
+ { "name": "Объект", "type": "DataProcessorObject.Регистр", "main": true },
+ { "name": "ОрганизацииВЕТИС", "type": "string", "title": "Организации ВетИС" },
+ { "name": "СуммаДокумента", "type": "string", "title": "Сумма документа" }
+ ]
+}
\ No newline at end of file
diff --git a/tests/skills/cases/form-decompile/snapshots/dl-parameter-title-case/Configuration.xml b/tests/skills/cases/form-decompile/snapshots/dl-parameter-title-case/Configuration.xml
new file mode 100644
index 000000000..f03cdbdb0
--- /dev/null
+++ b/tests/skills/cases/form-decompile/snapshots/dl-parameter-title-case/Configuration.xml
@@ -0,0 +1,252 @@
+
+
+
+
+
+ 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-decompile/snapshots/dl-parameter-title-case/DataProcessors/Регистр.xml b/tests/skills/cases/form-decompile/snapshots/dl-parameter-title-case/DataProcessors/Регистр.xml
new file mode 100644
index 000000000..253f546ab
--- /dev/null
+++ b/tests/skills/cases/form-decompile/snapshots/dl-parameter-title-case/DataProcessors/Регистр.xml
@@ -0,0 +1,34 @@
+
+
+
+
+
+ UUID-002
+ UUID-003
+
+
+ UUID-004
+ UUID-005
+
+
+
+ Регистр
+
+
+ ru
+ Регистр
+
+
+
+ true
+ DataProcessor.Регистр.Form.Форма
+
+ false
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/tests/skills/cases/form-decompile/snapshots/dl-parameter-title-case/DataProcessors/Регистр/Ext/ManagerModule.bsl b/tests/skills/cases/form-decompile/snapshots/dl-parameter-title-case/DataProcessors/Регистр/Ext/ManagerModule.bsl
new file mode 100644
index 000000000..e69de29bb
diff --git a/tests/skills/cases/form-decompile/snapshots/dl-parameter-title-case/DataProcessors/Регистр/Ext/ObjectModule.bsl b/tests/skills/cases/form-decompile/snapshots/dl-parameter-title-case/DataProcessors/Регистр/Ext/ObjectModule.bsl
new file mode 100644
index 000000000..e69de29bb
diff --git a/tests/skills/cases/form-decompile/snapshots/dl-parameter-title-case/DataProcessors/Регистр/Forms/Форма.xml b/tests/skills/cases/form-decompile/snapshots/dl-parameter-title-case/DataProcessors/Регистр/Forms/Форма.xml
new file mode 100644
index 000000000..dffeea014
--- /dev/null
+++ b/tests/skills/cases/form-decompile/snapshots/dl-parameter-title-case/DataProcessors/Регистр/Forms/Форма.xml
@@ -0,0 +1,22 @@
+
+
+
+
\ No newline at end of file
diff --git a/tests/skills/cases/form-decompile/snapshots/dl-parameter-title-case/DataProcessors/Регистр/Forms/Форма/Ext/Form.xml b/tests/skills/cases/form-decompile/snapshots/dl-parameter-title-case/DataProcessors/Регистр/Forms/Форма/Ext/Form.xml
new file mode 100644
index 000000000..2c4f8dcc3
--- /dev/null
+++ b/tests/skills/cases/form-decompile/snapshots/dl-parameter-title-case/DataProcessors/Регистр/Forms/Форма/Ext/Form.xml
@@ -0,0 +1,70 @@
+
+
\ No newline at end of file
diff --git a/tests/skills/cases/form-decompile/snapshots/dl-parameter-title-case/DataProcessors/Регистр/Forms/Форма/Ext/Form/Module.bsl b/tests/skills/cases/form-decompile/snapshots/dl-parameter-title-case/DataProcessors/Регистр/Forms/Форма/Ext/Form/Module.bsl
new file mode 100644
index 000000000..8ead4cec0
--- /dev/null
+++ b/tests/skills/cases/form-decompile/snapshots/dl-parameter-title-case/DataProcessors/Регистр/Forms/Форма/Ext/Form/Module.bsl
@@ -0,0 +1,19 @@
+#Область ОбработчикиСобытийФормы
+
+#КонецОбласти
+
+#Область ОбработчикиСобытийЭлементовФормы
+
+#КонецОбласти
+
+#Область ОбработчикиКомандФормы
+
+#КонецОбласти
+
+#Область ОбработчикиОповещений
+
+#КонецОбласти
+
+#Область СлужебныеПроцедурыИФункции
+
+#КонецОбласти
\ No newline at end of file
diff --git a/tests/skills/cases/form-decompile/snapshots/dl-parameter-title-case/Ext/ClientApplicationInterface.xml b/tests/skills/cases/form-decompile/snapshots/dl-parameter-title-case/Ext/ClientApplicationInterface.xml
new file mode 100644
index 000000000..3c1161b2d
--- /dev/null
+++ b/tests/skills/cases/form-decompile/snapshots/dl-parameter-title-case/Ext/ClientApplicationInterface.xml
@@ -0,0 +1,18 @@
+
+
+
+
+ UUID-002
+
+
+
+
+ UUID-004
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/tests/skills/cases/form-decompile/snapshots/dl-parameter-title-case/Languages/Русский.xml b/tests/skills/cases/form-decompile/snapshots/dl-parameter-title-case/Languages/Русский.xml
new file mode 100644
index 000000000..37c60d786
--- /dev/null
+++ b/tests/skills/cases/form-decompile/snapshots/dl-parameter-title-case/Languages/Русский.xml
@@ -0,0 +1,16 @@
+
+
+
+
+ Русский
+
+
+ ru
+ Русский
+
+
+
+ ru
+
+
+
\ No newline at end of file
diff --git a/tests/skills/cases/form-decompile/snapshots/dl-parameter-title-case/draft.json b/tests/skills/cases/form-decompile/snapshots/dl-parameter-title-case/draft.json
new file mode 100644
index 000000000..08e03ce05
--- /dev/null
+++ b/tests/skills/cases/form-decompile/snapshots/dl-parameter-title-case/draft.json
@@ -0,0 +1,15 @@
+{
+ "title": "Регистр",
+ "attributes": [
+ { "name": "Объект", "type": "DataProcessorObject.Регистр", "main": true },
+ {
+ "name": "Список",
+ "type": "DynamicList",
+ "settings": {
+ "keyType": "RowNumber",
+ "query": "ВЫБРАТЬ 1 КАК Поле ГДЕ 1 = &ОрганизацииВЕТИС",
+ "parameters": [{ "name": "ОрганизацииВЕТИС", "title": "Организации ВетИС", "type": "string" }]
+ }
+ }
+ ]
+}
\ No newline at end of file