From a5c0be6766da0d36a7a4ebddf44d374285c58736 Mon Sep 17 00:00:00 2001 From: Nick Shirokov Date: Tue, 26 May 2026 14:59:28 +0300 Subject: [PATCH] =?UTF-8?q?refactor(web-test):=20=D0=BF=D0=B5=D1=80=D0=B5?= =?UTF-8?q?=D0=B8=D0=BC=D0=B5=D0=BD=D0=BE=D0=B2=D0=B0=D0=BD=D0=B8=D0=B5=20?= =?UTF-8?q?=E2=80=94=20readTable=20=D0=B2=20table/grid.mjs?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit readTable читает form-grid (.gridLine/.gridBody — табличные части на форме, списки), а не SpreadsheetDocument. Имя файла table/spreadsheet.mjs было обманчиво. Разделяем домены: table/grid.mjs ← readTable (form-grid операции, готово для fillTableRow + deleteTableRow в D.12) table/spreadsheet.mjs ← readSpreadsheet + cell helpers (только SpreadsheetDocument — отчёты, печатные формы) Поведение 1-в-1. browser.mjs re-export обновлён. Co-Authored-By: Claude Opus 4.7 (1M context) --- .claude/skills/web-test/scripts/browser.mjs | 3 ++- .../skills/web-test/scripts/table/grid.mjs | 23 +++++++++++++++++++ .../web-test/scripts/table/spreadsheet.mjs | 14 +---------- 3 files changed, 26 insertions(+), 14 deletions(-) create mode 100644 .claude/skills/web-test/scripts/table/grid.mjs diff --git a/.claude/skills/web-test/scripts/browser.mjs b/.claude/skills/web-test/scripts/browser.mjs index 9f32ebb9..5f36b4da 100644 --- a/.claude/skills/web-test/scripts/browser.mjs +++ b/.claude/skills/web-test/scripts/browser.mjs @@ -184,7 +184,8 @@ export async function getFormState() { // ============================================================ // Table reading + SpreadsheetDocument — extracted to table/spreadsheet.mjs // ============================================================ -export { readTable, readSpreadsheet } from './table/spreadsheet.mjs'; +export { readTable } from './table/grid.mjs'; +export { readSpreadsheet } from './table/spreadsheet.mjs'; // ============================================================ diff --git a/.claude/skills/web-test/scripts/table/grid.mjs b/.claude/skills/web-test/scripts/table/grid.mjs new file mode 100644 index 00000000..1cdb5dd1 --- /dev/null +++ b/.claude/skills/web-test/scripts/table/grid.mjs @@ -0,0 +1,23 @@ +// web-test table/grid v1.16 — Form-grid operations: read table rows, fill rows, delete rows. +// Source: https://github.com/Nikolay-Shirokov/cc-1c-skills +// +// "Grid" в терминах 1С — таблица на форме (.gridLine/.gridBody/.grid в DOM): +// табличные части документов, формы списков, ТЧ настроек и т.п. +// Отдельно от SpreadsheetDocument (table/spreadsheet.mjs). + +import { page, ensureConnected } from '../core/state.mjs'; +import { detectFormScript, readTableScript, resolveGridScript } from '../dom.mjs'; + +/** Read structured table data with pagination. Returns columns, rows, total count. */ +export async function readTable({ maxRows = 20, offset = 0, table } = {}) { + ensureConnected(); + const formNum = await page.evaluate(detectFormScript()); + if (formNum === null) throw new Error('readTable: no form found'); + let gridSelector; + if (table) { + const resolved = await page.evaluate(resolveGridScript(formNum, table)); + if (resolved.error) throw new Error(`readTable: ${resolved.message || resolved.error}. Available: ${resolved.available?.map(a => a.name).join(', ') || 'none'}`); + gridSelector = resolved.gridSelector; + } + return await page.evaluate(readTableScript(formNum, { maxRows, offset, gridSelector })); +} diff --git a/.claude/skills/web-test/scripts/table/spreadsheet.mjs b/.claude/skills/web-test/scripts/table/spreadsheet.mjs index ccf2d2b8..678b4f1e 100644 --- a/.claude/skills/web-test/scripts/table/spreadsheet.mjs +++ b/.claude/skills/web-test/scripts/table/spreadsheet.mjs @@ -7,19 +7,7 @@ import { waitForStable } from '../core/wait.mjs'; // getFormState still in browser.mjs (cycle resolves at call time). import { getFormState } from '../browser.mjs'; -/** Read structured table data with pagination. Returns columns, rows, total count. */ -export async function readTable({ maxRows = 20, offset = 0, table } = {}) { - ensureConnected(); - const formNum = await page.evaluate(detectFormScript()); - if (formNum === null) throw new Error('readTable: no form found'); - let gridSelector; - if (table) { - const resolved = await page.evaluate(resolveGridScript(formNum, table)); - if (resolved.error) throw new Error(`readTable: ${resolved.message || resolved.error}. Available: ${resolved.available?.map(a => a.name).join(', ') || 'none'}`); - gridSelector = resolved.gridSelector; - } - return await page.evaluate(readTableScript(formNum, { maxRows, offset, gridSelector })); -} +// readTable moved to table/grid.mjs (form-grid операции отделены от SpreadsheetDocument). // --- Spreadsheet helpers (shared by readSpreadsheet and clickElement) ---