Ограничение горячих клавиш в 1С для пользователей базы
Содержание
Полностью «выключить все горячие клавиши » в 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 удаляет объект напрямую. За первое отвечает право «Интерактивная пометка удаления», за второе — «Интерактивное удаление».