fix(web-test): fillTableRow распознаёт переформатированные число/дату в choice-ячейке

fillChoiceCell определял «прижился ли paste» через normYo(after).includes(text),
что ломалось на маск-инпутах: число/дата переформатируются (1234.56 → «1 234,56»,
группировка неразрывным пробелом, запятая) → includes давал false → ложный уход
в F4, где у числа открывался калькулятор и залипал (no_selection_form).

Заменил на поведенческий дискриминатор: появился EDD → ссылка (dropdown);
инпут изменился на непустое без EDD → редактируемая ячейка (direct); инпут
не изменился → НачалоВыбора → F4-форма. + страховка: если F4 открыл не форму
выбора (калькулятор/календарь) — Escape и спасение значения.

Также в EDD-ветке основного Tab-цикла убран слепой fallback items[0]: при
отсутствии exact/includes-совпадения возвращается not_found с очисткой поля,
а не подставляется произвольная первая запись автокомплита.

Регресс: в стенд (дерево) добавлены choice-колонки Число/Дата и булево-поле-ввода;
в 16-tree-form — шаги choice-number/choice-date/bool-input. Полный регресс: 22 passed.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
Nick Shirokov
2026-06-02 13:42:34 +03:00
parent c147fd5cb7
commit 9774b8f1c3
3 changed files with 152 additions and 13 deletions
@@ -818,6 +818,14 @@ export const steps = [
// Редактируемая строковая колонка: у поля есть кнопка выбора, но НачалоВыбора пустой
// (F4 ничего не открывает), текст вводится напрямую — модель ячейки «Значение» Консоли запросов.
{ name: 'РедактируемаяСтрока', type: 'String', title: 'Редактируемая строка' },
// Редактируемые choice-ячейки Число и Дата (та же модель «Значение» КЗ): кнопка выбора +
// пустой НачалоВыбора, текст вводится напрямую и ПЕРЕФОРМАТИРУЕТСЯ маск-инпутом
// (1234.56 → «1 234,56»). Регресс-guard для fillChoiceCell — раньше includes-проверка
// рвалась о переформатирование → ложное F4 → калькулятор.
{ name: 'РедактируемоеЧисло', type: 'Number(15,2)', title: 'Редактируемое число' },
{ name: 'РедактируемаяДата', type: 'date', title: 'Редактируемая дата' },
// Булева колонка-флажок (отдельно от Картинка) — для fillTableRow toggle на дереве.
{ name: 'Булево', type: 'Boolean', title: 'Булево' },
]},
// Список значений для программного выбора (ПоказатьВыборЭлемента).
{ name: 'СписокТипов', type: 'ValueList' },
@@ -841,6 +849,17 @@ export const steps = [
// кнопка iCB есть, F4 ничего не открывает, текст редактируется напрямую (модель «Значение»).
{ input: 'ДеревоРедактируемаяСтрока', path: 'Дерево.РедактируемаяСтрока', title: 'Редактируемая строка',
choiceButton: true, on: ['StartChoice'], handlers: { StartChoice: 'ДеревоРедактируемаяСтрокаНачалоВыбора' } },
// Редактируемые choice-ячейки Число/Дата: кнопка iCB + пустой НачалоВыбора → текст
// редактируется напрямую, значение переформатируется маск-инпутом (модель «Значение» КЗ).
{ input: 'ДеревоРедактируемоеЧисло', path: 'Дерево.РедактируемоеЧисло', title: 'Редактируемое число',
choiceButton: true, on: ['StartChoice'], handlers: { StartChoice: 'ДеревоРедактируемоеЧислоНачалоВыбора' } },
{ input: 'ДеревоРедактируемаяДата', path: 'Дерево.РедактируемаяДата', title: 'Редактируемая дата',
choiceButton: true, on: ['StartChoice'], handlers: { StartChoice: 'ДеревоРедактируемаяДатаНачалоВыбора' } },
// Булево как ПОЛЕ ВВОДА с кнопкой выбора (не флажок): в ячейке выбор Да/Нет —
// fillTableRow идёт через dropdown-путь (как «Значение» типа Булево в Консоли
// запросов), не toggle. Кнопка iCB + пустой НачалоВыбора — единая модель «Значение».
{ input: 'ДеревоБулево', path: 'Дерево.Булево', title: 'Булево',
choiceButton: true, on: ['StartChoice'], handlers: { StartChoice: 'ДеревоБулевоНачалоВыбора' } },
]},
],
},
@@ -926,6 +945,25 @@ export const steps = [
\t// Текст вводится напрямую — модель ячейки «Значение» типовой Консоли запросов.
\tСтандартнаяОбработка = Ложь;
КонецПроцедуры
&НаКлиенте
Процедура ДеревоРедактируемоеЧислоНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
\t// Пустой обработчик — число редактируется напрямую (модель «Значение» КЗ).
\tСтандартнаяОбработка = Ложь;
КонецПроцедуры
&НаКлиенте
Процедура ДеревоРедактируемаяДатаНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
\t// Пустой обработчик — дата редактируется напрямую (модель «Значение» КЗ).
\tСтандартнаяОбработка = Ложь;
КонецПроцедуры
&НаКлиенте
Процедура ДеревоБулевоНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
\t// Пустой обработчик: кнопка выбора есть, F4 ничего не открывает; значение задаётся
\t// штатным списком Да/Нет поля ввода булева (модель «Значение» типа Булево в КЗ).
\tСтандартнаяОбработка = Ложь;
КонецПроцедуры
`,
},