mirror of
https://github.com/Nikolay-Shirokov/cc-1c-skills.git
synced 2026-06-14 18:04:58 +03:00
feat(form-decompile,form-compile): WarningOnEdit на check/radio/labelField (не только input)
`<WarningOnEdit>` (мультиязычный текст предупреждения при редактировании) встречается на InputField (576), CheckBoxField (119), RadioButtonField (54), LabelField (1) по корпусу 8.3.24, но компилятор эмитил и декомпилятор ловил его только у InputField → терялся на check/radio/labelField. Расширил эмиссию (Emit-Check/Emit-Radio/Emit-LabelField, после Emit-Layout перед Format) + захват в декомпиляторе (инлайн SelectSingleNode+Get-LangText в трёх обработчиках, как у InputField). Парный enum `warningOnEditRepresentation` (Show/DontShow) уже был generic-скаляром на любом поле — не трогаю. 1С толерантна к позиции тега внутри поля (сертифицировано загрузкой). Зеркало py (байт-в-байт). Выборка 46 форм с WarningOnEdit на check/radio: 0 потерь WarningOnEdit. Кейсы input-fields (+check multilang, +labelField) и radio-tumbler-strings (+radio) сертифицированы в 1С. Регресс 43/43 (ps1+py). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
# form-compile v1.112 — Compile 1C managed form from JSON or object metadata
|
||||
# form-compile v1.113 — Compile 1C managed form from JSON or object metadata
|
||||
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
|
||||
param(
|
||||
[string]$JsonPath,
|
||||
@@ -3652,6 +3652,8 @@ function Emit-Check {
|
||||
|
||||
Emit-Layout -el $el -indent $inner
|
||||
|
||||
if ($null -ne $el.warningOnEdit) { Emit-MLText -tag "WarningOnEdit" -text $el.warningOnEdit -indent $inner }
|
||||
|
||||
# Формат / формат редактирования (LocalStringType — строка или {ru,en})
|
||||
if ($el.format) { Emit-MLText -tag "Format" -text $el.format -indent $inner }
|
||||
if ($el.editFormat) { Emit-MLText -tag "EditFormat" -text $el.editFormat -indent $inner }
|
||||
@@ -4061,6 +4063,8 @@ function Emit-Radio {
|
||||
|
||||
Emit-Layout -el $el -indent $inner
|
||||
|
||||
if ($null -ne $el.warningOnEdit) { Emit-MLText -tag "WarningOnEdit" -text $el.warningOnEdit -indent $inner }
|
||||
|
||||
# Оформление (цвета/шрифты/граница) — перед компаньонами
|
||||
Emit-Appearance -el $el -indent $inner -profile 'field'
|
||||
|
||||
@@ -4135,6 +4139,8 @@ function Emit-LabelField {
|
||||
if ($el.hyperlink -eq $true) { X "$inner<Hiperlink>true</Hiperlink>" }
|
||||
Emit-Layout -el $el -indent $inner
|
||||
|
||||
if ($null -ne $el.warningOnEdit) { Emit-MLText -tag "WarningOnEdit" -text $el.warningOnEdit -indent $inner }
|
||||
|
||||
# Формат / формат редактирования (LocalStringType — строка или {ru,en})
|
||||
if ($el.format) { Emit-MLText -tag "Format" -text $el.format -indent $inner }
|
||||
if ($el.editFormat) { Emit-MLText -tag "EditFormat" -text $el.editFormat -indent $inner }
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
#!/usr/bin/env python3
|
||||
# form-compile v1.112 — Compile 1C managed form from JSON or object metadata
|
||||
# form-compile v1.113 — Compile 1C managed form from JSON or object metadata
|
||||
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
|
||||
import argparse
|
||||
import copy
|
||||
@@ -3742,6 +3742,9 @@ def emit_check(lines, el, name, eid, indent):
|
||||
|
||||
emit_layout(lines, el, inner)
|
||||
|
||||
if el.get('warningOnEdit') is not None:
|
||||
emit_mltext(lines, inner, 'WarningOnEdit', el['warningOnEdit'])
|
||||
|
||||
# Формат / формат редактирования (LocalStringType — строка или {ru,en})
|
||||
if el.get('format'):
|
||||
emit_mltext(lines, inner, 'Format', el['format'])
|
||||
@@ -3782,6 +3785,9 @@ def emit_radio_button_field(lines, el, name, eid, indent):
|
||||
|
||||
emit_layout(lines, el, inner)
|
||||
|
||||
if el.get('warningOnEdit') is not None:
|
||||
emit_mltext(lines, inner, 'WarningOnEdit', el['warningOnEdit'])
|
||||
|
||||
# Оформление (цвета/шрифты/граница) — перед компаньонами
|
||||
emit_appearance(lines, el, inner, 'field')
|
||||
|
||||
@@ -3857,6 +3863,9 @@ def emit_label_field(lines, el, name, eid, indent):
|
||||
lines.append(f'{inner}<Hiperlink>true</Hiperlink>')
|
||||
emit_layout(lines, el, inner)
|
||||
|
||||
if el.get('warningOnEdit') is not None:
|
||||
emit_mltext(lines, inner, 'WarningOnEdit', el['warningOnEdit'])
|
||||
|
||||
# Формат / формат редактирования (LocalStringType — строка или {ru,en})
|
||||
if el.get('format'):
|
||||
emit_mltext(lines, inner, 'Format', el['format'])
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# form-decompile v0.88 — Decompile 1C managed Form.xml to JSON DSL (draft)
|
||||
# form-decompile v0.89 — Decompile 1C managed Form.xml to JSON DSL (draft)
|
||||
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
|
||||
# ВНИМАНИЕ: раундтрип не гарантируется. Навык исключён из авто-использования моделью.
|
||||
param(
|
||||
@@ -1613,6 +1613,7 @@ function Decompile-Element {
|
||||
if ($null -eq $cbt) { $obj['checkBoxType'] = '' }
|
||||
elseif ($cbt -ne 'Auto') { $obj['checkBoxType'] = $cbt.Substring(0,1).ToLower() + $cbt.Substring(1) }
|
||||
Add-TitleLocation $obj $node 'Right'
|
||||
$woe = $node.SelectSingleNode("lf:WarningOnEdit", $ns); if ($woe) { $t = Get-LangText $woe; if ($null -ne $t) { $obj['warningOnEdit'] = $t } }
|
||||
Add-FormatProps $obj $node
|
||||
}
|
||||
'RadioButtonField' {
|
||||
@@ -1622,6 +1623,7 @@ function Decompile-Element {
|
||||
Add-TitleLocation $obj $node 'None'
|
||||
$rbt = Get-Child $node 'RadioButtonType'; if ($rbt) { $obj['radioButtonType'] = $rbt }
|
||||
$cc = Get-Child $node 'ColumnsCount'; if ($cc) { $obj['columnsCount'] = [int]$cc }
|
||||
$woe = $node.SelectSingleNode("lf:WarningOnEdit", $ns); if ($woe) { $t = Get-LangText $woe; if ($null -ne $t) { $obj['warningOnEdit'] = $t } }
|
||||
$cl = Decompile-ChoiceList $node; if ($cl) { $obj['choiceList'] = $cl }
|
||||
}
|
||||
'LabelDecoration' {
|
||||
@@ -1642,6 +1644,7 @@ function Decompile-Element {
|
||||
if ((Get-Child $node 'Hiperlink') -eq 'true') { $obj['hyperlink'] = $true }
|
||||
# PasswordMode на LabelField — платформа эмитит явный false (редко); захват факт. значения
|
||||
$pm = Get-Child $node 'PasswordMode'; if ($null -ne $pm) { $obj['passwordMode'] = ($pm -eq 'true') }
|
||||
$woe = $node.SelectSingleNode("lf:WarningOnEdit", $ns); if ($woe) { $t = Get-LangText $woe; if ($null -ne $t) { $obj['warningOnEdit'] = $t } }
|
||||
Add-FormatProps $obj $node
|
||||
}
|
||||
'PictureDecoration' {
|
||||
|
||||
@@ -381,7 +381,7 @@ companion-панели с собственным контентом. Оба не
|
||||
| `markIncomplete` | bool | Автопометка незаполненных (`<AutoMarkIncomplete>`, факт. значение true/false) |
|
||||
| `extendedEdit` | bool | Расширенное редактирование (`<ExtendedEdit>`) |
|
||||
| `editTextUpdate` | string | Обновление текста при редактировании: `Always`, `OnValueChange`, `DontUse` |
|
||||
| `warningOnEdit` | string/object | Предупреждение при редактировании (`<WarningOnEdit>`, мультиязычный текст) |
|
||||
| `warningOnEdit` | string/object | Предупреждение при редактировании (`<WarningOnEdit>`, мультиязычный текст). Доступно также на `check`/`radio`/`labelField` (не только `input`). Парный enum `warningOnEditRepresentation` (`Show`/`DontShow`) — generic-скаляр на любом поле |
|
||||
| `footerText` | string/object | Текст подвала поля (`<FooterText>`, мультиязычный) |
|
||||
| `editMode` | string | Режим редактирования: `EnterOnInput`, `Directly` |
|
||||
| `skipOnInput` | bool | Пропускать при вводе |
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
"title": "Поля ввода",
|
||||
"elements": [
|
||||
{ "input": "ОбычноеПоле", "path": "ОбычноеПоле", "title": "Обычное поле", "tooltip": "Введите значение поля", "tooltipRepresentation": "ShowBottom", "editMode": "EnterOnInput", "horizontalStretch": false, "verticalStretch": false, "format": "ЧДЦ=2", "editFormat": "ЧДЦ=2; ЧН=", "extendedTooltip": { "width": 30, "autoMaxWidth": false, "text": "Расширенная подсказка поля" } },
|
||||
{ "labelField": "Ссылка", "path": "ОбычноеПоле", "titleLocation": "left", "hyperlink": true, "format": { "ru": "ДЛФ=D", "en": "DLF=D" } },
|
||||
{ "labelField": "Ссылка", "path": "ОбычноеПоле", "titleLocation": "left", "hyperlink": true, "format": { "ru": "ДЛФ=D", "en": "DLF=D" }, "warningOnEdit": "Поле только для чтения" },
|
||||
{ "input": "МногострочноеПоле", "path": "МногострочноеПоле", "multiLine": true, "height": 5, "title": "Комментарий", "wrap": false, "showInHeader": false, "showInFooter": false, "autoCellHeight": true, "footerHorizontalAlign": "Right", "openButton": false, "chooseType": false },
|
||||
{ "input": "ПолеПароля", "path": "ПолеПароля", "passwordMode": true, "title": "Пароль" },
|
||||
{ "input": "ЧисловоеПоле", "path": "ЧисловоеПоле", "title": "Число", "minValue": 1, "maxValue": 100, "displayImportance": "VeryHigh" },
|
||||
@@ -47,7 +47,7 @@
|
||||
"choiceParameterLinks": [ "Отбор.Организация=ОбычноеПоле", "Отбор.Тип=ПолеСписокВыбора:DontChange" ],
|
||||
"typeLink": "ПолеПодсказка"
|
||||
},
|
||||
{ "check": "Флаг", "path": "Флаг", "title": "Включено", "extendedTooltip": { "width": 45 } },
|
||||
{ "check": "Флаг", "path": "Флаг", "title": "Включено", "warningOnEdit": { "ru": "Изменение флага требует подтверждения", "en": "Confirm flag change" }, "extendedTooltip": { "width": 45 } },
|
||||
{ "check": "ФлагПлатформенный", "path": "ФлагПлатформенный", "title": "Слева", "titleLocation": "" },
|
||||
{ "check": "ФлагЯвный", "path": "ФлагЯвный", "title": "Сверху", "titleLocation": "top" },
|
||||
{ "check": "ФлагТумблер", "path": "ФлагТумблер", "title": "Тумблер", "checkBoxType": "switcher", "format": "БЛ=Нет; БИ=Да" }
|
||||
|
||||
@@ -26,6 +26,7 @@
|
||||
"radio": "ОтборСтрок",
|
||||
"path": "ОтборСтрок",
|
||||
"radioButtonType": "Tumbler",
|
||||
"warningOnEdit": "Смена отбора перезагрузит список",
|
||||
"choiceList": [
|
||||
{ "value": "Рекомендуемые" },
|
||||
{ "value": "Все" }
|
||||
|
||||
+16
@@ -55,6 +55,12 @@
|
||||
<DataPath>ОбычноеПоле</DataPath>
|
||||
<TitleLocation>Left</TitleLocation>
|
||||
<Hiperlink>true</Hiperlink>
|
||||
<WarningOnEdit>
|
||||
<v8:item>
|
||||
<v8:lang>ru</v8:lang>
|
||||
<v8:content>Поле только для чтения</v8:content>
|
||||
</v8:item>
|
||||
</WarningOnEdit>
|
||||
<Format>
|
||||
<v8:item>
|
||||
<v8:lang>ru</v8:lang>
|
||||
@@ -355,6 +361,16 @@
|
||||
</Title>
|
||||
<CheckBoxType>Auto</CheckBoxType>
|
||||
<TitleLocation>Right</TitleLocation>
|
||||
<WarningOnEdit>
|
||||
<v8:item>
|
||||
<v8:lang>ru</v8:lang>
|
||||
<v8:content>Изменение флага требует подтверждения</v8:content>
|
||||
</v8:item>
|
||||
<v8:item>
|
||||
<v8:lang>en</v8:lang>
|
||||
<v8:content>Confirm flag change</v8:content>
|
||||
</v8:item>
|
||||
</WarningOnEdit>
|
||||
<ContextMenu name="ФлагКонтекстноеМеню" id="32"/>
|
||||
<ExtendedTooltip name="ФлагРасширеннаяПодсказка" id="33">
|
||||
<Width>45</Width>
|
||||
|
||||
+6
@@ -41,6 +41,12 @@
|
||||
</xr:Value>
|
||||
</xr:Item>
|
||||
</ChoiceList>
|
||||
<WarningOnEdit>
|
||||
<v8:item>
|
||||
<v8:lang>ru</v8:lang>
|
||||
<v8:content>Смена отбора перезагрузит список</v8:content>
|
||||
</v8:item>
|
||||
</WarningOnEdit>
|
||||
<ContextMenu name="ОтборСтрокКонтекстноеМеню" id="2"/>
|
||||
<ExtendedTooltip name="ОтборСтрокРасширеннаяПодсказка" id="3"/>
|
||||
</RadioButtonField>
|
||||
|
||||
Reference in New Issue
Block a user