Программное создание элементов формы в цикле

1. aalu14 20.07.22 09:58 Сейчас в теме
Добрый день! Пытаюсь сделать автоматическое создание страниц в форме при изменении реквизита. Главная задача - создать в цикле. При второй итерации цикла выполнение процедуры скипается, подозреваю, что из-за того, что при первом прохождении цикла создается НовыйЭлемент, а при втором он уже есть, поэтому и выходит ошибка. То есть создаю несколько групп с одним именем. Что можно сделать, научите или направьте, куда "курить". Скрин ошибки во вложении. Заранее спасибо!

Для Каждого ТекСтрока ИЗ таблица Цикл	
	НовыйЭлемент = ЭтаФорма.Элементы.Добавить("ГруппаСтраницы",Тип("ГруппаФормы"),ЭтаФорма);
        НовыйЭлемент.Вид = ВидГруппыФормы.ОбычнаяГруппа;
        НовыйЭлемент.Заголовок = ТекСтрока.Наименование; 
	КонецЦикла;
Прикрепленные файлы:
По теме из базы знаний
Найденные решения
17. spacecraft 20.07.22 10:38 Сейчас в теме
(12) вот так будет правильно:
НовыйЭлемент = ЭтаФорма.Элементы.Добавить("ГруппаСтраницы"+СтрЗаменить(xmlstring(Новый УникальныйИдентификатор),"-",""),Тип("ГруппаФормы"));
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
3. spacecraft 20.07.22 10:01 Сейчас в теме
(1)
НовыйЭлемент = ЭтаФорма.Элементы.Добавить("ГруппаСтраницы",Тип("ГруппаФормы"),ЭтаФорма);

Имена элементов формы должны быть уникальными.
2. soft_wind 20.07.22 10:00 Сейчас в теме
так имена разные должны быть
4. aalu14 20.07.22 10:05 Сейчас в теме
(2)А как в цикле, создавать с разными именами?
5. VZyryanov 20.07.22 10:06 Сейчас в теме
НомерСтраницы = 1;
Для Каждого ТекСтрока ИЗ таблица Цикл    
    НовыйЭлемент = ЭтаФорма.Элементы.Добавить("ГруппаСтраницы"+НомерСтраницы,Тип("ГруппаФормы"),ЭтаФорма);
        НовыйЭлемент.Вид = ВидГруппыФормы.ОбычнаяГруппа;
        НовыйЭлемент.Заголовок = ТекСтрока.Наименование;
        НомерСтраницы = НомерСтраницы + 1; 
КонецЦикла;
Показать
6. aalu14 20.07.22 10:12 Сейчас в теме
7. aalu14 20.07.22 10:16 Сейчас в теме
8. FatPanzer 20.07.22 10:26 Сейчас в теме
(7) Так посмотри на самой форме - может там реально уже есть элементы с такими наименованиями! Тебе же назвали причину - проверь обстоятельства. Мы не видим твоей формы и гадать за тебя не будем!

И убери нафиг третий параметр.
10. aalu14 20.07.22 10:31 Сейчас в теме
(8)Почему не нужен третий параметр?
11. FatPanzer 20.07.22 10:32 Сейчас в теме
(10) а ты сам почитай СП, че сразу мы-то?
13. aalu14 20.07.22 10:33 Сейчас в теме
(11)
(10) а ты сам почитай СП, че сразу мы-то?
Хорошо! Тогда, что такое "СП" ?
15. FatPanzer 20.07.22 10:37 Сейчас в теме
21. aalu14 20.07.22 10:53 Сейчас в теме
9. spacecraft 20.07.22 10:26 Сейчас в теме
(7) конечно будет та же ошибка. При повторном выполнении цикла будут те же самые имена.
При повторном вызове цикла нужно только добавить новые элементы формы, или предварительно удалить созданные ранее?
Если нужно только добавлять, то можно использовать УИД.
Для Каждого ТекСтрока ИЗ таблица Цикл    
    НовыйЭлемент = ЭтаФорма.Элементы.Добавить("ГруппаСтраницы"+xmlstring(Новый УникальныйИдентификатор),Тип("ГруппаФормы"));
        НовыйЭлемент.Вид = ВидГруппыФормы.ОбычнаяГруппа;
        НовыйЭлемент.Заголовок = ТекСтрока.Наименование; 
    КонецЦикла;
