Параметры:
СтрокаПодменю (обязательный)
Тип: Дерево или элемент дерева значений, по данным которого необходимо построить подменю.
Подменю (обязательный)
Тип: Кнопка командной панели типа «Подменю». На которой необходимо сформировать новое подменю.
Очищать (по умолчанию «Ложь»)
Тип: Булево. Определяет: следует ли очищать переданное подменю.
ДобавлятьРазделительВНачало (по умолчанию «Ложь»)
Тип: Булево. Определяет: следует ли добавить в начало подменю разделитель.
Перем мСоответствиеДействийПодменюПерейти;
Функция ПолучитьДеревоПодменюПерейти(ТипОбъекта, ИмяОбъекта, ДействиеПоУмолчанию, СоответствиеДействийПодменюПерейти) Экспорт
.....
ДеревоПодменю = ИнициализироватьДеревоДополнительныхКнопок();
ТекущаяСтрокаДерева = ДеревоПодменю;
СоответствиеАттрибутов = ПрочитатьЭлементXML(ОбъектЧтенияПодменю);
Если СоответствиеАттрибутов = Неопределено Тогда
Возврат Неопределено;
КонецЕсли;
ИмяУзла = СоответствиеАттрибутов["ИмяТекущегоУзлаXML"];
ИмяПоследнегоЗакрытогоУзла = СоответствиеАттрибутов["ИмяПоследнегоЗакрытогоУзла"];
Пока ИмяПоследнегоЗакрытогоУзла <> "ПодменюПерейти" Цикл
Если ИмяПоследнегоЗакрытогоУзла = "Подменю" Тогда
ТекущаяСтрокаДерева = ТекущаяСтрокаДерева.Родитель;
Если ТекущаяСтрокаДерева = Неопределено Тогда
ТекущаяСтрокаДерева= ДеревоПодменю;
КонецЕсли;
КонецЕсли;
Если ИмяУзла = "Кнопка" Тогда
ДобавитьСтрокуВДеревоКнопок(ТекущаяСтрокаДерева, СоответствиеАттрибутов["Имя"], ТипКнопкиКоманднойПанели.Действие, СоответствиеАттрибутов["Текст"], ДействиеПоУмолчанию, Неопределено, Ложь, СоответствиеАттрибутов["Подсказка"]);
СоответствиеДействийПодменюПерейти.Вставить( СоответствиеАттрибутов["Имя"], СоответствиеАттрибутов["Действие"]);
ИначеЕсли ИмяУзла = "Разделитель" Тогда
ДобавитьСтрокуВДеревоКнопок(ТекущаяСтрокаДерева, СоответствиеАттрибутов["Имя"], ТипКнопкиКоманднойПанели.Разделитель, СоответствиеАттрибутов["Текст"], ДействиеПоУмолчанию, Неопределено, Ложь, СоответствиеАттрибутов["Подсказка"]);
ИначеЕсли ИмяУзла = "Подменю" Тогда
СтрокаПодменю = ДобавитьСтрокуВДеревоКнопок(ТекущаяСтрокаДерева, СоответствиеАттрибутов["Имя"], ТипКнопкиКоманднойПанели.Подменю, СоответствиеАттрибутов["Текст"], Неопределено, Неопределено, Ложь, СоответствиеАттрибутов["Подсказка"]);
ТекущаяСтрокаДерева = СтрокаПодменю;
КонецЕсли;
СоответствиеАттрибутов = ПрочитатьЭлементXML(ОбъектЧтенияПодменю);
ИмяУзла = СоответствиеАттрибутов["ИмяТекущегоУзлаXML"];
ИмяПоследнегоЗакрытогоУзла = СоответствиеАттрибутов["ИмяПоследнегоЗакрытогоУзла"];
КонецЦикла;
Возврат ДеревоПодменю;
КонецФункции
Процедура ПриНачатииКнопкиВПодменюПерейти(Кнопка)
Выражение = мСоответствиеДействийПодменюПерейти[Кнопка.Имя];
Если Выражение <> Неопределено Тогда
Выполнить(Выражение);
КонецЕсли;
КонецПроцедуры
Процедура УстановитьПодменюПерейти()
// Устанавливаем подменю перейти
мСоответствиеДействийПодменюПерейти = Новый Соответствие;
СформироватьПодменю(ПолучитьДеревоПодменюПерейти("Документы", Метаданные().Имя, Новый Действие("ПриНачатииКнопкиВПодменюПерейти"), мСоответствиеДействийПодменюПерейти), ЭлементыФормы.ДействияФормы.Кнопки.ПодменюПерейти);
КонецПроцедуры
Процедура ПередОткрытием(Отказ, СтандартнаяОбработка)
// Установка подменю перейти
УстановитьПодменюПерейти();
КонецПроцедуры // ПередОткрытием()
Дата: 2018-11-18, просмотров: 298.