Программное добавление колонок в ТЧ формы в цикле
Второй день "пляшу с бубном". На форме документа (УФ) две ТЧ. Стоит задача добавить строки первой таблицы перенести в колонки второй, таким образом, чтобы значения строк первой стали заголовками второй. Массив с именами колонок подготовил. Делаю цикл. Параметры выражений Новый РеквизитФормы, Элементы.Добавить и ПутьКДанным ожидают ввода строки в кавычках. Если делаю переменную (нужно в цикле) то получаю ошибку "Неверно указан параметр "1". Если оставляю кавычки, то одна строка успешно переходит в колонку. Если две, то ругается на уникальность имени заголовка (все логично). Конструкции типа "Имя" + переменная не прокатывают, хотя везде пишут, что работает. Ткните носом что не так.
МассивДобавляемыхРеквизитов = Новый Массив;
Для Каждого тЭлемент из мсДанных Цикл //массив имен мсДанных содержит названия колонок
МассивДобавляемыхРеквизитов.Добавить(Новый РеквизитФормы("тЭлемент", // Вот здесь нужна переменная
ОписаниеТиповДляРеквизита,"Объект.ТЗвторая",тЭлемент,Ложь));
КонецЦикла;
ИзменитьРеквизиты(МассивДобавляемыхРеквизитов);
Для Каждого тЭлемент из мсДанных Цикл
нЭлемент = ЭтаФорма.Элементы.Добавить("тЭлемент", // и вот здесь нужна переменная
Тип("ПолеФормы"), Элементы.УстановкаДоступности);
нЭлемент.Вид = ВидПоляФормы.ПолеВвода;
нЭлемент.ПутьКДанным = "Объект.ТЗвторая.тЭлемент"; // путь? вариант "Объект.ТЗвторая." + тЭлемент не проходит
нЭлемент.Видимость = Истина;
КонецЦикла;
МассивДобавляемыхРеквизитов = Новый Массив;
Для Каждого тЭлемент из мсДанных Цикл //массив имен мсДанных содержит названия колонок
МассивДобавляемыхРеквизитов.Добавить(Новый РеквизитФормы("тЭлемент", // Вот здесь нужна переменная
ОписаниеТиповДляРеквизита,"Объект.ТЗвторая",тЭлемент,Ложь));
КонецЦикла;
ИзменитьРеквизиты(МассивДобавляемыхРеквизитов);
Для Каждого тЭлемент из мсДанных Цикл
нЭлемент = ЭтаФорма.Элементы.Добавить("тЭлемент", // и вот здесь нужна переменная
Тип("ПолеФормы"), Элементы.УстановкаДоступности);
нЭлемент.Вид = ВидПоляФормы.ПолеВвода;
нЭлемент.ПутьКДанным = "Объект.ТЗвторая.тЭлемент"; // путь? вариант "Объект.ТЗвторая." + тЭлемент не проходит
нЭлемент.Видимость = Истина;
КонецЦикла;
По теме из базы знаний
- Программное добавление кнопок копирования табличных частей во все документы с минимальными изменениями конфигурации (или вообще без изменения)
- Вывод Таблицы Значений или Дерева Значений на экран управляемой формы без объявления колонок в реквизитах формы
- Программное создание динамического списка на управляемой форме. (Динамическое создание динамического списка). Готовая процедура + обработка - демонстрационный пример
- СКД. Отчеты с картинками
- Отчеты с общей формой отчета. Типовые сценарии
Найденные решения
Остальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
1.
Заменить на
2. Убедиться, что значение, которое вводится в строку(оно же, хранящееся в тЭлемент) соответствует требованиям к наименованию реквизитов(не содержит пробелов, спецсимволов, начинается с буквы)
Новый РеквизитФормы("тЭлемент"......
Заменить на
Новый РеквизитФормы(тЭлемент.....
2. Убедиться, что значение, которое вводится в строку(оно же, хранящееся в тЭлемент) соответствует требованиям к наименованию реквизитов(не содержит пробелов, спецсимволов, начинается с буквы)
Предлагаемый вариант самый логичный на мой взгляд. Так я и делал. В результате получаю ошибку:
Ошибка при вызове конструктора (РеквизитФормы)
{Документ.УстановкаДоступностиДокументовПользователям.Форма.ФормаДокумента.Форма(31)}:МассивДобавляемыхРеквизитов.Добавить(Новый РеквизитФормы(тЭлемент,
{Документ.УстановкаДоступностиДокументовПользователям.Форма.ФормаДокумента.Форма(115)}:ДалееНаСервере();
по причине:
Недопустимое значение параметра (параметр номер '1')
Сейчас кот выглядит так :
Ошибка при вызове конструктора (РеквизитФормы)
{Документ.УстановкаДоступностиДокументовПользователям.Форма.ФормаДокумента.Форма(31)}:МассивДобавляемыхРеквизитов.Добавить(Новый РеквизитФормы(тЭлемент,
{Документ.УстановкаДоступностиДокументовПользователям.Форма.ФормаДокумента.Форма(115)}:ДалееНаСервере();
по причине:
Недопустимое значение параметра (параметр номер '1')
Сейчас кот выглядит так :
МассивДобавляемыхРеквизитов = Новый Массив;
Для Каждого тЭлемент из мсДанных Цикл //массив имен содержит названия колонок
МассивДобавляемыхРеквизитов.Добавить(Новый РеквизитФормы(тЭлемент,
ОписаниеТиповДляРеквизита,"Объект.ТЗвторая",тЭлемент,Ложь));
КонецЦикла;
ИзменитьРеквизиты(МассивДобавляемыхРеквизитов);
Для Каждого тЭлемент из мсДанных Цикл
нЭлемент = ЭтаФорма.Элементы.Добавить(тЭлемент, Тип("ПолеФормы"), Элементы.Объект.ТЗвторая);
нЭлемент.Вид = ВидПоляФормы.ПолеВвода;
нЭлемент.ПутьКДанным = Объект.ТЗвторая+"."+тЭлемент;
нЭлемент.Видимость = Истина;
КонецЦикла;
Показать
(6)
Недопустимое имя колонки. Предположительно содержит пробелы и/или начинается на цифру и/или содержит недопустимые символы.
Формируйте конструктор с именами генерированными отдельно от строк названий колонок.
ИмяКолонки = "Колонка_"+СтрЗаменить(Новый УникальныйИдентификатор(),"-","_");
И уже в качестве имени указывайте ее, а в заголовок нужное строковое значение.
Соответственно и ПутьКДанным будет с учетом ИмяКолонки.
Недопустимое значение параметра (параметр номер '1')
Недопустимое имя колонки. Предположительно содержит пробелы и/или начинается на цифру и/или содержит недопустимые символы.
Формируйте конструктор с именами генерированными отдельно от строк названий колонок.
ИмяКолонки = "Колонка_"+СтрЗаменить(Новый УникальныйИдентификатор(),"-","_");
И уже в качестве имени указывайте ее, а в заголовок нужное строковое значение.
Соответственно и ПутьКДанным будет с учетом ИмяКолонки.
(15) ты отделяй условия поставленной перед ним задачей и его попыткой это решить. Просто он посчитал, что заголовки это и есть имена колонок.
Итого имеем. Первая ТЧ. В строках заносится текст, который в итоге должен отображаться в заголовках второй таблицы.
Этот тест набирает пользователь и может быть каким угодно. Пример: "Это вот такой красивый заголовок". Вот этот текст и должен быть отображен в колонке второй таблицы. Именно отображен как заголовок. Именно это и указано в условии задачи.
А "Массив с именами колонок подготовил." это уже попытка решить задачу.
Итого имеем. Первая ТЧ. В строках заносится текст, который в итоге должен отображаться в заголовках второй таблицы.
Этот тест набирает пользователь и может быть каким угодно. Пример: "Это вот такой красивый заголовок". Вот этот текст и должен быть отображен в колонке второй таблицы. Именно отображен как заголовок. Именно это и указано в условии задачи.
А "Массив с именами колонок подготовил." это уже попытка решить задачу.
(15)
Это решается дополнительным хранилищем соответствия.
(17) Вот вот. так что проблем вообще не вижу.
Можно вообще пересоздавать вторую таблицу. Все зависит от задачи использования ее дальше.
Спорим потом возникнет задача обратной связи? Когда по заголовку колонки второй таблицы надо будет найти строку в первой таблице?
Это решается дополнительным хранилищем соответствия.
(17) Вот вот. так что проблем вообще не вижу.
Можно вообще пересоздавать вторую таблицу. Все зависит от задачи использования ее дальше.
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот