При разработке интерфейсов в 1С:Предприятие 8 часто возникает задача повышения удобства ввода данных (UX). Типичный сценарий: пользователь нажимает кнопку Добавить в табличной части, и система автоматически переводит курсор в первую колонку или в поле, которое платформа считает приоритетным. Однако бизнес-процесс может требовать, чтобы ввод начинался, например, с даты или конкретной номенклатуры, а не с количества. Рассмотрим, как программно и интерактивно управлять фокусом при создании новой строки.
Проанализируем ситуацию: стандартная кнопка «Добавить» — это системная команда, встроенная в элемент формы типа Таблица. Мы не можем напрямую изменить код этой кнопки, но платформа предоставляет нам «хуки» (обработчики событий), которые срабатывают в ответ на действия пользователя. Наиболее подходящим событием здесь является ПриНачалеРедактирования.
Разберем этот метод по шагам:
Таблица (вашу табличную часть).ПриНачалеРедактирования.В этом обработчике нам доступны параметры НоваяСтрока и Копирование. Если НоваяСтрока имеет значение Истина, значит, пользователь нажал «Добавить» или «Инсерт». Если при этом Копирование равно Ложь, то это именно ввод новых данных с нуля. Именно в этот момент мы должны перехватить управление фокусом.
Рассмотрим пример кода:
&НаКлиенте
Процедура ТвояТаблицаПриНачалеРедактирования(Элемент, НоваяСтрока, Копирование)
// Проверяем, что это создание новой строки, а не редактирование старой
Если НоваяСтрока И НЕ Копирование Тогда
// Устанавливаем фокус на конкретное поле
// ВАЖНО: Указываем имя ЭЛЕМЕНТА формы (колонки), а не реквизита данных
Элементы.ТвояТаблица.ТекущийЭлемент = Элементы.ТвояТаблицаДатаЗаправки;
КонецЕсли;
КонецПроцедуры
В данном коде мы обращаемся к свойству ТекущийЭлемент самой таблицы. Обратите внимание, что мы указываем элемент Элементы.ТвояТаблицаДатаЗаправки. Программисту важно помнить, что имя колонки в дереве элементов формы может отличаться от имени реквизита в объекте метаданных.
Если мы хотим избежать написания программного кода, проанализируем настройки самих элементов формы. У каждой колонки (поля ввода) в таблице есть специфическое свойство — Пропускать при вводе (в конфигураторе это флажок в палитре свойств). Для быстрой проверки и настройки свойств элементов формы в пользовательском сеансе подойдёт обработка для редактирования свойств элементов форм в режиме 1С:Предприятие.
Выясним, как это работает: когда пользователь нажимает «Добавить», платформа ищет первую колонку, доступную для редактирования и не помеченную этим флагом. Если у вас в таблице первыми идут поля «Номер строки» или «Склад», которые заполняются автоматически, логично установить им признак ПропускатьПриВводе.
Преимущества этого метода:
1С.Enter или Tab те поля, которые редко редактируются вручную.Иногда требуется более сложная логика — например, при добавлении строки нужно сразу заполнить некоторые значения по умолчанию и только потом поставить фокус. В этом случае мы можем пойти по пути создания собственной кнопки.
Рассмотрим алгоритм действий:
КомандаДобавитьСтроку.Insert).Проанализируем программную реализацию такой команды:
&НаКлиенте
Процедура КомандаДобавитьСтроку(Команда)
// 1. Добавляем новую строку в данные
НоваяСтрока = Объект.ТвояТЧ.Добавить();
// 2. Устанавливаем фокус на таблицу, чтобы платформа понимала, где идет работа
ТекущийЭлемент = Элементы.ТвояТаблица;
// 3. Устанавливаем курсор на нужную строку (последнюю добавленную)
Элементы.ТвояТаблица.ТекущаяСтрока = НоваяСтрока.ПолучитьИдентификатор();
// 4. Активизируем нужную колонку
Элементы.ТвояТаблица.ТекущийЭлемент = Элементы.ТвояТаблицаДатаЗаправки;
КонецПроцедуры
Этот метод дает максимальный контроль. Например, мы можем программно проверить остатки или права доступа перед тем, как вообще разрешить добавление строки. Для ускорения программного добавления элементов и команд формы можно воспользоваться готовым модулем для программного изменения форм.
Выясним причину, почему фокус может «улетать» не туда, даже если код написан верно. Большое значение имеет свойство таблицы РежимРедактирования. В 1С существует два основных режима:
Если установлено Вход в панель, то управление фокусом через ТекущийЭлемент таблицы может работать некорректно, так как фокус должен передаваться элементам этой самой панели. Для быстрого ввода в таблицах документов чаще всего используется режим Непосредственно в списке.
Также рекомендуем проверить Порядок обхода элементов формы. В режиме редактирования формы (через меню Форма -> Состав и порядок обхода) убедитесь, что ваши колонки расположены в логической последовательности. Платформа часто ориентируется на этот список при передаче фокуса между элементами по клавише Tab или при инициализации новой строки.
Подведем итог. Для решения задачи наиболее «чистым» способом считается Способ 1 (использование события ПриНачалеРедактирования). Он не ломает стандартное поведение платформы, но позволяет точечно вмешаться в момент создания записи.
Важные замечания:
Элементы, а не пытаетесь присвоить значение реквизиту объекта.ТекущийЭлемент используется свойство ТекущаяКолонка у элемента ТабличноеПоле.ПропускатьПриВводе для нередактируемых полей значительно ускорит работу оператора, так как ему не придется лишний раз нажимать Enter для перехода к следующей значащей ячейке.Применяя эти методы, мы делаем интерфейс программы более отзывчивым и профессиональным, минимизируя лишние клики мышкой для пользователя.