feat(form-decompile,form-compile): dataParameters динсписка + nil-значение схема-параметра (valueListAllowed)

Раундтрип терял две вещи в настройках динамического списка реквизита (форма ВыборПодписантовПечатныхФорм):
1. <dcsset:dataParameters> — значения параметров запроса в ListSettings (список SettingsParameterValue
   {use, parameter, value?}). Не захватывались/не эмитились вовсе.
2. <dcssch:value xsi:nil/> у схема-параметра при valueListAllowed=true: компилятор по умолчанию его
   пропускал (if valueListAllowed → return), но платформа пишет не всегда (корпус 27 с / 47 без).

dataParameters: грамматика портирована из skd-compile (Emit-DataParameters + Parse-DataParamShorthand +
Test/Emit-EmptyValue) — консистентно с СКД (shorthand "Имя @off" / объект). Form-нюанс: значение
опционально (use=false плейсхолдер без value-узла, в отличие от skd-settings). compile эмитит после
filter (XSD-порядок). decompile: Build-FormDataParameters (объект с полным valueType / shorthand).

nil-значение: декомпилятор ставит явный маркер value:null при valueListAllowed+nil-тег; компилятор
эмитит nil при valueListAllowed + явный value (различает absent от null через Has-DLProp/value_explicit).

Корпус: dataParameters в 9 формах (17 items, все use=false, 4 со значениями DesignTimeValue/ent:/decimal).
Верификация: таргет-раундтрип формы → match (22→0); 9 dataParameters-форм — категория закрыта (остаток —
др. категории filter userSettingPresentation/MultipleValue*). Регресс form-compile 43/43 (ps1+py,
PY-паритет снэпшота); 1С-cert dynamic-list-form (vla-nil + dataParameters грузятся). spec.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
Nick Shirokov
2026-06-12 15:00:19 +03:00
co-authored by Claude Opus 4.8
parent b794560492
commit 819b7fa126
6 changed files with 364 additions and 6 deletions
@@ -19,8 +19,10 @@
"attributes": [
{ "name": "Список", "type": "DynamicList", "useAlways": ["~Артикул", "Список.Code", "Description"], "settings": {
"mainTable": "Catalog.Товары", "dynamicDataRead": true, "autoSaveUserSettings": false,
"parameters": [ { "name": "ВыборТовара", "type": "CatalogRef.Товары", "valueListAllowed": true, "value": null } ],
"order": [ "Description", "Code desc" ],
"filter": [ "Артикул = _ @off @user", "Артикул like %тест%", "Description подобно %abc%" ],
"dataParameters": [ "ВыборТовара @off" ],
"conditionalAppearance": [ { "filter": ["Артикул = _"], "appearance": { "ЦветТекста": "web:Red" } } ]
} }
],
@@ -100,6 +100,21 @@
<Settings xsi:type="DynamicList">
<ManualQuery>false</ManualQuery>
<DynamicDataRead>true</DynamicDataRead>
<Parameter>
<dcssch:name>ВыборТовара</dcssch:name>
<dcssch:title xsi:type="v8:LocalStringType">
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>Выбор товара</v8:content>
</v8:item>
</dcssch:title>
<dcssch:valueType>
<v8:Type>cfg:CatalogRef.Товары</v8:Type>
</dcssch:valueType>
<dcssch:value xsi:nil="true"/>
<dcssch:useRestriction>true</dcssch:useRestriction>
<dcssch:valueListAllowed>true</dcssch:valueListAllowed>
</Parameter>
<MainTable>Catalog.Товары</MainTable>
<AutoSaveUserSettings>false</AutoSaveUserSettings>
<ListSettings>
@@ -123,6 +138,12 @@
<dcsset:viewMode>Normal</dcsset:viewMode>
<dcsset:userSettingID>UUID-003</dcsset:userSettingID>
</dcsset:filter>
<dcsset:dataParameters>
<dcscor:item xsi:type="dcsset:SettingsParameterValue">
<dcscor:use>false</dcscor:use>
<dcscor:parameter>ВыборТовара</dcscor:parameter>
</dcscor:item>
</dcsset:dataParameters>
<dcsset:order>
<dcsset:item xsi:type="dcsset:OrderItemField">
<dcsset:field>Description</dcsset:field>