Имя: Пароль:
1C
1С v8
Программное создание элементов формы (3 вложенные таблицы)
,
0 freelancer83
 
09.10.15
18:45
Доброго времени суток. Помогите разобраться с ошибкой.
Есть задача программно добавить реквизиты и элементы формы
Проблема в том, что реквизиты - это 3 вложенные таблицы, для примера:
есть таблица классы школы Таблица2, к ней привязана таблица учеников класса Таблица22, а к таблице учеников в свою очередь привязана таблица предметов с оценками учеников Таблица223. С помощью конструктора можно разместить реквизиты и соответствующие элементы на форме (таблицы формы), но при программном формировании (добавление элемента "Т223") появляется ошибка
{Форма.Форма.Форма(87)}: Ошибка при установке значения атрибута контекста (ПутьКДанным)
    НовЭл.ПутьКДанным = "Элементы.Т2.ТекущиеДанные.Таблица223";
по причине:
Недопустимое значение

Код процедуры
&НаСервере
Процедура Команда2НаСервере()
    //ДобавляемыеРеквизиты=Новый Массив;
    //СуществующиеРеквизиты = Новый Массив;
    //ЗарплатаКадры.ЗаполнитьМассивИменРеквизитовФормы(ЭтаФорма, СуществующиеРеквизиты);
    //СуществующиеРеквизиты.Удалить(СуществующиеРеквизиты.Найти("Реквизит777"));
    //СуществующиеРеквизиты.Удалить(СуществующиеРеквизиты.Найти("Объект"));
    //ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы("Реквизит1",Новый ОписаниеТипов("Дата"),                            ,"Реквизит1"));
    //Массив=Новый Массив;    
    //Массив.Добавить(Тип("ТаблицаЗначений"));
    //ОписаниеТиповТаблицаЗначений = Новый ОписаниеТипов(Массив);
    //ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы("Таблица2",ОписаниеТиповТаблицаЗначений,                            ,"Таблица2"));
    //ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы("Столбец21",Новый ОписаниеТипов("Строка"),"Таблица2"        ,"Столбец21"));
    //ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы("Таблица22",ОписаниеТиповТаблицаЗначений,"Таблица2"        ,"Таблица22"));
    //ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы("Столбец221",Новый ОписаниеТипов("Строка"),"Таблица2.Таблица22","Столбец221"));
    //ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы("Столбец222",Новый ОписаниеТипов("Строка"),"Таблица2.Таблица22","Столбец222"));
    //ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы("Таблица223",ОписаниеТиповТаблицаЗначений,"Таблица2.Таблица22","Таблица223"));
    //ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы("Столбец2231",Новый ОписаниеТипов("Строка"),"Таблица2.Таблица22.Таблица223","Столбец2231"));
    ////СформироватьРеквизитыФормы(Дерево.Строки,ДобавляемыеРеквизиты);            
    //ИзменитьРеквизиты(ДобавляемыеРеквизиты,СуществующиеРеквизиты);            
    ЗарплатаКадры.УдалитьПодчиненныеЭлементыГруппы(ЭтаФорма,Элементы.ГруппаПрограммныеЭлементы);
    
    НовЭл=Элементы.Добавить("Реквизит1",Тип("ПолеФормы"),Элементы.ГруппаПрограммныеЭлементы);    
    НовЭл.Вид = ВидПоляФормы.ПолеВвода;
    НовЭл.ПутьКДанным = "Реквизит1";
    НовЭл=Элементы.Добавить("Т2",Тип("ТаблицаФормы"),Элементы.ГруппаПрограммныеЭлементы);    
    //НовЭл.Вид = ВидПоляФормы.ПолеВвода;    
    НовЭл.ПутьКДанным = "Таблица2";
    //ЭлТаблица22=НовЭл;
    НовЭл=Элементы.Добавить("Столбец21",Тип("ПолеФормы"),НовЭл);    
    НовЭл.Вид = ВидПоляФормы.ПолеВвода;
    НовЭл.ПутьКДанным = "Таблица2.Столбец21";    
    
    НовЭл=Элементы.Добавить("Т22",Тип("ТаблицаФормы"),Элементы.ГруппаПрограммныеЭлементы);
    НовЭл.ПутьКДанным = "Элементы.Т2.ТекущиеДанные.Таблица22";
    ЭлТаблица22=НовЭл;
        
    НовЭл=Элементы.Добавить("Столбец221",Тип("ПолеФормы"),ЭлТаблица22);    
    НовЭл.Вид = ВидПоляФормы.ПолеВвода;
    НовЭл.ПутьКДанным = "Элементы.Т2.ТекущиеДанные.Таблица22.Столбец221";    
    
    НовЭл=Элементы.Добавить("Столбец222",Тип("ПолеФормы"),ЭлТаблица22);    
    НовЭл.Вид = ВидПоляФормы.ПолеВвода;
    НовЭл.ПутьКДанным = "Элементы.Т2.ТекущиеДанные.Таблица22.Столбец222";    
    
    НовЭл=Элементы.Добавить("Т223",Тип("ТаблицаФормы"),Элементы.ГруппаПрограммныеЭлементы);
    НовЭл.ПутьКДанным = "Элементы.Т2.ТекущиеДанные.Таблица223"; //ЗДЕСЬ ошибка
    //НовЭл.ПутьКДанным = "Элементы.Таблица22.ТекущиеДанные.Таблица223";
    //НоваяСтрока=РеквизитФормыВЗначение("Таблица2").Добавить();
    //НоваяСтрокаДочерняя=НоваяСтрока.Таблица22.Добавить();
    
    //ДобавляемыеРеквизиты.Очистить();
    //ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы("Таблица223",ОписаниеТиповТаблицаЗначений,"Таблица2.Таблица22","Таблица223"));
    //ИзменитьРеквизиты(ДобавляемыеРеквизиты,СуществующиеРеквизиты);
        
    НовЭл=Элементы.Добавить("Столбец2231",Тип("ПолеФормы"),НовЭл);    
    НовЭл.Вид = ВидПоляФормы.ПолеВвода;
    НовЭл.ПутьКДанным = "Элементы.Таблица22.ТекущиеДанные.Таблица223.Столбец2231";    
