Переход фокуса ввода (1С)

Для ускорения ввода данных можно добавить автоматический переход фокуса ввода на следующий элемент, после окончания ввода текущего (нажатия Enter или выбора значения из списка мышкой).

Это эффективно, например, для заполнения таблиц.

Для задания нужного элемента текущим используется свойство ТекущийЭлемент  у формы.

Его можно менять, например, при изменении значения текущего элемента, в обработчике  соытия  ПриИзменении.

Чтобы начать непосредственный ввод в ячейку таблицы формы, существует метод  ИзменитьСтроку() .

Но есть одна проблема. Если вызвать  ИзменитьСтроку() сразу после изменения свойства  ТекущийЭлемент , то ничего не произойдет. Фишка в том, что нужно сделать паузу, чтобы текущий элемент успел “установиться” к моменту начала “изменения строки”. Для этого можно воспользоваться процедурой ПодключитьОбработчикОжидания().

Также, если нужно ввести данные последовательно в несколько колонок таблицы, можно обрабатывать событие ПриИзменении у самой таблицы (а не отдельной колонки), определяя какая колонка была изменена с помощью параметра  Элемент, а с помощью простой структуры ( СтруктураПерехода) задать алгоритм перехода фокуса ввода между колонками.

Пример:

Работает на платформе 8.3.17 в режиме совместимости с 8.3.14.

One thought on “Переход фокуса ввода (1С)

  1. Спасибо автору за наводку.
    У меня заработало так…

    &НаКлиенте
    Процедура ПутевыеЛистыДатаПриИзменении(Элемент)

    ТекстРока = Элементы.ПутевыеЛисты.ТекущиеДанные;

    ТекстРока.ДатаВозврата = ТекстРока.Дата;
    Элементы.ПутевыеЛисты.ТекущийЭлемент = Элементы.ПутевыеЛистыДатаВозврата; // !!! Фокус ставлю на колонку, левее нужной на 1

    КонецПроцедуры

Добавить комментарий

Ваш адрес email не будет опубликован.