Ограничение горячих клавиш в 1С для пользователей базы

· 9 мин

Содержание

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

Чаще всего задача звучит так: оператор нажал Shift+Del в списке документов и удалил строку напрямую, мимо пометки на удаление. Или через Все функции залез в регистр сведений и поправил данные вручную. Клавиши сами по себе безобидны — опасны действия, которые они запускают. Поэтому ограничивать нужно не «клавиатуру», а конкретные команды.

Зачем администраторы ограничивают сочетания клавиш

Запрос почти всегда идёт от одной из ситуаций:

  • 🗑️ Прямое удаление данных . Shift+Del в списке удаляет объект без пометки и без контроля ссылочной целостности на уровне интерфейса.
  • ✏️ Правка «мимо документов». Через меню Все функции пользователь открывает регистры и справочники, которые не должен трогать.
  • 📋 Случайное создание/копирование. Ins создаёт новый элемент, F9 копирует текущий — операторы плодят дубли.
  • 🖥️ Киоск или общий терминал. На складе или в торговом зале база работает в RDP-сессии, и нужно, чтобы с клавиатуры нельзя было выйти из программы или свернуть окно.

Во всех случаях цель одна — убрать у пользователя возможность сделать лишнее. Разберём доступные рычаги от самого правильного (права) к самому грубому (ограничение ОС).

Что в 1С 8.3 отключается, а что нет

Важная развилка, которую обходят большинство инструкций. В управляемых формах 8.3 нет универсального обработчика нажатий клавиш: вы не можете написать в модуле формы «если нажали F9 — ничего не делай». События вроде «ПриНажатииКлавиши» для формы в целом в платформе отсутствуют.

Зато почти каждое сочетание клавиш в 1С привязано к команде. Del — к пометке на удаление, Ins — к добавлению, F9 — к копированию, кнопки печати и проведения — к своим командам. Отключается не клавиша, а команда: убрали право или доступность команды — её «горячая клавиша» перестаёт срабатывать сама собой.

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

Что именно нужно ограничить?

Ограничение через роли и права в конфигураторе

Это главный и единственный полностью поддерживаемый способ. Открываете Конфигуратор, заходите в нужную роль в ветке Общие → Роли и снимаете у объектов интерактивные права. Обычные права (Чтение, Изменение) оставляете — данные через код и документы продолжают обрабатываться, а вот руками из списка пользователь уже ничего не сделает.

Соответствие действий и прав:

Действие (и типовая клавиша)Какое право снять в роли
Прямое удаление строки (Shift+Del)Интерактивное удаление
Пометка на удаление (Del)Интерактивная пометка удаления
Снятие пометкиИнтерактивное снятие пометки удаления
Создание нового (Ins)Интерактивное добавление
Копирование строки (F9)Интерактивное добавление
Ручной ввод в поле спискомВвод по строке

Логика простая: копирование и создание — это одно и то же интерактивное добавление, поэтому снятие одного права закрывает обе клавиши. Удаление помеченных объектов (Файл → Удаление помеченных) регулируется отдельным правом «Интерактивное удаление помеченных».

Права назначаются на роль, а не на отдельную базу или сеанс. Проверьте, что у пользователя нет второй роли (например, «Полные права»), которая возвращает запрет обратно — права ролей складываются по принципу «разрешено, если разрешено хотя бы в одной».

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

Разберём на примере. Кассиру нужно проводить чеки и смотреть справочники, но запрещено удалять и копировать документы . Создаёте отдельную роль «Кассир_Ограничения» (или правите существующую), проходите по документам, с которыми он работает, и снимаете у них «Интерактивное удаление», «Интерактивная пометка удаления» и «Интерактивное добавление». Право «Проведение» и «Интерактивное проведение» оставляете — чеки проводятся. Назначаете роль пользователю в списке Администрирование → Настройки пользователей и прав → Пользователи (в типовых конфигурациях на БП 3.0 и УТ 11) или через конфигуратор в разделе Администрирование → Пользователи.

Проверить результат проще всего под реальной учётной записью: зайдите в базу этим пользователем, откройте список документов и попробуйте нажать Shift+Del и F9. Если право снято и второй роли нет — ничего не произойдёт, команды в контекстном меню станут неактивными. Тестировать под администратором бесполезно: у «Полных прав» ограничения не действуют.

Управление командами и кнопками в модуле формы

Если нужно отключить конкретную команду именно на вашей форме (например, собственную кнопку, которой вы назначили сочетание клавиш), работайте с её свойством Доступность или Видимость в модуле формы.

Сочетание клавиш — это свойство кнопки командной панели (СочетаниеКлавиш). Пока кнопка недоступна, её сочетание не срабатывает. Включаем ограничение в обработчике ПриСозданииНаСервере, чтобы оно применялось сразу при открытии формы:

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)

    // ПолныеПрава — имя роли, которой ограничение не касается
    Если НЕ РольДоступна("ПолныеПрава") Тогда
        // КнопкаВыполнить — подставьте имя кнопки из дерева элементов формы
        Элементы.КнопкаВыполнить.Доступность = Ложь;
    КонецЕсли;

КонецПроцедуры

Имя элемента (КнопкаВыполнить в примере) берите из дерева элементов конкретной формы — не из головы. Функция РольДоступна проверяет роль текущего пользователя и возвращает Истина, если роль назначена.

Если нужно совсем убрать сочетание клавиш у стандартной кнопки формы, не трогая её доступность, очистите свойство СочетаниеКлавиш в конфигураторе — задайте значение «НетСочетания». Тогда кнопка останется, но горячая клавиша на неё работать не будет.

