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