mirror of
https://github.com/Nikolay-Shirokov/cc-1c-skills.git
synced 2026-09-23 18:55:53 +03:00
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:
co-authored by
Claude Opus 5
parent
df47d4d34f
commit
9d07b2e20f
@@ -1,4 +1,4 @@
|
||||
# form-decompile v0.151 — Decompile 1C managed Form.xml to JSON DSL (draft)
|
||||
# form-decompile v0.152 — Decompile 1C managed Form.xml to JSON DSL (draft)
|
||||
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
|
||||
# ВНИМАНИЕ: раундтрип не гарантируется. Навык исключён из авто-использования моделью.
|
||||
[CmdletBinding(PositionalBinding=$false)]
|
||||
@@ -1494,7 +1494,7 @@ function Build-DLParameter {
|
||||
# title — опускаем, если совпадает с авто-выводом из имени (ru-only)
|
||||
$titleNode = $pNode.SelectSingleNode("dcssch:title", $ns)
|
||||
if ($titleNode) {
|
||||
$t = Get-LangText $titleNode
|
||||
$t = Get-LangTextWS $titleNode # восстановление значимого пробела: заголовком-пробелом гасят подпись
|
||||
if ($null -ne $t) {
|
||||
# Сравнение байт в байт: эталон — компилятор, он пишет заголовок как есть. -eq
|
||||
# регистронезависим, и заголовок, отличающийся от авто-вывода только регистром
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
#!/usr/bin/env python3
|
||||
# form-decompile v0.151 — Decompile 1C managed Form.xml to JSON DSL (draft)
|
||||
# form-decompile v0.152 — Decompile 1C managed Form.xml to JSON DSL (draft)
|
||||
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
|
||||
# ВНИМАНИЕ: раундтрип не гарантируется. Навык исключён из авто-использования моделью.
|
||||
#
|
||||
@@ -1677,7 +1677,9 @@ def build_dl_parameter(p_node):
|
||||
# title — опускаем, если совпадает с авто-выводом из имени (ru-only)
|
||||
title_node = p_node.find('dcssch:title', NS)
|
||||
if title_node is not None:
|
||||
t = get_lang_text(title_node)
|
||||
# get_lang_text_ws, а не get_lang_text: заголовком-пробелом гасят подпись, а обычное
|
||||
# чтение схлопывает whitespace-only в '' — и компилятор подставил бы авто-вывод.
|
||||
t = get_lang_text_ws(title_node)
|
||||
if t is not None:
|
||||
# Сравнение байт в байт (в ps1 — [string]::Equals(..., Ordinal)): эталон — компилятор,
|
||||
# он пишет заголовок как есть. Регистронезависимое сравнение теряло заголовок,
|
||||
|
||||
@@ -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" }
|
||||
]
|
||||
}
|
||||
}
|
||||
|
||||
+19
-1
@@ -28,7 +28,7 @@
|
||||
<Settings xsi:type="DynamicList">
|
||||
<ManualQuery>true</ManualQuery>
|
||||
<DynamicDataRead>true</DynamicDataRead>
|
||||
<QueryText>ВЫБРАТЬ 1 КАК Поле ГДЕ 1 = &ОрганизацииВЕТИС</QueryText>
|
||||
<QueryText>ВЫБРАТЬ 1 КАК Поле ГДЕ 1 = &ОрганизацииВЕТИС И 2 = &СуммаДокумента</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" }
|
||||
]
|
||||
}
|
||||
}
|
||||
]
|
||||
|
||||
Reference in New Issue
Block a user