From fb58a04700a64686ace5b4daaf7d6a3241deaba1 Mon Sep 17 00:00:00 2001 From: Nick Shirokov Date: Sun, 19 Apr 2026 17:18:48 +0300 Subject: [PATCH] =?UTF-8?q?feat(web-test):=20getFormState=20=E2=80=94=20?= =?UTF-8?q?=D0=BF=D0=BE=D0=BB=D0=BD=D1=8B=D0=B5=20reportSettings=20+=20chi?= =?UTF-8?q?p-=D0=B7=D0=BD=D0=B0=D1=87=D0=B5=D0=BD=D0=B8=D1=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit На DCS-формах возвращались только настройки с явным чекбоксом «Использование» — остальные (всегда включённые) отбрасывались и пропадали из fields[]. Reference-поля с chip-контролом возвращали пустое value, потому что значение живёт в .chipsItem .chipsTitle, а не в input.value. - DCS-группировка больше не требует наличия «Использование»; при его отсутствии setting.enabled = true (настройка всегда активна) - При чтении input.value делается fallback на .chipsItem .chipsTitle в LABEL-родителе — через запятую, если значений несколько (первый элемент + «+N» при свёртке в UI) Co-Authored-By: Claude Opus 4.7 (1M context) --- .claude/skills/web-test/scripts/dom.mjs | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/.claude/skills/web-test/scripts/dom.mjs b/.claude/skills/web-test/scripts/dom.mjs index fa77e0bb..fde01963 100644 --- a/.claude/skills/web-test/scripts/dom.mjs +++ b/.claude/skills/web-test/scripts/dom.mjs @@ -1,4 +1,4 @@ -// web-test dom v1.6 — DOM selectors and semantic mapping for 1C web client +// web-test dom v1.7 — DOM selectors and semantic mapping for 1C web client // Source: https://github.com/Nikolay-Shirokov/cc-1c-skills /** * DOM selectors and semantic mapping for 1C:Enterprise web client. @@ -79,6 +79,16 @@ const READ_FORM_FN = `function readForm(p) { if (document.getElementById(p + name + '_CLR')?.offsetWidth > 0) actions.push('clear'); if (document.getElementById(p + name + '_CB')?.offsetWidth > 0) actions.push('pick'); const field = { name, value: el.value || '' }; + // Multi-value reference fields keep their value in .chipsItem chips, not in input.value + if (!field.value) { + const labelEl = document.getElementById(p + name); + if (labelEl) { + const chipTexts = [...labelEl.querySelectorAll('.chipsItem .chipsTitle')] + .map(c => nbsp(c.innerText?.trim() || '')) + .filter(Boolean); + if (chipTexts.length) field.value = chipTexts.join(', '); + } + } if (label && label !== name) field.label = label; if (el.readOnly) field.readonly = true; if (el.disabled) field.disabled = true; @@ -367,9 +377,10 @@ const READ_FORM_FN = `function readForm(p) { result.reportSettings = dcsEntries.map(([, g]) => { const cb = g['Использование']; const val = g['Значение']; - if (!cb) return null; - const label = (val?.label || cb.label || cb.name).replace(/:$/, '').trim(); - const s = { name: label, enabled: !!cb.value }; + if (!cb && !val) return null; + // No checkbox present (class="staticText" instead of .checkbox) — setting is always enabled + const label = (val?.label || cb?.label || val?.name || cb?.name || '').replace(/:$/, '').trim(); + const s = { name: label, enabled: cb ? !!cb.value : true }; if (val) { s.value = val.value || ''; if (val.actions && val.actions.length) s.actions = val.actions;