Как автоматически добавить новую строку в табличную часть и начать ввод текста в 1С 8.3?

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

При разработке интерфейсов на управляемых формах в 1С 8.3 часто возникает задача максимально ускорить работу пользователя. Одной из частых потребностей является автоматическое создание новой строки в табличной части и быстрый переход к редактированию конкретной колонки без предварительного нажатия кнопки «Добавить» или клавиши Insert.

Рассмотрим особенности платформы 1С:Предприятие 8.3, разберем ограничения управляемого интерфейса и изучим практические варианты решения этой задачи.

Ограничения управляемых форм 1С

Выясним причину, почему невозможно перехватить произвольное нажатие клавиши до попадания фокуса в ячейку. В управляемых формах 1С отсутствует глобальное событие перехвата клавиатурного ввода (наподобие события OnKeyPress в веб-разработке). События ввода текста, например ИзменениеТекстаРедактирования, привязаны к конкретным элементам формы (полям ввода) и срабатывают только тогда, когда элемент уже активирован и находится в режиме редактирования.

Тем не менее, решить задачу автоматического ввода данных можно с помощью штатных методов и альтернативных приемов разработки.

Способ 1. Программное добавление строки и переключение в режим редактирования

Разберем по шагам порядок действий при программном создании строки. Если необходимо, чтобы при создании документа пользователь сразу оказывался в новой строке табличной части, используем событие формы ПриОткрытии.

Для перевода добавленной строки в режим редактирования в платформе 1С применяется метод элемента формы ИзменитьСтроку(). Рассмотрим пример реализации:


&НаКлиенте
Процедура ПриОткрытии(Отказ)
    // Проверяем, что документ новый, чтобы не добавлять пустые строки при открытии существующих
    Если Объект.Ссылка.Пустая() Тогда
        // Добавляем новую строку в табличную часть на клиенте через Объект
        НоваяСтрока = Объект.Товары.Добавить();
        
        // Устанавливаем текущую строку и активный элемент (нужную колонку)
        Элементы.Товары.ТекущаяСтрока = НоваяСтрока.ПолучитьИдентификатор();
        Элементы.ТекущийЭлемент = Элементы.ТоварыНоменклатура;
        
        // Переводим ячейку в режим редактирования
        Элементы.Товары.ИзменитьСтроку();
    КонецЕсли;
КонецПроцедуры

Обратите внимание: крайне важно ограничивать такое добавление условием проверки нового объекта (Объект.Ссылка.Пустая()). В противном случае пустая строка будет добавляться при каждом просмотре ранее сохраненного документа.

Способ 2. Использование свойства «АвтоВводНовойСтроки»

Посмотрим на встроенные возможности таблицы управляемой формы. Платформа 1С содержит специальное свойство для таблиц:

  1. Откроем управляемую форму в конфигураторе и выделим элемент таблицы.
  2. В палитре свойств найдем параметр АвтоВводНовойСтроки.
  3. Установим значение Истина.

При включенном свойстве АвтоВводНовойСтроки платформа автоматически создает новую строку и открывает редактирование при нажатии клавиши Enter в конце предыдущей строки или в пустой табличной части.

Способ 3. Отдельное поле быстрого ввода (подбор данных)

Проанализируем еще один удобный вариант, который часто применяется для ускорения ввода данных. Вместо прямого ввода в табличную часть создается отдельное поле над таблицей.

  1. Добавим на форму реквизит и соответствующий элемент формы типа «Поле ввода» (например, ПолеБыстрогоВвода).
  2. В событии ПриИзменении этого поля напишем алгоритм переноса данных в табличную часть.

Рассмотрим пример кода:


&НаКлиенте
Процедура ПолеБыстрогоВводаПриИзменении(Элемент)
    Если ЗначениеЗаполнено(ПолеБыстрогоВвода) Тогда
        // Создаем новую строку в табличной части
        НоваяСтрока = Объект.Товары.Добавить();
        НоваяСтрока.Номенклатура = ПолеБыстрогоВвода;
        
        // Очищаем поле ввода для следующего сканирования или ввода
        ПолеБыстрогоВвода = Неопределено;
    КонецЕсли;
КонецПроцедуры

Такой подход избавляет пользователя от необходимости управлять фокусом ячеек таблицы и идеально подходит для потокового ввода или работы со сканером штрихкодов.

← На главную