При разработке интерфейсов на платформе 1С:Предприятие 8.3 часто возникает задача кастомизации поведения стандартных горячих клавиш. Одной из наиболее распространенных проблем является необходимость отключения стандартного поиска (вызываемого по Ctrl+F) в табличных частях или динамических списках, при этом сохранив доступ пользователя к расширенному поиску по Alt+F. Стандартное поведение платформы таково, что даже при скрытой строке поиска нажатие Ctrl+F может вызывать окно поиска или активировать поисковую строку, что иногда мешает бизнес-логике приложения.
В этой статье мы подробно разберем несколько эффективных методов решения этой задачи, проанализируем настройки свойств элементов формы и выясним, как правильно «перехватить» нажатие клавиш без ущерба для производительности системы. Для интерактивного анализа и изменения настроек элементов непосредственно во время работы программы можно задействовать инструмент для редактирования управляемых форм в режиме Предприятия.
Первым делом проанализируем настройки самого элемента формы. У любого элемента типа Таблица (будь то табличная часть документа или ДинамическийСписок) существует встроенный набор стандартных команд. Даже если вы не выносите их на командную панель, платформа держит их в «горячем доступе».
Выполним следующие шаги по настройке:
Таблица.Найти... (Find)Найти следующий (FindNext)Найти предыдущий (FindPrevious)Отменить поиск (CancelSearch)Важный нюанс: если мы просто удалим команды, 1С может попытаться подставить стандартные механизмы поиска, если фокус находится в таблице. Поэтому перейдем к более радикальным методам управления интерфейсом.
Наиболее надежным способом, подтвержденным практикой, является создание фиктивной команды на уровне формы. Этот метод позволяет «перехватить» нажатие Ctrl+F до того, как его обработает системный механизм таблицы.
Разберем алгоритм реализации этого метода:
ЗаглушкаПоиска.Ctrl+F.Пример кода обработчика:
&НаКлиенте
Процедура ЗаглушкаПоиска(Команда)
// Данный обработчик намеренно оставлен пустым для блокировки системного поиска
КонецПроцедуры
Проанализируем, почему это работает. Когда пользователь нажимает Ctrl+F, платформа сначала ищет команду формы с таким сочетанием клавиш. Найдя нашу команду ЗаглушкаПоиска, она выполняет её пустой код и прекращает дальнейшую обработку нажатия. Системное окно поиска при этом не открывается. При необходимости массово автоматизировать этот процесс на множестве форм пригодится общий модуль для программного изменения управляемых форм.
Обратите внимание: чтобы команда работала, она должна быть активной. Если платформа «оптимизирует» форму и решит, что неиспользуемая команда не нужна, метод может не сработать. Убедитесь, что свойство команды Изменяет данные установлено в значение Ложь (чтобы не появлялась «звездочка» модификации формы), но сама команда доступна в контексте формы.
Начиная с версии платформы 8.3.10, механизмы поиска стали более сложными. Чтобы гарантированно скрыть элементы управления поиском, нам необходимо изменить два ключевых свойства таблицы в окне свойств конфигуратора:
Нет. Это уберет саму строку, которая обычно появляется над таблицей.Нет. Это отключит кнопку «лупы» и связанные с ней элементы в командной панели.Если оставить Положение управления поиском в значении Авто, платформа может автоматически активировать режим поиска при нажатии Ctrl+F, даже если сама строка визуально скрыта. Установка обоих свойств в Нет минимизирует вероятность случайного вызова интерфейса поиска.
Рассмотрим интересный эффект, замеченный разработчиками: если у самого элемента формы (например, текстового поля или таблицы) в палитре свойств задать параметр Сочетание клавиш равным Ctrl+F, то поиск внутри этого конкретного элемента перестает работать стандартным образом.
Этот метод удобен тем, что не требует написания кода программных обработчиков. Однако он работает избирательно и зависит от того, какой именно элемент в данный момент находится в фокусе. Для гарантированного результата рекомендуется комбинировать этот подход с методом создания команды-заглушки на уровне всей формы.
Если ваша таблица отображает данные через ДинамическийСписок, поиск вшит в него на уровне ядра платформы. Часто поиск вызывается пользователями через правую кнопку мыши. Чтобы исключить эту возможность, выполним следующие действия:
Авто, создадим собственное контекстное меню, чтобы переопределить стандартное.Также стоит проверить свойство «Режим выделения». В некоторых режимах (например, при полном запрете выделения или специфических настройках множественного выбора) доступность команд поиска может изменяться программно.
Выясним важный момент: почему при блокировке Ctrl+F может перестать работать Alt+F (расширенный поиск)? В системе 1С расширенный поиск часто является надстройкой над базовым механизмом. Если вы полностью удалите все команды поиска из «Состава команд» (как описано в Методе 1), вы можете лишить пользователя и расширенного поиска тоже.
Рекомендация: Чтобы оставить Alt+F активным, не удаляйте стандартные команды из состава команд таблицы. Вместо этого используйте Метод 2 (Команда-заглушка). Поскольку вы назначите сочетание Ctrl+F своей пустой команде, оно будет перехвачено, а сочетание Alt+F останется свободным для вызова стандартного окна расширенного поиска. Таким образом, вы добьетесь идеального баланса: «простой» поиск заблокирован, а «сложный» доступен специалистам.
Проанализируем ситуацию, когда нажатие Ctrl+F открывает не поиск по таблице, а глобальный поиск по всей программе (полнотекстовый поиск). Это часто происходит в версиях платформы 8.3.15 и выше. Если фокус ввода не находится строго внутри ячейки таблицы, 1С активирует глобальный поиск.
Если ваша задача — полностью исключить использование этой комбинации клавиш в рамках конкретной формы, единственный надежный путь — создание команды формы с горячими клавишами Ctrl+F, как было описано выше. Это «привяжет» данное сочетание к форме и не даст платформе вызвать ни локальный, ни глобальный поиск, пока данное окно активно.
Рассмотренные нами методы позволяют гибко настроить интерфейс под нужды заказчика, избегая случайных срабатываний стандартных механизмов поиска в тех местах, где они могут привести к ошибкам или замедлению работы системы.