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

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

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

Почему не работает свойство Видимость?

Многие разработчики при попытке скрыть элемент управления интуитивно обращаются к свойству Видимость. Однако, если мы попытаемся применить этот подход к кнопке, расположенной в стандартной командной панели неуправляемой формы, мы неизбежно получим ошибку: «Поле объекта не обнаружено (Видимость)».

Это происходит потому, что кнопки внутри командной панели в обычных формах — это не самостоятельные элементы управления формы, а объекты коллекции Кнопки конкретной панели. У этих объектов отсутствует свойство Видимость на уровне программного доступа. Платформа 1С в данном контексте не предоставляет штатной возможности «удалить» кнопку из интерфейса без пересборки всей панели.

Решение 1: Использование свойства Доступность

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

Для реализации этого подхода используем следующий код:


// Отключаем кнопку в панели основных действий
ЭлементыФормы.ОсновныеДействияФормы.Кнопки.Действие1.Доступность = Ложь;

Этот метод абсолютно безопасен, не вызывает ошибок выполнения и сохраняет все привязки к горячим клавишам, которые были заданы для данной команды.

Решение 2: Создание собственной командной панели

Если бизнес-задача требует именно физического исчезновения кнопки с экрана, стандартные «Основные действия» нам не подойдут. В этом случае мы рекомендуем «разобрать» стандартную панель и создать на форме отдельный объект — Командная панель.

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

  1. Вы размещаете кнопки на панели как самостоятельные объекты.
  2. В процедуре ПриОткрытии или при изменении данных формы вы можете управлять видимостью любой из них: ЭлементыФормы.МояКнопка.Видимость = Ложь;
  3. Такой подход позволяет создавать более динамичные интерфейсы, меняющиеся в зависимости от прав доступа пользователя или состояния документа.

Чего делать не стоит: программное удаление кнопок

В ходе дискуссий часто предлагают метод удаления кнопок через команду Удалить. Например:


Кнопка = ЭтаФорма.ЭлементыФормы.ОсновныеДействияФормы.Кнопки;
Индекс = ЭтаФорма.ЭлементыФормы.ОсновныеДействияФормы.Кнопки.Индекс(Кнопка.Действие1);
ЭлементыФормы.ОсновныеДействияФормы.Кнопки.Удалить(Индекс);

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

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

← На главную