Имя: Пароль:
1C
1С v8
Динамический набор колонок
,
0 nAPACEHAK
 
12.05.14
17:28
Добра всем

Помогите разобраться, плз, с УФ
весь день убил а так и не получилось разобраться

Надо создать форму с динамически изменяемым набором колонок

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

надо вместо запроса - взять названия колонок из массива строк

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

Ошибка при вызове конструктора (РеквизитФормы)
НоваяКолонка = Новый РеквизитФормы (Колонка, Новый ОписаниеТипов (МассивТипов), "ТаблицаВыгрузки");
по причине:
Недопустимое значение параметра (параметр номер '1')

почему так то?

Новый РеквизитФормы(<Имя>, <Тип>, <Путь>, <Заголовок>, <СохраняемыеДанные>)
Параметры:
<Имя> (обязательный)
Тип: Строка.
Имя реквизита.
<Тип> (обязательный)
Тип: ОписаниеТипов.

Первый параметр, Колонка - строка

Научите как правильно делать?

Я уже и без массива пробовал, просто строкой, и еще всякоразно. Один фиг никак не догоню ((((
1 oleg_prg
 
12.05.14
17:34
лови - вот накидал обработку - делает кнопки и таблицу программно, думаю там найдешь ответ )
http://yadi.sk/d/VMmro_n6PxEfp
2 nAPACEHAK
 
12.05.14
18:07
(1) спс
3 nAPACEHAK
 
12.05.14
18:15
(1) Премного благодарен
Всё понятно и доступно :)
4 nAPACEHAK
 
13.05.14
10:59
Все равно осталось немного непонятно, когда вернулся к массиву
Элемент1 = Новый РеквизитФормы("Поле1",Новый ОписаниеТипов("Строка"),Элементы.ДанныеТЗ.Имя);

теперь в конструктор передаем первым параметром строку из массива

Для каждого СтрЗаг Из Заголовки Цикл
        Элемент = Новый РеквизитФормы (СтрЗаг, Новый ОписаниеТипов ("Строка"), Элементы.ДанныеТЗ.Имя);

получаем
Ошибка при вызове конструктора (РеквизитФормы)
        Элемент = Новый РеквизитФормы (СтрЗаг, Новый ОписаниеТипов ("Строка"), Элементы.ДанныеТЗ.Имя);
по причине:
Недопустимое значение параметра (параметр номер '1')

Почему так то???
что в 1 случае что во 2 - в 1м параметре "строка"
5 nAPACEHAK
 
13.05.14
11:12
Для каждого СтрЗаг Из Заголовки Цикл
        Стр = СтрЗаг;
        Сообщить (ТипЗнч (Стр));
        Элемент = Новый РеквизитФормы (Стр, Новый ОписаниеТипов ("Строка"), Элементы.ДанныеТЗ.Имя);
        мКолонки.Добавить(Элемент);
    КонецЦикла;

на первой же итерации, после сообщить - строка - на конструкторе ошибка

хотя, без цикла -
Стр = "СтрЗаг";
        Сообщить (ТипЗнч (Стр));
        Элемент = Новый РеквизитФормы (Стр, Новый ОписаниеТипов ("Строка"), Элементы.ДанныеТЗ.Имя);
        мКолонки.Добавить(Элемент);
ошибки нет
6 hhhh
 
13.05.14
11:21
Сообщить (Стр); ???

может строка сама по себе дебильная.
7 hhhh
 
13.05.14
11:25
(6) заголовки же вообще могут быть по 100 символов, с пробелами и всякими кавычками. Зачем вы заголовок в имя фигачите?
8 nAPACEHAK
 
13.05.14
11:33
(6) да это я уже лбом бъюсь. Просто что бы вывела тип значения. Посмотреть что в конструктор передается

(7) Уже думал. Например, Лев (Стр, 5) выдает ту же самую ошибку

Для Ш = 0 По Заголовки.Количество () Цикл
        Стр = "_"+Ш; //[Ш];
так работает
9 nAPACEHAK
 
13.05.14
12:11
Для Ы = 1 по Столбцов Цикл            
     СтрЗаголовок = СокрЛП (Э.Sheets(ЭНачЛист).Cells (1, Ы).Text);
     Заголовки.Добавить(Строка (СтрЗаголовок));
КонецЦикла;

Массив заполняется так. Может тут чего?

Потому что если
Ф = Новый Массив;
Ф.Добавить("й");
Ф.Добавить("Ц");
Ф.Добавить("Ы");
    
мКолонки = Новый Массив;
Для Ш = 0 По Ф.Количество ()-1 Цикл
    Стр = Ф.Получить(Ш);
        Элемент = Новый РеквизитФормы (Стр, Новый ОписаниеТипов ("Строка"), Элементы.ДанныеТЗ.Имя);
    мКолонки.Добавить(Элемент);

то так заполняется

Но ведь иэ экселя тоже ведь текстовый массив получается

в чем разница? Вроде как и там и там одинаковые массивы строк
10 nAPACEHAK
 
13.05.14
13:58
Всё. Победил. Мой косяк был.
Компьютеры — прекрасное средство для решения проблем, которых до их появления не было.