test(web-test): расширить синтетический стенд под cell-click сценарии

Готовит почву под полноценные тесты clickElement({row,column}) на гридах
формы и virtualization-сценарии:

ТЧ Товары документа ПриходнаяНакладная — было 6 колонок, стало 18:
- Единица, Скидка, СтавкаНДС, СуммаСНДС — для ширины и mix типов
- кластер 3 boolean (ВРезерве, НаКомиссии, Подарок) подряд — для теста
  что focus-click при horizontal scroll умеет пропускать checkbox edge
- Серия, НомерГТД, СтранаПроисхождения, СрокГодности — text/date
- ПризнакКонтроля (boolean) последней колонкой — отдельный edge-case

Новый enum СтавкиНДС (БезНДС, НДС0, НДС10, НДС20) — реалистичный
тип для СтавкаНДС, чтобы не переиспользовать КатегорииЦен (не по смыслу).

Документ LongDoc с 30 строками в ТЧ — для тестов reveal-loop через
scroll: true, когда строка вне DOM-окна виртуализированного грида.
Идентифицируется через Комментарий='LongDoc'.

Колонка Комментарий в форме списка ПриходнаяНакладная — чтобы можно
было искать LongDoc через filterList.

Существующее покрытие 05-table сохранено: добавление колонок
аддитивно, ранее проверенные ассерты не затронуты.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
Nick Shirokov
2026-05-28 21:42:31 +03:00
parent 8f2fa21814
commit 44521c5c16
@@ -132,6 +132,18 @@ export const steps = [
validate: { script: 'meta-validate/scripts/meta-validate', flag: '-ObjectPath', path: 'Enums/СпособыУчёта' },
},
// Перечисление СтавкиНДС — для реквизита СтавкаНДС в ТЧ Товары (18-cell-click)
{
name: 'meta-compile: Перечисление СтавкиНДС',
script: 'meta-compile/scripts/meta-compile',
input: {
type: 'Enum', name: 'СтавкиНДС',
values: ['БезНДС', 'НДС0', 'НДС10', 'НДС20'],
},
args: { '-JsonPath': '{inputFile}', '-OutputDir': '{workDir}' },
validate: { script: 'meta-validate/scripts/meta-validate', flag: '-ObjectPath', path: 'Enums/СтавкиНДС' },
},
// Документ ПриходнаяНакладная — шапка + ТЧ
{
name: 'meta-compile: Документ ПриходнаяНакладная',
@@ -160,6 +172,11 @@ export const steps = [
],
tabularSections: [{
name: 'Товары',
// Существующие 6 реквизитов оставлены в начале (05-table / 06-document
// полагаются на их позицию). Ниже добавлены ~12 новых для тестов
// 18-cell-click: ширина для horizontal scroll, кластер из 3 boolean
// подряд и финальный boolean в конце — для проверки что focus-click
// умеет пропускать checkbox-ячейки при выборе edge-cell.
attributes: [
{ name: 'Номенклатура', type: 'CatalogRef.Номенклатура' },
{ name: 'Количество', type: 'Number', length: 15, precision: 3 },
@@ -168,6 +185,22 @@ export const steps = [
{ name: 'Согласовано', type: 'Boolean' },
// Источник — составной тип в ТЧ (для edit-dblclick через выбор типа)
{ name: 'Источник', type: 'CatalogRef.Контрагенты + CatalogRef.Номенклатура + CatalogRef.Организации' },
// Дополнительные колонки для ширины и для тестов 18-cell-click
{ name: 'Единица', type: 'String', length: 10 },
{ name: 'Скидка', type: 'Number', length: 10, precision: 2 },
{ name: 'СтавкаНДС', type: 'EnumRef.СтавкиНДС' },
{ name: 'СуммаСНДС', type: 'Number', length: 15, precision: 2 },
// Кластер из 3 boolean подряд — при определённом скролле они окажутся
// на правом краю viewport и фокус-клик должен их пропустить.
{ name: 'ВРезерве', type: 'Boolean' },
{ name: 'НаКомиссии', type: 'Boolean' },
{ name: 'Подарок', type: 'Boolean' },
{ name: 'Серия', type: 'String', length: 25 },
{ name: 'НомерГТД', type: 'String', length: 25 },
{ name: 'СтранаПроисхождения', type: 'String', length: 50 },
{ name: 'СрокГодности', type: 'Date' },
// Последняя колонка — тоже boolean (edge-case: краевая = checkbox).
{ name: 'ПризнакКонтроля', type: 'Boolean' },
],
}],
},
@@ -346,6 +379,22 @@ export const steps = [
\t\tКонецЦикла;
\t\tДок.Записать(РежимЗаписиДокумента.Запись);
\tКонецЦикла;
\t// Длинный документ — 30 строк для тестов виртуализации / reveal-loop (18-cell-click).
\t// Комментарий "LongDoc" — селектор для тестов, чтобы найти именно этот документ.
\tДокДлинный = Документы.ПриходнаяНакладная.СоздатьДокумент();
\tДокДлинный.Дата = ТекущаяДата();
\tДокДлинный.Организация = Организация;
\tДокДлинный.Контрагент = Контрагенты[0];
\tДокДлинный.Склад = "Основной";
\tДокДлинный.Комментарий = "LongDoc";
\tДля Поз = 1 По 30 Цикл
\t\tСтрока = ДокДлинный.Товары.Добавить();
\t\tСтрока.Номенклатура = Номенклатура[Поз % Номенклатура.Количество()];
\t\tСтрока.Количество = Поз;
\t\tСтрока.Цена = 50;
\t\tСтрока.Сумма = Строка.Количество * Строка.Цена;
\tКонецЦикла;
\tДокДлинный.Записать(РежимЗаписиДокумента.Запись);
КонецПроцедуры
`,
},
@@ -624,6 +673,20 @@ export const steps = [
// companion-имена дублируются в одной форме. form-compile использует
// имя элемента, не путь, для генерации companion-имён.
{ input: 'ИсточникТЧ', path: 'Объект.Товары.Источник', title: 'Источник' },
// Дополнительные колонки — для тестов 18-cell-click (ширина для horizontal
// scroll + кластер boolean + последняя колонка boolean).
{ input: 'Единица', path: 'Объект.Товары.Единица', title: 'Единица' },
{ input: 'Скидка', path: 'Объект.Товары.Скидка', title: 'Скидка' },
{ input: 'СтавкаНДС', path: 'Объект.Товары.СтавкаНДС', title: 'Ставка НДС' },
{ input: 'СуммаСНДС', path: 'Объект.Товары.СуммаСНДС', title: 'Сумма с НДС' },
{ check: 'ВРезерве', path: 'Объект.Товары.ВРезерве', title: 'В резерве' },
{ check: 'НаКомиссии', path: 'Объект.Товары.НаКомиссии', title: 'На комиссии' },
{ check: 'Подарок', path: 'Объект.Товары.Подарок', title: 'Подарок' },
{ input: 'Серия', path: 'Объект.Товары.Серия', title: 'Серия' },
{ input: 'НомерГТД', path: 'Объект.Товары.НомерГТД', title: 'Номер ГТД' },
{ input: 'СтранаПроисхождения', path: 'Объект.Товары.СтранаПроисхождения', title: 'Страна происхождения' },
{ input: 'СрокГодности', path: 'Объект.Товары.СрокГодности', title: 'Срок годности' },
{ check: 'ПризнакКонтроля', path: 'Объект.Товары.ПризнакКонтроля', title: 'Признак контроля' },
]},
],
},
@@ -651,6 +714,9 @@ export const steps = [
{ input: 'Date', path: 'Список.Date', title: 'Дата' },
{ input: 'Number', path: 'Список.Number', title: 'Номер' },
{ input: 'Контрагент', path: 'Список.Контрагент', title: 'Контрагент' },
// Комментарий — для тестов 18-cell-click: поиск длинного документа
// через filterList по значению 'LongDoc'.
{ input: 'Комментарий', path: 'Список.Комментарий', title: 'Комментарий' },
{ input: 'Posted', path: 'Список.Posted', title: 'Проведён' },
]},
],