КонецПроцедуры
в процедуре закоментирован код программного формирования реквизитов, я просто добавил реквизиты формы в конфигураторе, хотя код программного добавления реквизитов работает без проблем, все 3 вложенные таблицы создаются по команде ИзменитьРеквизиты
при добавлении 2-х вложенных таблиц никаких проблем не возникает, ни при ручном добавлении реквизитов и программном добавлении элементов формы, ни при программном добавлении реквизитов и программном добавлении элементов формы
еще вопрос вдогонку: как в отладчике увидеть реквизиты формы?
РеквизитФормыВЗначение("таблица2").добавить().Таблица22.Колонки
ЭтаФорма.Т2 - вижу
ЭтаФорма.Т22 - вижу как колонку (ЭтаФорма.Т2.Т22,
дальше структуру увидеть не могу
попробую добавить обработку и скрины, пока разбираюсь, большое  спасибо за помощь
1 freelancer83
 
09.10.15
18:53
скриншот реквизитов формы в конфигураторе
https://drive.google.com/file/d/0ByV6nmoaKkjFdDZRd1lOUGVlcG8/view?usp=sharing
2 freelancer83
 
09.10.15
18:54
Управляемые формы
3 freelancer83
 
09.10.15
18:55
Тестировал обработку в БП (3.0.40.36)
на платформах 1С:Предприятие 8.3 (8.3.6.2237) и 1С:Предприятие 8.3 (8.3.6.2332)
4 freelancer83
 
09.10.15
18:57
Тестовая обработка находится по адресу
https://drive.google.com/file/d/0ByV6nmoaKkjFdHZ5MU5zVHdVeWM/view?usp=sharing
5 freelancer83
 
09.10.15
19:01
Простите новичка при описании проблемы в коде допущена ошибка
Вместо
НовЭл.ПутьКДанным = "Элементы.Т2.ТекущиеДанные.Таблица223";//ЗДЕСЬ ошибка

нужно читать
НовЭл.ПутьКДанным = "Элементы.Т22.ТекущиеДанные.Таблица223";//ЗДЕСЬ ошибка
именно данный код дает ошибку
6 freelancer83
 
12.10.15
09:34
up
Компьютеры — это как велосипед. Только для нашего сознания. Стив Джобс