12. aalu14 20.07.22 10:32 Сейчас в теме
(9)Недопустимое значение параметра (параметр номер '1')
17. spacecraft 20.07.22 10:38 Сейчас в теме
(12) вот так будет правильно:
НовыйЭлемент = ЭтаФорма.Элементы.Добавить("ГруппаСтраницы"+СтрЗаменить(xmlstring(Новый УникальныйИдентификатор),"-",""),Тип("ГруппаФормы"));
16. FatPanzer 20.07.22 10:38 Сейчас в теме
(9) Вот прям с дефисами? )))
18. spacecraft 20.07.22 10:39 Сейчас в теме
14. aalu14 20.07.22 10:35 Сейчас в теме
5 ответ работает, но на 16 итерации падает процедура. Поставил счетчик, теперь создается бесконечно.

    КоличествоСтрок = Таблица.Количество();
    НомерСтраницы = 1;
	
    Счетчик = 0;
    Пока Счетчик <= КоличествоСтрок Цикл
    Для Каждого ТекСтрока ИЗ таблица Цикл
    	
    	 
НовыйЭлемент = ЭтаФорма.Элементы.Добавить("ГруппаСтраницы"+НомерСтраницы,Тип("ГруппаФормы"),ЭтаФорма);
    	 НовыйЭлемент.Вид = ВидГруппыФормы.ОбычнаяГруппа;
         НовыйЭлемент.Заголовок = ТекСтрока.Наименование;
    	 НомерСтраницы = НомерСтраницы + 1; 
    	 
          КонецЦикла;
    Счетчик = Счетчик + 1;
КонецЦикла;

Показать
19. FatPanzer 20.07.22 10:44 Сейчас в теме
20. spacecraft 20.07.22 10:47 Сейчас в теме
(14) цикл в цикле и циклом погоняет.
Если строк 100, то будет попытка создания элементов формы 10000 раз.
22. aalu14 20.07.22 10:55 Сейчас в теме
(20) Тогда как сделать, чтобы итераций было только 15?
24. spacecraft 20.07.22 10:59 Сейчас в теме
(22) делать проверку
НомерСтраницы = 1;
Для Каждого ТекСтрока ИЗ таблица Цикл
        Если НомерСтраницы > 15 Тогда
                Прервать;
        КонецЕсли;
        НовыйЭлемент = ЭтаФорма.Элементы.Добавить("ГруппаСтраницы"+НомерСтраницы,Тип("ГруппаФормы"),ЭтаФорма);
        НовыйЭлемент.Вид = ВидГруппыФормы.ОбычнаяГруппа;
        НовыйЭлемент.Заголовок = ТекСтрока.Наименование;
        НомерСтраницы = НомерСтраницы + 1; 
КонецЦикла;
Показать
26. FatPanzer 20.07.22 11:02 Сейчас в теме
(24) Ну костыль же... Не должно тут ничего падать, тут явно где-то сверху двойной вызов процедуры или есть цикл верхнего уровня.
Вот если бы человек умел сделать остановку по ошибке и проверил бы номер строки этой таблицы на 16-й итерации - может чего и понял бы.
27. aalu14 20.07.22 11:03 Сейчас в теме
(26)Понял, синтаксис-помощник и остановка по ошибке!
28. aalu14 20.07.22 11:04 Сейчас в теме
(24)
НомерСтраницы > 15

Спасибо!
25. FatPanzer 20.07.22 11:00 Сейчас в теме
(22) Вангую, что где-то сверху лежит еще один цикл, который нам не показывают. Если строк в таблице всего 15, то 16-й итерации просто не может быть.
23. aalu14 20.07.22 10:55 Сейчас в теме
Тут, конечно, такие "перлы" для вас, сори)
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот