From 8b71054478ec750457203e9d9915e7390f008602 Mon Sep 17 00:00:00 2001 From: Nick Shirokov Date: Thu, 21 May 2026 21:04:21 +0300 Subject: [PATCH] =?UTF-8?q?feat(skd-decompile):=20query=20file=20=D0=BF?= =?UTF-8?q?=D1=80=D0=B5=D1=84=D0=B8=D0=BA=D1=81=20+=20inline=20=D0=BE?= =?UTF-8?q?=D0=B1=D1=8A=D0=B5=D0=BA=D1=82=D1=8B/=D0=BC=D0=B0=D1=81=D1=81?= =?UTF-8?q?=D0=B8=D0=B2=D1=8B=20=D0=BF=D0=BE=20lineLimit?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 1. Внешний .sql теперь именуется -.sql (раньше просто .sql). Защищает от коллизий при batch-decompile нескольких отчётов в одну папку: имена dataset'ов часто совпадают ("НаборДанных1" — почти везде). В JSON: "query": "@-.sql". 2. ConvertTo-CompactJson: Try-InlineJson — пытается сериализовать container на одну строку. Если результат + текущий indent ≤120 chars → inline; иначе multi-line. Применяется и к объектам и к массивам (включая массивы из примитивов — раньше они всегда были inline, что давало гигантские строки на длинных fields). Примеры inline (объекты ≤120 chars): - { "value": "B", "style": "header" } - { "name": "Имя", "expression": "Имя" } Длинные объекты и массивы — multi-line как раньше. v0.19 → v0.20. --- .../skd-decompile/scripts/skd-decompile.ps1 | 98 ++++++++++++++----- .../decompiled.json | 25 +---- .../calc-total-params/decompiled.json | 16 ++- .../decompiled.json | 15 +-- ...оПериодам.sql => decompiled-ПродажиПоПериодам.sql} | 0 .../dataset-query-multiline/decompiled.json | 2 +- .../snapshots/dataset-types/decompiled.json | 18 +--- .../field-input-parameters/decompiled.json | 28 ++---- .../field-order-expression/decompiled.json | 6 +- .../field-roles-rich/decompiled.json | 7 +- .../decompiled.json | 19 +--- .../decompiled.json | 48 +++------ .../template-custom-style/decompiled.json | 18 +--- .../decompiled.json | 25 +---- .../template-no-style/decompiled.json | 19 +--- .../decompiled.json | 31 ++---- .../snapshots/variant-full/decompiled.json | 50 +++------- 17 files changed, 143 insertions(+), 282 deletions(-) rename tests/skills/cases/skd-decompile/snapshots/dataset-query-multiline/{ПродажиПоПериодам.sql => decompiled-ПродажиПоПериодам.sql} (100%) diff --git a/.claude/skills/skd-decompile/scripts/skd-decompile.ps1 b/.claude/skills/skd-decompile/scripts/skd-decompile.ps1 index 5bccd8fe..a6d36891 100644 --- a/.claude/skills/skd-decompile/scripts/skd-decompile.ps1 +++ b/.claude/skills/skd-decompile/scripts/skd-decompile.ps1 @@ -1,4 +1,4 @@ -# skd-decompile v0.19 — Decompile 1C DCS Template.xml to JSON DSL (draft) +# skd-decompile v0.20 — Decompile 1C DCS Template.xml to JSON DSL (draft) # Source: https://github.com/Nikolay-Shirokov/cc-1c-skills param( [Parameter(Mandatory)] @@ -133,8 +133,54 @@ function Convert-StringToJsonLiteral { return $sb.ToString() } +# Попробовать сериализовать значение полностью inline (одна строка). +# Возвращает строку либо $null, если содержимое не помещается. +function Try-InlineJson { + param($obj) + if ($null -eq $obj) { return 'null' } + if ($obj -is [bool]) { if ($obj) { return 'true' } else { return 'false' } } + if ($obj -is [string]) { return (Convert-StringToJsonLiteral $obj) } + if ($obj -is [int] -or $obj -is [long]) { return "$obj" } + if ($obj -is [double] -or $obj -is [single] -or $obj -is [decimal]) { + return ([System.Convert]::ToString($obj, [System.Globalization.CultureInfo]::InvariantCulture)) + } + if ($obj -is [System.Collections.IDictionary]) { + if ($obj.Count -eq 0) { return '{}' } + $parts = @() + foreach ($k in $obj.Keys) { + $v = Try-InlineJson $obj[$k] + if ($null -eq $v) { return $null } + $parts += "$(Convert-StringToJsonLiteral "$k"): $v" + } + return '{ ' + ($parts -join ', ') + ' }' + } + if ($obj -is [System.Management.Automation.PSCustomObject]) { + $props = @($obj.PSObject.Properties) + if ($props.Count -eq 0) { return '{}' } + $parts = @() + foreach ($p in $props) { + $v = Try-InlineJson $p.Value + if ($null -eq $v) { return $null } + $parts += "$(Convert-StringToJsonLiteral "$($p.Name)"): $v" + } + return '{ ' + ($parts -join ', ') + ' }' + } + if ($obj -is [array] -or $obj -is [System.Collections.IList]) { + $items = @($obj) + if ($items.Count -eq 0) { return '[]' } + $parts = @() + foreach ($it in $items) { + $v = Try-InlineJson $it + if ($null -eq $v) { return $null } + $parts += $v + } + return '[' + ($parts -join ', ') + ']' + } + return $null +} + function ConvertTo-CompactJson { - param($obj, [int]$depth = 0, [string]$indentUnit = ' ') + param($obj, [int]$depth = 0, [string]$indentUnit = ' ', [int]$lineLimit = 120) $indent = $indentUnit * $depth $childIndent = $indentUnit * ($depth + 1) @@ -143,16 +189,25 @@ function ConvertTo-CompactJson { if ($obj -is [string]) { return (Convert-StringToJsonLiteral $obj) } if ($obj -is [int] -or $obj -is [long]) { return "$obj" } if ($obj -is [double] -or $obj -is [single] -or $obj -is [decimal]) { - # .NET ToString с invariant culture, чтобы не было запятой return ([System.Convert]::ToString($obj, [System.Globalization.CultureInfo]::InvariantCulture)) } - # Hashtable / OrderedDictionary / PSCustomObject — объект + + # Try inline для объектов и массивов с объектами — если помещается в lineLimit с учётом текущего indent. + $isContainer = ($obj -is [System.Collections.IDictionary]) -or ($obj -is [System.Management.Automation.PSCustomObject]) -or ($obj -is [array]) -or ($obj -is [System.Collections.IList]) + if ($isContainer) { + $inlineAttempt = Try-InlineJson $obj + if ($null -ne $inlineAttempt -and ($indent.Length + $inlineAttempt.Length) -le $lineLimit) { + return $inlineAttempt + } + } + + # Hashtable / OrderedDictionary — объект multi-line if ($obj -is [System.Collections.IDictionary]) { $keys = @($obj.Keys) if ($keys.Count -eq 0) { return '{}' } $parts = @() foreach ($k in $keys) { - $val = ConvertTo-CompactJson -obj $obj[$k] -depth ($depth + 1) -indentUnit $indentUnit + $val = ConvertTo-CompactJson -obj $obj[$k] -depth ($depth + 1) -indentUnit $indentUnit -lineLimit $lineLimit $parts += "$childIndent$(Convert-StringToJsonLiteral "$k"): $val" } return "{`n" + ($parts -join ",`n") + "`n$indent}" @@ -162,27 +217,16 @@ function ConvertTo-CompactJson { if ($props.Count -eq 0) { return '{}' } $parts = @() foreach ($p in $props) { - $val = ConvertTo-CompactJson -obj $p.Value -depth ($depth + 1) -indentUnit $indentUnit + $val = ConvertTo-CompactJson -obj $p.Value -depth ($depth + 1) -indentUnit $indentUnit -lineLimit $lineLimit $parts += "$childIndent$(Convert-StringToJsonLiteral "$($p.Name)"): $val" } return "{`n" + ($parts -join ",`n") + "`n$indent}" } - # Array / IList + # Array / IList multi-line if ($obj -is [array] -or $obj -is [System.Collections.IList]) { $items = @($obj) if ($items.Count -eq 0) { return '[]' } - $allPrimitive = $true - foreach ($it in $items) { - if ($it -is [System.Collections.IDictionary] -or $it -is [System.Management.Automation.PSCustomObject] -or $it -is [array] -or $it -is [System.Collections.IList]) { - $allPrimitive = $false - break - } - } - if ($allPrimitive) { - $parts = @($items | ForEach-Object { ConvertTo-CompactJson -obj $_ -depth $depth -indentUnit $indentUnit }) - return '[' + ($parts -join ', ') + ']' - } - $parts = @($items | ForEach-Object { "$childIndent$(ConvertTo-CompactJson -obj $_ -depth ($depth + 1) -indentUnit $indentUnit)" }) + $parts = @($items | ForEach-Object { "$childIndent$(ConvertTo-CompactJson -obj $_ -depth ($depth + 1) -indentUnit $indentUnit -lineLimit $lineLimit)" }) return "[`n" + ($parts -join ",`n") + "`n$indent]" } # Fallback @@ -784,7 +828,8 @@ $script:existingUserPresetsRaw = $null $script:queryFilesAccumulator = @() $script:queryFileNamesUsed = @{} -# Если запрос ≥3 строк и есть outputPath — вынести в отдельный .sql и вернуть "@.sql". +# Если запрос ≥3 строк и есть outputPath — вынести в отдельный +# `-.sql` (префикс защищает от коллизий имён при batch-decompile). # Иначе — оставить inline. function Maybe-ExternalizeQuery { param([string]$queryText, [string]$datasetName) @@ -793,14 +838,15 @@ function Maybe-ExternalizeQuery { # Считаем строки — \r\n или \n $lineCount = ([regex]::Matches($queryText, "`n")).Count + 1 if ($lineCount -lt 3) { return $queryText } - # Уникализация имени файла - $safeName = ($datasetName -replace '[^\w\-]', '_') - if (-not $safeName) { $safeName = 'query' } - $fileName = "$safeName.sql" + # Уникализация имени файла: prefix = basename outputPath (без расширения) + $safeDs = ($datasetName -replace '[^\w\-]', '_') + if (-not $safeDs) { $safeDs = 'query' } + $prefix = if ($script:outputBasename) { "$($script:outputBasename)-" } else { '' } + $fileName = "$prefix$safeDs.sql" $suffix = 1 while ($script:queryFileNamesUsed.ContainsKey($fileName)) { $suffix++ - $fileName = "$safeName`_$suffix.sql" + $fileName = "$prefix$safeDs`_$suffix.sql" } $script:queryFileNamesUsed[$fileName] = $true $script:queryFilesAccumulator += [ordered]@{ fileName = $fileName; text = $queryText } @@ -1682,11 +1728,13 @@ function Try-StructureShorthand { # Резолв outputPath и загрузка user-стилей до обработки шаблонов $script:outputDir = $null +$script:outputBasename = $null if ($OutputPath) { if (-not [System.IO.Path]::IsPathRooted($OutputPath)) { $OutputPath = Join-Path (Get-Location).Path $OutputPath } $script:outputDir = [System.IO.Path]::GetDirectoryName($OutputPath) + $script:outputBasename = [System.IO.Path]::GetFileNameWithoutExtension($OutputPath) Load-UserStyles -dirPath $script:outputDir } diff --git a/tests/skills/cases/skd-decompile/snapshots/appearance-multilang-value/decompiled.json b/tests/skills/cases/skd-decompile/snapshots/appearance-multilang-value/decompiled.json index 6b45c264..42b4ed26 100644 --- a/tests/skills/cases/skd-decompile/snapshots/appearance-multilang-value/decompiled.json +++ b/tests/skills/cases/skd-decompile/snapshots/appearance-multilang-value/decompiled.json @@ -3,35 +3,14 @@ { "name": "Тест", "query": "ВЫБРАТЬ * ИЗ Справочник.Сотрудники", - "fields": [ - { - "field": "ДатаДокумента", - "type": "date", - "appearance": { - "Формат": { - "ru": "ДЛФ=D", - "en": "DLF=D" - } - } - } - ] + "fields": [{ "field": "ДатаДокумента", "type": "date", "appearance": { "Формат": { "ru": "ДЛФ=D", "en": "DLF=D" } } }] } ], "settingsVariants": [ { "name": "Основной", "settings": { - "conditionalAppearance": [ - { - "selection": ["ДатаДокумента"], - "appearance": { - "Формат": { - "ru": "ДЛФ=DT", - "en": "DLF=DT" - } - } - } - ] + "conditionalAppearance": [{ "selection": ["ДатаДокумента"], "appearance": { "Формат": { "ru": "ДЛФ=DT", "en": "DLF=DT" } } }] } } ] diff --git a/tests/skills/cases/skd-decompile/snapshots/calc-total-params/decompiled.json b/tests/skills/cases/skd-decompile/snapshots/calc-total-params/decompiled.json index 346721a2..3e4b7e24 100644 --- a/tests/skills/cases/skd-decompile/snapshots/calc-total-params/decompiled.json +++ b/tests/skills/cases/skd-decompile/snapshots/calc-total-params/decompiled.json @@ -6,7 +6,11 @@ "fields": ["Цена: decimal(15,2)", "Закупка: decimal(15,2)"] } ], - "calculatedFields": ["Маржа = Цена - Закупка", "Наценка [Наценка, %]: decimal(10,2) = Маржа / Закупка * 100", "Служебное: string = \"\" #noField #noFilter #noGroup #noOrder"], + "calculatedFields": [ + "Маржа = Цена - Закупка", + "Наценка [Наценка, %]: decimal(10,2) = Маржа / Закупка * 100", + "Служебное: string = \"\" #noField #noFilter #noGroup #noOrder" + ], "totalFields": ["Цена: Сумма", "Маржа: Сумма(Цена - Закупка)"], "parameters": [ "Период [Отчетный период]: StandardPeriod = LastMonth @autoDates", @@ -18,14 +22,8 @@ "type": "EnumRef.Округления", "value": "Перечисление.Округления.Окр1", "availableValues": [ - { - "value": "Перечисление.Округления.Окр1_00", - "presentation": "руб. коп" - }, - { - "value": "Перечисление.Округления.Окр1", - "presentation": "руб." - } + { "value": "Перечисление.Округления.Окр1_00", "presentation": "руб. коп" }, + { "value": "Перечисление.Округления.Окр1", "presentation": "руб." } ] } ] diff --git a/tests/skills/cases/skd-decompile/snapshots/dataset-folder-and-auto-group/decompiled.json b/tests/skills/cases/skd-decompile/snapshots/dataset-folder-and-auto-group/decompiled.json index fccb53af..34148e8d 100644 --- a/tests/skills/cases/skd-decompile/snapshots/dataset-folder-and-auto-group/decompiled.json +++ b/tests/skills/cases/skd-decompile/snapshots/dataset-folder-and-auto-group/decompiled.json @@ -5,22 +5,11 @@ "query": "ВЫБРАТЬ * ИЗ Справочник.Сотрудники", "fields": [ "Период: date", - { - "field": "СальдоНаНачалоПериода", - "folder": true, - "title": "Сальдо на начало периода" - }, + { "field": "СальдоНаНачалоПериода", "folder": true, "title": "Сальдо на начало периода" }, "СальдоНаНачалоПериода.Дт: decimal(15,2)", "СальдоНаНачалоПериода.Кт: decimal(15,2)" ] } ], - "settingsVariants": [ - { - "name": "Основной", - "settings": { - "structure": "Auto > Период" - } - } - ] + "settingsVariants": [{ "name": "Основной", "settings": { "structure": "Auto > Период" } }] } \ No newline at end of file diff --git a/tests/skills/cases/skd-decompile/snapshots/dataset-query-multiline/ПродажиПоПериодам.sql b/tests/skills/cases/skd-decompile/snapshots/dataset-query-multiline/decompiled-ПродажиПоПериодам.sql similarity index 100% rename from tests/skills/cases/skd-decompile/snapshots/dataset-query-multiline/ПродажиПоПериодам.sql rename to tests/skills/cases/skd-decompile/snapshots/dataset-query-multiline/decompiled-ПродажиПоПериодам.sql diff --git a/tests/skills/cases/skd-decompile/snapshots/dataset-query-multiline/decompiled.json b/tests/skills/cases/skd-decompile/snapshots/dataset-query-multiline/decompiled.json index f53710a5..ff72cdae 100644 --- a/tests/skills/cases/skd-decompile/snapshots/dataset-query-multiline/decompiled.json +++ b/tests/skills/cases/skd-decompile/snapshots/dataset-query-multiline/decompiled.json @@ -2,7 +2,7 @@ "dataSets": [ { "name": "ПродажиПоПериодам", - "query": "@ПродажиПоПериодам.sql", + "query": "@decompiled-ПродажиПоПериодам.sql", "fields": ["Номенклатура: CatalogRef.Номенклатура @dimension", "Количество: decimal(15,3)", "Сумма: decimal(15,2)"] } ] diff --git a/tests/skills/cases/skd-decompile/snapshots/dataset-types/decompiled.json b/tests/skills/cases/skd-decompile/snapshots/dataset-types/decompiled.json index f3e77c97..9ad52310 100644 --- a/tests/skills/cases/skd-decompile/snapshots/dataset-types/decompiled.json +++ b/tests/skills/cases/skd-decompile/snapshots/dataset-types/decompiled.json @@ -5,24 +5,12 @@ "query": "ВЫБРАТЬ Номенклатура.Наименование КАК Имя ИЗ Справочник.Номенклатура КАК Номенклатура", "fields": ["Имя: string"] }, - { - "name": "Журнал", - "objectName": "ЖурналОшибок", - "fields": ["Сообщение: string(150)", "Уровень: string"] - }, + { "name": "Журнал", "objectName": "ЖурналОшибок", "fields": ["Сообщение: string(150)", "Уровень: string"] }, { "name": "Объединение", "items": [ - { - "name": "Часть1", - "query": "ВЫБРАТЬ 1 КАК Поле", - "fields": ["Поле: decimal(10,2)"] - }, - { - "name": "Часть2", - "query": "ВЫБРАТЬ 2 КАК Поле", - "fields": ["Поле: decimal(10,2)"] - } + { "name": "Часть1", "query": "ВЫБРАТЬ 1 КАК Поле", "fields": ["Поле: decimal(10,2)"] }, + { "name": "Часть2", "query": "ВЫБРАТЬ 2 КАК Поле", "fields": ["Поле: decimal(10,2)"] } ] } ] diff --git a/tests/skills/cases/skd-decompile/snapshots/field-input-parameters/decompiled.json b/tests/skills/cases/skd-decompile/snapshots/field-input-parameters/decompiled.json index d5f1d427..4c8760d6 100644 --- a/tests/skills/cases/skd-decompile/snapshots/field-input-parameters/decompiled.json +++ b/tests/skills/cases/skd-decompile/snapshots/field-input-parameters/decompiled.json @@ -13,7 +13,10 @@ "choiceParameters": [ { "name": "Отбор.СпособФормирования", - "values": ["Перечисление.СпособыФормированияСегментов.ФормироватьВручную", "Перечисление.СпособыФормированияСегментов.ПериодическиОбновлять"] + "values": [ + "Перечисление.СпособыФормированияСегментов.ФормироватьВручную", + "Перечисление.СпособыФормированияСегментов.ПериодическиОбновлять" + ] } ] } @@ -26,16 +29,8 @@ { "parameter": "СвязиПараметровВыбора", "choiceParameterLinks": [ - { - "name": "Отбор.ТекущаяОрганизация", - "value": "Организация", - "mode": "Clear" - }, - { - "name": "Отбор.ТекущееПодразделение", - "value": "Подразделение", - "mode": "Clear" - } + { "name": "Отбор.ТекущаяОрганизация", "value": "Организация", "mode": "Clear" }, + { "name": "Отбор.ТекущееПодразделение", "value": "Подразделение", "mode": "Clear" } ] } ] @@ -44,15 +39,8 @@ "field": "ПростоЕА", "type": "CatalogRef.Сотрудники", "inputParameters": [ - { - "parameter": "ПараметрыВыбора", - "choiceParameters": [] - }, - { - "parameter": "БыстрыйВыбор", - "use": false, - "value": true - } + { "parameter": "ПараметрыВыбора", "choiceParameters": [] }, + { "parameter": "БыстрыйВыбор", "use": false, "value": true } ] } ] diff --git a/tests/skills/cases/skd-decompile/snapshots/field-order-expression/decompiled.json b/tests/skills/cases/skd-decompile/snapshots/field-order-expression/decompiled.json index 15c6793e..452b060f 100644 --- a/tests/skills/cases/skd-decompile/snapshots/field-order-expression/decompiled.json +++ b/tests/skills/cases/skd-decompile/snapshots/field-order-expression/decompiled.json @@ -7,11 +7,7 @@ { "field": "ВидРасчета", "type": "CatalogRef.ВидыРасчета", - "orderExpression": { - "expression": "ЕстьNULL(ВидРасчета.Порядок, 10000)", - "orderType": "Asc", - "autoOrder": false - } + "orderExpression": { "expression": "ЕстьNULL(ВидРасчета.Порядок, 10000)", "orderType": "Asc", "autoOrder": false } } ] } diff --git a/tests/skills/cases/skd-decompile/snapshots/field-roles-rich/decompiled.json b/tests/skills/cases/skd-decompile/snapshots/field-roles-rich/decompiled.json index f5ec3470..5349de3e 100644 --- a/tests/skills/cases/skd-decompile/snapshots/field-roles-rich/decompiled.json +++ b/tests/skills/cases/skd-decompile/snapshots/field-roles-rich/decompiled.json @@ -3,7 +3,12 @@ { "name": "Тест", "query": "ВЫБРАТЬ * ИЗ РегистрНакопления.Остатки", - "fields": ["Период: date @period", "Контрагент: CatalogRef.Контрагенты @dimension @required", "СуммаНач: decimal(15,2) @balance balanceGroupName=Сумма balanceType=OpeningBalance", "СуммаКон: decimal(15,2) @balance balanceGroupName=Сумма balanceType=ClosingBalance"] + "fields": [ + "Период: date @period", + "Контрагент: CatalogRef.Контрагенты @dimension @required", + "СуммаНач: decimal(15,2) @balance balanceGroupName=Сумма balanceType=OpeningBalance", + "СуммаКон: decimal(15,2) @balance balanceGroupName=Сумма balanceType=ClosingBalance" + ] } ] } \ No newline at end of file diff --git a/tests/skills/cases/skd-decompile/snapshots/fields-types-and-restrictions/decompiled.json b/tests/skills/cases/skd-decompile/snapshots/fields-types-and-restrictions/decompiled.json index 5765a182..10b7613e 100644 --- a/tests/skills/cases/skd-decompile/snapshots/fields-types-and-restrictions/decompiled.json +++ b/tests/skills/cases/skd-decompile/snapshots/fields-types-and-restrictions/decompiled.json @@ -15,23 +15,10 @@ "field": "СПояснением", "title": "Поле с пояснением", "type": "decimal(15,2)", - "appearance": { - "ГоризонтальноеПоложение": "Right", - "МинимальнаяШирина": "80" - } - }, - { - "field": "Многоязычное", - "title": { - "ru": "Русский", - "en": "English" - }, - "type": "string" - }, - { - "field": "СоставноеПоле", - "type": ["CatalogRef.Организации", "CatalogRef.Валюты"] + "appearance": { "ГоризонтальноеПоложение": "Right", "МинимальнаяШирина": "80" } }, + { "field": "Многоязычное", "title": { "ru": "Русский", "en": "English" }, "type": "string" }, + { "field": "СоставноеПоле", "type": ["CatalogRef.Организации", "CatalogRef.Валюты"] }, { "field": "СВыражениемПредставления", "type": "CatalogRef.Номенклатура", diff --git a/tests/skills/cases/skd-decompile/snapshots/structure-nested-and-folder/decompiled.json b/tests/skills/cases/skd-decompile/snapshots/structure-nested-and-folder/decompiled.json index 94dc0fec..933f35cc 100644 --- a/tests/skills/cases/skd-decompile/snapshots/structure-nested-and-folder/decompiled.json +++ b/tests/skills/cases/skd-decompile/snapshots/structure-nested-and-folder/decompiled.json @@ -2,17 +2,13 @@ "dataSets": [ { "name": "DSОбъединение", - "items": [ - { - "name": "Часть1", - "objectName": "ДанныеЧасть1" - }, - { - "name": "Часть2", - "objectName": "ДанныеЧасть2" - } - ], - "fields": ["Период: date", "ВидРасчета: CatalogRef.ВидыРасчета", "Сумма: decimal(15,2)", "Подразделение: CatalogRef.Подразделения"] + "items": [{ "name": "Часть1", "objectName": "ДанныеЧасть1" }, { "name": "Часть2", "objectName": "ДанныеЧасть2" }], + "fields": [ + "Период: date", + "ВидРасчета: CatalogRef.ВидыРасчета", + "Сумма: decimal(15,2)", + "Подразделение: CatalogRef.Подразделения" + ] } ], "settingsVariants": [ @@ -21,45 +17,25 @@ "settings": { "selection": [ "Период", - { - "field": "Сумма", - "title": "Итого" - }, + { "field": "Сумма", "title": "Итого" }, { "folder": "Группа итогов", "items": [ "ВидРасчета", - { - "field": "Сумма", - "title": "Сумма с расшифровкой" - }, - { - "folder": "Подгруппа", - "items": ["Подразделение"] - } + { "field": "Сумма", "title": "Сумма с расшифровкой" }, + { "folder": "Подгруппа", "items": ["Подразделение"] } ] } ], "structure": [ { "name": "Группа1", - "groupFields": [ - { - "field": "Период", - "periodAdditionType": "Day" - }, - { - "field": "Подразделение", - "groupType": "Hierarchy" - } - ], + "groupFields": [{ "field": "Период", "periodAdditionType": "Day" }, { "field": "Подразделение", "groupType": "Hierarchy" }], "children": [ { "type": "nestedObject", "objectID": "ДанныеЧасть1", - "settings": { - "selection": ["ВидРасчета", "Сумма"] - } + "settings": { "selection": ["ВидРасчета", "Сумма"] } } ] } diff --git a/tests/skills/cases/skd-decompile/snapshots/template-custom-style/decompiled.json b/tests/skills/cases/skd-decompile/snapshots/template-custom-style/decompiled.json index add46c36..589188a0 100644 --- a/tests/skills/cases/skd-decompile/snapshots/template-custom-style/decompiled.json +++ b/tests/skills/cases/skd-decompile/snapshots/template-custom-style/decompiled.json @@ -1,18 +1,4 @@ { - "dataSets": [ - { - "name": "Тест", - "query": "ВЫБРАТЬ * ИЗ Справочник.Сотрудники", - "fields": ["Поле: string"] - } - ], - "templates": [ - { - "name": "Заголовок", - "style": "myHeader", - "rows": [ - ["A"] - ] - } - ] + "dataSets": [{ "name": "Тест", "query": "ВЫБРАТЬ * ИЗ Справочник.Сотрудники", "fields": ["Поле: string"] }], + "templates": [{ "name": "Заголовок", "style": "myHeader", "rows": [["A"]] }] } \ No newline at end of file diff --git a/tests/skills/cases/skd-decompile/snapshots/template-inline-cell-style/decompiled.json b/tests/skills/cases/skd-decompile/snapshots/template-inline-cell-style/decompiled.json index a2452b29..4ab09c81 100644 --- a/tests/skills/cases/skd-decompile/snapshots/template-inline-cell-style/decompiled.json +++ b/tests/skills/cases/skd-decompile/snapshots/template-inline-cell-style/decompiled.json @@ -1,25 +1,4 @@ { - "dataSets": [ - { - "name": "Тест", - "query": "ВЫБРАТЬ * ИЗ Справочник.Сотрудники", - "fields": ["Поле: string"] - } - ], - "templates": [ - { - "name": "СмешанныйМакет", - "style": "data", - "rows": [ - [ - "A", - { - "value": "B", - "style": "header" - }, - "C" - ] - ] - } - ] + "dataSets": [{ "name": "Тест", "query": "ВЫБРАТЬ * ИЗ Справочник.Сотрудники", "fields": ["Поле: string"] }], + "templates": [{ "name": "СмешанныйМакет", "style": "data", "rows": [["A", { "value": "B", "style": "header" }, "C"]] }] } \ No newline at end of file diff --git a/tests/skills/cases/skd-decompile/snapshots/template-no-style/decompiled.json b/tests/skills/cases/skd-decompile/snapshots/template-no-style/decompiled.json index ed4aa316..36330eb9 100644 --- a/tests/skills/cases/skd-decompile/snapshots/template-no-style/decompiled.json +++ b/tests/skills/cases/skd-decompile/snapshots/template-no-style/decompiled.json @@ -1,19 +1,4 @@ { - "dataSets": [ - { - "name": "Тест", - "query": "ВЫБРАТЬ * ИЗ Справочник.Сотрудники", - "fields": ["Поле1: string", "Поле2: string"] - } - ], - "templates": [ - { - "name": "БезСтиля", - "style": "none", - "widths": ["7", "7"], - "rows": [ - ["A", "B"] - ] - } - ] + "dataSets": [{ "name": "Тест", "query": "ВЫБРАТЬ * ИЗ Справочник.Сотрудники", "fields": ["Поле1: string", "Поле2: string"] }], + "templates": [{ "name": "БезСтиля", "style": "none", "widths": ["7", "7"], "rows": [["A", "B"]] }] } \ No newline at end of file diff --git a/tests/skills/cases/skd-decompile/snapshots/templates-with-style-merge-drilldown/decompiled.json b/tests/skills/cases/skd-decompile/snapshots/templates-with-style-merge-drilldown/decompiled.json index d6757eb6..7870e568 100644 --- a/tests/skills/cases/skd-decompile/snapshots/templates-with-style-merge-drilldown/decompiled.json +++ b/tests/skills/cases/skd-decompile/snapshots/templates-with-style-merge-drilldown/decompiled.json @@ -11,37 +11,18 @@ "name": "Шапка", "style": "header", "widths": ["20", "30", "25", "25"], - "rows": [ - ["Имя", "Сумма", "Поступление", ">"], - ["|", "|", "из произв.", "со сч.40"], - ["К1", "К2", "К3", "К4"] - ] + "rows": [["Имя", "Сумма", "Поступление", ">"], ["|", "|", "из произв.", "со сч.40"], ["К1", "К2", "К3", "К4"]] }, { "name": "Данные", "style": "data", "widths": ["20", "30", "25", "25"], - "rows": [ - ["{Имя}", "{Сумма}", "{Поступление}", "{СчетПрочее}"] - ], + "rows": [["{Имя}", "{Сумма}", "{Поступление}", "{СчетПрочее}"]], "parameters": [ - { - "name": "Имя", - "expression": "Имя" - }, - { - "name": "Сумма", - "expression": "Сумма" - }, - { - "name": "Поступление", - "expression": "СуммаПоступления", - "drilldown": "СуммаПоступления" - }, - { - "name": "СчетПрочее", - "expression": "СчетПрочее" - } + { "name": "Имя", "expression": "Имя" }, + { "name": "Сумма", "expression": "Сумма" }, + { "name": "Поступление", "expression": "СуммаПоступления", "drilldown": "СуммаПоступления" }, + { "name": "СчетПрочее", "expression": "СчетПрочее" } ] } ] diff --git a/tests/skills/cases/skd-decompile/snapshots/variant-full/decompiled.json b/tests/skills/cases/skd-decompile/snapshots/variant-full/decompiled.json index 2617efe6..c4311abe 100644 --- a/tests/skills/cases/skd-decompile/snapshots/variant-full/decompiled.json +++ b/tests/skills/cases/skd-decompile/snapshots/variant-full/decompiled.json @@ -3,60 +3,36 @@ { "name": "Тест", "query": "ВЫБРАТЬ * ИЗ Справочник.Номенклатура", - "fields": ["Организация: CatalogRef.Организации @dimension", "Номенклатура: CatalogRef.Номенклатура @dimension", "Сумма: decimal(15,2)", "Количество: decimal(15,3)", "Статус: string"] - } - ], - "parameters": ["Период: StandardPeriod = LastMonth @autoDates", "Активные: boolean = true"], - "templates": [ - { - "name": "Шапка", - "style": "header", - "rows": [ - ["Орг", "Сум"] + "fields": [ + "Организация: CatalogRef.Организации @dimension", + "Номенклатура: CatalogRef.Номенклатура @dimension", + "Сумма: decimal(15,2)", + "Количество: decimal(15,3)", + "Статус: string" ] } ], - "groupTemplates": [ - { - "groupName": "ДанныеОтчета", - "templateType": "GroupHeader", - "template": "Шапка" - } - ], + "parameters": ["Период: StandardPeriod = LastMonth @autoDates", "Активные: boolean = true"], + "templates": [{ "name": "Шапка", "style": "header", "rows": [["Орг", "Сум"]] }], + "groupTemplates": [{ "groupName": "ДанныеОтчета", "templateType": "GroupHeader", "template": "Шапка" }], "settingsVariants": [ { "name": "Основной", "title": "Основной вариант", "settings": { - "selection": [ - "Организация", - { - "folder": "Объёмы", - "items": ["Сумма", "Количество"] - } - ], - "filter": [ - "Организация = _ @off @user", - { - "group": "Or", - "items": ["Статус = Активен", "Сумма > 1000"] - } - ], + "selection": ["Организация", { "folder": "Объёмы", "items": ["Сумма", "Количество"] }], + "filter": ["Организация = _ @off @user", { "group": "Or", "items": ["Статус = Активен", "Сумма > 1000"] }], "order": ["Сумма desc"], "conditionalAppearance": [ { "filter": ["Сумма > 10000"], - "appearance": { - "ЦветТекста": "style:НегативныйТекстЦвет" - }, + "appearance": { "ЦветТекста": "style:НегативныйТекстЦвет" }, "presentation": "Большие суммы", "viewMode": "Normal", "userSettingID": "auto" } ], - "outputParameters": { - "Заголовок": "Сводка по организациям" - }, + "outputParameters": { "Заголовок": "Сводка по организациям" }, "dataParameters": "auto", "structure": "Организация > Номенклатура > details" }