Имя: Пароль:
1C
1С v8
3-х уровневая таблица значений.
0 Босечка
 
20.09.11
11:42
Есть 3-х уровневая таблица значений.  При выполнении модуля ругается на ТабТЗ_Каб. "Поле объекта не обнаружено!" Я уже запуталась в этих таблицах. Двухуровневые делала без проблем, а 3- первый раз.



   Т_М = Новый ТаблицаЗначений;
   
   Т_М.Колонки.Добавить("Модель");
   Т_М.Колонки.Добавить("ТаблТЗ");


   Для Каждого ТекущаяСтрока Из Т Цикл
       НайденнаяСтрока  = Т_М.Найти(ТекущаяСтрока.Модель,"Модель");
       Если НайденнаяСтрока=Неопределено Тогда
           СтрокаОсновная=Т_М.Добавить();
           СтрокаОсновная.Модель =ТекущаяСтрока.Модель;        
           СтрокаОсновная.ТаблТЗ = Новый ТаблицаЗначений;
           СтрокаОсновная.ТаблТЗ.Колонки.Добавить("ТипНадстройки");
       Иначе
           НайденнаяСтрока  = Т.Найти(ТекущаяСтрока.Модель,"Модель");
       КонецЕсли;
       
       НайденнаяСтрока1  = СтрокаОсновная.ТаблТЗ.Найти(ТекущаяСтрока.ТипНадстройки,"ТипНадстройки");
       Если НайденнаяСтрока1=Неопределено Тогда
           СтрокаТаблТЗ=СтрокаОсновная.ТаблТЗ.Добавить();
           СтрокаТаблТЗ.ТипНадстройки=ТекущаяСтрока.ТипНадстройки;
           СтрокаТаблТЗ.ТабТЗ_Каб = Новый ТаблицаЗначений;
           СтрокаТаблТЗ.ТаблТЗ_Каб.Колонки.Добавить("Настройка");
           СтрокаТаблТЗ.ТаблТЗ_Каб.Колонки.Добавить("Кол",Новый ОписаниеТипов("Число"));
       иначе
           НайденнаяСтрока1  = СтрокаОсновная.ТаблТЗ.Найти(ТекущаяСтрока.ТипНадстройки,"ТипНадстройки");
       Конецесли;
       
       СтрокаТаблТЗ1=СтрокаТаблТЗ.ТаблТЗ_Каб.Добавить();
       СтрокаТаблТЗ1.Настройка=ТекущаяСтрока.Настройка;
       СтрокаТаблТЗ1.Кабины=ТекущаяСтрока.Кол;
   Конеццикла;
1 mzelensky
 
20.09.11
11:43
(0) а нафига такие заморочки??? не проще Деревом значений воспользоваться????
2 mikecool
 
20.09.11
11:43
правильно ругается, где объявление колонки ТабТЗ_Каб?
3 Axel2009
 
20.09.11
11:43
ну именовать переменные надо так, чтобы было понятно а не 1-2-3
4 Axel2009
 
20.09.11
11:44
(2) СтрокаТаблТЗ.ТабТЗ_Каб = Новый ТаблицаЗначений;
а вот где объявление СтрокаТаблТЗ.ТаблТЗ_Каб непонятно
5 mikecool
 
20.09.11
11:44
СтрокаОсновная.ТаблТЗ = Новый ТаблицаЗначений;
           СтрокаОсновная.ТаблТЗ.Колонки.Добавить("ТипНадстройки");
//добавь еще
СтрокаОсновная.ТаблТЗ.Колонки.Добавить("ТабТЗ_Каб");
6 Босечка
 
20.09.11
12:04
Спасибо, попробую.
7 Босечка
 
20.09.11
12:10
А теперь вот здесь ругается:
{Отчет.ОтчетПоПроданымАвтомобилям(124)}: Поле объекта не обнаружено (ТаблТЗ_Каб)
           СтрокаТаблТЗ.ТаблТЗ_Каб.Колонки.Добавить("Настройка");
8 Axel2009
 
20.09.11
12:12
ужас
9 butterbean
 
20.09.11
12:13
что-то ты не то попробовала, покажи код
10 Босечка
 
