diff --git a/.claude/skills/form-compile/SKILL.md b/.claude/skills/form-compile/SKILL.md index 79a4a3b0..3a2dd1cf 100644 --- a/.claude/skills/form-compile/SKILL.md +++ b/.claude/skills/form-compile/SKILL.md @@ -64,6 +64,7 @@ powershell.exe -NoProfile -File .claude/skills/form-compile/scripts/form-compile | `"group"` | UsualGroup | `"horizontal"` / `"vertical"` / `"alwaysHorizontal"` / `"alwaysVertical"` / `"collapsible"` | | `"input"` | InputField | имя элемента | | `"check"` | CheckBoxField | имя | +| `"radio"` | RadioButtonField | имя | | `"label"` | LabelDecoration | имя (текст задаётся через `title`) | | `"labelField"` | LabelField | имя | | `"table"` | Table | имя | @@ -97,7 +98,7 @@ powershell.exe -NoProfile -File .claude/skills/form-compile/scripts/form-compile **input / picField**: `OnChange`, `StartChoice`, `ChoiceProcessing`, `AutoComplete`, `TextEditEnd`, `Clearing`, `Creating`, `EditTextChange` -**check**: `OnChange` +**check / radio**: `OnChange` **table**: `OnStartEdit`, `OnEditEnd`, `OnChange`, `Selection`, `ValueChoice`, `BeforeAddRow`, `BeforeDeleteRow`, `AfterDeleteRow`, `BeforeRowChange`, `BeforeEditEnd`, `OnActivateRow`, `OnActivateCell`, `Drag`, `DragStart`, `DragCheck`, `DragEnd` @@ -135,6 +136,37 @@ powershell.exe -NoProfile -File .claude/skills/form-compile/scripts/form-compile | `path` | DataPath | | `titleLocation` | Размещение заголовка | +### Поле переключателя (radio) + +Радиокнопки или тумблер для выбора одного значения из списка. + +| Ключ | Описание | Пример | +|------|----------|--------| +| `path` | DataPath — привязка к реквизиту | `"СпособКурса"` | +| `radioButtonType` | Вид переключателя | `"Auto"` (по умолчанию), `"RadioButtons"`, `"Tumbler"` | +| `columnsCount` | Число колонок раскладки | `1`, `2`, ... | +| `titleLocation` | Размещение заголовка | по умолчанию `"none"` | +| `choiceList` | Список вариантов: массив `{value, presentation}` | см. ниже | + +`choiceList[*]`: + +| Ключ | Описание | +|------|----------| +| `value` | Значение варианта. Строка/число/булево; для перечисления — `"Enum.ИмяТипа.EnumValue.ИмяЗначения"` | +| `presentation` | Текст рядом с переключателем. Строка (русский) либо объект `{ru, en, ...}` для мультиязычности | + +```json +{ + "radio": "СпособКурса", + "path": "Объект.СпособУстановкиКурса", + "radioButtonType": "Auto", + "choiceList": [ + { "value": "Enum.СпособыКурса.EnumValue.Авто", "presentation": { "ru": "Автоматически", "en": "Automatic" } }, + { "value": "Enum.СпособыКурса.EnumValue.Ручной", "presentation": "вручную" } + ] +} +``` + ### Надпись-декорация (label) | Ключ | Описание | diff --git a/.claude/skills/form-compile/scripts/form-compile.ps1 b/.claude/skills/form-compile/scripts/form-compile.ps1 index e821095d..9e2871ce 100644 --- a/.claude/skills/form-compile/scripts/form-compile.ps1 +++ b/.claude/skills/form-compile/scripts/form-compile.ps1 @@ -1,4 +1,4 @@ -# form-compile v1.15 — Compile 1C managed form from JSON or object metadata +# form-compile v1.16 — Compile 1C managed form from JSON or object metadata # Source: https://github.com/Nikolay-Shirokov/cc-1c-skills param( [string]$JsonPath, @@ -1774,6 +1774,7 @@ function Get-ElementName { $script:knownEvents = @{ "input" = @("OnChange","StartChoice","ChoiceProcessing","AutoComplete","TextEditEnd","Clearing","Creating","EditTextChange") "check" = @("OnChange") + "radio" = @("OnChange") "label" = @("Click","URLProcessing") "labelField"= @("OnChange","StartChoice","ChoiceProcessing","Click","URLProcessing","Clearing") "table" = @("Selection","BeforeAddRow","AfterDeleteRow","BeforeDeleteRow","OnActivateRow","OnEditEnd","OnStartEdit","BeforeRowChange","BeforeEditEnd","ValueChoice","OnActivateCell","OnActivateField","Drag","DragStart","DragCheck","DragEnd","OnGetDataAtServer","BeforeLoadUserSettingsAtServer","OnUpdateUserSettingSetAtServer","OnChange") @@ -1826,9 +1827,43 @@ function Emit-Companion { function Emit-Element { param($el, [string]$indent) - # Silent synonyms: commandBar -> cmdBar, autoCommandBar -> autoCmdBar - # (autoCmdBar inside def.elements is normally extracted in pre-pass; this is a safety net for nested cases) - $synonyms = @{ "commandBar" = "cmdBar"; "autoCommandBar" = "autoCmdBar" } + # Silent synonyms: model often writes XML name or Russian (ПолеПереключателя/RadioButtonField → radio). + # Maps any synonym to canonical short DSL key. + $synonyms = @{ + "commandBar" = "cmdBar" + "autoCommandBar" = "autoCmdBar" + "КоманднаяПанель" = "cmdBar" + "InputField" = "input" + "ПолеВвода" = "input" + "CheckBoxField" = "check" + "ПолеФлажка" = "check" + "RadioButtonField" = "radio" + "ПолеПереключателя" = "radio" + "radioButton" = "radio" + "PictureField" = "picField" + "ПолеКартинки" = "picField" + "LabelField" = "labelField" + "ПолеНадписи" = "labelField" + "CalendarField" = "calendar" + "ПолеКалендаря" = "calendar" + "LabelDecoration" = "label" + "Надпись" = "label" + "PictureDecoration" = "picture" + "Картинка" = "picture" + "UsualGroup" = "group" + "Группа" = "group" + "ОбычнаяГруппа" = "group" + "Pages" = "pages" + "ГруппаСтраниц" = "pages" + "Page" = "page" + "Страница" = "page" + "Table" = "table" + "Таблица" = "table" + "Button" = "button" + "Кнопка" = "button" + "Popup" = "popup" + "ВсплывающееМеню" = "popup" + } foreach ($pair in $synonyms.GetEnumerator()) { if ($null -ne $el.PSObject.Properties[$pair.Key] -and $null -eq $el.PSObject.Properties[$pair.Value]) { $val = $el.($pair.Key) @@ -1841,7 +1876,7 @@ function Emit-Element { $typeKey = $null $xmlTag = $null - foreach ($key in @("group","input","check","label","labelField","table","pages","page","button","picture","picField","calendar","cmdBar","popup")) { + foreach ($key in @("group","input","check","radio","label","labelField","table","pages","page","button","picture","picField","calendar","cmdBar","popup")) { if ($el.$key -ne $null) { $typeKey = $key break @@ -1856,8 +1891,10 @@ function Emit-Element { # Validate known keys — warn about typos and unknown properties $knownKeys = @{ # type keys - "group"=1;"input"=1;"check"=1;"label"=1;"labelField"=1;"table"=1;"pages"=1;"page"=1 + "group"=1;"input"=1;"check"=1;"radio"=1;"label"=1;"labelField"=1;"table"=1;"pages"=1;"page"=1 "button"=1;"picture"=1;"picField"=1;"calendar"=1;"cmdBar"=1;"popup"=1 + # radio-specific + "radioButtonType"=1;"choiceList"=1;"columnsCount"=1 # naming & binding "name"=1;"path"=1;"title"=1 # visibility & state @@ -1903,6 +1940,7 @@ function Emit-Element { "group" { Emit-Group -el $el -name $name -id $id -indent $indent } "input" { Emit-Input -el $el -name $name -id $id -indent $indent } "check" { Emit-Check -el $el -name $name -id $id -indent $indent } + "radio" { Emit-Radio -el $el -name $name -id $id -indent $indent } "label" { Emit-Label -el $el -name $name -id $id -indent $indent } "labelField" { Emit-LabelField -el $el -name $name -id $id -indent $indent } "table" { Emit-Table -el $el -name $name -id $id -indent $indent } @@ -2099,6 +2137,224 @@ function Emit-Check { X "$indent" } +# Maps Russian/English root of a typed reference path to canonical English root. +# Used to normalize ChoiceList values like "Перечисление.X.Y" → "Enum.X.EnumValue.Y". +$script:refRootSynonyms = @{ + "Перечисление" = "Enum" + "Справочник" = "Catalog" + "Документ" = "Document" + "ПланСчетов" = "ChartOfAccounts" + "ПланВидовХарактеристик" = "ChartOfCharacteristicTypes" + "ПланВидовРасчета" = "ChartOfCalculationTypes" + "ПланВидовРасчёта" = "ChartOfCalculationTypes" + "ПланОбмена" = "ExchangePlan" + "БизнесПроцесс" = "BusinessProcess" + "Задача" = "Task" + "РегистрСведений" = "InformationRegister" + "РегистрНакопления" = "AccumulationRegister" + "РегистрБухгалтерии" = "AccountingRegister" + "РегистрРасчета" = "CalculationRegister" + "РегистрРасчёта" = "CalculationRegister" +} +$script:enumValueSynonyms = @("EnumValue","ЗначениеПеречисления") + +# Normalize a choiceList item value: returns @{ XsiType = "..."; Text = "..." } +function Normalize-ChoiceValue { + param($value) + + # Booleans + if ($value -is [bool]) { + return @{ XsiType = "xs:boolean"; Text = if ($value) { "true" } else { "false" } } + } + # Numbers (int / decimal / double) + if ($value -is [int] -or $value -is [long] -or $value -is [double] -or $value -is [decimal]) { + return @{ XsiType = "xs:decimal"; Text = "$value" } + } + + $s = "$value" + if ([string]::IsNullOrEmpty($s)) { + return @{ XsiType = "xs:string"; Text = "" } + } + + # Try to detect typed reference path: ".[..]" + $parts = $s -split '\.' + if ($parts.Count -ge 2) { + $root = $parts[0] + $canonRoot = $null + if ($script:refRootSynonyms.ContainsKey($root)) { $canonRoot = $script:refRootSynonyms[$root] } + elseif ($script:refRootSynonyms.Values -contains $root) { $canonRoot = $root } + + if ($canonRoot) { + $typeName = $parts[1] + $normalized = $null + + if ($canonRoot -eq "Enum") { + if ($parts.Count -eq 2) { + # "Enum.X" alone — not a value, treat as string + } elseif ($parts.Count -eq 3) { + # "Enum.X.Y" — insert .EnumValue. + $normalized = "Enum.$typeName.EnumValue.$($parts[2])" + } else { + # "Enum.X..Y..." — replace member with EnumValue (handles ЗначениеПеречисления too) + $member = $parts[2] + if ($script:enumValueSynonyms -contains $member) { + $rest = $parts[3..($parts.Count-1)] -join '.' + $normalized = "Enum.$typeName.EnumValue.$rest" + } else { + $rest = $parts[2..($parts.Count-1)] -join '.' + $normalized = "Enum.$typeName.EnumValue.$rest" + } + } + } else { + # Other ref roots: just translate root, keep tail as-is + if ($parts.Count -ge 3) { + $tail = $parts[1..($parts.Count-1)] -join '.' + $normalized = "$canonRoot.$tail" + } + } + + if ($normalized) { + return @{ XsiType = "xr:DesignTimeRef"; Text = $normalized } + } + } + } + + return @{ XsiType = "xs:string"; Text = $s } +} + +# Emit Presentation block for a choiceList item. +# Accepts string (ru only), or hashtable/PSCustomObject {ru, en, ...}. +# Empty/null → emits empty . +function Emit-ChoicePresentation { + param($pres, [string]$indent) + if ($null -eq $pres -or ($pres -is [string] -and [string]::IsNullOrEmpty($pres))) { + X "$indent" + return + } + + $pairs = @() + if ($pres -is [string]) { + $pairs += ,@("ru", $pres) + } elseif ($pres -is [hashtable] -or $pres -is [System.Collections.IDictionary]) { + foreach ($k in $pres.Keys) { $pairs += ,@("$k", "$($pres[$k])") } + } elseif ($pres.PSObject -and $pres.PSObject.Properties) { + foreach ($p in $pres.PSObject.Properties) { $pairs += ,@("$($p.Name)", "$($p.Value)") } + } else { + $pairs += ,@("ru", "$pres") + } + + X "$indent" + foreach ($pair in $pairs) { + X "$indent`t" + X "$indent`t`t$($pair[0])" + X "$indent`t`t$(Esc-Xml $pair[1])" + X "$indent`t" + } + X "$indent" +} + +function Emit-Radio { + param($el, [string]$name, [int]$id, [string]$indent) + + X "$indent" + $inner = "$indent`t" + + if ($el.path) { X "$inner$($el.path)" } + + Emit-Title -el $el -name $name -indent $inner -auto:(-not $el.path) + Emit-CommonFlags -el $el -indent $inner + + # TitleLocation default is None for radio (matches typical configurator behavior) + $tl = if ($el.titleLocation) { + switch ("$($el.titleLocation)") { + "none" { "None" } + "left" { "Left" } + "right" { "Right" } + "top" { "Top" } + "bottom" { "Bottom" } + default { "$($el.titleLocation)" } + } + } else { "None" } + X "$inner$tl" + + # RadioButtonType: Auto | RadioButtons | Tumbler. Accept synonyms. + $rbtRaw = if ($el.radioButtonType) { "$($el.radioButtonType)".Trim() } else { "Auto" } + $rbt = switch -Regex ($rbtRaw.ToLower()) { + '^(auto|авто)$' { "Auto"; break } + '^(radiobuttons?|переключатель|радио)$' { "RadioButtons"; break } + '^(tumbler|тумблер)$' { "Tumbler"; break } + default { $rbtRaw } + } + X "$inner$rbt" + + if ($null -ne $el.columnsCount) { + X "$inner$($el.columnsCount)" + } + + # ChoiceList + if ($el.choiceList -and $el.choiceList.Count -gt 0) { + X "$inner" + $itemIndent = "$inner`t" + foreach ($item in $el.choiceList) { + # Pull value (and tolerate Russian synonym "значение") + $valRaw = $null + if ($item -is [hashtable] -or $item -is [System.Collections.IDictionary]) { + if ($item.Contains("value")) { $valRaw = $item["value"] } + elseif ($item.Contains("значение")) { $valRaw = $item["значение"] } + } else { + if ($item.PSObject.Properties["value"]) { $valRaw = $item.value } + elseif ($item.PSObject.Properties["значение"]) { $valRaw = $item."значение" } + } + + # Pull presentation (presentation OR title synonym) + $presRaw = $null + $hasPres = $false + if ($item -is [hashtable] -or $item -is [System.Collections.IDictionary]) { + if ($item.Contains("presentation")) { $presRaw = $item["presentation"]; $hasPres = $true } + elseif ($item.Contains("представление")) { $presRaw = $item["представление"]; $hasPres = $true } + elseif ($item.Contains("title")) { $presRaw = $item["title"]; $hasPres = $true } + } else { + if ($item.PSObject.Properties["presentation"]) { $presRaw = $item.presentation; $hasPres = $true } + elseif ($item.PSObject.Properties["представление"]) { $presRaw = $item."представление"; $hasPres = $true } + elseif ($item.PSObject.Properties["title"]) { $presRaw = $item.title; $hasPres = $true } + } + + $norm = Normalize-ChoiceValue -value $valRaw + + # Auto-derive presentation if missing + if (-not $hasPres) { + if ($norm.XsiType -eq "xr:DesignTimeRef") { + $tail = ($norm.Text -split '\.')[-1] + $presRaw = Title-FromName -name $tail + } elseif ($norm.XsiType -eq "xs:string") { + $presRaw = $norm.Text + } else { + $presRaw = $norm.Text + } + } + + X "$itemIndent" + $valIndent = "$itemIndent`t" + X "$valIndent" + X "$valIndent0" + X "$valIndent" + Emit-ChoicePresentation -pres $presRaw -indent "$valIndent`t" + X "$valIndent`t$(Esc-Xml $norm.Text)" + X "$valIndent" + X "$itemIndent" + } + X "$inner" + } + + # Companions + Emit-Companion -tag "ContextMenu" -name "${name}КонтекстноеМеню" -indent $inner + Emit-Companion -tag "ExtendedTooltip" -name "${name}РасширеннаяПодсказка" -indent $inner + + Emit-Events -el $el -elementName $name -indent $inner -typeKey "radio" + + X "$indent" +} + function Emit-Label { param($el, [string]$name, [int]$id, [string]$indent) diff --git a/.claude/skills/form-compile/scripts/form-compile.py b/.claude/skills/form-compile/scripts/form-compile.py index 9dc4bc35..164eef17 100644 --- a/.claude/skills/form-compile/scripts/form-compile.py +++ b/.claude/skills/form-compile/scripts/form-compile.py @@ -1,5 +1,5 @@ #!/usr/bin/env python3 -# form-compile v1.15 — Compile 1C managed form from JSON or object metadata +# form-compile v1.16 — Compile 1C managed form from JSON or object metadata # Source: https://github.com/Nikolay-Shirokov/cc-1c-skills import argparse import copy @@ -1314,6 +1314,7 @@ EVENT_SUFFIX_MAP = { KNOWN_EVENTS = { "input": ["OnChange", "StartChoice", "ChoiceProcessing", "AutoComplete", "TextEditEnd", "Clearing", "Creating", "EditTextChange"], "check": ["OnChange"], + "radio": ["OnChange"], "label": ["Click", "URLProcessing"], "labelField": ["OnChange", "StartChoice", "ChoiceProcessing", "Click", "URLProcessing", "Clearing"], "table": ["Selection", "BeforeAddRow", "AfterDeleteRow", "BeforeDeleteRow", "OnActivateRow", "OnEditEnd", "OnStartEdit", "BeforeRowChange", "BeforeEditEnd", "ValueChoice", "OnActivateCell", "OnActivateField", "Drag", "DragStart", "DragCheck", "DragEnd", "OnGetDataAtServer", "BeforeLoadUserSettingsAtServer", "OnUpdateUserSettingSetAtServer", "OnChange"], @@ -1337,8 +1338,9 @@ KNOWN_FORM_EVENTS = [ ] KNOWN_KEYS = { - "group", "input", "check", "label", "labelField", "table", "pages", "page", + "group", "input", "check", "radio", "label", "labelField", "table", "pages", "page", "button", "picture", "picField", "calendar", "cmdBar", "popup", + "radioButtonType", "choiceList", "columnsCount", "name", "path", "title", "visible", "hidden", "enabled", "disabled", "readOnly", "userVisible", "on", "handlers", @@ -1359,9 +1361,145 @@ KNOWN_KEYS = { "rowPictureDataPath", "tableAutofill", } -TYPE_KEYS = ["group", "input", "check", "label", "labelField", "table", "pages", "page", +TYPE_KEYS = ["group", "input", "check", "radio", "label", "labelField", "table", "pages", "page", "button", "picture", "picField", "calendar", "cmdBar", "popup"] +# Synonyms: model often writes XML name or Russian (ПолеПереключателя/RadioButtonField → radio) +ELEMENT_TYPE_SYNONYMS = { + "commandBar": "cmdBar", + "autoCommandBar": "autoCmdBar", + "КоманднаяПанель": "cmdBar", + "InputField": "input", + "ПолеВвода": "input", + "CheckBoxField": "check", + "ПолеФлажка": "check", + "RadioButtonField": "radio", + "ПолеПереключателя": "radio", + "radioButton": "radio", + "PictureField": "picField", + "ПолеКартинки": "picField", + "LabelField": "labelField", + "ПолеНадписи": "labelField", + "CalendarField": "calendar", + "ПолеКалендаря": "calendar", + "LabelDecoration": "label", + "Надпись": "label", + "PictureDecoration": "picture", + "Картинка": "picture", + "UsualGroup": "group", + "Группа": "group", + "ОбычнаяГруппа": "group", + "Pages": "pages", + "ГруппаСтраниц": "pages", + "Page": "page", + "Страница": "page", + "Table": "table", + "Таблица": "table", + "Button": "button", + "Кнопка": "button", + "Popup": "popup", + "ВсплывающееМеню": "popup", +} + +# Maps Russian/English root of typed reference path to canonical English root +REF_ROOT_SYNONYMS = { + "Перечисление": "Enum", + "Справочник": "Catalog", + "Документ": "Document", + "ПланСчетов": "ChartOfAccounts", + "ПланВидовХарактеристик": "ChartOfCharacteristicTypes", + "ПланВидовРасчета": "ChartOfCalculationTypes", + "ПланВидовРасчёта": "ChartOfCalculationTypes", + "ПланОбмена": "ExchangePlan", + "БизнесПроцесс": "BusinessProcess", + "Задача": "Task", + "РегистрСведений": "InformationRegister", + "РегистрНакопления": "AccumulationRegister", + "РегистрБухгалтерии": "AccountingRegister", + "РегистрРасчета": "CalculationRegister", + "РегистрРасчёта": "CalculationRegister", +} +ENUM_VALUE_SYNONYMS = {"EnumValue", "ЗначениеПеречисления"} + + +def normalize_choice_value(value): + """Returns dict {xsi_type, text} for a choiceList item value.""" + if isinstance(value, bool): + return {"xsi_type": "xs:boolean", "text": "true" if value else "false"} + if isinstance(value, (int, float)): + return {"xsi_type": "xs:decimal", "text": str(value)} + + s = "" if value is None else str(value) + if not s: + return {"xsi_type": "xs:string", "text": ""} + + parts = s.split(".") + if len(parts) >= 2: + root = parts[0] + canon_root = None + if root in REF_ROOT_SYNONYMS: + canon_root = REF_ROOT_SYNONYMS[root] + elif root in REF_ROOT_SYNONYMS.values(): + canon_root = root + + if canon_root: + type_name = parts[1] + normalized = None + if canon_root == "Enum": + if len(parts) == 3: + normalized = f"Enum.{type_name}.EnumValue.{parts[2]}" + elif len(parts) >= 4: + member = parts[2] + if member in ENUM_VALUE_SYNONYMS: + rest = ".".join(parts[3:]) + else: + rest = ".".join(parts[2:]) + normalized = f"Enum.{type_name}.EnumValue.{rest}" + else: + if len(parts) >= 3: + tail = ".".join(parts[1:]) + normalized = f"{canon_root}.{tail}" + + if normalized: + return {"xsi_type": "xr:DesignTimeRef", "text": normalized} + + return {"xsi_type": "xs:string", "text": s} + + +def emit_choice_presentation(lines, pres, indent): + """Accepts None/empty → ; str → ru only; dict → multi-lang.""" + if pres is None or (isinstance(pres, str) and pres == ""): + lines.append(f"{indent}") + return + + if isinstance(pres, str): + pairs = [("ru", pres)] + elif isinstance(pres, dict): + pairs = [(str(k), str(v)) for k, v in pres.items()] + else: + pairs = [("ru", str(pres))] + + lines.append(f"{indent}") + for lang, content in pairs: + lines.append(f"{indent}\t") + lines.append(f"{indent}\t\t{lang}") + lines.append(f"{indent}\t\t{esc_xml(content)}") + lines.append(f"{indent}\t") + lines.append(f"{indent}") + + +def normalize_radio_button_type(raw): + if not raw: + return "Auto" + s = str(raw).strip().lower() + if s in ("auto", "авто"): + return "Auto" + if s in ("radiobutton", "radiobuttons", "переключатель", "радио"): + return "RadioButtons" + if s in ("tumbler", "тумблер"): + return "Tumbler" + return str(raw).strip() + def get_handler_name(element_name, event_name): suffix = EVENT_SUFFIX_MAP.get(event_name) @@ -1623,9 +1761,8 @@ def emit_type(lines, type_str, indent): # --- Element emitters --- def emit_element(lines, el, indent): - # Silent synonyms (safety net; top-level autoCmdBar is normally extracted in pre-pass) - _synonyms = {'commandBar': 'cmdBar', 'autoCommandBar': 'autoCmdBar'} - for src, dst in _synonyms.items(): + # Silent synonyms: model often writes XML name or Russian (ПолеПереключателя/RadioButtonField → radio) + for src, dst in ELEMENT_TYPE_SYNONYMS.items(): if src in el and dst not in el: el[dst] = el.pop(src) @@ -1651,6 +1788,7 @@ def emit_element(lines, el, indent): 'group': emit_group, 'input': emit_input, 'check': emit_check, + 'radio': emit_radio_button_field, 'label': emit_label, 'labelField': emit_label_field, 'table': emit_table, @@ -1807,6 +1945,69 @@ def emit_check(lines, el, name, eid, indent): lines.append(f'{indent}') +def emit_radio_button_field(lines, el, name, eid, indent): + lines.append(f'{indent}') + inner = f'{indent}\t' + + if el.get('path'): + lines.append(f'{inner}{el["path"]}') + + emit_title(lines, el, name, inner, auto=not el.get('path')) + emit_common_flags(lines, el, inner) + + tl_raw = el.get('titleLocation') + if tl_raw: + loc_map = {'none': 'None', 'left': 'Left', 'right': 'Right', 'top': 'Top', 'bottom': 'Bottom'} + tl = loc_map.get(str(tl_raw), str(tl_raw)) + else: + tl = 'None' + lines.append(f'{inner}{tl}') + + rbt = normalize_radio_button_type(el.get('radioButtonType')) + lines.append(f'{inner}{rbt}') + + if el.get('columnsCount') is not None: + lines.append(f'{inner}{el["columnsCount"]}') + + choice_list = el.get('choiceList') or [] + if choice_list: + lines.append(f'{inner}') + item_indent = f'{inner}\t' + for item in choice_list: + if not isinstance(item, dict): + continue + val_raw = item.get('value', item.get('значение')) + has_pres = any(k in item for k in ('presentation', 'представление', 'title')) + pres_raw = item.get('presentation', item.get('представление', item.get('title'))) + + norm = normalize_choice_value(val_raw) + + if not has_pres: + if norm['xsi_type'] == 'xr:DesignTimeRef': + tail = norm['text'].split('.')[-1] + pres_raw = title_from_name(tail) + else: + pres_raw = norm['text'] + + lines.append(f'{item_indent}') + val_indent = f'{item_indent}\t' + lines.append(f'{val_indent}') + lines.append(f'{val_indent}0') + lines.append(f'{val_indent}') + emit_choice_presentation(lines, pres_raw, f'{val_indent}\t') + lines.append(f'{val_indent}\t{esc_xml(norm["text"])}') + lines.append(f'{val_indent}') + lines.append(f'{item_indent}') + lines.append(f'{inner}') + + emit_companion(lines, 'ContextMenu', f'{name}КонтекстноеМеню', inner) + emit_companion(lines, 'ExtendedTooltip', f'{name}РасширеннаяПодсказка', inner) + + emit_events(lines, el, name, inner, 'radio') + + lines.append(f'{indent}') + + def emit_label(lines, el, name, eid, indent): lines.append(f'{indent}') inner = f'{indent}\t' diff --git a/tests/skills/cases/form-compile/radio-auto-enum.json b/tests/skills/cases/form-compile/radio-auto-enum.json new file mode 100644 index 00000000..b9389c1b --- /dev/null +++ b/tests/skills/cases/form-compile/radio-auto-enum.json @@ -0,0 +1,45 @@ +{ + "name": "RadioButtonField Auto + ссылки на перечисление с мультиязычной презентацией", + "preRun": [ + { + "script": "meta-compile/scripts/meta-compile", + "input": { "type": "Enum", "name": "СпособыКурса", "values": [ + { "name": "Авто" }, { "name": "Ручной" } + ]}, + "args": { "-JsonPath": "{inputFile}", "-OutputDir": "{workDir}" } + }, + { + "script": "meta-compile/scripts/meta-compile", + "input": { "type": "DataProcessor", "name": "ТестРадио", "attributes": [ + { "name": "СпособКурса", "type": "EnumRef.СпособыКурса" } + ]}, + "args": { "-JsonPath": "{inputFile}", "-OutputDir": "{workDir}" } + }, + { + "script": "form-add/scripts/form-add", + "args": { "-ObjectPath": "{workDir}/DataProcessors/ТестРадио.xml", "-FormName": "Форма" } + } + ], + "params": { "outputPath": "DataProcessors/ТестРадио/Forms/Форма/Ext/Form.xml" }, + "validatePath": "DataProcessors/ТестРадио/Forms/Форма/Ext/Form.xml", + "input": { + "title": "Радио — Auto + Enum", + "attributes": [ + { "name": "Объект", "type": "DataProcessorObject.ТестРадио", "main": true }, + { "name": "СпособКурса", "type": "EnumRef.СпособыКурса" } + ], + "elements": [ + { + "radio": "СпособКурса", + "path": "СпособКурса", + "title": "Способ курса", + "radioButtonType": "Auto", + "columnsCount": 1, + "choiceList": [ + { "value": "Enum.СпособыКурса.EnumValue.Авто", "presentation": { "ru": "Автоматически", "en": "Automatic" } }, + { "value": "Enum.СпособыКурса.EnumValue.Ручной", "presentation": "вручную" } + ] + } + ] + } +} diff --git a/tests/skills/cases/form-compile/radio-synonyms.json b/tests/skills/cases/form-compile/radio-synonyms.json new file mode 100644 index 00000000..74a92b8b --- /dev/null +++ b/tests/skills/cases/form-compile/radio-synonyms.json @@ -0,0 +1,44 @@ +{ + "name": "RadioButtonField — синонимы (русские ключи, Перечисление., title вместо presentation)", + "preRun": [ + { + "script": "meta-compile/scripts/meta-compile", + "input": { "type": "Enum", "name": "СпособыКурса", "values": [ + { "name": "Авто" }, { "name": "Ручной" } + ]}, + "args": { "-JsonPath": "{inputFile}", "-OutputDir": "{workDir}" } + }, + { + "script": "meta-compile/scripts/meta-compile", + "input": { "type": "DataProcessor", "name": "ТестСинонимы", "attributes": [ + { "name": "СпособКурса", "type": "EnumRef.СпособыКурса" } + ]}, + "args": { "-JsonPath": "{inputFile}", "-OutputDir": "{workDir}" } + }, + { + "script": "form-add/scripts/form-add", + "args": { "-ObjectPath": "{workDir}/DataProcessors/ТестСинонимы.xml", "-FormName": "Форма" } + } + ], + "params": { "outputPath": "DataProcessors/ТестСинонимы/Forms/Форма/Ext/Form.xml" }, + "validatePath": "DataProcessors/ТестСинонимы/Forms/Форма/Ext/Form.xml", + "input": { + "title": "Радио — синонимы", + "attributes": [ + { "name": "Объект", "type": "DataProcessorObject.ТестСинонимы", "main": true }, + { "name": "СпособКурса", "type": "EnumRef.СпособыКурса" } + ], + "elements": [ + { + "ПолеПереключателя": "СпособКурса", + "path": "СпособКурса", + "title": "Способ курса", + "radioButtonType": "Переключатель", + "choiceList": [ + { "value": "Перечисление.СпособыКурса.Авто", "title": "Автоматически" }, + { "value": "Перечисление.СпособыКурса.Ручной", "title": "Вручную" } + ] + } + ] + } +} diff --git a/tests/skills/cases/form-compile/radio-tumbler-strings.json b/tests/skills/cases/form-compile/radio-tumbler-strings.json new file mode 100644 index 00000000..19accbb6 --- /dev/null +++ b/tests/skills/cases/form-compile/radio-tumbler-strings.json @@ -0,0 +1,36 @@ +{ + "name": "RadioButtonField Tumbler + строковые значения с автогенерацией презентации", + "preRun": [ + { + "script": "meta-compile/scripts/meta-compile", + "input": { "type": "DataProcessor", "name": "ТестТумблер", "attributes": [ + { "name": "ОтборСтрок", "type": "string(50)" } + ]}, + "args": { "-JsonPath": "{inputFile}", "-OutputDir": "{workDir}" } + }, + { + "script": "form-add/scripts/form-add", + "args": { "-ObjectPath": "{workDir}/DataProcessors/ТестТумблер.xml", "-FormName": "Форма" } + } + ], + "params": { "outputPath": "DataProcessors/ТестТумблер/Forms/Форма/Ext/Form.xml" }, + "validatePath": "DataProcessors/ТестТумблер/Forms/Форма/Ext/Form.xml", + "input": { + "title": "Радио — Tumbler", + "attributes": [ + { "name": "Объект", "type": "DataProcessorObject.ТестТумблер", "main": true }, + { "name": "ОтборСтрок", "type": "string(50)" } + ], + "elements": [ + { + "radio": "ОтборСтрок", + "path": "ОтборСтрок", + "radioButtonType": "Tumbler", + "choiceList": [ + { "value": "Рекомендуемые" }, + { "value": "Все" } + ] + } + ] + } +} diff --git a/tests/skills/cases/form-compile/snapshots/radio-auto-enum/Configuration.xml b/tests/skills/cases/form-compile/snapshots/radio-auto-enum/Configuration.xml new file mode 100644 index 00000000..e67bb82b --- /dev/null +++ b/tests/skills/cases/form-compile/snapshots/radio-auto-enum/Configuration.xml @@ -0,0 +1,253 @@ + + + + + + UUID-002 + UUID-003 + + + UUID-004 + UUID-005 + + + UUID-006 + UUID-007 + + + UUID-008 + UUID-009 + + + UUID-010 + UUID-011 + + + UUID-012 + UUID-013 + + + UUID-014 + UUID-015 + + + + TestConfig + + + ru + TestConfig + + + + + Version8_3_24 + ManagedApplication + + PlatformApplication + + Russian + + + + + false + false + false + + + + + + + + + + + + + + + + + + + + + + Biometrics + true + + + Location + false + + + BackgroundLocation + false + + + BluetoothPrinters + false + + + WiFiPrinters + false + + + Contacts + false + + + Calendars + false + + + PushNotifications + false + + + LocalNotifications + false + + + InAppPurchases + false + + + PersonalComputerFileExchange + false + + + Ads + false + + + NumberDialing + false + + + CallProcessing + false + + + CallLog + false + + + AutoSendSMS + false + + + ReceiveSMS + false + + + SMSLog + false + + + Camera + false + + + Microphone + false + + + MusicLibrary + false + + + PictureAndVideoLibraries + false + + + AudioPlaybackAndVibration + false + + + BackgroundAudioPlaybackAndVibration + false + + + InstallPackages + false + + + OSBackup + true + + + ApplicationUsageStatistics + false + + + BarcodeScanning + false + + + BackgroundAudioRecording + false + + + AllFilesAccess + false + + + Videoconferences + false + + + NFC + false + + + DocumentScanning + false + + + SpeechToText + false + + + Geofences + false + + + IncomingShareRequests + false + + + AllIncomingShareRequestsTypesProcessing + false + + + + + + Normal + + + Language.Русский + + + + + + Managed + NotAutoFree + DontUse + DontUse + TaxiEnableVersion8_2 + DontUse + Version8_3_24 + + + + Русский + СпособыКурса + ТестРадио + + + \ No newline at end of file diff --git a/tests/skills/cases/form-compile/snapshots/radio-auto-enum/DataProcessors/ТестРадио.xml b/tests/skills/cases/form-compile/snapshots/radio-auto-enum/DataProcessors/ТестРадио.xml new file mode 100644 index 00000000..78fb5410 --- /dev/null +++ b/tests/skills/cases/form-compile/snapshots/radio-auto-enum/DataProcessors/ТестРадио.xml @@ -0,0 +1,68 @@ + + + + + + UUID-002 + UUID-003 + + + UUID-004 + UUID-005 + + + + ТестРадио + + + ru + Тест радио + + + + false + DataProcessor.ТестРадио.Form.Форма + + false + + + + + + + СпособКурса + + + ru + Способ курса + + + + + d5p1:EnumRef.СпособыКурса + + false + + + + false + + false + false + + + DontCheck + Items + + + Auto + Auto + + + Auto + + +
Форма
+
+
+
diff --git a/tests/skills/cases/form-compile/snapshots/radio-auto-enum/DataProcessors/ТестРадио/Ext/ManagerModule.bsl b/tests/skills/cases/form-compile/snapshots/radio-auto-enum/DataProcessors/ТестРадио/Ext/ManagerModule.bsl new file mode 100644 index 00000000..e69de29b diff --git a/tests/skills/cases/form-compile/snapshots/radio-auto-enum/DataProcessors/ТестРадио/Ext/ObjectModule.bsl b/tests/skills/cases/form-compile/snapshots/radio-auto-enum/DataProcessors/ТестРадио/Ext/ObjectModule.bsl new file mode 100644 index 00000000..e69de29b diff --git a/tests/skills/cases/form-compile/snapshots/radio-auto-enum/DataProcessors/ТестРадио/Forms/Форма.xml b/tests/skills/cases/form-compile/snapshots/radio-auto-enum/DataProcessors/ТестРадио/Forms/Форма.xml new file mode 100644 index 00000000..dffeea01 --- /dev/null +++ b/tests/skills/cases/form-compile/snapshots/radio-auto-enum/DataProcessors/ТестРадио/Forms/Форма.xml @@ -0,0 +1,22 @@ + + +
+ + Форма + + + ru + Форма + + + + Managed + false + + PlatformApplication + MobilePlatformApplication + + + +
+
\ No newline at end of file diff --git a/tests/skills/cases/form-compile/snapshots/radio-auto-enum/DataProcessors/ТестРадио/Forms/Форма/Ext/Form.xml b/tests/skills/cases/form-compile/snapshots/radio-auto-enum/DataProcessors/ТестРадио/Forms/Форма/Ext/Form.xml new file mode 100644 index 00000000..31d5522f --- /dev/null +++ b/tests/skills/cases/form-compile/snapshots/radio-auto-enum/DataProcessors/ТестРадио/Forms/Форма/Ext/Form.xml @@ -0,0 +1,78 @@ + +
+ + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Радио — Auto + Enum</v8:content> + </v8:item> + + false + + + + СпособКурса + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Способ курса</v8:content> + </v8:item> + + None + Auto + 1 + + + + 0 + + + + ru + Автоматически + + + en + Automatic + + + Enum.СпособыКурса.EnumValue.Авто + + + + + 0 + + + + ru + вручную + + + Enum.СпособыКурса.EnumValue.Ручной + + + + + + + + + + + cfg:DataProcessorObject.ТестРадио + + true + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Способ курса</v8:content> + </v8:item> + + + cfg:EnumRef.СпособыКурса + + + + diff --git a/tests/skills/cases/form-compile/snapshots/radio-auto-enum/DataProcessors/ТестРадио/Forms/Форма/Ext/Form/Module.bsl b/tests/skills/cases/form-compile/snapshots/radio-auto-enum/DataProcessors/ТестРадио/Forms/Форма/Ext/Form/Module.bsl new file mode 100644 index 00000000..8ead4cec --- /dev/null +++ b/tests/skills/cases/form-compile/snapshots/radio-auto-enum/DataProcessors/ТестРадио/Forms/Форма/Ext/Form/Module.bsl @@ -0,0 +1,19 @@ +#Область ОбработчикиСобытийФормы + +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовФормы + +#КонецОбласти + +#Область ОбработчикиКомандФормы + +#КонецОбласти + +#Область ОбработчикиОповещений + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +#КонецОбласти \ No newline at end of file diff --git a/tests/skills/cases/form-compile/snapshots/radio-auto-enum/Enums/СпособыКурса.xml b/tests/skills/cases/form-compile/snapshots/radio-auto-enum/Enums/СпособыКурса.xml new file mode 100644 index 00000000..f55fded3 --- /dev/null +++ b/tests/skills/cases/form-compile/snapshots/radio-auto-enum/Enums/СпособыКурса.xml @@ -0,0 +1,121 @@ + + + + + + UUID-002 + UUID-003 + + + UUID-004 + UUID-005 + + + UUID-006 + UUID-007 + + + + СпособыКурса + + + ru + Способы курса + + + + false + + + + DontCheck + false + false + Auto + + + false + + + Auto + Auto + + false + Use + false + + + + Use + + + + + + + + DontCheck + false + false + Auto + + + false + + + Auto + Auto + + false + Use + false + + + + Use + + + + + + + + true + BothWays + + + + + + + + Auto + + + + + Авто + + + ru + Авто + + + + + + + + Ручной + + + ru + Ручной + + + + + + + + diff --git a/tests/skills/cases/form-compile/snapshots/radio-auto-enum/Enums/СпособыКурса/Ext/ManagerModule.bsl b/tests/skills/cases/form-compile/snapshots/radio-auto-enum/Enums/СпособыКурса/Ext/ManagerModule.bsl new file mode 100644 index 00000000..e69de29b diff --git a/tests/skills/cases/form-compile/snapshots/radio-auto-enum/Ext/ClientApplicationInterface.xml b/tests/skills/cases/form-compile/snapshots/radio-auto-enum/Ext/ClientApplicationInterface.xml new file mode 100644 index 00000000..3c1161b2 --- /dev/null +++ b/tests/skills/cases/form-compile/snapshots/radio-auto-enum/Ext/ClientApplicationInterface.xml @@ -0,0 +1,18 @@ + + + + + UUID-002 + + + + + UUID-004 + + + + + + + + \ No newline at end of file diff --git a/tests/skills/cases/form-compile/snapshots/radio-auto-enum/Languages/Русский.xml b/tests/skills/cases/form-compile/snapshots/radio-auto-enum/Languages/Русский.xml new file mode 100644 index 00000000..37c60d78 --- /dev/null +++ b/tests/skills/cases/form-compile/snapshots/radio-auto-enum/Languages/Русский.xml @@ -0,0 +1,16 @@ + + + + + Русский + + + ru + Русский + + + + ru + + + \ No newline at end of file diff --git a/tests/skills/cases/form-compile/snapshots/radio-synonyms/Configuration.xml b/tests/skills/cases/form-compile/snapshots/radio-synonyms/Configuration.xml new file mode 100644 index 00000000..1eb33e88 --- /dev/null +++ b/tests/skills/cases/form-compile/snapshots/radio-synonyms/Configuration.xml @@ -0,0 +1,253 @@ + + + + + + UUID-002 + UUID-003 + + + UUID-004 + UUID-005 + + + UUID-006 + UUID-007 + + + UUID-008 + UUID-009 + + + UUID-010 + UUID-011 + + + UUID-012 + UUID-013 + + + UUID-014 + UUID-015 + + + + TestConfig + + + ru + TestConfig + + + + + Version8_3_24 + ManagedApplication + + PlatformApplication + + Russian + + + + + false + false + false + + + + + + + + + + + + + + + + + + + + + + Biometrics + true + + + Location + false + + + BackgroundLocation + false + + + BluetoothPrinters + false + + + WiFiPrinters + false + + + Contacts + false + + + Calendars + false + + + PushNotifications + false + + + LocalNotifications + false + + + InAppPurchases + false + + + PersonalComputerFileExchange + false + + + Ads + false + + + NumberDialing + false + + + CallProcessing + false + + + CallLog + false + + + AutoSendSMS + false + + + ReceiveSMS + false + + + SMSLog + false + + + Camera + false + + + Microphone + false + + + MusicLibrary + false + + + PictureAndVideoLibraries + false + + + AudioPlaybackAndVibration + false + + + BackgroundAudioPlaybackAndVibration + false + + + InstallPackages + false + + + OSBackup + true + + + ApplicationUsageStatistics + false + + + BarcodeScanning + false + + + BackgroundAudioRecording + false + + + AllFilesAccess + false + + + Videoconferences + false + + + NFC + false + + + DocumentScanning + false + + + SpeechToText + false + + + Geofences + false + + + IncomingShareRequests + false + + + AllIncomingShareRequestsTypesProcessing + false + + + + + + Normal + + + Language.Русский + + + + + + Managed + NotAutoFree + DontUse + DontUse + TaxiEnableVersion8_2 + DontUse + Version8_3_24 + + + + Русский + СпособыКурса + ТестСинонимы + + + \ No newline at end of file diff --git a/tests/skills/cases/form-compile/snapshots/radio-synonyms/DataProcessors/ТестСинонимы.xml b/tests/skills/cases/form-compile/snapshots/radio-synonyms/DataProcessors/ТестСинонимы.xml new file mode 100644 index 00000000..841accc1 --- /dev/null +++ b/tests/skills/cases/form-compile/snapshots/radio-synonyms/DataProcessors/ТестСинонимы.xml @@ -0,0 +1,68 @@ + + + + + + UUID-002 + UUID-003 + + + UUID-004 + UUID-005 + + + + ТестСинонимы + + + ru + Тест синонимы + + + + false + DataProcessor.ТестСинонимы.Form.Форма + + false + + + + + + + СпособКурса + + + ru + Способ курса + + + + + d5p1:EnumRef.СпособыКурса + + false + + + + false + + false + false + + + DontCheck + Items + + + Auto + Auto + + + Auto + + +
Форма
+
+
+
diff --git a/tests/skills/cases/form-compile/snapshots/radio-synonyms/DataProcessors/ТестСинонимы/Ext/ManagerModule.bsl b/tests/skills/cases/form-compile/snapshots/radio-synonyms/DataProcessors/ТестСинонимы/Ext/ManagerModule.bsl new file mode 100644 index 00000000..e69de29b diff --git a/tests/skills/cases/form-compile/snapshots/radio-synonyms/DataProcessors/ТестСинонимы/Ext/ObjectModule.bsl b/tests/skills/cases/form-compile/snapshots/radio-synonyms/DataProcessors/ТестСинонимы/Ext/ObjectModule.bsl new file mode 100644 index 00000000..e69de29b diff --git a/tests/skills/cases/form-compile/snapshots/radio-synonyms/DataProcessors/ТестСинонимы/Forms/Форма.xml b/tests/skills/cases/form-compile/snapshots/radio-synonyms/DataProcessors/ТестСинонимы/Forms/Форма.xml new file mode 100644 index 00000000..dffeea01 --- /dev/null +++ b/tests/skills/cases/form-compile/snapshots/radio-synonyms/DataProcessors/ТестСинонимы/Forms/Форма.xml @@ -0,0 +1,22 @@ + + +
+ + Форма + + + ru + Форма + + + + Managed + false + + PlatformApplication + MobilePlatformApplication + + + +
+
\ No newline at end of file diff --git a/tests/skills/cases/form-compile/snapshots/radio-synonyms/DataProcessors/ТестСинонимы/Forms/Форма/Ext/Form.xml b/tests/skills/cases/form-compile/snapshots/radio-synonyms/DataProcessors/ТестСинонимы/Forms/Форма/Ext/Form.xml new file mode 100644 index 00000000..6a2903ae --- /dev/null +++ b/tests/skills/cases/form-compile/snapshots/radio-synonyms/DataProcessors/ТестСинонимы/Forms/Форма/Ext/Form.xml @@ -0,0 +1,73 @@ + +
+ + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Радио — синонимы</v8:content> + </v8:item> + + false + + + + СпособКурса + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Способ курса</v8:content> + </v8:item> + + None + RadioButtons + + + + 0 + + + + ru + Автоматически + + + Enum.СпособыКурса.EnumValue.Авто + + + + + 0 + + + + ru + Вручную + + + Enum.СпособыКурса.EnumValue.Ручной + + + + + + + + + + + cfg:DataProcessorObject.ТестСинонимы + + true + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Способ курса</v8:content> + </v8:item> + + + cfg:EnumRef.СпособыКурса + + + + diff --git a/tests/skills/cases/form-compile/snapshots/radio-synonyms/DataProcessors/ТестСинонимы/Forms/Форма/Ext/Form/Module.bsl b/tests/skills/cases/form-compile/snapshots/radio-synonyms/DataProcessors/ТестСинонимы/Forms/Форма/Ext/Form/Module.bsl new file mode 100644 index 00000000..8ead4cec --- /dev/null +++ b/tests/skills/cases/form-compile/snapshots/radio-synonyms/DataProcessors/ТестСинонимы/Forms/Форма/Ext/Form/Module.bsl @@ -0,0 +1,19 @@ +#Область ОбработчикиСобытийФормы + +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовФормы + +#КонецОбласти + +#Область ОбработчикиКомандФормы + +#КонецОбласти + +#Область ОбработчикиОповещений + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +#КонецОбласти \ No newline at end of file diff --git a/tests/skills/cases/form-compile/snapshots/radio-synonyms/Enums/СпособыКурса.xml b/tests/skills/cases/form-compile/snapshots/radio-synonyms/Enums/СпособыКурса.xml new file mode 100644 index 00000000..f55fded3 --- /dev/null +++ b/tests/skills/cases/form-compile/snapshots/radio-synonyms/Enums/СпособыКурса.xml @@ -0,0 +1,121 @@ + + + + + + UUID-002 + UUID-003 + + + UUID-004 + UUID-005 + + + UUID-006 + UUID-007 + + + + СпособыКурса + + + ru + Способы курса + + + + false + + + + DontCheck + false + false + Auto + + + false + + + Auto + Auto + + false + Use + false + + + + Use + + + + + + + + DontCheck + false + false + Auto + + + false + + + Auto + Auto + + false + Use + false + + + + Use + + + + + + + + true + BothWays + + + + + + + + Auto + + + + + Авто + + + ru + Авто + + + + + + + + Ручной + + + ru + Ручной + + + + + + + + diff --git a/tests/skills/cases/form-compile/snapshots/radio-synonyms/Enums/СпособыКурса/Ext/ManagerModule.bsl b/tests/skills/cases/form-compile/snapshots/radio-synonyms/Enums/СпособыКурса/Ext/ManagerModule.bsl new file mode 100644 index 00000000..e69de29b diff --git a/tests/skills/cases/form-compile/snapshots/radio-synonyms/Ext/ClientApplicationInterface.xml b/tests/skills/cases/form-compile/snapshots/radio-synonyms/Ext/ClientApplicationInterface.xml new file mode 100644 index 00000000..3c1161b2 --- /dev/null +++ b/tests/skills/cases/form-compile/snapshots/radio-synonyms/Ext/ClientApplicationInterface.xml @@ -0,0 +1,18 @@ + + + + + UUID-002 + + + + + UUID-004 + + + + + + + + \ No newline at end of file diff --git a/tests/skills/cases/form-compile/snapshots/radio-synonyms/Languages/Русский.xml b/tests/skills/cases/form-compile/snapshots/radio-synonyms/Languages/Русский.xml new file mode 100644 index 00000000..37c60d78 --- /dev/null +++ b/tests/skills/cases/form-compile/snapshots/radio-synonyms/Languages/Русский.xml @@ -0,0 +1,16 @@ + + + + + Русский + + + ru + Русский + + + + ru + + + \ No newline at end of file diff --git a/tests/skills/cases/form-compile/snapshots/radio-tumbler-strings/Configuration.xml b/tests/skills/cases/form-compile/snapshots/radio-tumbler-strings/Configuration.xml new file mode 100644 index 00000000..db203c52 --- /dev/null +++ b/tests/skills/cases/form-compile/snapshots/radio-tumbler-strings/Configuration.xml @@ -0,0 +1,252 @@ + + + + + + UUID-002 + UUID-003 + + + UUID-004 + UUID-005 + + + UUID-006 + UUID-007 + + + UUID-008 + UUID-009 + + + UUID-010 + UUID-011 + + + UUID-012 + UUID-013 + + + UUID-014 + UUID-015 + + + + TestConfig + + + ru + TestConfig + + + + + Version8_3_24 + ManagedApplication + + PlatformApplication + + Russian + + + + + false + false + false + + + + + + + + + + + + + + + + + + + + + + Biometrics + true + + + Location + false + + + BackgroundLocation + false + + + BluetoothPrinters + false + + + WiFiPrinters + false + + + Contacts + false + + + Calendars + false + + + PushNotifications + false + + + LocalNotifications + false + + + InAppPurchases + false + + + PersonalComputerFileExchange + false + + + Ads + false + + + NumberDialing + false + + + CallProcessing + false + + + CallLog + false + + + AutoSendSMS + false + + + ReceiveSMS + false + + + SMSLog + false + + + Camera + false + + + Microphone + false + + + MusicLibrary + false + + + PictureAndVideoLibraries + false + + + AudioPlaybackAndVibration + false + + + BackgroundAudioPlaybackAndVibration + false + + + InstallPackages + false + + + OSBackup + true + + + ApplicationUsageStatistics + false + + + BarcodeScanning + false + + + BackgroundAudioRecording + false + + + AllFilesAccess + false + + + Videoconferences + false + + + NFC + false + + + DocumentScanning + false + + + SpeechToText + false + + + Geofences + false + + + IncomingShareRequests + false + + + AllIncomingShareRequestsTypesProcessing + false + + + + + + Normal + + + Language.Русский + + + + + + Managed + NotAutoFree + DontUse + DontUse + TaxiEnableVersion8_2 + DontUse + Version8_3_24 + + + + Русский + ТестТумблер + + + \ No newline at end of file diff --git a/tests/skills/cases/form-compile/snapshots/radio-tumbler-strings/DataProcessors/ТестТумблер.xml b/tests/skills/cases/form-compile/snapshots/radio-tumbler-strings/DataProcessors/ТестТумблер.xml new file mode 100644 index 00000000..a63b7a5e --- /dev/null +++ b/tests/skills/cases/form-compile/snapshots/radio-tumbler-strings/DataProcessors/ТестТумблер.xml @@ -0,0 +1,72 @@ + + + + + + UUID-002 + UUID-003 + + + UUID-004 + UUID-005 + + + + ТестТумблер + + + ru + Тест тумблер + + + + false + DataProcessor.ТестТумблер.Form.Форма + + false + + + + + + + ОтборСтрок + + + ru + Отбор строк + + + + + xs:string + + 50 + Variable + + + false + + + + false + + false + false + + + DontCheck + Items + + + Auto + Auto + + + Auto + + +
Форма
+
+
+
diff --git a/tests/skills/cases/form-compile/snapshots/radio-tumbler-strings/DataProcessors/ТестТумблер/Ext/ManagerModule.bsl b/tests/skills/cases/form-compile/snapshots/radio-tumbler-strings/DataProcessors/ТестТумблер/Ext/ManagerModule.bsl new file mode 100644 index 00000000..e69de29b diff --git a/tests/skills/cases/form-compile/snapshots/radio-tumbler-strings/DataProcessors/ТестТумблер/Ext/ObjectModule.bsl b/tests/skills/cases/form-compile/snapshots/radio-tumbler-strings/DataProcessors/ТестТумблер/Ext/ObjectModule.bsl new file mode 100644 index 00000000..e69de29b diff --git a/tests/skills/cases/form-compile/snapshots/radio-tumbler-strings/DataProcessors/ТестТумблер/Forms/Форма.xml b/tests/skills/cases/form-compile/snapshots/radio-tumbler-strings/DataProcessors/ТестТумблер/Forms/Форма.xml new file mode 100644 index 00000000..dffeea01 --- /dev/null +++ b/tests/skills/cases/form-compile/snapshots/radio-tumbler-strings/DataProcessors/ТестТумблер/Forms/Форма.xml @@ -0,0 +1,22 @@ + + +
+ + Форма + + + ru + Форма + + + + Managed + false + + PlatformApplication + MobilePlatformApplication + + + +
+
\ No newline at end of file diff --git a/tests/skills/cases/form-compile/snapshots/radio-tumbler-strings/DataProcessors/ТестТумблер/Forms/Форма/Ext/Form.xml b/tests/skills/cases/form-compile/snapshots/radio-tumbler-strings/DataProcessors/ТестТумблер/Forms/Форма/Ext/Form.xml new file mode 100644 index 00000000..f6919e89 --- /dev/null +++ b/tests/skills/cases/form-compile/snapshots/radio-tumbler-strings/DataProcessors/ТестТумблер/Forms/Форма/Ext/Form.xml @@ -0,0 +1,71 @@ + +
+ + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Радио — Tumbler</v8:content> + </v8:item> + + false + + + + ОтборСтрок + None + Tumbler + + + + 0 + + + + ru + Рекомендуемые + + + Рекомендуемые + + + + + 0 + + + + ru + Все + + + Все + + + + + + + + + + + cfg:DataProcessorObject.ТестТумблер + + true + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Отбор строк</v8:content> + </v8:item> + + + xs:string + + 50 + Variable + + + + + diff --git a/tests/skills/cases/form-compile/snapshots/radio-tumbler-strings/DataProcessors/ТестТумблер/Forms/Форма/Ext/Form/Module.bsl b/tests/skills/cases/form-compile/snapshots/radio-tumbler-strings/DataProcessors/ТестТумблер/Forms/Форма/Ext/Form/Module.bsl new file mode 100644 index 00000000..8ead4cec --- /dev/null +++ b/tests/skills/cases/form-compile/snapshots/radio-tumbler-strings/DataProcessors/ТестТумблер/Forms/Форма/Ext/Form/Module.bsl @@ -0,0 +1,19 @@ +#Область ОбработчикиСобытийФормы + +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовФормы + +#КонецОбласти + +#Область ОбработчикиКомандФормы + +#КонецОбласти + +#Область ОбработчикиОповещений + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +#КонецОбласти \ No newline at end of file diff --git a/tests/skills/cases/form-compile/snapshots/radio-tumbler-strings/Ext/ClientApplicationInterface.xml b/tests/skills/cases/form-compile/snapshots/radio-tumbler-strings/Ext/ClientApplicationInterface.xml new file mode 100644 index 00000000..3c1161b2 --- /dev/null +++ b/tests/skills/cases/form-compile/snapshots/radio-tumbler-strings/Ext/ClientApplicationInterface.xml @@ -0,0 +1,18 @@ + + + + + UUID-002 + + + + + UUID-004 + + + + + + + + \ No newline at end of file diff --git a/tests/skills/cases/form-compile/snapshots/radio-tumbler-strings/Languages/Русский.xml b/tests/skills/cases/form-compile/snapshots/radio-tumbler-strings/Languages/Русский.xml new file mode 100644 index 00000000..37c60d78 --- /dev/null +++ b/tests/skills/cases/form-compile/snapshots/radio-tumbler-strings/Languages/Русский.xml @@ -0,0 +1,16 @@ + + + + + Русский + + + ru + Русский + + + + ru + + + \ No newline at end of file