mirror of
https://github.com/Nikolay-Shirokov/cc-1c-skills.git
synced 2026-06-11 00:14:56 +03:00
feat(skd): user-settings + axis-viewMode + use=false на StructureItemTable/Chart
Раньше для StructureItemTable читали только viewMode/userSettingID/
userSettingPresentation/itemsViewMode, а для StructureItemChart — вовсе
ничего из user-settings. Также не поддерживали axis-level режим
доступности секций (columnsViewMode/rowsViewMode/pointsViewMode/
seriesViewMode) и use=false на самих table/chart.
Расширено:
- table: + use=false, + columnsViewMode, + rowsViewMode
- chart: + use=false, + viewMode, + userSettingID, + userSettingPresentation,
+ itemsViewMode, + pointsViewMode, + seriesViewMode
Все эти атрибуты эмитятся платформой как direct children самой item-ноды
после rows/columns (table) или points/series (chart). DSL — простые поля
прямо на table/chart-объекте (как у table уже было для viewMode/etc).
Sample30 total: 729 → 620 строк diff (-109).
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
# skd-compile v1.95 — Compile 1C DCS from JSON
|
||||
# skd-compile v1.96 — Compile 1C DCS from JSON
|
||||
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
|
||||
param(
|
||||
[string]$DefinitionFile,
|
||||
@@ -3097,6 +3097,11 @@ function Emit-StructureItem {
|
||||
elseif ($type -eq "table") {
|
||||
X "$indent<dcsset:item xsi:type=`"dcsset:StructureItemTable`">"
|
||||
|
||||
# use=false — отключённая таблица
|
||||
if ($item.use -eq $false) {
|
||||
X "$indent`t<dcsset:use>false</dcsset:use>"
|
||||
}
|
||||
|
||||
if ($item.name) {
|
||||
X "$indent`t<dcsset:name>$(Esc-Xml "$($item.name)")</dcsset:name>"
|
||||
}
|
||||
@@ -3129,6 +3134,13 @@ function Emit-StructureItem {
|
||||
if ($item.outputParameters) {
|
||||
Emit-OutputParameters -params $item.outputParameters -indent "$indent`t"
|
||||
}
|
||||
# columnsViewMode / rowsViewMode — axis-level режим доступности (после rows/columns)
|
||||
if ($item.columnsViewMode) {
|
||||
X "$indent`t<dcsset:columnsViewMode>$(Esc-Xml "$($item.columnsViewMode)")</dcsset:columnsViewMode>"
|
||||
}
|
||||
if ($item.rowsViewMode) {
|
||||
X "$indent`t<dcsset:rowsViewMode>$(Esc-Xml "$($item.rowsViewMode)")</dcsset:rowsViewMode>"
|
||||
}
|
||||
# viewMode / userSettingID / userSettingPresentation / itemsViewMode на самой таблице
|
||||
if ($item.viewMode) {
|
||||
X "$indent`t<dcsset:viewMode>$(Esc-Xml "$($item.viewMode)")</dcsset:viewMode>"
|
||||
@@ -3149,6 +3161,11 @@ function Emit-StructureItem {
|
||||
elseif ($type -eq "chart") {
|
||||
X "$indent<dcsset:item xsi:type=`"dcsset:StructureItemChart`">"
|
||||
|
||||
# use=false — отключённая диаграмма
|
||||
if ($item.use -eq $false) {
|
||||
X "$indent`t<dcsset:use>false</dcsset:use>"
|
||||
}
|
||||
|
||||
if ($item.name) {
|
||||
X "$indent`t<dcsset:name>$(Esc-Xml "$($item.name)")</dcsset:name>"
|
||||
}
|
||||
@@ -3196,6 +3213,28 @@ function Emit-StructureItem {
|
||||
Emit-OutputParameters -params $item.outputParameters -indent "$indent`t"
|
||||
}
|
||||
|
||||
# pointsViewMode / seriesViewMode — axis-level режим доступности (после points/series)
|
||||
if ($item.pointsViewMode) {
|
||||
X "$indent`t<dcsset:pointsViewMode>$(Esc-Xml "$($item.pointsViewMode)")</dcsset:pointsViewMode>"
|
||||
}
|
||||
if ($item.seriesViewMode) {
|
||||
X "$indent`t<dcsset:seriesViewMode>$(Esc-Xml "$($item.seriesViewMode)")</dcsset:seriesViewMode>"
|
||||
}
|
||||
# viewMode / userSettingID / userSettingPresentation / itemsViewMode на самой диаграмме
|
||||
if ($item.viewMode) {
|
||||
X "$indent`t<dcsset:viewMode>$(Esc-Xml "$($item.viewMode)")</dcsset:viewMode>"
|
||||
}
|
||||
if ($item.userSettingID) {
|
||||
$gid = if ("$($item.userSettingID)" -eq "auto") { New-Guid-String } else { "$($item.userSettingID)" }
|
||||
X "$indent`t<dcsset:userSettingID>$(Esc-Xml $gid)</dcsset:userSettingID>"
|
||||
}
|
||||
if ($item.userSettingPresentation) {
|
||||
Emit-MLText -tag "dcsset:userSettingPresentation" -text $item.userSettingPresentation -indent "$indent`t"
|
||||
}
|
||||
if ($item.itemsViewMode) {
|
||||
X "$indent`t<dcsset:itemsViewMode>$(Esc-Xml "$($item.itemsViewMode)")</dcsset:itemsViewMode>"
|
||||
}
|
||||
|
||||
X "$indent</dcsset:item>"
|
||||
}
|
||||
elseif ($type -eq "nestedObject") {
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
#!/usr/bin/env python3
|
||||
# skd-compile v1.95 — Compile 1C DCS from JSON
|
||||
# skd-compile v1.96 — Compile 1C DCS from JSON
|
||||
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
|
||||
import argparse
|
||||
import json
|
||||
@@ -2456,6 +2456,10 @@ def emit_structure_item(lines, item, indent, short_group=False):
|
||||
elif item_type == 'table':
|
||||
lines.append(f'{indent}<dcsset:item xsi:type="dcsset:StructureItemTable">')
|
||||
|
||||
# use=false — отключённая таблица
|
||||
if item.get('use') is False:
|
||||
lines.append(f'{indent}\t<dcsset:use>false</dcsset:use>')
|
||||
|
||||
if item.get('name'):
|
||||
lines.append(f'{indent}\t<dcsset:name>{esc_xml(str(item["name"]))}</dcsset:name>')
|
||||
|
||||
@@ -2480,6 +2484,11 @@ def emit_structure_item(lines, item, indent, short_group=False):
|
||||
emit_conditional_appearance(lines, item['conditionalAppearance'], f'{indent}\t')
|
||||
if item.get('outputParameters'):
|
||||
emit_output_parameters(lines, item['outputParameters'], f'{indent}\t')
|
||||
# columnsViewMode / rowsViewMode — axis-level режим доступности
|
||||
if item.get('columnsViewMode'):
|
||||
lines.append(f'{indent}\t<dcsset:columnsViewMode>{esc_xml(str(item["columnsViewMode"]))}</dcsset:columnsViewMode>')
|
||||
if item.get('rowsViewMode'):
|
||||
lines.append(f'{indent}\t<dcsset:rowsViewMode>{esc_xml(str(item["rowsViewMode"]))}</dcsset:rowsViewMode>')
|
||||
# viewMode / userSettingID / userSettingPresentation / itemsViewMode на самой таблице
|
||||
if item.get('viewMode'):
|
||||
lines.append(f'{indent}\t<dcsset:viewMode>{esc_xml(str(item["viewMode"]))}</dcsset:viewMode>')
|
||||
@@ -2496,6 +2505,10 @@ def emit_structure_item(lines, item, indent, short_group=False):
|
||||
elif item_type == 'chart':
|
||||
lines.append(f'{indent}<dcsset:item xsi:type="dcsset:StructureItemChart">')
|
||||
|
||||
# use=false — отключённая диаграмма
|
||||
if item.get('use') is False:
|
||||
lines.append(f'{indent}\t<dcsset:use>false</dcsset:use>')
|
||||
|
||||
if item.get('name'):
|
||||
lines.append(f'{indent}\t<dcsset:name>{esc_xml(str(item["name"]))}</dcsset:name>')
|
||||
|
||||
@@ -2523,6 +2536,22 @@ def emit_structure_item(lines, item, indent, short_group=False):
|
||||
if item.get('outputParameters'):
|
||||
emit_output_parameters(lines, item['outputParameters'], f'{indent}\t')
|
||||
|
||||
# pointsViewMode / seriesViewMode — axis-level режим доступности
|
||||
if item.get('pointsViewMode'):
|
||||
lines.append(f'{indent}\t<dcsset:pointsViewMode>{esc_xml(str(item["pointsViewMode"]))}</dcsset:pointsViewMode>')
|
||||
if item.get('seriesViewMode'):
|
||||
lines.append(f'{indent}\t<dcsset:seriesViewMode>{esc_xml(str(item["seriesViewMode"]))}</dcsset:seriesViewMode>')
|
||||
# viewMode / userSettingID / userSettingPresentation / itemsViewMode на самой диаграмме
|
||||
if item.get('viewMode'):
|
||||
lines.append(f'{indent}\t<dcsset:viewMode>{esc_xml(str(item["viewMode"]))}</dcsset:viewMode>')
|
||||
if item.get('userSettingID'):
|
||||
gid = new_uuid() if str(item['userSettingID']) == 'auto' else str(item['userSettingID'])
|
||||
lines.append(f'{indent}\t<dcsset:userSettingID>{esc_xml(gid)}</dcsset:userSettingID>')
|
||||
if item.get('userSettingPresentation'):
|
||||
emit_mltext(lines, f'{indent}\t', 'dcsset:userSettingPresentation', item['userSettingPresentation'])
|
||||
if item.get('itemsViewMode'):
|
||||
lines.append(f'{indent}\t<dcsset:itemsViewMode>{esc_xml(str(item["itemsViewMode"]))}</dcsset:itemsViewMode>')
|
||||
|
||||
lines.append(f'{indent}</dcsset:item>')
|
||||
|
||||
elif item_type == 'nestedObject':
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# skd-decompile v0.78 — Decompile 1C DCS Template.xml to JSON DSL (draft)
|
||||
# skd-decompile v0.79 — Decompile 1C DCS Template.xml to JSON DSL (draft)
|
||||
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
|
||||
param(
|
||||
[Parameter(Mandatory)]
|
||||
@@ -2212,7 +2212,10 @@ function Build-Structure {
|
||||
$tCa = Build-ConditionalAppearance -caNode $tCaN -loc "$loc/$idx/ca"
|
||||
if ($tCa.Count -gt 0) { $entry['conditionalAppearance'] = $tCa }
|
||||
}
|
||||
# viewMode / userSettingID / userSettingPresentation на самой таблице (direct child)
|
||||
# use=false на самой таблице — отключённая ветка
|
||||
$tUse = Get-Text $it "dcsset:use"
|
||||
if ($tUse -eq 'false') { $entry['use'] = $false }
|
||||
# viewMode / userSettingID / userSettingPresentation / itemsViewMode / rowsViewMode / columnsViewMode на самой таблице
|
||||
foreach ($ch in $it.ChildNodes) {
|
||||
if ($ch.NodeType -ne 'Element' -or $ch.NamespaceURI -ne 'http://v8.1c.ru/8.1/data-composition-system/settings') { continue }
|
||||
if ($ch.LocalName -eq 'viewMode' -and -not $entry.Contains('viewMode')) { $entry['viewMode'] = $ch.InnerText }
|
||||
@@ -2222,6 +2225,8 @@ function Build-Structure {
|
||||
if ($uspV) { $entry['userSettingPresentation'] = $uspV }
|
||||
}
|
||||
elseif ($ch.LocalName -eq 'itemsViewMode' -and -not $entry.Contains('itemsViewMode')) { $entry['itemsViewMode'] = $ch.InnerText }
|
||||
elseif ($ch.LocalName -eq 'columnsViewMode' -and -not $entry.Contains('columnsViewMode')) { $entry['columnsViewMode'] = $ch.InnerText }
|
||||
elseif ($ch.LocalName -eq 'rowsViewMode' -and -not $entry.Contains('rowsViewMode')) { $entry['rowsViewMode'] = $ch.InnerText }
|
||||
}
|
||||
$items += $entry
|
||||
$idx++
|
||||
@@ -2293,6 +2298,22 @@ function Build-Structure {
|
||||
$opN = $it.SelectSingleNode("dcsset:outputParameters", $ns)
|
||||
$op = Build-OutputParameters -opNode $opN
|
||||
if ($op -and $op.Count -gt 0) { $entry['outputParameters'] = $op }
|
||||
# use=false на самой диаграмме — отключённая ветка
|
||||
$chUse = Get-Text $it "dcsset:use"
|
||||
if ($chUse -eq 'false') { $entry['use'] = $false }
|
||||
# viewMode / userSettingID / userSettingPresentation / itemsViewMode / pointsViewMode / seriesViewMode на chart
|
||||
foreach ($ch in $it.ChildNodes) {
|
||||
if ($ch.NodeType -ne 'Element' -or $ch.NamespaceURI -ne 'http://v8.1c.ru/8.1/data-composition-system/settings') { continue }
|
||||
if ($ch.LocalName -eq 'viewMode' -and -not $entry.Contains('viewMode')) { $entry['viewMode'] = $ch.InnerText }
|
||||
elseif ($ch.LocalName -eq 'userSettingID' -and -not $entry.Contains('userSettingID')) { $entry['userSettingID'] = 'auto' }
|
||||
elseif ($ch.LocalName -eq 'userSettingPresentation' -and -not $entry.Contains('userSettingPresentation')) {
|
||||
$uspV = Get-MLText $ch
|
||||
if ($uspV) { $entry['userSettingPresentation'] = $uspV }
|
||||
}
|
||||
elseif ($ch.LocalName -eq 'itemsViewMode' -and -not $entry.Contains('itemsViewMode')) { $entry['itemsViewMode'] = $ch.InnerText }
|
||||
elseif ($ch.LocalName -eq 'pointsViewMode' -and -not $entry.Contains('pointsViewMode')) { $entry['pointsViewMode'] = $ch.InnerText }
|
||||
elseif ($ch.LocalName -eq 'seriesViewMode' -and -not $entry.Contains('seriesViewMode')) { $entry['seriesViewMode'] = $ch.InnerText }
|
||||
}
|
||||
$items += $entry
|
||||
$idx++
|
||||
continue
|
||||
|
||||
@@ -929,7 +929,8 @@ Platform-pattern: `startDate`/`endDate`/`date` эмитятся ТОЛЬКО д
|
||||
|
||||
Каждая `column`/`row` принимает те же поля что и `group`: `name`, `groupBy`/`groupFields`, `filter`, `order`, `selection`, `outputParameters`, `conditionalAppearance`, `children` (вложенные `StructureItemGroup`), плюс user-settings — `viewMode`, `userSettingID`, `userSettingPresentation`, `itemsViewMode` (регистрация column/row как пункта «Изменить вариант»).
|
||||
|
||||
На самой `table` (отдельно от column/row) также допустимы `selection`, `conditionalAppearance`, `outputParameters`, плюс user-settings: `viewMode`, `userSettingID`, `userSettingPresentation`, `itemsViewMode` — общие настройки таблицы (заголовок, выводимые поля, форматирование).
|
||||
На самой `table` (отдельно от column/row) также допустимы `selection`, `conditionalAppearance`, `outputParameters`, плюс user-settings: `viewMode`, `userSettingID`, `userSettingPresentation`, `itemsViewMode`, `columnsViewMode`, `rowsViewMode`, `use` (`false` = таблица отключена).
|
||||
- `columnsViewMode` / `rowsViewMode` — режим доступности секции колонок / строк в пользовательских настройках (значения: `Normal` / `QuickAccess` / `Inaccessible`).
|
||||
|
||||
> **Внутренний паттерн**: `<dcsset:item xsi:type="dcsset:StructureItemGroup">` внутри `<dcsset:row>`/`<dcsset:column>`/`<dcsset:points>`/`<dcsset:series>` платформа всегда сериализует в **короткой форме** `<dcsset:item>` без `xsi:type`. Compile эмитит этот вариант автоматически для `children` table axis.
|
||||
|
||||
@@ -946,6 +947,8 @@ Platform-pattern: `startDate`/`endDate`/`date` эмитятся ТОЛЬКО д
|
||||
|
||||
`points` и `series` принимают те же поля что table column/row (включая `name` и user-settings).
|
||||
|
||||
На самой chart-item: `viewMode`, `userSettingID`, `userSettingPresentation`, `itemsViewMode`, `pointsViewMode`, `seriesViewMode`, `use: false` (диаграмма отключена). `pointsViewMode`/`seriesViewMode` — аналоги `columnsViewMode`/`rowsViewMode` у таблицы.
|
||||
|
||||
**Multi-series / multi-points** — `points` и `series` могут быть массивом объектов, тогда генерируется несколько `<dcsset:point>` или `<dcsset:series>` подряд (каждый со своими `groupBy`, `filter`, user-settings). Используется например для разделения данных диаграммы на несколько серий по разным фильтрам:
|
||||
|
||||
```json
|
||||
|
||||
Reference in New Issue
Block a user