Программное добавление колонок в ТЧ формы в цикле

1. user1619635 06.03.23 09:55 Сейчас в теме
Второй день "пляшу с бубном". На форме документа (УФ) две ТЧ. Стоит задача добавить строки первой таблицы перенести в колонки второй, таким образом, чтобы значения строк первой стали заголовками второй. Массив с именами колонок подготовил. Делаю цикл. Параметры выражений Новый РеквизитФормы, Элементы.Добавить и ПутьКДанным ожидают ввода строки в кавычках. Если делаю переменную (нужно в цикле) то получаю ошибку "Неверно указан параметр "1". Если оставляю кавычки, то одна строка успешно переходит в колонку. Если две, то ругается на уникальность имени заголовка (все логично). Конструкции типа "Имя" + переменная не прокатывают, хотя везде пишут, что работает. Ткните носом что не так.


МассивДобавляемыхРеквизитов = Новый Массив;
Для Каждого тЭлемент из мсДанных Цикл //массив имен мсДанных содержит названия колонок
МассивДобавляемыхРеквизитов.Добавить(Новый РеквизитФормы("тЭлемент", // Вот здесь нужна переменная
ОписаниеТиповДляРеквизита,"Объект.ТЗвторая",тЭлемент,Ложь));

КонецЦикла;

ИзменитьРеквизиты(МассивДобавляемыхРеквизитов);

