mirror of
https://github.com/Nikolay-Shirokov/cc-1c-skills.git
synced 2026-07-13 22:35:16 +03:00
feat(skd-decompile): query file префикс + inline объекты/массивы по lineLimit
1. Внешний .sql теперь именуется <outputBasename>-<datasetName>.sql
(раньше просто <datasetName>.sql). Защищает от коллизий при
batch-decompile нескольких отчётов в одну папку: имена dataset'ов
часто совпадают ("НаборДанных1" — почти везде).
В JSON: "query": "@<outputBasename>-<datasetName>.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.
This commit is contained in:
@@ -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 — вынести в отдельный <name>.sql и вернуть "@<name>.sql".
|
||||
# Если запрос ≥3 строк и есть outputPath — вынести в отдельный
|
||||
# `<outputBasename>-<datasetName>.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
|
||||
}
|
||||
|
||||
|
||||
+2
-23
@@ -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" } } }]
|
||||
}
|
||||
}
|
||||
]
|
||||
|
||||
@@ -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": "руб." }
|
||||
]
|
||||
}
|
||||
]
|
||||
|
||||
+2
-13
@@ -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 > Период" } }]
|
||||
}
|
||||
@@ -2,7 +2,7 @@
|
||||
"dataSets": [
|
||||
{
|
||||
"name": "ПродажиПоПериодам",
|
||||
"query": "@ПродажиПоПериодам.sql",
|
||||
"query": "@decompiled-ПродажиПоПериодам.sql",
|
||||
"fields": ["Номенклатура: CatalogRef.Номенклатура @dimension", "Количество: decimal(15,3)", "Сумма: decimal(15,2)"]
|
||||
}
|
||||
]
|
||||
|
||||
@@ -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)"] }
|
||||
]
|
||||
}
|
||||
]
|
||||
|
||||
@@ -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 }
|
||||
]
|
||||
}
|
||||
]
|
||||
|
||||
@@ -7,11 +7,7 @@
|
||||
{
|
||||
"field": "ВидРасчета",
|
||||
"type": "CatalogRef.ВидыРасчета",
|
||||
"orderExpression": {
|
||||
"expression": "ЕстьNULL(ВидРасчета.Порядок, 10000)",
|
||||
"orderType": "Asc",
|
||||
"autoOrder": false
|
||||
}
|
||||
"orderExpression": { "expression": "ЕстьNULL(ВидРасчета.Порядок, 10000)", "orderType": "Asc", "autoOrder": false }
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
@@ -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"
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
+3
-16
@@ -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.Номенклатура",
|
||||
|
||||
+12
-36
@@ -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": ["ВидРасчета", "Сумма"] }
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
@@ -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"]] }]
|
||||
}
|
||||
+2
-23
@@ -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"]] }]
|
||||
}
|
||||
@@ -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"]] }]
|
||||
}
|
||||
+6
-25
@@ -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": "СчетПрочее" }
|
||||
]
|
||||
}
|
||||
]
|
||||
|
||||
@@ -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"
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user