Как скрыть калькулятор из меню Сервис в 1С 7.7

Программист 1С v7.7 IT и автоматизация бизнеса
← На главную

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

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

Причина проблемы: разделители и горячие клавиши

Проанализируем типовой вызов метода, который не срабатывает:

Окна.ВидимостьМеню("&КалькуляторCtrl+F2", 0);

Причина такого поведения заключается во внутреннем представлении пунктов меню в операционной системе Windows и платформе 1С:Предприятие 7.7. В строке названия пункта меню между самим текстом команды и комбинацией горячих клавиш (акселератором) всегда присутствует специальный разделитель. В подавляющем большинстве случаев это не слитное написание и даже не обычные пробелы, а системный символ табуляции (код ASCII 9).

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

Способ 1. Использование символа табуляции или точной строки пробелов

Посмотрим на практическое решение проблемы. Как выяснилось в ходе обсуждения, в строку можно передать точное количество пробелов, однако наиболее надежным и платформонезависимым подходом является явное использование символа табуляции через встроенную функцию Симв(9).

Рассмотрим правильный вариант вызова:

Окна.ВидимостьМеню("&Калькулятор" + Симв(9) + "Ctrl+F2", 0);

В этом выражении учитываются два критически важных элемента:

  1. Символ & (амперсанд) перед буквой «К» указывает на мнемоническую клавишу быстрого выбора через сочетание с клавишей Alt. Позиция амперсанда должна строго соответствовать локализации платформы.
  2. Символ табуляции Симв(9) гарантирует точное посимвольное совпадение заголовка пункта меню в системной таблице команд платформы.

Способ 2. Автоматический перебор и поиск пункта меню

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

Посмотрим на пример реализации обхода:


СЗМеню = Окна.ПолучитьМеню();
Для Сч = 1 По СЗМеню.РазмерСписка() Цикл
    ИмяПункта = "";
    СЗМеню.ПолучитьЗначение(Сч, ИмяПункта);
    Если Найти(ИмяПункта, "Калькулятор") > 0 Тогда
        Окна.ВидимостьМеню(ИмяПункта, 0);
    КонецЕсли;
КонецЦикла;

Такой подход полностью исключает риск ошибки из-за пробелов или табуляции, поскольку метод ВидимостьМеню получает ровно ту строку, которую зарегистрировала сама платформа при инициализации главного окна.

Ограничение доступности и скрытие родительского меню

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

  1. Работа горячих клавиш: Простое скрытие пункта меню через ВидимостьМеню убирает отображение строки из интерфейса, однако в ряде релизов платформы глобальный акселератор Ctrl+F2 может продолжать открывать калькулятор. Чтобы сделать команду недоступной, рекомендуется дополнительно использовать отключение доступности: Окна.ДоступностьМеню("&Калькулятор" + Симв(9) + "Ctrl+F2", 0);
  2. Скрытие всего меню «Сервис»: Если пользователю не требуются и прочие стандартные сервисные окна (календарь, параметры и т.д.), эффективнее скрыть весь выпадающий список верхнего уровня: Окна.ВидимостьМеню("&Сервис", 0);

Использование правильной строки с Симв(9) или предварительное считывание списка меню через ПолучитьМеню() позволяет гарантированно управлять отображением любых встроенных элементов интерфейса 1С:Предприятия 7.7.

← На главную