Книга знаний

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

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

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

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


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

= Действие - имя процедуры-обработчика события или конкретный объект типа "Действие"

КнопкаПеред - перед какой кнопкой вставлять кнопку (индекс кнопки с нуля или ссылка на кнопку). Если не определено, кнопка добавляется в конец.

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

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

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