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) ---