Имя: Пароль:
1C
1С v8
v8: Видимость кнопки командной панели
0 koketka
 
24.02.12
11:36
В книге знаний есть это
v8: Видимость кнопки командной панелиК сожалению, управлять видимостью кнопки командной панели нельзя, поэтому единственный способ добиться аналогичного эффекта - добавление и удаление кнопки с панели. Здесь он реализован в виде красивой функции-обертки        Автор статьи: Гений 1С | Редакторы:
Последняя редакция №4 от 14.07.06 | История
URL: Книга знаний: v8: Видимость кнопки командной панели    


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


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

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

У меня ругается на строчки  П.Свойство("Тип", Тип);может я тип кнопки не так описываю когда я обращаюс к процедуре
1 koketka
 
24.02.12
11:36
Никак не пойму как правильно прописать подскажите?
2 Wobland
 
24.02.12
11:37
(0) ну и что у тебя в переменной Тип находится?
3 Wobland
 
24.02.12
11:38
(2) хм, и что там у гения ?
4 zbv
 
24.02.12
11:38
(0) а что в переменной П ?

и как ругается ?
5 koketka
 
24.02.12
11:39
ТипЗнч(ЭлементыФормы.КоманднаяПанель1.Кнопки.Подбор)и так пробова и просто так ЭлементыФормы.КоманднаяПанель1.Кнопки.Подбор
6 koketka
 
24.02.12
11:40
ЭлементыФормы.КоманднаяПанель1.Кнопки.Подбор - {ОбщийМодуль.ОбщегоНазначения(2752)}: Метод объекта не обнаружен (Свойство)
       П.Свойство("Тип", Тип);
7 koketka
 
24.02.12
11:42
ТипЗнч(ЭлементыФормы.КоманднаяПанель1.Кнопки.Подбор) -
{ОбщийМодуль.ОбщегоНазначения(2752)}: Значение не является значением объектного типа (Свойство)
       П.Свойство("Тип", Тип);
8 zbv
 
24.02.12
11:43
//П - структура, описывающая кнопку

значит у тебя не структура.

Надо бы в функцию добавить проверку на то, что "П" не структура.
9 koketka
 
24.02.12
11:49
Я что то ничего не понимаю вот моя кнопка ЭлементыФормы.КоманднаяПанель1.Кнопки.Подбор Что я должна прописать при вызови функции обДинамическаяКнопка(УсловиеВидимости, ИмяКнопки, Панель, П=Неопределено, КнопкаПеред=Неопределено)
10 Reset
 
24.02.12
11:51
(9) Это прямо зависит от того, что ты хочешь сделать
11 koketka
 
24.02.12
11:52
(10) Там в документе если галочка стоит то кнопка должна быть видна, а если не стоит то не видно
12 koketka
 
24.02.12
11:53
видна*
13 zbv
 
24.02.12
11:57
П - структура описывающая кнопку, поля:
  Тип - если не определен, предполагается тип Кнопка (бывает еще разделитель)
  Текст - подпись кнопки
  Действие - имя процедуры-обработчика события или конкретный объект типа "Действие"

надо что-то типа:
обДинамическаяКнопка(МояГалочка, "Подбор", ЭлементыФормы.КоманднаяПанель1, Новый Структура("Тип, Текст, Действие", ТипКнопкиКоманднойПанели.Действие, "Подбор", "имяПроцедурыДействия"))

тут "МояГалочка" и "имяПроцедурыДействия" заменить на свои
14 Reset
 
24.02.12
11:57
(11)
обДинамическаяКнопка(ТаХитраяГалочкаКотораяВДокументеТолькоНевздумайЭлементУправленияУказыватьАУказывайБулевоЗначение, "Подбор", ЭлементыФормы.КоманднаяПанель1,
Новый Структура("Текст,Действие","Подбор","ИмяПроцедурыКотораядолжныВызватьсяПриНажатииНаЭтуКнопку"));
15 Reset
 
24.02.12
11:59
(13) С "Типом" ошибся, а так верно
16 Reset
 
24.02.12
11:59
(15) Не, не ошибся, беру слова назад
17 zbv
 
24.02.12
12:00
(16) не пугай так, пришлось СП открывать :)
18 Reset
 
24.02.12
12:03
(17) Извини)
19 koketka
 
24.02.12
12:31
Мальчики спасибо!!! вы прелесть!
Глупец, лишенный способности посмеяться над собой вместе с другими, не сможет долго выносить программирование. Фредерик Брукс-младший