Как убрать кнопки командной панели и ограничить контекстное меню в 1С:Предприятии 7.7

Программист 1С v7.7 Бухгалтерский учет
← На главную

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

Метод 1: Полное отключение панели инструментов в конфигураторе

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

  1. Откроем нужную форму (например, форму списка плана счетов) в режиме Конфигуратор.
  2. Нажмем правую кнопку мыши на поле формы и выберем пункт «Свойства».
  3. В открывшемся окне свойств перейдем на закладку «Общие».
  4. Найдем флажок «Панель инструментов» и снимем его.

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

Метод 2: Программное ограничение выбора через ИспользоватьКорСчет

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

Для этого в процедуре ПриОткрытии формы списка плана счетов мы можем прописать следующий код:


Процедура ПриОткрытии()
    // Устанавливаем фильтр по корректным проводкам
    // Параметр 1 включает режим фильтрации
    ИспользоватьКорСчет(1);
КонецПроцедуры

Хотя кнопка на панели останется, при открытии формы пользователь сразу увидит отфильтрованный список. Чтобы сделать защиту более надежной, мы можем добавить проверку в процедуру выбора счета, чтобы даже если пользователь «обманул» интерфейс, система не дала ему выбрать некорректный счет.

Метод 3: Подмена контекстного меню для блокировки правой кнопки мыши

Как мы выяснили, простое удаление панели инструментов не спасает от контекстного меню. В 1С 7.7 есть хитрость, позволяющая переопределить стандартное меню своим собственным. Давайте разберем этот алгоритм:

  1. В дереве метаданных в ветке «Интерфейсы» создадим новое меню. Назовем его, например, ПустоеМеню.
  2. Не будем добавлять в него никаких пунктов или добавим только те, которые действительно нужны пользователю (например, «Выбрать»).
  3. Вернемся в свойства формы списка плана счетов.
  4. В поле «Произвольное меню» выберем наше свежесозданное ПустоеМеню.

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

Метод 4: Использование внешней компоненты RWidjets (Проект 1С++)

Если нам требуется точечное управление — например, оставить панель, но заблокировать нажатие конкретной кнопки или перехватить команду, — штатных средств будет недостаточно. Здесь на помощь приходит компонента RWidjets, которая входит в состав широко известного набора инструментов 1С++.

Проанализируем механизм перехвата команд. Компонента позволяет использовать глобальное событие ПриПолученииКоманды. Рассмотрим пример реализации в Глобальном модуле:


Процедура ПриПолученииКоманды(пКоманда, пЗаблокироватьКоманду)
    // пКоманда - это числовой идентификатор системного действия
    // Нам нужно заранее определить ID кнопки "Корректные проводки"
    Если пКоманда = ИД_НУЖНОЙ_КНОПКИ Тогда
        Предупреждение("Данное действие запрещено администратором!");
        пЗаблокироватьКоманду = 1; // Блокируем выполнение команды платформой
    КонецЕсли;
КонецПроцедуры

Для определения ID команды можно воспользоваться специальными утилитами или методом перебора (выводя значение пКоманда в окно сообщений при нажатии кнопок). Этот метод является наиболее профессиональным, так как он работает на уровне сообщений операционной системы Windows и не позволяет пользователю обойти запрет даже через горячие клавиши.

Метод 5: Расширение возможностей формы через FormEx

Еще одна популярная компонента — FormEx. Она позволяет динамически манипулировать объектами формы. Хотя она чаще используется для раскраски таблиц, в ней есть возможности по работе с окнами через Сервис и РасширениеФормы.

С помощью FormEx мы можем программно изменять стили окон или перехватывать нажатия клавиш клавиатуры. Если пользователь пытается вызвать функцию через сочетание клавиш (Hotkeys), мы можем отследить это в событии ПриНажатииКнопкиКлавиатуры. Рассмотрим пример:


Процедура ПриНажатииКнопкиКлавиатуры(Конт, КодКлавиши, Альт, Шифт, Контрол, Символ, ФлагСтандартнойОбработки)
    // Пример блокировки сочетания клавиш, если оно назначено на кнопку
    Если (Контрол = 1) и (КодКлавиши = 115) Тогда // Допустим, Ctrl + F4
        ФлагСтандартнойОбработки = 0;
        Возврат;
    КонецЕсли;
КонецПроцедуры

Метод 6: Использование WinAPI для продвинутых разработчиков

Выясним причину, почему некоторые кнопки так сложно убрать. Платформа 1С 7.7 строит интерфейс на стандартных библиотеках Windows (Win32 API). Каждая панель инструментов — это объект класса ToolbarWindow32. Используя внешние функции из user32.dll, такие как SendMessage, можно отправить сообщение TB_DELETEBUTTON окну панели инструментов.

Этот путь требует серьезных знаний системного программирования. Процесс выглядит так:

  1. Найти дескриптор (HWND) главного окна 1С.
  2. Найти дочернее окно формы, а в нем — объект панели инструментов.
  3. Вычислить индекс кнопки по порядку.
  4. Отправить сообщение на удаление.

Несмотря на сложность, этот метод позволяет физически удалить кнопку из интерфейса «на лету», не прибегая к отключению всей панели.

Резюме и рекомендации

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

  1. Самый быстрый и безопасный способ: использовать программный фильтр ИспользоватьКорСчет(1) и назначить форме Пустое меню в конфигураторе. Это решит проблему в 90% случаев.
  2. Способ для жесткого контроля: использование компоненты RWidjets. Это гарантирует, что команда не будет выполнена ни при каких обстоятельствах.
  3. Комплексный подход: если данные действительно секретны, лучше всего реализовать проверку прав на уровне кода в процедуре ПриЗаписи или ПриВыбореСчета, так как любые визуальные ограничения — это лишь первый уровень защиты.

Разберем еще один нюанс: при работе с планом счетов в 7.7 кнопка корректных проводок жестко связана с механизмом работы бухгалтерских итогов. Если вы её отключаете, убедитесь, что в базе корректно заполнен справочник «Корректные проводки», иначе пользователи могут столкнуться с тем, что список счетов окажется совершенно пустым.

← На главную