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): Table refreshRequest + форм. collapseItemsByImportanceVariant/groupList (pass-through)
Раундтрип терял три скаляра (чистые двусторонние пробелы — не ловились ни декомпилятором, ни компилятором): - Table <RefreshRequest> (запрос обновления дин-списка; корпус acc+erp 8.3.24 — 33, всегда PullFromTop) - форм-уровень <CollapseItemsByImportanceVariant> (сворачивание по важности; 27: DontUse 26/Use 1) - форм-уровень <GroupList> (ссылка на группу списка, значение 2:<GUID>/имя; 30) Все три — pass-through (захват «как есть», зеркало платформы). RefreshRequest — в Emit-Table рядом с currentRowUse; форм-уровневые — через KNOWN_FORM_PROPS (decompile) + generic Emit-Properties (авто-PascalCase, compile ps1+py). Верификация: таргет-раундтрип 68 форм с этими тегами → три категории закрыты (0 LOST; остаток — другие категории valueType/HorizontalSpacing). Регресс form-compile 43/43 (ps1+py); 1С-cert кейса dynamic-list-form (все три тега, включая GroupList с GUID, грузятся в платформу). spec обновлён. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
# form-compile v1.129 — Compile 1C managed form from JSON or object metadata
|
||||
# form-compile v1.130 — Compile 1C managed form from JSON or object metadata
|
||||
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
|
||||
param(
|
||||
[string]$JsonPath,
|
||||
@@ -4326,6 +4326,8 @@ function Emit-Table {
|
||||
Emit-PictureRef -val $el.rowsPicture -picTag 'RowsPicture' -indent $inner
|
||||
# Использование текущей строки таблицы (pass-through; в корпусе соседствует с блоком дин-списка)
|
||||
if ($el.currentRowUse) { X "$inner<CurrentRowUse>$($el.currentRowUse)</CurrentRowUse>" }
|
||||
# Запрос обновления дин-списка (pass-through; в корпусе всегда PullFromTop)
|
||||
if ($el.refreshRequest) { X "$inner<RefreshRequest>$($el.refreshRequest)</RefreshRequest>" }
|
||||
# Блок свойств дин-список-таблицы (помечена эвристикой 11b.4)
|
||||
if ($el.PSObject.Properties["_dynList"] -and $el._dynList) { Emit-DynListTableBlock -el $el -indent $inner }
|
||||
if ($el.viewStatusLocation) { X "$inner<ViewStatusLocation>$($el.viewStatusLocation)</ViewStatusLocation>" }
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
#!/usr/bin/env python3
|
||||
# form-compile v1.129 — Compile 1C managed form from JSON or object metadata
|
||||
# form-compile v1.130 — Compile 1C managed form from JSON or object metadata
|
||||
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
|
||||
import argparse
|
||||
import copy
|
||||
@@ -4062,6 +4062,9 @@ def emit_table(lines, el, name, eid, indent):
|
||||
# Использование текущей строки таблицы (pass-through; в корпусе соседствует с блоком дин-списка)
|
||||
if el.get('currentRowUse'):
|
||||
lines.append(f'{inner}<CurrentRowUse>{el["currentRowUse"]}</CurrentRowUse>')
|
||||
# Запрос обновления дин-списка (pass-through; в корпусе всегда PullFromTop)
|
||||
if el.get('refreshRequest'):
|
||||
lines.append(f'{inner}<RefreshRequest>{el["refreshRequest"]}</RefreshRequest>')
|
||||
# Блок свойств дин-список-таблицы (помечена эвристикой)
|
||||
if el.get('_dynList'):
|
||||
emit_dynlist_table_block(lines, el, inner)
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# form-decompile v0.103 — Decompile 1C managed Form.xml to JSON DSL (draft)
|
||||
# form-decompile v0.104 — Decompile 1C managed Form.xml to JSON DSL (draft)
|
||||
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
|
||||
# ВНИМАНИЕ: раундтрип не гарантируется. Навык исключён из авто-использования моделью.
|
||||
param(
|
||||
@@ -1781,6 +1781,8 @@ function Decompile-Element {
|
||||
$fh = Get-Child $node 'FooterHeight'; if ($null -ne $fh) { $obj['footerHeight'] = [int]$fh }
|
||||
# Использование текущей строки (Table-уровень; ≠ command-level CurrentRowUse) — pass-through
|
||||
$cru = Get-Child $node 'CurrentRowUse'; if ($cru) { $obj['currentRowUse'] = $cru }
|
||||
# Запрос обновления дин-списка (всегда PullFromTop в корпусе) — pass-through
|
||||
$rr = Get-Child $node 'RefreshRequest'; if ($rr) { $obj['refreshRequest'] = $rr }
|
||||
# CommandBarLocation: для дин-список-таблицы компилятор авто-инжектит "None" → инвертируем
|
||||
# (нет тега → суппресс-маркер ""; "None" → опускаем = авто-дефолт; иначе → захват).
|
||||
$cbl = Get-Child $node 'CommandBarLocation'
|
||||
@@ -2207,7 +2209,7 @@ $titleNode = $root.SelectSingleNode("lf:Title", $ns)
|
||||
if ($titleNode) { $t = Get-LangText $titleNode; if ($null -ne $t) { $dsl['title'] = $t } }
|
||||
|
||||
# properties (прямые скаляры под <Form>, PascalCase → camelCase)
|
||||
$KNOWN_FORM_PROPS = @('AutoTitle','ReportResult','DetailsData','ReportFormType','AutoShowState','ReportResultViewMode','ViewModeApplicationOnSetReportResult','WindowOpeningMode','CommandBarLocation','SaveDataInSettings','AutoSaveDataInSettings','AutoTime','UsePostingMode','RepostOnWrite','AutoURL','AutoFillCheck','Customizable','EnterKeyBehavior','VerticalScroll','Width','Height','Group','UseForFoldersAndItems','SaveWindowSettings','ScalingMode','VerticalSpacing','VariantAppearance','ShowCloseButton','HorizontalAlign','ChildrenAlign','ShowTitle','ConversationsRepresentation')
|
||||
$KNOWN_FORM_PROPS = @('AutoTitle','ReportResult','DetailsData','ReportFormType','AutoShowState','ReportResultViewMode','ViewModeApplicationOnSetReportResult','WindowOpeningMode','CommandBarLocation','SaveDataInSettings','AutoSaveDataInSettings','AutoTime','UsePostingMode','RepostOnWrite','AutoURL','AutoFillCheck','Customizable','EnterKeyBehavior','VerticalScroll','Width','Height','Group','UseForFoldersAndItems','SaveWindowSettings','ScalingMode','VerticalSpacing','VariantAppearance','ShowCloseButton','HorizontalAlign','ChildrenAlign','ShowTitle','ConversationsRepresentation','CollapseItemsByImportanceVariant','GroupList')
|
||||
$props = [ordered]@{}
|
||||
foreach ($pn in $KNOWN_FORM_PROPS) {
|
||||
$v = Get-Child $root $pn
|
||||
|
||||
@@ -79,6 +79,8 @@
|
||||
| `childrenAlign` | `<ChildrenAlign>` | Выравнивание элементов/заголовков (`ItemsLeftTitlesLeft`, `ItemsRightTitlesLeft`, `None`, …) |
|
||||
| `showTitle` | `<ShowTitle>` | `true` / `false` — показывать заголовок формы |
|
||||
| `conversationsRepresentation` | `<ConversationsRepresentation>` | `Auto`, `Show`, `DontShow` — отображение панели обсуждений; pass-through (редкое) |
|
||||
| `collapseItemsByImportanceVariant` | `<CollapseItemsByImportanceVariant>` | `DontUse`, `Use` — сворачивание элементов по важности; pass-through (редкое) |
|
||||
| `groupList` | `<GroupList>` | Ссылка на группу списка (`2:<GUID>` или имя), pass-through verbatim (редкое) |
|
||||
|
||||
Нераспознанные ключи преобразуются с автоматическим PascalCase (первая буква в верхний регистр).
|
||||
|
||||
@@ -566,6 +568,7 @@ companion-панели с собственным контентом. Оба не
|
||||
| `headerHeight` | int | Высота шапки в строках (`<HeaderHeight>`); pass-through (редкое, ~35 форм в корпусе) |
|
||||
| `footerHeight` | int | Высота подвала в строках (`<FooterHeight>`); pass-through (редкое, ~6 форм) |
|
||||
| `currentRowUse` | string | Использование текущей строки таблицы (`<CurrentRowUse>`): `DontUse`, `Use`, `SelectionPresentation`, `SelectionPresentationAndChoice`, `Choice`; pass-through (≠ одноимённое свойство команды) |
|
||||
| `refreshRequest` | string | Запрос обновления дин-списка (`<RefreshRequest>`): `PullFromTop` (потяни-обнови). Pass-through |
|
||||
| `commandBarLocation` | string | `None`, `Top`, `Bottom`, `Auto` |
|
||||
| `searchStringLocation` | string | `None`, `Top`, `Bottom`, `CommandBar`, `Auto` |
|
||||
| `viewStatusLocation` | string | `None`, `Top`, `Bottom`, `Auto` |
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
"validatePath": "Catalogs/Товары/Forms/ФормаСписка/Ext/Form.xml",
|
||||
"input": {
|
||||
"title": "Товары",
|
||||
"properties": { "saveWindowSettings": false },
|
||||
"properties": { "saveWindowSettings": false, "collapseItemsByImportanceVariant": "DontUse", "groupList": "2:02023637-7868-4a5f-8576-835a76e0c9ba" },
|
||||
"attributes": [
|
||||
{ "name": "Список", "type": "DynamicList", "useAlways": ["~Артикул", "Список.Code", "Description"], "settings": {
|
||||
"mainTable": "Catalog.Товары", "dynamicDataRead": true, "autoSaveUserSettings": false,
|
||||
@@ -25,7 +25,7 @@
|
||||
} }
|
||||
],
|
||||
"elements": [
|
||||
{ "table": "Список", "path": "Список",
|
||||
{ "table": "Список", "path": "Список", "refreshRequest": "PullFromTop",
|
||||
"additions": { "viewStatus": { "horizontalLocation": "left" } },
|
||||
"commandBar": [
|
||||
{ "searchString": "ПоискСписка", "source": "Список", "width": 15, "horizontalStretch": true }
|
||||
|
||||
+8
-5
@@ -8,12 +8,15 @@
|
||||
</Title>
|
||||
<AutoTitle>false</AutoTitle>
|
||||
<SaveWindowSettings>false</SaveWindowSettings>
|
||||
<CollapseItemsByImportanceVariant>DontUse</CollapseItemsByImportanceVariant>
|
||||
<GroupList>2:UUID-001</GroupList>
|
||||
<AutoCommandBar name="ФормаКоманднаяПанель" id="-1"/>
|
||||
<ChildItems>
|
||||
<Table name="Список" id="1">
|
||||
<DataPath>Список</DataPath>
|
||||
<CommandBarLocation>None</CommandBarLocation>
|
||||
<RowPictureDataPath>Список.DefaultPicture</RowPictureDataPath>
|
||||
<RefreshRequest>PullFromTop</RefreshRequest>
|
||||
<AutoRefresh>false</AutoRefresh>
|
||||
<AutoRefreshPeriod>60</AutoRefreshPeriod>
|
||||
<Period>
|
||||
@@ -105,10 +108,10 @@
|
||||
<dcsset:use>false</dcsset:use>
|
||||
<dcsset:left xsi:type="dcscor:Field">Артикул</dcsset:left>
|
||||
<dcsset:comparisonType>Equal</dcsset:comparisonType>
|
||||
<dcsset:userSettingID>UUID-001</dcsset:userSettingID>
|
||||
<dcsset:userSettingID>UUID-002</dcsset:userSettingID>
|
||||
</dcsset:item>
|
||||
<dcsset:viewMode>Normal</dcsset:viewMode>
|
||||
<dcsset:userSettingID>UUID-002</dcsset:userSettingID>
|
||||
<dcsset:userSettingID>UUID-003</dcsset:userSettingID>
|
||||
</dcsset:filter>
|
||||
<dcsset:order>
|
||||
<dcsset:item xsi:type="dcsset:OrderItemField">
|
||||
@@ -120,7 +123,7 @@
|
||||
<dcsset:orderType>Desc</dcsset:orderType>
|
||||
</dcsset:item>
|
||||
<dcsset:viewMode>Normal</dcsset:viewMode>
|
||||
<dcsset:userSettingID>UUID-003</dcsset:userSettingID>
|
||||
<dcsset:userSettingID>UUID-004</dcsset:userSettingID>
|
||||
</dcsset:order>
|
||||
<dcsset:conditionalAppearance>
|
||||
<dcsset:item>
|
||||
@@ -139,10 +142,10 @@
|
||||
</dcsset:appearance>
|
||||
</dcsset:item>
|
||||
<dcsset:viewMode>Normal</dcsset:viewMode>
|
||||
<dcsset:userSettingID>UUID-004</dcsset:userSettingID>
|
||||
<dcsset:userSettingID>UUID-005</dcsset:userSettingID>
|
||||
</dcsset:conditionalAppearance>
|
||||
<dcsset:itemsViewMode>Normal</dcsset:itemsViewMode>
|
||||
<dcsset:itemsUserSettingID>UUID-005</dcsset:itemsUserSettingID>
|
||||
<dcsset:itemsUserSettingID>UUID-006</dcsset:itemsUserSettingID>
|
||||
</ListSettings>
|
||||
</Settings>
|
||||
</Attribute>
|
||||
|
||||
Reference in New Issue
Block a user