Этот способ хорош для точечной настройки собственных команд. Но защищать им данные — ненадёжно: доступность формы не заменяет прав роли. Правку через права закрывают роли, а модуль формы — лишь прячет кнопку в интерфейсе.

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

Внешние компоненты и перехват клавиатуры: почему не стоит

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

  • 🔧 Поддержка. Компоненту нужно собирать отдельно под каждую разрядность и ОС (Windows/Linux), а при обновлении платформы поведение может сломаться.
  • 🛡️ Антивирусы. Глобальный перехват клавиатуры — типичное поведение клавиатурных шпионов, и защитное ПО часто блокирует такие компоненты.
  • 🌐 Клиенты. В веб-клиенте внешняя компонента так работать не будет — браузер не отдаст глобальный хук клавиатуры.

Платформа сознательно не даёт штатного перехвата клавиш: задачу решают права и ограничение доступа, а не борьба с клавиатурой. Если кто-то предлагает «универсальную компоненту, отключающую все горячие клавиши», относитесь к этому скептически — поддерживать её придётся вам.

Настройки платформы: меню «Все функции» и служебные команды

Отдельная болевая точка — меню Все функции, через которое пользователь открывает любой объект конфигурации напрямую. Отключать его правами по объектам долго; проще убрать саму команду.

На уровне конфигурации в Конфигураторе откройте свойства корня конфигурации и найдите свойство «Режим использования команды “Все функции”». Значения:

  • Использовать — команда доступна всем, у кого есть права.
  • Не использовать — команда недоступна в принципе, независимо от прав.
  • Авто — поведение по умолчанию платформы.

Поставьте Не использовать — и меню Все функции исчезнет у всех пользователей базы.

Если менять конфигурацию нельзя, в режиме «Предприятие» отображение команды переключается галкой Отображать команду «Все функции». Найти её можно так: главное меню (значок в левом верхнем углу окна) → Сервис → Параметры. Но это настройка на стороне пользователя — он может вернуть галку сам, поэтому для защиты надёжнее свойство конфигурации.

Снятие галки в Параметрах хранится в настройках конкретного пользователя и не распространяется на остальных. Для централизованного запрета используйте именно свойство конфигурации.

Ограничения на уровне Windows и терминальных сессий

Если база работает на общем терминале или в RDP-сессии и задача — не дать пользователю выйти из программы или переключиться на рабочий стол, внутренними средствами 1С это не решается. Здесь работают групповые политики Windows.

Что реально можно ограничить политиками для пользователя сессии:

  • отключить часть системных сочетаний с клавишей Windows (политика в разделе Конфигурация пользователя → Административные шаблоны → Компоненты Windows → Проводник; точное название пункта в вашей версии Windows может отличаться);
  • запретить запуск Диспетчера задач и других системных утилит;
  • запустить 1С как единственное приложение сессии (режим RemoteApp или «оболочка» вместо рабочего стола).

Групповые политики гасят системные клавиши Windows (Win, Ctrl+Alt+Del, переключение окон), но не трогают внутренние сочетания 1С вроде F9 или Del. Это два разных уровня: клавиши приложения закрываются правами и командами, клавиши системы — политиками ОС.

Режим единственного приложения удобнее всего настроить через RemoteApp: публикуете на терминальном сервере саму 1С (исполняемый файл запуска, 1cestart.exe), и пользователь при подключении получает только окно программы без рабочего стола и панели задач. Выйти «за пределы» 1С в такой сессии клавишами уже не получится, а внутренние ограничения по-прежнему держат роли.

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

Частые ошибки при блокировке горячих клавиш

  • Снимают обычное право вместо интерактивного. Если убрать право «Удаление» целиком, перестанут работать и регламентные операции, и обмены. Снимать нужно только права с приставкой «Интерактивное».
  • Забывают про вторую роль. Пользователю оставили «Полные права» «на всякий случай» — и все ограничения из второй роли не действуют.
  • Прячут кнопку в форме вместо настройки прав. Скрытая кнопка не защищает данные: действие остаётся доступным через список или код. Защита данных — всегда роли.
  • Пытаются поймать клавишу обработчиком формы. Универсального события нажатия клавиши в управляемых формах нет — время на поиск такого обработчика потрачено зря.
  • Путают уровни. Групповой политикой пытаются отключить F9 в 1С. Политики Windows до внутренних команд приложения не дотягиваются.

Частые вопросы

Можно ли отключить вообще все горячие клавиши одной настройкой?
Нет. Платформа не содержит глобального переключателя. Отключаются конкретные команды — через права роли, доступность кнопок и настройки конфигурации.
Чем отличается `Del` от `Shift+Del` в списках?
Del ставит или снимает пометку на удаление (обратимо), Shift+Del удаляет объект напрямую. За первое отвечает право «Интерактивная пометка удаления», за второе — «Интерактивное удаление».
Пользователь всё равно удаляет строки, хотя право я снял. Почему?
Скорее всего, у него назначена вторая роль с этим правом. Права ролей суммируются: достаточно одной разрешающей роли, чтобы действие стало доступным.
Будут ли настройки ролей работать в веб-клиенте?
Да. Права роли применяются одинаково на тонком, толстом и веб-клиенте — это серверный механизм, не зависящий от типа клиента.
Как закрыть доступ к регистрам и обработкам через «Все функции»?
Задайте свойству конфигурации «Режим использования команды “Все функции”» значение «Не использовать» и не включайте эти объекты в роль пользователя.