Почему в таблице управляемой формы 1С при нажатии Enter добавляется новая строка вместо перехода в следующую колонку?

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

При переходе с платформы 1С:Предприятие 8.2 на 8.3 или при разработке новых интерфейсов на управляемых формах программисты часто сталкиваются с неожиданным поведением табличных частей. Суть проблемы заключается в том, что после выбора значения в ячейке (особенно если это справочник или перечисление) нажатие клавиши Enter не переводит фокус на следующую колонку, а инициирует добавление новой строки или просто «замораживает» фокус на текущем элементе. Разберем подробно, почему так происходит и как вернуть привычную навигацию.

Различие в логике клавиш Enter и Tab в версии 8.3

Первым делом проанализируем базовые изменения в платформе. Начиная с версии 8.3.15, логика работы клавиатуры в управляемых формах была приведена к современным стандартам веб-приложений. Теперь клавиши имеют строгое разделение функций:

  1. Tab — предназначен для навигации между элементами управления и колонками таблицы.
  2. Enter — служит для завершения редактирования текущего поля или выполнения команды по умолчанию.

Если пользователь привык работать «по-старому», нажимая только Enter, он может столкнуться с тем, что система интерпретирует это нажатие как сигнал к окончанию ввода в строке. Если при этом в свойствах таблицы включены определенные опции, 1С автоматически создает новую строку для ускорения ввода данных.

Метод 1. Настройка свойства АвтоВводНовойСтроки

Проанализируем свойство таблицы АвтоВводНовойСтроки. Это первое, на что стоит обратить внимание. Если для элемента ТаблицаФормы установлено значение Истина, то после заполнения последней колонки (или при определенных условиях в середине строки) нажатие Enter создаст новую запись.

Попробуем отключить это поведение:

  1. Откройте управляемую форму в конфигураторе.
  2. Выберите элемент управления Таблица.
  3. В окне свойств найдите АвтоВводНовойСтроки (AutoInsertNewRow) и установите его в значение Ложь.

Однако, как показывает практика, одного этого свойства часто недостаточно: фокус может просто оставаться в текущей ячейке, не переходя дальше.

Метод 2. Проверка свойства Режим редактирования

Выясним причину, связанную с тем, как ячейка открывается для ввода. У таблицы формы есть свойство РежимРедактирования (EditMode). Рассмотрим доступные варианты:

Для корректного перехода между колонками рекомендуется устанавливать режим Непосредственно в списке. Это минимизирует количество необходимых нажатий клавиш и стабилизирует навигацию в тонком клиенте.

Метод 3. Влияние кнопки по умолчанию на форме

Рассмотрим ситуацию, которая часто ускользает от внимания разработчика. Если на форме есть кнопка (например, «Записать» или «ОК»), у которой установлено свойство КнопкаПоУмолчанию в значение Истина, то платформа будет перехватывать нажатие Enter в любой части формы, включая таблицу.

В этом случае система пытается одновременно завершить ввод в ячейке и нажать «главную» кнопку формы. Это приводит к хаотичному поведению фокуса. Проверьте все командные панели формы и убедитесь, что ни одна кнопка не назначена основной, если требуется сложная навигация внутри таблицы.

Метод 4. Особенности колонок со ссылочными типами данных

Проанализируем поведение полей с типами СправочникСсылка или ПеречислениеСсылка. Если у колонки включены свойства БыстрыйВыбор или ВыборИзСписка, то после выбора значения нажатие Enter подтверждает выбор в выпадающем списке, но не передает сигнал о переходе к следующему элементу формы.

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

Метод 5. Программная установка фокуса (решение для продвинутых)

Если стандартные настройки не помогают, мы можем принудительно переместить курсор в нужную колонку. Вопреки распространенному мнению, в управляемых формах это реализуется достаточно просто. Рассмотрим пример кода для события ячейки:


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

Этот код сработает сразу после того, как пользователь выберет значение из списка. Фокус мгновенно переместится в следующую колонку, имитируя поведение клавиши Tab.

Метод 6. Режим совместимости конфигурации

Посмотрим на ситуацию со стороны системных настроек. Если ваша конфигурация была сконвертирована из версии 8.2, проверьте свойство корня конфигурации РежимСовместимости. Если там указано «Версия 8.2.13» или ниже, механизмы отрисовки управляемых форм могут работать по устаревшим алгоритмам, которые конфликтуют с логикой платформы 8.3. Рекомендуется постепенно повышать режим совместимости до актуального (например, «Не использовать»), предварительно протестировав стабильность системы.

Резюме и рекомендации

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

  1. Используйте клавишу Tab для перемещения — это стандарт для управляемых интерфейсов.
  2. Отключите АвтоВводНовойСтроки в свойствах таблицы, если автоматическое создание строк мешает пользователям.
  3. Убедитесь, что на форме нет «Кнопки по умолчанию», перехватывающей Enter.
  4. В критических местах, где навигация «застревает», используйте установку ЭтаФорма.ТекущийЭлемент в обработчиках ПриИзменении.

Следуя этим правилам, мы обеспечим комфортную работу пользователей и избавим их от необходимости совершать лишние клики мышкой при заполнении документов и обработок.

← На главную