Имя: Пароль:
1C
1С v8
Ошибка при программном создании иерархии кнопок на форме
0 okwell5
 
31.10.14
09:39
Дано:
Справочник.СправочникДокументов иерархический (реквизиты: Владелец, Файл)
Написанный мной код добавления кнопок на форму.
Задача следующая:
Кнопки должны создаваться аналогично структуре справочника, иными с словами: перевести весь справочник в кнопки на форме.
Ниже прилагаю свой код:

Процедура СформироватьИЗаполнитьИерархиюКнопокПрикрепления()
    Компания = Справочники.СправочникПредопределенныхЗначений.Элемент76.Значение;
    ИмяКнопкиКомпания = "и"+СокрЛП(Компания.Код);
    ЭлементыФормы.ДействияФормыПисьмоКОтправке.Кнопки.Данные1С.Кнопки.Добавить(ИмяКнопкиКомпания, ТипКнопкиКоманднойПанели.Подменю, Компания.Наименование, );

    Родитель = Справочники.СправочникДокументов.ПустаяСсылка();
    ФормируемаяСтрока = "ЭлементыФормы.ДействияФормыПисьмоКОтправке.Кнопки.Данные1С";
    ВерхниеСсылки = Справочники.СправочникДокументов.Выбрать(Родитель);
    
    Пока ВерхниеСсылки.Следующий() Цикл
        СформироватьИерархиюКнопокПоВладельцу(ИмяКнопкиКомпания, ВерхниеСсылки, Родитель, ФормируемаяСтрока);
    КонецЦикла;
    
КонецПроцедуры

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

Ошибка указана в комментарии, повторю:
{(1)}: Метод объекта не обнаружен (Добавить)
ЭлементыФормы.ДействияФормыПисьмоКОтправке.Кнопки.Данные1С.Кнопки.и00002.Добавить(ИмяНовойКнопки, ТипКнопки, СокрЛП(НоваяКнопка.Наименование), Действие)

Как победить ошибку и как решить задачу?
1 Рэйв
 
31.10.14
09:50
>>Кнопки.и00002.Добавить

к коллекции кнопки надо добавлять а и00002 делать родителем.
А ты к конкретной кнопке и00002 добавляешь.Так ентот дерижабль не летает.
2 okwell5
 
31.10.14
10:50
(1), Спасибо за подсказку!
СтрокаВыполнения = ФормируемаяСтрока+".Кнопки.Добавить(ИмяНовойКнопки, ТипКнопки, СокрЛП(НоваяКнопка.Наименование), Действие)";

вот так работает.
Я не хочу быть самым богатым человеком на кладбище. Засыпать с чувством, что за день я сделал какую-нибудь потрясающую вещь — вот что меня интересует. Стив Джобс