feat(form-decompile,form-compile): поле DataSet динсписка — useRestriction/attributeUseRestriction/inputParameters (остаток кластера C)

Обычное поле набора <Field DataSetFieldField> может нести ограничения использования и
связь по параметрам выбора:
- <dcssch:useRestriction> {field?,condition?,group?,order?} (54 формы) — где поле НЕ
  использовать (отбор/группировка/порядок/как поле);
- <dcssch:attributeUseRestriction> та же структура (18) — ограничения для реквизитов поля;
- <dcssch:inputParameters> (6) — связь по параметрам выбора (как у параметра дин-списка).

DSL: settings.fields[].useRestriction / attributeUseRestriction (объект {field,condition,
group,order} bool | флаг-строка "#noField #noFilter #noGroup #noOrder" | массив) +
inputParameters. Общие хелперы Get-RestrictList/Emit-RestrictBlock (ps1) и parse_restrict/
emit_restrict_block (py); inputParameters переиспользует Emit-DLInputParameters. Декомпилятор
Build-RestrictObj + Build-DLInputParameters.

Порядок детей поля (из корпус-сигнатур, подтверждён загрузкой в 1С): dataPath, field,
title, useRestriction, attributeUseRestriction, presentationExpression, valueType,
appearance, inputParameters.

Выборка 69 форм с field-props: field-property потерь 0 (match 36→39, TOTAL 396→150,
cascade LOST 111→12). Кейс dynamic-list-form (+useRestriction/attributeUseRestriction
на поле Code) сертифицирован загрузкой в 1С. Регресс 43/43, ps1==py байт-в-байт.

Кластер C (DataSet динсписка) закрыт: Field valueType + CalculatedField + field
presentationExpression/appearance + field useRestriction/attributeUseRestriction/
inputParameters. Остаток (BACKLOG): нюансы пустого value (xs:string vs nil;
LocalStringType self-closing) + отдельный InputField multiple-value кластер.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
Nick Shirokov
2026-06-12 20:15:32 +03:00
parent dab122c166
commit aa39973ae6
6 changed files with 88 additions and 4 deletions
@@ -22,6 +22,8 @@
"parameters": [ { "name": "ВыборТовара", "type": "CatalogRef.Товары", "valueListAllowed": true, "value": null } ],
"fields": [
{ "field": "Code", "title": "Код", "presentationExpression": "\"№\" + Code",
"useRestriction": { "condition": true, "group": true },
"attributeUseRestriction": { "field": true },
"appearance": { "Формат": "ДЛ=9", "ЦветТекста": "web:Gray" } }
],
"grouping": "Description > Code",
@@ -109,6 +109,13 @@
<v8:content>Код</v8:content>
</v8:item>
</dcssch:title>
<dcssch:useRestriction>
<dcssch:condition>true</dcssch:condition>
<dcssch:group>true</dcssch:group>
</dcssch:useRestriction>
<dcssch:attributeUseRestriction>
<dcssch:field>true</dcssch:field>
</dcssch:attributeUseRestriction>
<dcssch:presentationExpression>"№" + Code</dcssch:presentationExpression>
<dcssch:appearance>
<dcscor:item xsi:type="dcsset:SettingsParameterValue">