20.09.11
12:16
Т_М = Новый ТаблицаЗначений;
   
   Т_М.Колонки.Добавить("Модель");
   Т_М.Колонки.Добавить("ТаблТЗ");


   Для Каждого ТекущаяСтрока Из Т Цикл
       НайденнаяСтрока  = Т_М.Найти(ТекущаяСтрока.Модель,"Модель");
       Если НайденнаяСтрока=Неопределено Тогда
           СтрокаОсновная=Т_М.Добавить();
           СтрокаОсновная.Модель =ТекущаяСтрока.Модель;        
           СтрокаОсновная.ТаблТЗ = Новый ТаблицаЗначений;
           СтрокаОсновная.ТаблТЗ.Колонки.Добавить("ТипНадстройки");
           СтрокаОсновная.ТаблТЗ.Колонки.Добавить("ТабТЗ_Каб");            
           
           
           
       Иначе
           НайденнаяСтрока  = Т.Найти(ТекущаяСтрока.Модель,"Модель");
       КонецЕсли;
       
       
       НайденнаяСтрока1  = СтрокаОсновная.ТаблТЗ.Найти(ТекущаяСтрока.ТипНадстройки,"ТипНадстройки");
       Если НайденнаяСтрока1=Неопределено Тогда
           СтрокаТаблТЗ=СтрокаОсновная.ТаблТЗ.Добавить();
           СтрокаТаблТЗ.ТипНадстройки=ТекущаяСтрока.ТипНадстройки;
           СтрокаТаблТЗ.ТабТЗ_Каб = Новый ТаблицаЗначений;
           СтрокаТаблТЗ.ТаблТЗ_Каб.Колонки.Добавить("Настройка");
           СтрокаТаблТЗ.ТаблТЗ_Каб.Колонки.Добавить("Кол",Новый ОписаниеТипов("Число"));
       иначе
           НайденнаяСтрока1  = СтрокаОсновная.ТаблТЗ.Найти(ТекущаяСтрока.ТипНадстройки,"ТипНадстройки");
       Конецесли;
       
       СтрокаТаблТЗ1=СтрокаТаблТЗ.ТаблТЗ_Каб.Добавить();
       СтрокаТаблТЗ1.Настройка=ТекущаяСтрока.Настройка;
       СтрокаТаблТЗ1.Кабины=ТекущаяСтрока.Кол;
   Конеццикла;
11 butterbean
 
20.09.11
12:17
повнимательнее.. сравни  ТабТЗ_Каб и ТаблТЗ_Каб
12 Рэйв
 
20.09.11
12:20
(10)
Рекомендую на вложенные таблицы сделать тз-шаблоны с нужными колонками,а потом просто копировать структуру, так намного нагляднее.
13 Босечка
 
20.09.11
13:23
Как корректно сворачивать 3-уровневую таблицу?
Мне надо свернуть по всем полям по всем уровням. После моей свертки, выдается сообщение
"Поле объекта не обнаружено ТаблТЗ_Каб"
Для Каждого ТекущаяСтрока Из Т_М Цикл
   Для Каждого ТекущаяСтрока1 Из ТекущаяСтрока.ТаблТЗ Цикл
       ТекущаяСтрока.ТаблТЗ.Свернуть("Надстройка","Кол");
       
   КонецЦикла;
КонецЦикла;

Для Каждого ТекущаяСтрока Из Т_М Цикл
   Сообщить(" "+ТекущаяСтрока.ТипНадстройки);
   
   Для Каждого ТекущаяСтрока1 Из ТекущаяСтрока.ТаблТЗ Цикл
       Сообщить(" "+ТекущаяСтрока1.Надстройка+"  "+ТекущаяСтрока1.Кол);
       
       
       Для Каждого ТекущаяСтрока2 Из ТекущаяСтрока1.ТаблТЗ_Каб Цикл
           Сообщить(" "+ТекущаяСтрока2.Модель);
           
       КонецЦикла;
   КонецЦикла;
КонецЦикла;
14 butterbean
 
20.09.11
13:25
(13) уже даже не смешно
15 Wobland
 
20.09.11
13:25
трёхуровневая таблица значений... вот были ещё когда-то трёхмерные штрихкоды...
16 Босечка
 
20.09.11
13:31
(15) Это к чему сказано было?
17 Босечка
 
20.09.11
13:34
ап...
18 Wobland
 
20.09.11
13:35
(16) хорошо тогда было. трёхуровневая ТЗ - это как?
19 Feanor
 
