При разработке интерфейсов на управляемых формах в 1С 8.3 часто возникает задача максимально ускорить работу пользователя. Одной из частых потребностей является автоматическое создание новой строки в табличной части и быстрый переход к редактированию конкретной колонки без предварительного нажатия кнопки «Добавить» или клавиши Insert.
Рассмотрим особенности платформы 1С:Предприятие 8.3, разберем ограничения управляемого интерфейса и изучим практические варианты решения этой задачи.
Выясним причину, почему невозможно перехватить произвольное нажатие клавиши до попадания фокуса в ячейку. В управляемых формах 1С отсутствует глобальное событие перехвата клавиатурного ввода (наподобие события OnKeyPress в веб-разработке). События ввода текста, например ИзменениеТекстаРедактирования, привязаны к конкретным элементам формы (полям ввода) и срабатывают только тогда, когда элемент уже активирован и находится в режиме редактирования.
Тем не менее, решить задачу автоматического ввода данных можно с помощью штатных методов и альтернативных приемов разработки.
Разберем по шагам порядок действий при программном создании строки. Если необходимо, чтобы при создании документа пользователь сразу оказывался в новой строке табличной части, используем событие формы ПриОткрытии.
Для перевода добавленной строки в режим редактирования в платформе 1С применяется метод элемента формы ИзменитьСтроку(). Рассмотрим пример реализации:
&НаКлиенте
Процедура ПриОткрытии(Отказ)
// Проверяем, что документ новый, чтобы не добавлять пустые строки при открытии существующих
Если Объект.Ссылка.Пустая() Тогда
// Добавляем новую строку в табличную часть на клиенте через Объект
НоваяСтрока = Объект.Товары.Добавить();
// Устанавливаем текущую строку и активный элемент (нужную колонку)
Элементы.Товары.ТекущаяСтрока = НоваяСтрока.ПолучитьИдентификатор();
Элементы.ТекущийЭлемент = Элементы.ТоварыНоменклатура;
// Переводим ячейку в режим редактирования
Элементы.Товары.ИзменитьСтроку();
КонецЕсли;
КонецПроцедуры
Обратите внимание: крайне важно ограничивать такое добавление условием проверки нового объекта (Объект.Ссылка.Пустая()). В противном случае пустая строка будет добавляться при каждом просмотре ранее сохраненного документа.
Посмотрим на встроенные возможности таблицы управляемой формы. Платформа 1С содержит специальное свойство для таблиц:
АвтоВводНовойСтроки.Истина.При включенном свойстве АвтоВводНовойСтроки платформа автоматически создает новую строку и открывает редактирование при нажатии клавиши Enter в конце предыдущей строки или в пустой табличной части.
Проанализируем еще один удобный вариант, который часто применяется для ускорения ввода данных. Вместо прямого ввода в табличную часть создается отдельное поле над таблицей.
ПолеБыстрогоВвода).ПриИзменении этого поля напишем алгоритм переноса данных в табличную часть.Рассмотрим пример кода:
&НаКлиенте
Процедура ПолеБыстрогоВводаПриИзменении(Элемент)
Если ЗначениеЗаполнено(ПолеБыстрогоВвода) Тогда
// Создаем новую строку в табличной части
НоваяСтрока = Объект.Товары.Добавить();
НоваяСтрока.Номенклатура = ПолеБыстрогоВвода;
// Очищаем поле ввода для следующего сканирования или ввода
ПолеБыстрогоВвода = Неопределено;
КонецЕсли;
КонецПроцедуры
Такой подход избавляет пользователя от необходимости управлять фокусом ячеек таблицы и идеально подходит для потокового ввода или работы со сканером штрихкодов.