Имя: Пароль:
1C
1С v8
Динамическое создание элементов, ошибка
,
0 Berman
 
10.08.20
13:10
Код выдает ошибку: "Invalid parameter value".

For Each Item in Array Do
        GroupItem = ThisForm.Items.Add("Group", Type("FormGroup"), ThisForm.Items.Tiles);
        DescriptionItem = Items.Add("Desc", Type("FormDecoration"),GroupItem);
        DescriptionItem.Title = Item.Get("Description");
        DescriptionItem.Type=FormDecorationType.Label;
    
EndDo;
Строка: "DescriptionItem = Items.Add("Desc", Type("FormDecoration"),GroupItem);"
По факту, ругается, на GroupItem, ибо, если вместо него подставлю ThisForm.Items.Tiles, все будет норм.
ThisForm.Items.Tiles - тоже группа, но создана не динамически.
Бьюсь много времени, при этом код по факту ничем не отличается от примеров другого кода. Прошу помощи.
1 Ёпрст
 
10.08.20
13:25
Ну дык нефик с одним именем группы добавлять
2 Ёпрст
 
10.08.20
13:25
в цикле
3 SilverFalconi
 
10.08.20
13:25
(0) Создание группы:
Группа = Элементы.Добавить(НаименованиеГруппы, Тип("ГруппаФормы"), РодительГруппы);
Группа.Вид = ВидГруппыФормы.ОбычнаяГруппа;

Создание декорации(надписи):
Элемент = Элементы.Добавить(НаименованиеЭлемента,Тип("ДекорацияФормы"),Группа);
Элемент.Заголовок = "Надпись...";
Элемент.Гиперссылка = Истина;
4 SilverFalconi
 
10.08.20
13:27
(2) а, тут проблема в цикле... Не заметил что он имя одинаковое делает. Не привык к синтаксису на анг. языке
5 Жан Пердежон
 
10.08.20
13:28
это провал!
6 Жан Пердежон
 
10.08.20
13:30
в защиту тс можно сказать, что тексты ошибок дин.добавления элементов/реквизитов формы крайне не информативны
7 youalex
 
10.08.20
13:32
(0) У Группы формы укажи вид.

"1.Тексты модулей должны быть написаны на русском языке." (C)тандарты
8 SilverFalconi
 
10.08.20
13:33
(6) Нуу, такое)
Там ругается на параметр, и выдает его номер по порядку. Можно понять что дело в названии.
Хотя и правда, не очень по информативно)
9 Berman
 
10.08.20
13:39
Спасибо №7 и №3
Дело было в указании вида группы, ибо при коде вида:
        Counter = 1;
    For Each Item in Array Do
        GroupItem = ThisForm.Items.Add("Groups" + String(Counter), Type("FormGroup"), ThisForm.Items.Tiles);
        DescriptionItem = ThisForm.Items.Add("Desc" + String(Counter), Type("FormDecoration"),GroupItem);
        DescriptionItem.Title = Item.Get("Description");
        DescriptionItem.Type=FormDecorationType.Label;
        Counter = Counter+1;
    EndDo;
Крашилось все равно, я криво код для примера выдал без уникального идентификатора, прошу прощения
А вот при указании типа группы падать перестало. Благодарю душевно!
Конечный вид:
        Counter = 1;

    For Each Item in Array Do
        GroupItem = ThisForm.Items.Add("Groups" + String(Counter), Type("FormGroup"), ThisForm.Items.Tiles);
        GroupItem.Type=FormGroupType.UsualGroup;
        DescriptionItem = ThisForm.Items.Add("Desc" + String(Counter), Type("FormDecoration"),GroupItem);
        DescriptionItem.Title = Item.Get("Description");
        DescriptionItem.Type=FormDecorationType.Label;
        Counter = Counter+1;
    EndDo;
Всем спасибо!
10 Жан Пердежон
 
10.08.20
13:40
(8) обычно это либо тип параметра неверный, либо значение не удовлетворяет каким-либо критериям (например, уникальности или значениям определенных свойств (тот же вид))
11 Ёпрст
 
10.08.20
13:42
(9) если элементов будет больше 999, будет ошибка
Закон Брукера: Даже маленькая практика стоит большой теории.