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