Программное создание элементов формы в цикле
Добрый день! Пытаюсь сделать автоматическое создание страниц в форме при изменении реквизита. Главная задача - создать в цикле. При второй итерации цикла выполнение процедуры скипается, подозреваю, что из-за того, что при первом прохождении цикла создается НовыйЭлемент, а при втором он уже есть, поэтому и выходит ошибка. То есть создаю несколько групп с одним именем. Что можно сделать, научите или направьте, куда "курить". Скрин ошибки во вложении. Заранее спасибо!
Для Каждого ТекСтрока ИЗ таблица Цикл
НовыйЭлемент = ЭтаФорма.Элементы.Добавить("ГруппаСтраницы",Тип("ГруппаФормы"),ЭтаФорма);
НовыйЭлемент.Вид = ВидГруппыФормы.ОбычнаяГруппа;
НовыйЭлемент.Заголовок = ТекСтрока.Наименование;
КонецЦикла;
Прикрепленные файлы:
По теме из базы знаний
- Таблица значений и Табличный документ на управляемой форме
- Программное создание динамического списка на управляемой форме. (Динамическое создание динамического списка). Готовая процедура + обработка - демонстрационный пример
- [Шпаргалка] Программное создание элементов формы
- Программное копирование узла/строки дерева значений на управляемой форме (УФ, ДанныеФормыДерево, ДанныеФормыЭлементДерева) в вариантах на клиенте и на сервере
- Программное формирование элементов и реквизитов на управляемой форме
Найденные решения
Остальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
НомерСтраницы = 1;
Для Каждого ТекСтрока ИЗ таблица Цикл
НовыйЭлемент = ЭтаФорма.Элементы.Добавить("ГруппаСтраницы"+НомерСтраницы,Тип("ГруппаФормы"),ЭтаФорма);
НовыйЭлемент.Вид = ВидГруппыФормы.ОбычнаяГруппа;
НовыйЭлемент.Заголовок = ТекСтрока.Наименование;
НомерСтраницы = НомерСтраницы + 1;
КонецЦикла;
Показать
(7) конечно будет та же ошибка. При повторном выполнении цикла будут те же самые имена.
При повторном вызове цикла нужно только добавить новые элементы формы, или предварительно удалить созданные ранее?
Если нужно только добавлять, то можно использовать УИД.
При повторном вызове цикла нужно только добавить новые элементы формы, или предварительно удалить созданные ранее?
Если нужно только добавлять, то можно использовать УИД.
Для Каждого ТекСтрока ИЗ таблица Цикл
НовыйЭлемент = ЭтаФорма.Элементы.Добавить("ГруппаСтраницы"+xmlstring(Новый УникальныйИдентификатор),Тип("ГруппаФормы"));
НовыйЭлемент.Вид = ВидГруппыФормы.ОбычнаяГруппа;
НовыйЭлемент.Заголовок = ТекСтрока.Наименование;
КонецЦикла;
5 ответ работает, но на 16 итерации падает процедура. Поставил счетчик, теперь создается бесконечно.
КоличествоСтрок = Таблица.Количество();
НомерСтраницы = 1;
Счетчик = 0;
Пока Счетчик <= КоличествоСтрок Цикл
Для Каждого ТекСтрока ИЗ таблица Цикл
НовыйЭлемент = ЭтаФорма.Элементы.Добавить("ГруппаСтраницы"+НомерСтраницы,Тип("ГруппаФормы"),ЭтаФорма);
НовыйЭлемент.Вид = ВидГруппыФормы.ОбычнаяГруппа;
НовыйЭлемент.Заголовок = ТекСтрока.Наименование;
НомерСтраницы = НомерСтраницы + 1;
КонецЦикла;
Счетчик = Счетчик + 1;
КонецЦикла;
Показать
(22) делать проверку
НомерСтраницы = 1;
Для Каждого ТекСтрока ИЗ таблица Цикл
Если НомерСтраницы > 15 Тогда
Прервать;
КонецЕсли;
НовыйЭлемент = ЭтаФорма.Элементы.Добавить("ГруппаСтраницы"+НомерСтраницы,Тип("ГруппаФормы"),ЭтаФорма);
НовыйЭлемент.Вид = ВидГруппыФормы.ОбычнаяГруппа;
НовыйЭлемент.Заголовок = ТекСтрока.Наименование;
НомерСтраницы = НомерСтраницы + 1;
КонецЦикла;
Показать
(24) Ну костыль же... Не должно тут ничего падать, тут явно где-то сверху двойной вызов процедуры или есть цикл верхнего уровня.
Вот если бы человек умел сделать остановку по ошибке и проверил бы номер строки этой таблицы на 16-й итерации - может чего и понял бы.
Вот если бы человек умел сделать остановку по ошибке и проверил бы номер строки этой таблицы на 16-й итерации - может чего и понял бы.
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот