Как полностью скрыть подменю "Все действия" в управляемой форме 1С?

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

При работе с конфигурациями на платформе 1С:Предприятие 8.3 в режиме управляемого приложения часто возникает задача по тонкой настройке интерфейса. Одним из таких специфических запросов является необходимость полностью скрыть кнопку или подменю "Все действия", которое по умолчанию присутствует в командной панели любой управляемой формы. Эта кнопка предоставляет пользователю доступ к ряду стандартных и дополнительных команд, таких как "Изменить форму", "Настройка списка", "Вывести список" и другим. Для глубокого анализа и модификации интерфейса "на лету" часто используется специальный редактор форм в режиме предприятия, однако полное удаление системных меню требует программного вмешательства.

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

Почему стандартные методы скрытия не подходят для подменю "Все действия"?

Когда мы сталкиваемся с задачей скрытия элементов интерфейса в управляемой форме, обычно мы обращаемся к свойству Видимость элементов формы или настраиваем права доступа для команд. Однако для подменю "Все действия" эти подходы не работают напрямую по нескольким причинам:

  1. Отсутствие прямого свойства Видимость: Подменю "Все действия" не является отдельным элементом формы в привычном смысле, который можно было бы выбрать в конфигураторе и установить свойство Видимость = Ложь. Оно генерируется платформой автоматически как часть стандартной командной панели формы.
  2. Глубокая интеграция: Эта группа команд является фундаментальной частью интерфейса управляемого приложения, предоставляющей доступ к базовым функциям формы и платформы. Для построения по-настоящему эффективных интерфейсов платформа по умолчанию оставляет эти инструменты доступными пользователю.
  3. Управление видимостью отдельных команд: Мы можем управлять видимостью отдельных команд, входящих в подменю "Все действия" (например, скрыть "Изменить форму" для определенных пользователей), но это не приведет к скрытию самой кнопки "Все действия". Кнопка останется видимой, просто некоторые из ее пунктов будут недоступны или скрыты.

Таким образом, для достижения цели — полного скрытия самой кнопки — нам потребуется применить программный подход, который по сути "удалит" этот элемент из коллекции элементов формы во время ее создания на сервере.

Решение проблемы: программное удаление элемента формы

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

Шаг 1: Идентификация элемента "Все действия"

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

Как найти имя элемента:

  1. Через конфигуратор: Откройте нужную форму в конфигураторе. Перейдите на вкладку "Элементы". В дереве элементов постарайтесь найти группу команд или обычную группу, которая визуально соответствует подменю "Все действия". Обычно она находится в основной командной панели формы. В большинстве случаев вы обнаружите элемент с именем ПодменюВсеДействия.
  2. Используя отладчик: Этот метод является наиболее надежным. Если вы хотите ускорить процесс разработки, можно использовать специализированный помощник отладки, который помогает быстрее ориентироваться в структуре объектов.
    1. Откройте форму, в которой вы хотите скрыть подменю, в конфигураторе.
    2. Перейдите в модуль формы (в дереве объектов формы: "Форма" -> "Модуль").
    3. Вставьте простую процедуру-заглушку, например, &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) КонецПроцедуры, если ее еще нет.
    4. Установите точку останова внутри этой процедуры.
    5. Запустите отладку (F5) и откройте эту форму в режиме 1С:Предприятие.
    6. Когда отладчик остановится на точке останова, в окне "Выражения" или "Табло" посмотрите содержимое коллекции ЭтаФорма.Элементы.
    7. Разверните коллекцию и просматривайте ее элементы, а также их подчиненные элементы (если это группы), пока не найдете элемент, отвечающий за подменю "Все действия". Его свойство Заголовок будет содержать "Все действия", а свойство Имя будет тем самым идентификатором, который нам нужен.

После того как мы точно определили имя элемента, мы можем перейти к написанию кода.

Шаг 2: Реализация кода для удаления

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

Рассмотрим подробнее код:


&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    // Вызываем нашу вспомогательную процедуру для поиска и удаления кнопки "Все действия"
    // Передаем ей коллекцию элементов текущей формы.
    НайтиИУдалитьКнопкуВсеДействия(ЭтаФорма.Элементы);
КонецПроцедуры

// Вспомогательная рекурсивная процедура для обхода коллекции элементов формы
// и удаления элемента "ПодменюВсеДействия".
&НаСервере
Процедура НайтиИУдалитьКнопкуВсеДействия(КоллекцияЭлементов)
    // Используем цикл для перебора всех элементов в текущей коллекции.
    Для Каждого Элемент Из КоллекцияЭлементов Цикл
        // Проверяем, является ли текущий элемент группой команд
        // и совпадает ли его имя с искомым "ПодменюВсеДействия".
        Если ТипЗнч(Элемент) = Тип("ГруппаКоманд") И Элемент.Имя = "ПодменюВсеДействия" Тогда
            // Если нашли, удаляем его из коллекции.
            КоллекцияЭлементов.Удалить(Элемент);
            Возврат; 
        // Если текущий элемент является группой формы и содержит подчиненные элементы,
        // это означает, что нам нужно "провалиться" глубже для поиска.
        ИначеЕсли ТипЗнч(Элемент) = Тип("ГруппаФормы") И Элемент.ПодчиненныеЭлементы.Количество() > 0 Тогда
            НайтиИУдалитьКнопкуВсеДействия(Элемент.ПодчиненныеЭлементы);
            Если КоллекцияЭлементов.Найти("ПодменюВсеДействия") = Неопределено Тогда
                Возврат;
            КонецЕсли;
        КонецЕсли;
    КонецЦикла;
КонецПроцедуры

Пояснения к коду:

  1. ПриСозданииНаСервере: Идеальное место для манипуляций с элементами формы до ее отображения пользователю.
  2. Рекурсивный обход: Формы в 1С могут иметь сложную иерархическую структуру. Рекурсия гарантирует поиск во всех вложенных группах.
  3. Удаление элемента: Метод КоллекцияЭлементов.Удалить(Элемент) немедленно убирает его из структуры формы.

Шаг 3: Размещение кода

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

Расширенный поиск элемента формы (если имя "ПодменюВсеДействия" не найдено)

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

Альтернативные подходы и когда их использовать

Хотя программное удаление эффективно, иногда задача требует более "чистых" методов:

Управление видимостью отдельных команд

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

  1. Настройка прав доступа (ролей): Это самый рекомендуемый способ ограничить доступ к определенным функциям. Платформа автоматически скроет соответствующие элементы интерфейса.
  2. Функциональные опции: Используются, если необходимость скрытия команд зависит от настроек программы.

Изменение стандартных команд формы

Каждая форма имеет свойство СтандартныеКоманды. Вы можете программно отключить видимость отдельных команд из этого набора, например: ЭтаФорма.СтандартныеКоманды.ИзменитьФорму.Видимость = Ложь;.

Важные замечания и меры предосторожности

Применяя метод программного удаления элемента формы, помните о рисках:

  1. Риски при обновлении: При обновлении платформы или конфигурации имя элемента может измениться, и ваш код перестанет работать.
  2. Тестирование: Всегда тщательно проверяйте форму после обновлений.
  3. Эстетика и радость от работы: Если вы хотите не просто скрывать элементы, а сделать интерфейс более дружелюбным, обратите внимание на сезонное и праздничное оформление 1С, которое поможет сделать рабочую среду приятнее.
  4. Документирование: Обязательно оставляйте комментарии в коде, объясняющие причину использования программного удаления.

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

← На главную