fix(form-decompile): не терять заголовок-пробел у параметра динамического списка

Ветка параметра читала заголовок обычным Get-LangText, который схлопывает whitespace-only
в пустую строку; ветка реквизита давно читает его через Get-LangTextWS. Заголовок-пробел —
им гасят подпись — превращался в "" , а компилятор трактует пустую строку как отсутствие
ключа и подставляет авто-вывод из имени: " " молча становилось «Организации ВЕТИС».
Тот же класс, что и потерянный регистр, соседняя ветка той же функции.

В корпусе (13891 узел dcssch:title в четырёх типовых) платформа не пишет ни пустой,
ни whitespace-only заголовок, поэтому на разборе чужих выгрузок правка ничего не меняет —
она чинит наш собственный раундтрип compile → decompile → compile.

Кейс dl-parameter-title-case расширен вторым параметром с заголовком-пробелом; на исходной
версии падает в обоих портах. Снэпшоты приняты платформой (verify-snapshots, 3/3).

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01SSyRNwSiuAAEQCLSCUGEzQ
This commit is contained in:
Nick Shirokov
2026-09-22 20:42:20 +03:00
co-authored by Claude Opus 5
parent df47d4d34f
commit 9d07b2e20f
5 changed files with 34 additions and 10 deletions
@@ -1,5 +1,5 @@
{
"name": "Заголовок параметра динамического списка, отличающийся от авто-вывода только регистром, не теряется",
"name": "Заголовок параметра динамического списка не теряется: отличие в регистре и заголовок-пробел",
"preRun": [
{
"script": "meta-compile/scripts/meta-compile",
@@ -20,10 +20,11 @@
"name": "Список",
"type": "DynamicList",
"settings": {
"query": "ВЫБРАТЬ 1 КАК Поле ГДЕ 1 = &ОрганизацииВЕТИС",
"query": "ВЫБРАТЬ 1 КАК Поле ГДЕ 1 = &ОрганизацииВЕТИС И 2 = &СуммаДокумента",
"keyType": "RowNumber",
"parameters": [
{ "name": "ОрганизацииВЕТИС", "title": "Организации ВетИС", "type": "string" }
{ "name": "ОрганизацииВЕТИС", "title": "Организации ВетИС", "type": "string" },
{ "name": "СуммаДокумента", "title": " ", "type": "string" }
]
}
}
@@ -28,7 +28,7 @@
<Settings xsi:type="DynamicList">
<ManualQuery>true</ManualQuery>
<DynamicDataRead>true</DynamicDataRead>
<QueryText>ВЫБРАТЬ 1 КАК Поле ГДЕ 1 = &amp;ОрганизацииВЕТИС</QueryText>
<QueryText>ВЫБРАТЬ 1 КАК Поле ГДЕ 1 = &amp;ОрганизацииВЕТИС И 2 = &amp;СуммаДокумента</QueryText>
<Parameter>
<dcssch:name>ОрганизацииВЕТИС</dcssch:name>
<dcssch:title xsi:type="v8:LocalStringType">
@@ -47,6 +47,24 @@
<dcssch:value xsi:nil="true"/>
<dcssch:useRestriction>true</dcssch:useRestriction>
</Parameter>
<Parameter>
<dcssch:name>СуммаДокумента</dcssch:name>
<dcssch:title xsi:type="v8:LocalStringType">
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content> </v8:content>
</v8:item>
</dcssch:title>
<dcssch:valueType>
<v8:Type>xs:string</v8:Type>
<v8:StringQualifiers>
<v8:Length>0</v8:Length>
<v8:AllowedLength>Variable</v8:AllowedLength>
</v8:StringQualifiers>
</dcssch:valueType>
<dcssch:value xsi:nil="true"/>
<dcssch:useRestriction>true</dcssch:useRestriction>
</Parameter>
<KeyType>RowNumber</KeyType>
<ListSettings>
<dcsset:filter>
@@ -7,8 +7,11 @@
"type": "DynamicList",
"settings": {
"keyType": "RowNumber",
"query": "ВЫБРАТЬ 1 КАК Поле ГДЕ 1 = &ОрганизацииВЕТИС",
"parameters": [{ "name": "ОрганизацииВЕТИС", "title": "Организации ВетИС", "type": "string" }]
"query": "ВЫБРАТЬ 1 КАК Поле ГДЕ 1 = &ОрганизацииВЕТИС И 2 = &СуммаДокумента",
"parameters": [
{ "name": "ОрганизацииВЕТИС", "title": "Организации ВетИС", "type": "string" },
{ "name": "СуммаДокумента", "title": " ", "type": "string" }
]
}
}
]