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