Как заблокировать стандартный поиск по Ctrl+F в таблице, сохранив возможность расширенного поиска?

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

При разработке интерфейсов на платформе 1С:Предприятие 8.3 часто возникает задача кастомизации поведения стандартных горячих клавиш. Одной из наиболее распространенных проблем является необходимость отключения стандартного поиска (вызываемого по Ctrl+F) в табличных частях или динамических списках, при этом сохранив доступ пользователя к расширенному поиску по Alt+F. Стандартное поведение платформы таково, что даже при скрытой строке поиска нажатие Ctrl+F может вызывать окно поиска или активировать поисковую строку, что иногда мешает бизнес-логике приложения.

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

Метод 1. Настройка состава команд элемента «Таблица»

Первым делом проанализируем настройки самого элемента формы. У любого элемента типа Таблица (будь то табличная часть документа или ДинамическийСписок) существует встроенный набор стандартных команд. Даже если вы не выносите их на командную панель, платформа держит их в «горячем доступе».

Выполним следующие шаги по настройке:

  1. Откроем форму в конфигураторе и выделим нужный элемент Таблица.
  2. В окне свойств найдем гиперссылку «Состав команд».
  3. В открывшемся окне снимем флажок «Автозаполнение», если он установлен.
  4. В списке стандартных команд найдем и снимем галочки со следующих пунктов:
    • Найти... (Find)
    • Найти следующий (FindNext)
    • Найти предыдущий (FindPrevious)
    • Отменить поиск (CancelSearch)

Важный нюанс: если мы просто удалим команды, 1С может попытаться подставить стандартные механизмы поиска, если фокус находится в таблице. Поэтому перейдем к более радикальным методам управления интерфейсом.

Метод 2. Использование команды-заглушки (Перехват сочетания клавиш)

Наиболее надежным способом, подтвержденным практикой, является создание фиктивной команды на уровне формы. Этот метод позволяет «перехватить» нажатие Ctrl+F до того, как его обработает системный механизм таблицы.

Разберем алгоритм реализации этого метода:

  1. Перейдем на закладку «Команды» в редакторе управляемой формы.
  2. Создадим новую команду и назовем ее, например, ЗаглушкаПоиска.
  3. В свойствах этой команды найдем параметр «Сочетание клавиш» и установим там Ctrl+F.
  4. Создадим обработчик действия для этой команды на клиенте. Тело процедуры оставим абсолютно пустым.

Пример кода обработчика:


&НаКлиенте
Процедура ЗаглушкаПоиска(Команда)
    // Данный обработчик намеренно оставлен пустым для блокировки системного поиска
КонецПроцедуры

Проанализируем, почему это работает. Когда пользователь нажимает Ctrl+F, платформа сначала ищет команду формы с таким сочетанием клавиш. Найдя нашу команду ЗаглушкаПоиска, она выполняет её пустой код и прекращает дальнейшую обработку нажатия. Системное окно поиска при этом не открывается. При необходимости массово автоматизировать этот процесс на множестве форм пригодится общий модуль для программного изменения управляемых форм.

Обратите внимание: чтобы команда работала, она должна быть активной. Если платформа «оптимизирует» форму и решит, что неиспользуемая команда не нужна, метод может не сработать. Убедитесь, что свойство команды Изменяет данные установлено в значение Ложь (чтобы не появлялась «звездочка» модификации формы), но сама команда доступна в контексте формы.

Метод 3. Управление свойствами отображения поиска

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

Если оставить Положение управления поиском в значении Авто, платформа может автоматически активировать режим поиска при нажатии Ctrl+F, даже если сама строка визуально скрыта. Установка обоих свойств в Нет минимизирует вероятность случайного вызова интерфейса поиска.

Метод 4. Блокировка через свойство «Сочетание клавиш» элемента

Рассмотрим интересный эффект, замеченный разработчиками: если у самого элемента формы (например, текстового поля или таблицы) в палитре свойств задать параметр Сочетание клавиш равным Ctrl+F, то поиск внутри этого конкретного элемента перестает работать стандартным образом.

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

Метод 5. Особенности динамических списков и контекстного меню

Если ваша таблица отображает данные через ДинамическийСписок, поиск вшит в него на уровне ядра платформы. Часто поиск вызывается пользователями через правую кнопку мыши. Чтобы исключить эту возможность, выполним следующие действия:

  1. В свойствах таблицы найдем параметр «Контекстное меню».
  2. Если там установлено Авто, создадим собственное контекстное меню, чтобы переопределить стандартное.
  3. Убедимся, что в нашем пользовательском контекстном меню отсутствуют пункты, связанные с поиском и фильтрацией.

Также стоит проверить свойство «Режим выделения». В некоторых режимах (например, при полном запрете выделения или специфических настройках множественного выбора) доступность команд поиска может изменяться программно.

Как сохранить работоспособность Alt+F?

Выясним важный момент: почему при блокировке Ctrl+F может перестать работать Alt+F (расширенный поиск)? В системе 1С расширенный поиск часто является надстройкой над базовым механизмом. Если вы полностью удалите все команды поиска из «Состава команд» (как описано в Методе 1), вы можете лишить пользователя и расширенного поиска тоже.

Рекомендация: Чтобы оставить Alt+F активным, не удаляйте стандартные команды из состава команд таблицы. Вместо этого используйте Метод 2 (Команда-заглушка). Поскольку вы назначите сочетание Ctrl+F своей пустой команде, оно будет перехвачено, а сочетание Alt+F останется свободным для вызова стандартного окна расширенного поиска. Таким образом, вы добьетесь идеального баланса: «простой» поиск заблокирован, а «сложный» доступен специалистам.

Взаимодействие с глобальным поиском платформы

Проанализируем ситуацию, когда нажатие Ctrl+F открывает не поиск по таблице, а глобальный поиск по всей программе (полнотекстовый поиск). Это часто происходит в версиях платформы 8.3.15 и выше. Если фокус ввода не находится строго внутри ячейки таблицы, 1С активирует глобальный поиск.

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

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

← На главную