v8: Видимость кнопки командной панелиК сожалению, управлять видимостью кнопки командной панели нельзя, поэтому единственный способ добиться аналогичного эффекта - добавление и удаление кнопки с панели. Здесь он реализован в виде красивой функции-обертки | | Автор статьи: Гений 1С | Редакторы: Последняя редакция №4 от 14.07.06 | История URL: http://kb.mista.ru/article.php?id=295 | |
Ключевые слова: видимость,кнопка,командная панель
Условие видимости - условие, когда кнопка видима, то "Истина", иначе "Ложь".
ИмяКнопки - идентификатор кнопки.
Панель - командная панель, содержащая кнопку
П - структура описывающая кнопку, поля:
Тип - если не определен, предполагается тип Кнопка (бывает еще разделитель)
Текст - подпись кнопки
Действие - имя процедуры-обработчика события или конкретный объект типа "Действие"
КнопкаПеред - перед какой кнопкой вставлять кнопку (индекс кнопки с нуля или ссылка на кнопку). Если не определено, кнопка добавляется в конец.
//Динамическая кнопка, которая присутствует, отсутствует в зависимости от условия
//КнопкаПеред - перед какой кнопкой вставить, если не определено, то в конец панели добавляется
//П - структура, описывающая кнопку
// Тип, Текст, Действие
Функция обДинамическаяКнопка(УсловиеВидимости, ИмяКнопки, Панель, П=Неопределено, КнопкаПеред=Неопределено) Экспорт
Перем Тип, Текст, Действие;
//Определяем, есть кнопка или нет
Кнопка=Панель.Кнопки.Найти(ИмяКнопки);;
//Если условие истинно и кнопки нет, добавляем
Если УсловиеВидимости и Кнопка=Неопределено Тогда
//Если условие ложно и кнопка есть - удаляем
Если ТипЗнч(КнопкаПеред)=Тип("КнопкаКоманднойПанели") Тогда
ИндексКнопки=Панель.Кнопки.Индекс(КнопкаПеред);
ИначеЕсли ТипЗнч(КнопкаПеред)=Тип("Число") Тогда
ИндексКнопки=Мин(Панель.Кнопки.Количество(), КнопкаПеред);
Иначе
ИндексКнопки=Панель.Кнопки.Количество(); //в конец
КонецЕсли;
П.Свойство("Тип", Тип);
П.Свойство("Текст", Текст);
П.Свойство("Действие", Действие);
Если ТипЗнч(Действие)=Тип("Строка") Тогда
Действие=Новый Действие(Действие);
КонецЕсли;
Если Тип=Неопределено Тогда
Тип=ТипКнопкиКоманднойПанели.Действие;
КонецЕсли;
Панель.Кнопки.Вставить(ИндексКнопки, ИмяКнопки, Тип, Текст, Действие);
ИначеЕсли НЕ УсловиеВидимости и Кнопка<> Неопределено Тогда
Панель.Кнопки.Удалить(Кнопка);
КонецЕсли;
КонецФункции |