mirror of
https://github.com/Nikolay-Shirokov/cc-1c-skills.git
synced 2026-08-02 09:47:45 +03:00
feat(skd): use=false на selection items
SelectedItemField и SelectedItemAuto могут иметь <dcsset:use>false</dcsset:use>
— отключённое поле выборки. Раньше игнорировалось при roundtrip.
DSL расширения:
- selection item object form: { field, use: false, title?, viewMode? }
- новый объект для отключённого Auto: { auto: true, use: false }
Decompile переходит в object form если есть use=false (помимо title и
viewMode); compile эмитит <use>false</use> в начале item (XML-порядок).
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 4.7
parent
38b5445f15
commit
a7d5c46176
@@ -1,4 +1,4 @@
|
|||||||
# skd-compile v1.45 — Compile 1C DCS from JSON
|
# skd-compile v1.46 — Compile 1C DCS from JSON
|
||||||
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
|
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
|
||||||
param(
|
param(
|
||||||
[string]$DefinitionFile,
|
[string]$DefinitionFile,
|
||||||
@@ -1884,6 +1884,13 @@ function Emit-SelectionItem {
|
|||||||
}
|
}
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
# Object form: { auto: true, use: false } — отключённый Auto в selection
|
||||||
|
if ($item.auto -eq $true) {
|
||||||
|
X "$indent<dcsset:item xsi:type=`"dcsset:SelectedItemAuto`">"
|
||||||
|
if ($item.use -eq $false) { X "$indent`t<dcsset:use>false</dcsset:use>" }
|
||||||
|
X "$indent</dcsset:item>"
|
||||||
|
return
|
||||||
|
}
|
||||||
if ($item.folder -or (Has-JsonProp $item 'folder')) {
|
if ($item.folder -or (Has-JsonProp $item 'folder')) {
|
||||||
X "$indent<dcsset:item xsi:type=`"dcsset:SelectedItemFolder`">"
|
X "$indent<dcsset:item xsi:type=`"dcsset:SelectedItemFolder`">"
|
||||||
# Optional <dcsset:field> на folder (редкий случай, для round-trip-целостности)
|
# Optional <dcsset:field> на folder (редкий случай, для round-trip-целостности)
|
||||||
@@ -1898,8 +1905,11 @@ function Emit-SelectionItem {
|
|||||||
X "$indent</dcsset:item>"
|
X "$indent</dcsset:item>"
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
# field with optional title
|
# field with optional title / use=false / viewMode
|
||||||
X "$indent<dcsset:item xsi:type=`"dcsset:SelectedItemField`">"
|
X "$indent<dcsset:item xsi:type=`"dcsset:SelectedItemField`">"
|
||||||
|
if ($item.use -eq $false) {
|
||||||
|
X "$indent`t<dcsset:use>false</dcsset:use>"
|
||||||
|
}
|
||||||
X "$indent`t<dcsset:field>$(Esc-Xml "$($item.field)")</dcsset:field>"
|
X "$indent`t<dcsset:field>$(Esc-Xml "$($item.field)")</dcsset:field>"
|
||||||
if ($item.title) {
|
if ($item.title) {
|
||||||
Emit-MLText -tag "dcsset:lwsTitle" -text $item.title -indent "$indent`t" -NoXsiType
|
Emit-MLText -tag "dcsset:lwsTitle" -text $item.title -indent "$indent`t" -NoXsiType
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
#!/usr/bin/env python3
|
#!/usr/bin/env python3
|
||||||
# skd-compile v1.45 — Compile 1C DCS from JSON
|
# skd-compile v1.46 — Compile 1C DCS from JSON
|
||||||
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
|
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
|
||||||
import argparse
|
import argparse
|
||||||
import json
|
import json
|
||||||
@@ -1570,6 +1570,13 @@ def emit_selection_item(lines, item, indent):
|
|||||||
lines.append(f'{indent}\t<dcsset:field>{esc_xml(item)}</dcsset:field>')
|
lines.append(f'{indent}\t<dcsset:field>{esc_xml(item)}</dcsset:field>')
|
||||||
lines.append(f'{indent}</dcsset:item>')
|
lines.append(f'{indent}</dcsset:item>')
|
||||||
return
|
return
|
||||||
|
# Object form: { auto: true, use: false } — отключённый Auto в selection
|
||||||
|
if item.get('auto') is True:
|
||||||
|
lines.append(f'{indent}<dcsset:item xsi:type="dcsset:SelectedItemAuto">')
|
||||||
|
if item.get('use') is False:
|
||||||
|
lines.append(f'{indent}\t<dcsset:use>false</dcsset:use>')
|
||||||
|
lines.append(f'{indent}</dcsset:item>')
|
||||||
|
return
|
||||||
if 'folder' in item:
|
if 'folder' in item:
|
||||||
lines.append(f'{indent}<dcsset:item xsi:type="dcsset:SelectedItemFolder">')
|
lines.append(f'{indent}<dcsset:item xsi:type="dcsset:SelectedItemFolder">')
|
||||||
if item.get('field'):
|
if item.get('field'):
|
||||||
@@ -1580,8 +1587,10 @@ def emit_selection_item(lines, item, indent):
|
|||||||
lines.append(f'{indent}\t<dcsset:placement>Auto</dcsset:placement>')
|
lines.append(f'{indent}\t<dcsset:placement>Auto</dcsset:placement>')
|
||||||
lines.append(f'{indent}</dcsset:item>')
|
lines.append(f'{indent}</dcsset:item>')
|
||||||
return
|
return
|
||||||
# field with optional title
|
# field with optional title / use=false / viewMode
|
||||||
lines.append(f'{indent}<dcsset:item xsi:type="dcsset:SelectedItemField">')
|
lines.append(f'{indent}<dcsset:item xsi:type="dcsset:SelectedItemField">')
|
||||||
|
if item.get('use') is False:
|
||||||
|
lines.append(f'{indent}\t<dcsset:use>false</dcsset:use>')
|
||||||
lines.append(f'{indent}\t<dcsset:field>{esc_xml(str(item["field"]))}</dcsset:field>')
|
lines.append(f'{indent}\t<dcsset:field>{esc_xml(str(item["field"]))}</dcsset:field>')
|
||||||
if item.get('title'):
|
if item.get('title'):
|
||||||
emit_mltext(lines, f'{indent}\t', 'dcsset:lwsTitle', item['title'], no_xsi_type=True)
|
emit_mltext(lines, f'{indent}\t', 'dcsset:lwsTitle', item['title'], no_xsi_type=True)
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
# skd-decompile v0.30 — Decompile 1C DCS Template.xml to JSON DSL (draft)
|
# skd-decompile v0.31 — Decompile 1C DCS Template.xml to JSON DSL (draft)
|
||||||
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
|
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
|
||||||
param(
|
param(
|
||||||
[Parameter(Mandatory)]
|
[Parameter(Mandatory)]
|
||||||
@@ -1374,14 +1374,24 @@ function Build-SelectionItem {
|
|||||||
if ($fieldEl) { return 'Auto' }
|
if ($fieldEl) { return 'Auto' }
|
||||||
}
|
}
|
||||||
switch ($xt) {
|
switch ($xt) {
|
||||||
'SelectedItemAuto' { return 'Auto' }
|
'SelectedItemAuto' {
|
||||||
|
# Auto может иметь <use>false</use> — отключённый Auto-элемент в selection.
|
||||||
|
$useV = Get-Text $item "dcsset:use"
|
||||||
|
if ($useV -eq 'false') {
|
||||||
|
return [ordered]@{ auto = $true; use = $false }
|
||||||
|
}
|
||||||
|
return 'Auto'
|
||||||
|
}
|
||||||
'SelectedItemField' {
|
'SelectedItemField' {
|
||||||
$fName = Get-Text $item "dcsset:field"
|
$fName = Get-Text $item "dcsset:field"
|
||||||
$titleNode = $item.SelectSingleNode("dcsset:lwsTitle", $ns)
|
$titleNode = $item.SelectSingleNode("dcsset:lwsTitle", $ns)
|
||||||
$title = Get-MLText $titleNode
|
$title = Get-MLText $titleNode
|
||||||
$vmN = $item.SelectSingleNode("dcsset:viewMode", $ns)
|
$vmN = $item.SelectSingleNode("dcsset:viewMode", $ns)
|
||||||
if ($title -or $vmN) {
|
$useV = Get-Text $item "dcsset:use"
|
||||||
|
$useFalse = ($useV -eq 'false')
|
||||||
|
if ($title -or $vmN -or $useFalse) {
|
||||||
$obj = [ordered]@{ field = $fName }
|
$obj = [ordered]@{ field = $fName }
|
||||||
|
if ($useFalse) { $obj['use'] = $false }
|
||||||
if ($title) { $obj['title'] = $title }
|
if ($title) { $obj['title'] = $title }
|
||||||
if ($vmN) { $obj['viewMode'] = $vmN.InnerText }
|
if ($vmN) { $obj['viewMode'] = $vmN.InnerText }
|
||||||
return $obj
|
return $obj
|
||||||
|
|||||||
Reference in New Issue
Block a user