понедельник, 10 ноября 2014 г.

Отображение справочника в виде менюшек и кнопок

Возникла задача отобразить иерархический справочник в виде менюшек и кнопок. Группы - меню, элементы - кнопки(действия). Демонстрация результата

А ниже реализация данного механизма:

Процедура СформироватьИЗаполнитьИерархиюКнопокПрикрепления()

    //Добавляем владельца   
    ИКЕА = Справочники.Контрагенты.НайтиПоКоду("К000285");
    ИмяКнопкиИКЕА = "и"+СокрЛП(ИКЕА.Код);
    ЭлементыФормы.ДействияФормы.Кнопки.МенюСправочника.Кнопки.Добавить(ИмяКнопкиИКЕА, ТипКнопкиКоманднойПанели.Подменю, ИКЕА.НаименованиеКраткое, );
   
    ПустойРодитель = Справочники.СправочникДокументов.ПустаяСсылка();
    ФормируемаяСтрокаПостоянная = "ЭлементыФормы.ДействияФормы.Кнопки.МенюСправочника";
    ФормируемаяСтрока = ФормируемаяСтрокаПостоянная;
    ВерхниеСсылки = Справочники.СправочникДокументов.Выбрать(ПустойРодитель);
   
    Пока ВерхниеСсылки.Следующий() Цикл
            СформироватьИерархиюКнопокПоВладельцу(ИмяКнопкиИКЕА, ВерхниеСсылки.Ссылка, ФормируемаяСтрока);
            ФормируемаяСтрока = ФормируемаяСтрокаПостоянная;
    КонецЦикла;
   
КонецПроцедуры

Процедура ОткрытьЗначениеСпр(Спр)
    КодСсылки = СтрЗаменить(Спр.Имя, "и", "");
    СсылкаСпр = Справочники.СправочникДокументов.НайтиПоКоду(КодСсылки);
    Если  СсылкаСпр.Пустая() Тогда
            Возврат;
    КонецЕсли;
    Если ПустаяСтрока(СсылкаСпр.Файл) Тогда
        Возврат;
    КонецЕсли;
   
    АбсолютноеИмяФайла = СсылкаСпр.Файл;
   
    //Вставляем строку с этим файлом
    ФайлСправочника = Новый ДвоичныеДанные(АбсолютноеИмяФайла);
    ХранилищеФайла = Новый ХранилищеЗначения(ФайлСправочника);
    СтрокаВложения = ВложенияПисьмаТЗ.Добавить();
   
    ИмяФайла = АбсолютноеИмяФайла;
    ВыбФайл = Новый Файл(ИмяФайла);
    РасширениеФайла = ВыбФайл.Расширение;
   
    СтрокаВложения.ИмяФайла = СокрЛП(СсылкаСпр.Наименование)+РасширениеФайла;
   
КонецПроцедуры
                                   
Процедура СформироватьИерархиюКнопокПоВладельцу(ТекущаяКнопка, НоваяКнопка, ФормируемаяСтрока)
    Если НоваяКнопка.ЭтоГруппа Тогда
        ТипКнопки = ТипКнопкиКоманднойПанели.Подменю;
        Действие = Неопределено;
    Иначе
        ТипКнопки = ТипКнопкиКоманднойПанели.Действие;
        Действие = Новый Действие("ОткрытьЗначениеСпр");
    КонецЕсли;
   
    ФормируемаяСтрокаСТекущейКнопкой = ФормируемаяСтрока+".Кнопки."+ТекущаяКнопка;
    ИмяНовойКнопки = "и"+СокрЛП(НоваяКнопка.Код);
    СтрокаВыполнения = ФормируемаяСтрокаСТекущейКнопкой+".Кнопки.Добавить(ИмяНовойКнопки, ТипКнопки, СокрЛП(НоваяКнопка.Наименование), Действие)";
    Выполнить(СтрокаВыполнения);
   
    Ссылки = Справочники.СправочникДокументов.Выбрать(НоваяКнопка.Ссылка);
    Пока Ссылки.Следующий() Цикл
        СформироватьИерархиюКнопокПоВладельцу(ИмяНовойКнопки, Ссылки.Ссылка, ФормируемаяСтрокаСТекущейКнопкой);
    КонецЦикла;   
   
КонецПроцедуры

Процедура ПриОткрытии()
     СформироватьИЗаполнитьИерархиюКнопокПрикрепления();
КонецПроцедуры

Комментариев нет:

Отправить комментарий