Имя: Пароль:
1C
 
УФ. Вывод произвольной ТЗ на форму
,
0 mzelensky
 
20.01.15
09:12
Доброго всем! Помогите разобраться, а то видать туплю

Управляемая форма. НА форме в реквизитах есть таблица значений "ТЗ_Ф". Колонок у этой ТЗ нет. Задача - программно сформировать произвольную ТЗ (на сервере) и вывести ее в эту самую "ТЗ_Ф" на форме


Вроде как делаю по аналогии с этим:

v8: СКД 8.2: программный вывод в дерево значений на форме
v8: Управляемые формы. Таблица значений. Удаление колонки
1 mzelensky
 
20.01.15
09:13
Как делаю:

    ТЗ =  Новый ТаблицаЗначений;
    
    МассивДобавляемыхРеквизитов = Новый Массив; // Создание Реквизита формы типа ДанныеФормыТЗ
    МассивУдаляемыхРеквизитов = Новый Массив;
  
             
    Для Счетчик = 1 По ВсегоКолонок Цикл
        ТЗ.Колонки.Добавить("Колонка"+Счетчик, Новый ОписаниеТипов("Строка"));
    КонецЦикла;
    
    Для Счетчик =1 По ВсегоСтрок Цикл
        НоваяСтрока = ТЗ.Добавить();
    КонецЦикла;
        
    Для Счетчик = 0 По ВсегоКолонок-1 Цикл
        ТЗ.ЗагрузитьКолонку(Данные[Счетчик], Счетчик);        
        
        
        
        Если Элементы.Найти("ТЗ_" + "Колонка"+Строка(Счетчик +1)) = Неопределено Тогда
            МассивДобавляемыхРеквизитов.Добавить(Новый РеквизитФормы("ТЗ_Колонка"+Строка(Счетчик +1), Новый ОписаниеТипов("Строка"), "ТЗ_Ф"));
            //МассивУдаляемыхРеквизитов.Добавить("Колонка"+Строка(Счетчик +1));
        КонецЕсли;
    КонецЦикла;

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


ЗначениеВРеквизитФормы(ТЗ, "ТЗ_Ф");
2 mzelensky
 
20.01.15
09:14
В результате получаю ошибку на "ЗначениеВРеквизитФормы(ТЗ, "ТЗ_Ф");" с описанием


{Форма.ФормаОбработки.Форма(95)}: Ошибка при вызове метода контекста (ЗначениеВРеквизитФормы)
    ЗначениеВРеквизитФормы(ТЗ, "ТЗ_Ф");    
по причине:
Недопустимое значение параметра (параметр номер '2')
3 mzelensky
 
20.01.15
09:15
ГДЕ ТУПЛЮ?
4 НЕА123
 
20.01.15
09:23
Массив = Новый Массив;
    
    МассивУдаляемыхКолонокТЗ = Новый Массив;
    
    Для Каждого Эл Из Элементы.ТЗ_Ф.ПодчиненныеЭлементы Цикл
        МассивУдаляемыхКолонокТЗ.Добавить(Эл);
    КонецЦикла;
    
    Для Каждого Эл Из МассивУдаляемыхКолонокТЗ Цикл
        Элементы.Удалить(Эл);
    КонецЦикла;
5 mzelensky
 
20.01.15
09:25
(4) Это в какое место нужно?
6 НЕА123
 
20.01.15
09:28
(5)
это надо до того...
суть в том, что надо убрать связь с несуществующими колонками.
7 mzelensky
 
20.01.15
09:30
(6) Дело в том, что ошибка выходит в самом начале создания. Т.е. по сути удалять нечего - колонок там нет
8 НЕА123
 
20.01.15
09:31
(6)+
в (0) МассивУдаляемыхРеквизитов просто забыл заполнить.
9 mzelensky
 
20.01.15
09:33
(8) Так нечего же удалять. Нет колонок еще в ТЗ.

При повторной загрузке понятно, что нужно старые удалить, но ошибка выходит приПЕРВОЙ обработке, когда ТЗ на форме пустая вообще - ни строк ни колонок НЕТ
10 НЕА123
 
20.01.15
09:35
(7)
у меня еще вот делается до ЗначениеВРеквизитФормы(ТЗ, "ТЗ_Ф");

    Для Каждого Реквизит Из МассивДобавляемыхРеквизитов Цикл
        Эл = Элементы.Добавить(Реквизит.Имя, Тип("ПолеФормы"), Элементы.ТЗ_Ф);
        Эл.вид = ВидПоляФормы.ПолеВвода;
        Эл.доступныеТипы = Новый ОписаниеТипов(Колонка.ТипЗначения);
        Эл.ПутьКДанным = "ТЗ_Ф."+Эл.Имя;
        Эл.Формат = "ЧГ=0";
    КонецЦикла;
11 Deon
 
20.01.15
09:37
а реквизит тоже ТЗ_Ф называется?
12 Лефмихалыч
 
20.01.15
09:38
если ЗначениеВРеквизитФормы говорит это, значит реквизита формы "ТЗ_Ф" не существует или он не таблица значений
13 НЕА123
 
20.01.15
09:38
(10)+
может это и не то. но у меня работает.
14 Лефмихалыч
 
20.01.15
09:39
+(12) если таки существует, значит всё закрой, продуй кэш, и открывай заново
15 mzelensky
 
20.01.15
09:44
(11) Реквизит формы называется "ТЗ_Ф" и элемент формы называется "ТЗ_Ф" (он на форме уже есть. Соответственно колнок у него нет)
16 mzelensky
 
20.01.15
09:44
(10) Это ты элемент формы таблицы значения создаешь программно. У меня он на форме уже лежит
17 Deon
 
20.01.15
09:49
Отладчик показывает одинаковые колонки в источнике и приемнике?
18 mzelensky
 
20.01.15
10:04
Забавно. Сделал вот так:

Для Счетчик = 0 По ВсегоКолонок-1 Цикл
        ТЗ.ЗагрузитьКолонку(Данные[Счетчик], Счетчик);
КонецЦикла;

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


Ошибка ушла