Книга знаний

1С:Предприятие / v8

v8: Видимость кнопки командной панели

К сожалению, управлять видимостью кнопки командной панели нельзя, поэтому единственный способ добиться аналогичного эффекта - добавление и удаление кнопки с панели. Здесь он реализован в виде красивой функции-оберткиАвтор статьи: Гений 1С | Редакторы:
Последняя редакция №4 от 14.07.06 | История
URL: http://kb.mista.ru/article.php?id=295

Ключевые слова: видимость,кнопка,командная панель


Условие видимости - условие, когда кнопка видима, то "Истина", иначе "Ложь".
ИмяКнопки - идентификатор кнопки.
Панель - командная панель, содержащая кнопку
П - структура описывающая кнопку, поля:
   Тип - если не определен, предполагается тип Кнопка (бывает еще разделитель)
   Текст - подпись кнопки
   Действие - имя процедуры-обработчика события или конкретный объект типа "Действие"
КнопкаПеред - перед какой кнопкой вставлять кнопку (индекс кнопки с нуля или ссылка на кнопку). Если не определено, кнопка добавляется в конец.

//Динамическая кнопка, которая присутствует, отсутствует в зависимости от условия
//КнопкаПеред - перед какой кнопкой вставить, если не определено, то в конец панели добавляется
//П - структура, описывающая кнопку
//    Тип, Текст, Действие
Функция обДинамическаяКнопка(УсловиеВидимости, ИмяКнопки, Панель, П=Неопределено, КнопкаПеред=Неопределено) Экспорт
    Перем Тип, Текст, Действие;
    //Определяем, есть кнопка или нет
    Кнопка=Панель.Кнопки.Найти(ИмяКнопки);;
    //Если условие истинно и кнопки нет, добавляем
    Если УсловиеВидимости и Кнопка=Неопределено Тогда
        //Если условие ложно и кнопка есть - удаляем
        Если ТипЗнч(КнопкаПеред)=Тип("КнопкаКоманднойПанели") Тогда
            ИндексКнопки=Панель.Кнопки.Индекс(КнопкаПеред);
        ИначеЕсли ТипЗнч(КнопкаПеред)=Тип("Число")  Тогда
            ИндексКнопки=Мин(Панель.Кнопки.Количество(), КнопкаПеред);
        Иначе
            ИндексКнопки=Панель.Кнопки.Количество(); //в конец
        КонецЕсли;
        П.Свойство("Тип", Тип);
        П.Свойство("Текст", Текст);
        П.Свойство("Действие", Действие);
        Если ТипЗнч(Действие)=Тип("Строка") Тогда
            Действие=Новый Действие(Действие);
        КонецЕсли;
        Если Тип=Неопределено Тогда
            Тип=ТипКнопкиКоманднойПанели.Действие;
        КонецЕсли;
        Панель.Кнопки.Вставить(ИндексКнопки, ИмяКнопки, Тип, Текст, Действие);
    ИначеЕсли НЕ УсловиеВидимости и Кнопка<> Неопределено Тогда
        Панель.Кнопки.Удалить(Кнопка);
    КонецЕсли;
КонецФункции

Описание | Рубрикатор | Поиск | ТелепатБот | Захваченные статьи | Установки | Форум
© Станислав Митичкин (Волшебник), 2005-2025 | Mista.ru

Яндекс.Метрика