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