mirror of
https://github.com/Nikolay-Shirokov/cc-1c-skills.git
synced 2026-07-24 13:41:01 +03:00
fix(web-test): единая модель колонок грида — colindex первым, геометрия запасной
Резолверов колонок было пять, все независимые, и каждый ломался по-своему:
readTable (геометрия X + Y-подряды), clickElement (геометрия X, без Y),
поиск строки {кол: знач} (геометрия X, без Y и fixed-гарда), filterList
(порядковый индекс шапки), fillTableRow (colindex — единственный целый).
Механика поломки (снята живьём на списке задач ERP): шапка «Исполнитель»
широкая (x 1085..1515) и накрывает «Срок» (1085..1251) и «Выполнена»
(1251..1515). Ячейка «Исполнитель» имеет центр 1300 → приписывается к группе
«Выполнена» → та получает лишний под-ряд → срабатывает эвристика «объединённая
шапка» → фантомные «Выполнена 1/2», а значения соседей склеиваются через ' / '.
Теперь COLUMN_MODEL_FN (dom/_shared.mjs) — единственный источник правды:
buildColumnModel / columnForCell / cellForColumn / resolveColumnByName. Идентичность
колонки — colindex (собственный id колонки в 1С, есть и на шапке, и на ячейке);
геометрия работает только там, где своей шапки у ячейки нет — под-ряды
объединённой шапки («Субконто Дт» над тремя ячейками). Путь записи пришёл к этому
решению раньше (grid-edit.mjs: «reliable across merged headers») — остальные
выровнены по нему.
Следствие: имя колонки из readTable теперь годится для клика/заполнения/фильтра —
раньше readTable отдавал «Субконто Дт 2», а клик про такое имя не знал.
Попутно закрыт второй дефект: безымянная picture-колонка определялась по ПЕРВОЙ
строке, а picField над Boolean не рисует картинку при Ложь → колонка пропадала из
columns целиком. Модель сэмплит до 10 строк и ищет ячейку по colindex.
Проверено:
- 24-multirow-header (стенд, оба паттерна ERP) — зелёный; до правки красный;
- клик проверяется по факту (DOM select+focus), а не по эху clicked.column:
до правки клик по «Срок» молча жал «Исполнитель 2» и рапортовал успех;
- живьём на ERP: список задач — 9 честных колонок вместо фантомов, значения на
местах; форма операции (шапка 2 этажа, строка 3 под-ряда) — «Субконто Дт/Кт 1..3»
сохранены, ничего не поехало;
- полный регресс 28/28.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 4.8
parent
96b38d9f91
commit
7696a8b3ee
@@ -38,6 +38,15 @@ export default async function({ navigateSection, openCommand, clickElement, clos
|
||||
// и потеряет состояние. Гард ниже — через DOM: колонка безымянная и в columns не
|
||||
// попадает (её наличие readTable определяет по первой строке, а там Posted=false →
|
||||
// картинки нет), поэтому проверить её через публичный API нельзя.
|
||||
// Колонка безымянная (titleLocation:none) → readTable называет её '(picture)'. Её наличие
|
||||
// определяется сэмплированием НЕСКОЛЬКИХ строк: picField над Posted не рисует картинку при
|
||||
// Ложь, а первая строка списка — непроведённый документ. По одной первой строке колонка
|
||||
// выпадала из columns целиком.
|
||||
const tt = await readTable({ maxRows: 50 });
|
||||
assert.includes(tt.columns, '(picture)', 'безымянная picture-колонка есть в columns');
|
||||
const postedRow = tt.rows.find(r => r['Комментарий'] === 'StatePosted');
|
||||
assert.equal(postedRow['(picture)'], 'pic:0', 'у проведённого документа картинка нарисована');
|
||||
|
||||
const page = await getPage();
|
||||
const icons = await page.evaluate(() => {
|
||||
const grid = [...document.querySelectorAll('.grid')].find(g => g.offsetWidth > 0 && g.offsetHeight > 0);
|
||||
|
||||
Reference in New Issue
Block a user