Капитально об программе 1С 8.0-8.3-8.4, 7.7

Недоступны кнопки командной панели в обычных формах, управление видимостью кнопок

3 причины недоступности кнопки

У каждой кнопки типа «Действие» командной панели существует свойство «Доступность», которое позволяет ограничить возможность нажатия пользователем в неподходящий момент, оно доступно на чтение и на запись.

Платформа также автоматически управляет доступностью  кнопок, когда не действие не применимо для данной ситуации. Это справедливо для кнопок со стандартным действием, например  «Отмена проведения» будет недоступно для не проведенного документа.

Другие стандартные действия приведены на фрагменте интерфейса:

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

Чтобы убедится в причине, открываете свойства кнопки панели и в поле «Действие» нажимаете кнопку открытия («Лупу»). При наличии обработчика,  конфигуратор откроет форму, при отсутствии выведет ошибку «Процедура не обнаружена»

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

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

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

Поэтому, если все-таки хотите скрывать «ненужные» кнопки, придется использовать метод «Удалить» кнопок панели, для отображения — «Добавить«.

Удалять кнопки, добавленные системой по флажку «Автозаполнение»  формы невозможно.

Пример добавления кнопки

Процедура ДобавитьКнопкуЕслиНет(Куда,ИмяКнопки,Текст,ИмяКартинки = "МенюПеремещение16х16")
	Кнопка = Куда.Найти(ИмяКнопки);
	Если Кнопка = Неопределено Тогда
		Кнопка = Куда.Добавить();
		Кнопка.Имя = ИмяКнопки;
		Кнопка.ТипКнопки = ТипКнопкиКоманднойПанели.Действие;
		Кнопка.Действие = Новый Действие("ОбработчикДопКнопокДействийФормы");
		Кнопка.Текст = Текст;
		Кнопка.Отображение = ОтображениеКнопкиКоманднойПанели.НадписьКартинка;
		
		Попытка
			Кнопка.Картинка = БиблиотекаКартинок[ИмяКартинки];
		Исключение
			
		КонецПопытки;	
			
		//Кнопка.Подсказка = "Замена вида документа (с отрицательным знаком, сторнирующая операция), слияние документов";
		Кнопка.Доступность = Истина;
	КонецЕсли;	
КонецПроцедуры

Если вам требуется сохранять положение кнопки  в нужной позиции, после добавления воспользуйтесь методом «Сдвинуть«.

«Куда» — это командная панель, в которой требуется внести изменения

«ОбработчикДопКнопокДействийФормы» — в примере выше, это название процедуры обработчика события, должна быть в форме, может отличаться для каждой из кнопок.

Пример удаления кнопки

Процедура УдалитьКнопкуЕслиЕсть(Откуда,ИмяКнопки)
	Кнопка = Откуда.Найти(ИмяКнопки);
	Если НЕ Кнопка = Неопределено Тогда
		Откуда.Удалить(Кнопка);
	КонецЕсли;	
КонецПроцедуры