Для ускорения ввода данных можно добавить автоматический переход фокуса ввода на следующий элемент, после окончания ввода текущего (нажатия Enter или выбора значения из списка мышкой).
Это эффективно, например, для заполнения таблиц.
Для задания нужного элемента текущим используется свойство ТекущийЭлемент у формы.
Его можно менять, например, при изменении значения текущего элемента, в обработчике соытия ПриИзменении.
Чтобы начать непосредственный ввод в ячейку таблицы формы, существует метод ИзменитьСтроку() .
Но есть одна проблема. Если вызвать ИзменитьСтроку() сразу после изменения свойства ТекущийЭлемент , то ничего не произойдет. Фишка в том, что нужно сделать паузу, чтобы текущий элемент успел “установиться” к моменту начала “изменения строки”. Для этого можно воспользоваться процедурой ПодключитьОбработчикОжидания().
Также, если нужно ввести данные последовательно в несколько колонок таблицы, можно обрабатывать событие ПриИзменении у самой таблицы (а не отдельной колонки), определяя какая колонка была изменена с помощью параметра Элемент, а с помощью простой структуры ( СтруктураПерехода) задать алгоритм перехода фокуса ввода между колонками.
Пример:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
&НаКлиенте Процедура ТоварыПриИзменении(Элемент) // очередность колонок: Номенклатура, Количество, ВидЦены, Цена и т.д. СтруктураПерехода = Новый Структура(); СтруктураПерехода.Вставить(Элементы.ТоварыНоменклатура.Имя, Элементы.ТоварыКоличество.Имя); СтруктураПерехода.Вставить(Элементы.ТоварыКоличество.Имя, Элементы.ТоварыВидЦены.Имя); СтруктураПерехода.Вставить(Элементы.ТоварыВидЦены.Имя, Элементы.ТоварыЦена.Имя); // по текущему элемену определяем следующий Если (СтруктураПерехода.Свойство(Элементы.Товары.ТекущийЭлемент.Имя)) Тогда СледЭлемент = СтруктураПерехода[Элементы.Товары.ТекущийЭлемент.Имя]; Элементы.Товары.ТекущийЭлемент = Элементы[СледЭлемент]; // так не выйдет: //Элементы.Товары.ИзменитьСтроку(); // нужно сделать паузу, чтобы текущий элемент успел "установиться" к моменту начала "изменения строки" ПодключитьОбработчикОжидания("ИзменитьСтрокуТовары", 0.1, Истина); КонецЕсли; КонецПроцедуры &НаКлиенте Процедура ИзменитьСтрокуТовары() Элементы.Товары.ИзменитьСтроку(); КонецПроцедуры |
Работает на платформе 8.3.17 в режиме совместимости с 8.3.14.
Спасибо автору за наводку.
У меня заработало так…
&НаКлиенте
Процедура ПутевыеЛистыДатаПриИзменении(Элемент)
ТекстРока = Элементы.ПутевыеЛисты.ТекущиеДанные;
ТекстРока.ДатаВозврата = ТекстРока.Дата;
Элементы.ПутевыеЛисты.ТекущийЭлемент = Элементы.ПутевыеЛистыДатаВозврата; // !!! Фокус ставлю на колонку, левее нужной на 1
КонецПроцедуры