Для Каждого тЭлемент из мсДанных Цикл
нЭлемент = ЭтаФорма.Элементы.Добавить("тЭлемент", // и вот здесь нужна переменная
Тип("ПолеФормы"), Элементы.УстановкаДоступности);
нЭлемент.Вид = ВидПоляФормы.ПолеВвода;
нЭлемент.ПутьКДанным = "Объект.ТЗвторая.тЭлемент"; // путь? вариант "Объект.ТЗвторая." + тЭлемент не проходит
нЭлемент.Видимость = Истина;
КонецЦикла;
По теме из базы знаний
Найденные решения
3. laperuz 46 06.03.23 11:14 Сейчас в теме
1.
Новый РеквизитФормы("тЭлемент"......

Заменить на
Новый РеквизитФормы(тЭлемент.....


2. Убедиться, что значение, которое вводится в строку(оно же, хранящееся в тЭлемент) соответствует требованиям к наименованию реквизитов(не содержит пробелов, спецсимволов, начинается с буквы)
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
4. glek 120 06.03.23 14:30 Сейчас в теме
(1) Добавлю к (3): проверять так же надо на дубли.
2. user1619635 06.03.23 10:26 Сейчас в теме
Элементы массива имеют тип "строка"
3. laperuz 46 06.03.23 11:14 Сейчас в теме
1.
Новый РеквизитФормы("тЭлемент"......

Заменить на
Новый РеквизитФормы(тЭлемент.....


2. Убедиться, что значение, которое вводится в строку(оно же, хранящееся в тЭлемент) соответствует требованиям к наименованию реквизитов(не содержит пробелов, спецсимволов, начинается с буквы)
5. пользователь 06.03.23 15:02
Сообщение было скрыто модератором.
...
6. user1619635 06.03.23 17:14 Сейчас в теме
Предлагаемый вариант самый логичный на мой взгляд. Так я и делал. В результате получаю ошибку:

Ошибка при вызове конструктора (РеквизитФормы)
{Документ.УстановкаДоступностиДокументовПользователям.Форма.ФормаДокумента.Форма(31)}:МассивДобавляемыхРеквизитов.Добавить(Новый РеквизитФормы(тЭлемент,
{Документ.УстановкаДоступностиДокументовПользователям.Форма.ФормаДокумента.Форма(115)}:ДалееНаСервере();

по причине:
Недопустимое значение параметра (параметр номер '1')


Сейчас кот выглядит так :

МассивДобавляемыхРеквизитов = Новый Массив;
	Для Каждого тЭлемент из мсДанных Цикл //массив имен содержит названия колонок
	
            МассивДобавляемыхРеквизитов.Добавить(Новый РеквизитФормы(тЭлемент, 
	    ОписаниеТиповДляРеквизита,"Объект.ТЗвторая",тЭлемент,Ложь)); 
     
	КонецЦикла;
	
	ИзменитьРеквизиты(МассивДобавляемыхРеквизитов);
	
	Для Каждого тЭлемент из мсДанных Цикл
           нЭлемент = ЭтаФорма.Элементы.Добавить(тЭлемент, Тип("ПолеФормы"), Элементы.Объект.ТЗвторая);
           нЭлемент.Вид = ВидПоляФормы.ПолеВвода;
           нЭлемент.ПутьКДанным = Объект.ТЗвторая+"."+тЭлемент;
           нЭлемент.Видимость = Истина;
	КонецЦикла;
Показать
7. пользователь 06.03.23 17:45
Сообщение было скрыто модератором.
...
8. spacecraft 06.03.23 18:01 Сейчас в теме
(6)
Недопустимое значение параметра (параметр номер '1')

Недопустимое имя колонки. Предположительно содержит пробелы и/или начинается на цифру и/или содержит недопустимые символы.
Формируйте конструктор с именами генерированными отдельно от строк названий колонок.
ИмяКолонки = "Колонка_"+СтрЗаменить(Новый УникальныйИдентификатор(),"-","_");
И уже в качестве имени указывайте ее, а в заголовок нужное строковое значение.
Соответственно и ПутьКДанным будет с учетом ИмяКолонки.
9. пользователь 06.03.23 18:05
Сообщение было скрыто модератором.
...
10. spacecraft 06.03.23 18:07 Сейчас в теме
(9) перечитай задачу:
"Стоит задача добавить строки первой таблицы перенести в колонки второй, таким образом, чтобы значения строк первой стали заголовками второй"
В задаче только заголовки нужны.
11. пользователь 06.03.23 18:08
Сообщение было скрыто модератором.
...
12. spacecraft 06.03.23 18:10 Сейчас в теме
(11) ты путаешь имя колонки и заголовок. Заголовок указывается нужный, как заведен в строке первой таблицы. Про имена колонок ничего в задаче не сказано.
13. пользователь 06.03.23 18:11
Сообщение было скрыто модератором.
...
14. spacecraft 06.03.23 18:12 Сейчас в теме
(13) которые и будут заноситься в Заголовок.
15. пользователь 06.03.23 18:14
Сообщение было скрыто модератором.
...
16. spacecraft 06.03.23 18:19 Сейчас в теме
(15) ты отделяй условия поставленной перед ним задачей и его попыткой это решить. Просто он посчитал, что заголовки это и есть имена колонок.
Итого имеем. Первая ТЧ. В строках заносится текст, который в итоге должен отображаться в заголовках второй таблицы.
Этот тест набирает пользователь и может быть каким угодно. Пример: "Это вот такой красивый заголовок". Вот этот текст и должен быть отображен в колонке второй таблицы. Именно отображен как заголовок. Именно это и указано в условии задачи.
А "Массив с именами колонок подготовил." это уже попытка решить задачу.
17. пользователь 06.03.23 18:23
Сообщение было скрыто модератором.
...
18. spacecraft 06.03.23 18:25 Сейчас в теме
(15)
Спорим потом возникнет задача обратной связи? Когда по заголовку колонки второй таблицы надо будет найти строку в первой таблице?

Это решается дополнительным хранилищем соответствия.
(17) Вот вот. так что проблем вообще не вижу.
Можно вообще пересоздавать вторую таблицу. Все зависит от задачи использования ее дальше.
19. user1619635 06.03.23 19:47 Сейчас в теме
ПРОБЕЛЫ!!! Пробелы я упустил из виду, а массив гарантированно содержит пробелы. Про дубли дельное замечание, нужно будет включить проверку. Всем огромное спасибо за науку!
20. user1619635 06.03.23 19:49 Сейчас в теме
После СтрЗаменить() все заработало!!!
Оставьте свое сообщение

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