fix(form-compile,form-decompile): UseAlways маркер "~" (query-поля дин-списка) — двойной префикс

Компилятор-баг: поле "~Список.Остановлен" (декомпилятор хранил verbatim) не
матчило проверку префикса ^Список\. → добавлялся ещё префикс →
"Список.~Список.Остановлен" (8+ форм выборки: ЗаявкаСотрудника*, Банки,
ОбеспечениеПроизводственныхПроцессов…). "~" — легитимный маркер query-полей
динамического списка (2234/17266 = 13% корпуса).

- Компилятор: префикс ИмяРеквизита. ставится ПОСЛЕ "~" (~Остановлен →
  ~Список.Остановлен); полная форма ~Список.X — verbatim (forgiving ввод).
- Декомпилятор: компактит ~Список.X → ~X (единообразно с короткими именами;
  компилятор разворачивает обратно).

Зеркало py. Кейс dynamic-list-form расширен (~Артикул + Список.Code +
Description), сертифицирован загрузкой в 1С. Регресс 39/39 в обоих рантаймах.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
Nick Shirokov
2026-06-08 22:44:36 +03:00
co-authored by Claude Opus 4.8
parent 7882c1cc2b
commit 4916f5bf7c
6 changed files with 38 additions and 8 deletions
@@ -16,7 +16,7 @@
"input": {
"title": "Товары",
"attributes": [
{ "name": "Список", "type": "DynamicList", "settings": {
{ "name": "Список", "type": "DynamicList", "useAlways": ["~Артикул", "Список.Code", "Description"], "settings": {
"mainTable": "Catalog.Товары", "dynamicDataRead": true,
"order": [ "Description", "Code desc" ],
"filter": [ "Артикул = _ @off @user" ],
@@ -88,6 +88,11 @@
<v8:Type>cfg:DynamicList</v8:Type>
</Type>
<MainAttribute>true</MainAttribute>
<UseAlways>
<Field>~Список.Артикул</Field>
<Field>Список.Code</Field>
<Field>Список.Description</Field>
</UseAlways>
<Settings xsi:type="DynamicList">
<ManualQuery>false</ManualQuery>
<DynamicDataRead>true</DynamicDataRead>