20.09.11
13:37
После

ТекущаяСтрока.ТаблТЗ.Свернуть("Надстройка","Кол");

в ТекущаяСтрока.ТаблТЗ не останется поля "ТаблТЗ_Каб"
20 Босечка
 
20.09.11
13:38
Колонкой ТЗ является таблица значений. И так 2 раза. Не сталкивались?
21 Wobland
 
20.09.11
13:38
(20) не, не доводилось, стараюсь без такого ;)
22 Feanor
 
20.09.11
13:39
(20) да хоть 100500 раз))) сворачиванием таблицы мы обрубаем все подчиненные таблицы - неужто это не понятно...
23 Босечка
 
20.09.11
13:41
(22) Нет не понятно.
Как же быть тогда?
24 Feanor
 
20.09.11
13:42
(23) ответ очевиден: как-то обойтись без свёртывания таблиц, имеющих подчиненные таблицы.
25 Босечка
 
20.09.11
13:42
Наверное перенести на нижний уровень? Так?
26 Feanor
 
20.09.11
13:43
(25) для начала сформулировать задачу нужно правильно.
27 Рэйв
 
20.09.11
13:52
(13)На тебе шаблон. Закопипасть в обработку и медитируй.


ТЗОснова=Новый ТаблицаЗначений;
ТЗОснова.Колонки.Добавить("Хрень");
ТЗОснова.Колонки.Добавить("ТЗур2");

тзШаблонУровень2=Новый ТаблицаЗначений;
тзШаблонУровень2.Колонки.Добавить("Хрень2");
тзШаблонУровень2.Колонки.Добавить("ТЗур3");

тзШаблонУровень3=Новый ТаблицаЗначений;
тзШаблонУровень3.Колонки.Добавить("Хрень3");


Для н=1 По 3 Цикл
   СтрОсновы=ТЗОснова.Добавить();
   СтрОсновы.Хрень="Хрень первого уровня № "+н;
   СтрОсновы.ТЗур2=тзШаблонУровень2.Скопировать();
   Для м=1 По 3 Цикл
       СтрУр2=СтрОсновы.ТЗур2.Добавить();
       СтрУр2.Хрень2="Хрень 2 № "+м;
       СтрУр2.ТЗур3=тзШаблонУровень3.Скопировать();
       Для д=1 по 3 Цикл
           СтрУр3=СтрУр2.ТЗур3.Добавить();
           СтрУр3.Хрень3="Хрень 3 № "+д;
       Конеццикла;    
   КонецЦикла;    
   
КонецЦикла;    

Для Каждого СтрОснова Из ТЗОснова Цикл
   Сообщить("Основа-------- "+СтрОснова.Хрень);
   Для Каждого СтрУр2 Из СтрОснова.ТЗур2 Цикл
       Сообщить("-------- уровень 2 : "+СтрУр2.Хрень2);
       Для Каждого СтрУр3 Из СтрУр2.ТЗур3 Цикл
           Сообщить("----------------уровень 3: "+СтрУр3.Хрень3);
       Конеццикла;    
   Конеццикла;    
Конеццикла;    


А вообще тренируй пространственное мышление.  А то еще бывают пятимерные массивы и все такое:))
28 Alex_MA
 
20.09.11
13:52
(0)Страшновато. Надо использовать ДеревоЗначений, зачем так извращаться ?
29 Feanor
 
20.09.11
13:57
(28) ты не шаришь. что бы враги не догадались, что задумал автор! дерево значений - для трусов и слабаков))
30 Рэйв
 
20.09.11
13:59
(29)Его предлагали в самом начале.Видимо не подходит по религиозным причинам:-)
31 Axel2009
 
20.09.11
14:00
(27) потом придешь туда работать, там будут колонки "Хрень1", "Хрень2" и т.д...
32 Feanor
 
20.09.11
14:00
(30) не вижу принципиальной разницы между деревом и таблицей, ТС, наверное, тоже))
33 Рэйв
 
20.09.11
14:02
(31) Ну что ж...Будет забавно:)
34 Босечка
 
20.09.11
14:02
Наверно...
35 Босечка
 
20.09.11
14:03
(27) Спасибо, пригодится.
Компьютеры — это как велосипед. Только для нашего сознания. Стив Джобс