mirror of
https://github.com/Nikolay-Shirokov/cc-1c-skills.git
synced 2026-06-14 18:04:58 +03:00
fix(form-compile): MobileDeviceCommandBarContent с пустым значением (PS array-unwrap + self-closing)
12 форм корпуса несут MobileDeviceCommandBarContent с одним ПУСТЫМ item
(<xr:Value xsi:type="xs:string"/>, не имя). Декомпилятор захватывал
mobileCommandBarContent: [""], но компилятор не эмитил блок:
(1) PS-ловушка: гейт `if ($def.mobileCommandBarContent -and ...)` — одноэлементный
массив @("") в boolean-контексте разворачивается в "" → falsy → блок пропущен.
Фикс: $null-проверка вместо truthy ($null -ne ... -and Count -gt 0).
(2) Пустое значение → самозакрывающийся <xr:Value xsi:type="xs:string"/> (зеркало платформы).
Python не имел unwrap-ловушки ([""] truthy), но self-closing добавлен для байт-паритета
(+ is not None гейт для единообразия).
Выборка 9 форм (РасширенныйВводКонтактнойИнформации, ХранилищеВариантовОтчетов×3,
ФормаНастроекОтчета, ИнтерфейсДокументовЭДО, ПользовательскиеМакетыПечати, …):
match 0→9, TOTAL→0. Регресс 43/43 (ps1+py). Блок именованных значений (148 форм) уже
был сертифицирован; пустой — тот же блок с пустым значением (формат платформы).
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
# form-compile v1.149 — Compile 1C managed form from JSON or object metadata
|
||||
# form-compile v1.150 — Compile 1C managed form from JSON or object metadata
|
||||
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
|
||||
param(
|
||||
[string]$JsonPath,
|
||||
@@ -6269,13 +6269,17 @@ if ($def.excludedCommands -and $def.excludedCommands.Count -gt 0) {
|
||||
|
||||
# 12c2. MobileDeviceCommandBarContent — форменный список имён командных панелей/кнопок
|
||||
# (Presentation пустой, CheckState=0, тип xs:string — константы; варьируется только имя-Value).
|
||||
if ($def.mobileCommandBarContent -and @($def.mobileCommandBarContent).Count -gt 0) {
|
||||
# $null-проверка (не truthy): одноэлементный массив с пустой строкой @("") разворачивается
|
||||
# в boolean-контексте в "" → falsy; 12 форм корпуса несут один пустой item (Value="").
|
||||
if ($null -ne $def.mobileCommandBarContent -and @($def.mobileCommandBarContent).Count -gt 0) {
|
||||
X "`t<MobileDeviceCommandBarContent>"
|
||||
foreach ($nm in @($def.mobileCommandBarContent)) {
|
||||
X "`t`t<xr:Item>"
|
||||
X "`t`t`t<xr:Presentation/>"
|
||||
X "`t`t`t<xr:CheckState>0</xr:CheckState>"
|
||||
X "`t`t`t<xr:Value xsi:type=`"xs:string`">$(Esc-Xml "$nm")</xr:Value>"
|
||||
# пустое значение → самозакрывающийся тег (зеркало платформы)
|
||||
if ([string]::IsNullOrEmpty("$nm")) { X "`t`t`t<xr:Value xsi:type=`"xs:string`"/>" }
|
||||
else { X "`t`t`t<xr:Value xsi:type=`"xs:string`">$(Esc-Xml "$nm")</xr:Value>" }
|
||||
X "`t`t</xr:Item>"
|
||||
}
|
||||
X "`t</MobileDeviceCommandBarContent>"
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
#!/usr/bin/env python3
|
||||
# form-compile v1.149 — Compile 1C managed form from JSON or object metadata
|
||||
# form-compile v1.150 — Compile 1C managed form from JSON or object metadata
|
||||
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
|
||||
import argparse
|
||||
import copy
|
||||
@@ -6163,13 +6163,18 @@ def main():
|
||||
|
||||
# MobileDeviceCommandBarContent — форменный список имён командных панелей/кнопок
|
||||
# (Presentation пустой, CheckState=0, тип xs:string — константы; варьируется только имя-Value).
|
||||
if defn.get('mobileCommandBarContent') and len(defn['mobileCommandBarContent']) > 0:
|
||||
# 12 форм корпуса несут один пустой item (Value="") — список присутствует, но не пуст по len.
|
||||
if defn.get('mobileCommandBarContent') is not None and len(defn['mobileCommandBarContent']) > 0:
|
||||
lines.append('\t<MobileDeviceCommandBarContent>')
|
||||
for nm in defn['mobileCommandBarContent']:
|
||||
lines.append('\t\t<xr:Item>')
|
||||
lines.append('\t\t\t<xr:Presentation/>')
|
||||
lines.append('\t\t\t<xr:CheckState>0</xr:CheckState>')
|
||||
lines.append(f'\t\t\t<xr:Value xsi:type="xs:string">{esc_xml(str(nm))}</xr:Value>')
|
||||
# пустое значение → самозакрывающийся тег (зеркало платформы)
|
||||
if not str(nm):
|
||||
lines.append('\t\t\t<xr:Value xsi:type="xs:string"/>')
|
||||
else:
|
||||
lines.append(f'\t\t\t<xr:Value xsi:type="xs:string">{esc_xml(str(nm))}</xr:Value>')
|
||||
lines.append('\t\t</xr:Item>')
|
||||
lines.append('\t</MobileDeviceCommandBarContent>')
|
||||
|
||||
|
||||
Reference in New Issue
Block a user