Имя: Пароль:
1C
1С v8
Возможно ли поместить в таблицу значений, другую таблицу значений?
,
0 Radion
 
12.05.12
16:55
Возможно ли поместить в таблицу значений, другую таблицу значений? Что то у меня не получается (
1 Deon
 
12.05.12
16:56
Возможно!
2 Deon
 
12.05.12
16:56
А что не получаецо-то? показывай код
3 Stim
 
12.05.12
16:56
Загрузить()
4 Жан Пердежон
 
12.05.12
16:56
элементарно
5 Нуф-Нуф
 
12.05.12
17:01
=
6 Radion
 
12.05.12
17:03
К примеру код, сделал так:
ТЗ_НовСтрока = ТЗ_Док.Добавить(); //Добавляем переменные в НОВУЮ таблицу значений
ТЗ_НовСтрока.НомерЗаказа     = НомерЗаказа;
ТЗ_НовСтрока.ДатаЗаказа      = ДатаЗаказа;
ТЗ_НовСтрока.ТипОрдера       = ТипОрдера;
ТЗ_НовСтрока.Контрагент      = Контрагент;
ТЗ_НовСтрока.Грузополучатель = Грузополучатель;
ТЗ_НовСтрока.ТЗ              = Старая_ТЗ; // - вот здесь пытаюсь засунуть старую тз в строку таблицы значений
Спасибо.
7 Кокос
 
12.05.12
17:04
можно проще
8 Кокос
 
12.05.12
17:06
// Дополняет таблицу значений-приемник данными из таблицы значений-источник
//
// Параметры:
//  ТаблицаИсточник - Таблица значений - таблица из которой будут браться строки для заполнения
//  ТаблицаПриемник - Таблица значений - таблица в которую будут добавлены строки из таблицы-источника
//  
Процедура ДополнитьТаблицу(ТаблицаИсточник, ТаблицаПриемник) Экспорт
   
   Для каждого СтрокаТаблицыИсточник Из ТаблицаИсточник Цикл
       
       ЗаполнитьЗначенияСвойств(ТаблицаПриемник.Добавить(), СтрокаТаблицыИсточник);
       
   КонецЦикла;
   
КонецПроцедуры

// Дополняет таблицу значений Таблица значениями из массива Массив.
//
// Параметры:
//  Таблица - ТаблицаЗначений - таблица, которую необходимо заполнить значениями из массива
//  Массив - Массив - массив значений для заполнения таблицы
//  ИмяПоля - Строка - имя поля таблицы значений, в которое необходимо загрузить значения из массива
//
Процедура ДополнитьТаблицуИзМассива(Таблица, Массив, ИмяПоля) Экспорт

   Для каждого Значение Из Массив Цикл
       
       Таблица.Добавить()[ИмяПоля] = Значение;
       
   КонецЦикла;
   
КонецПроцедуры
9 Radion
 
12.05.12
17:06
далее, пытаюсь получить данные:
Для Каждого ТекСтрока Из ТЗ_Док Цикл
...
Для каждого строка из ТЗ_ТекСтрока.ТЗ Цикл
//перебираем строки ТЗ

Вот сюда то я и не могу попасть!

КонецЦикла;
КонецЦикла;
10 НЕА123
 
12.05.12
17:10
(9)
отладчик что говорит про ТЗ_ТекСтрока.ТЗ?
11 Reset
 
12.05.12
17:11
(9) Проявлю мегателепатию и предложу в (6) написать так:

ТЗ_НовСтрока.ТЗ              = Старая_ТЗ.Скопировать();
12 Radion
 
12.05.12
17:11
(11) понял. спасибо.
13 Reset
 
12.05.12
17:11
ибо, видимо, там в цикле одна и та же таблица, и периодически затирается
14 Radion
 
12.05.12
17:19
(13) а как может затираться, если я для ТЗ использую метод новая строка.
15 Reset
 
12.05.12
17:23
(14) Тебе виднее. Телепатия свои пределы имеет. Заносишь в реквизит строки ссылку (ну, типа) на таблицу, потом таблицу очищаещь (строки). В результате по ссылке - пустая таблица. Это все предположения и телепатия, повторюсь.
Покажешь код - скажу более точно.
16 Reset
 
12.05.12
17:25
Если ответом на (10) будет "показывает пустую тз", то предположение (13) верно
17 Кокос
 
12.05.12
17:27
ТЗ_НовСтрока.ТЗ.Загрузить(СтараяТЗ.Выгрузить()) ;
только я не знаю поле может быть ТЗ?
18 DSSS
 
12.05.12
17:29
Поместить 2 таблицы значений во временные таблицы, в запросе соединить как нужно.
19 НЕА123
 
12.05.12
17:32
(17)
может.
самое правильное пока (11). "пока" - потому что это телепатия.
20 Stim
 
12.05.12
17:33
ЗаполнитьЗначенияСвойств() ?
21 Radion
 
12.05.12
17:58
(10) опечатка конечно - Для каждого строка из ТекСтрока.ТЗ Цикл (без "ТЗ_"). Спасибо.
22 Radion
 
12.05.12
18:10
(15) да. после помещения текущей ТЗ в основную ТЗ, я текущую очищаю.
ТЗ_НовСтрока = ТЗ_Док.Добавить(); //Добавляем переменные в НОВУЮ таблицу значений
ТЗ_НовСтрока.НомерЗаказа     = НомерЗаказа;
ТЗ_НовСтрока.ДатаЗаказа      = ДатаЗаказа;
ТЗ_НовСтрока.ТипОрдера       = ТипОрдера;
ТЗ_НовСтрока.Контрагент      = Контрагент;
ТЗ_НовСтрока.Грузополучатель = Грузополучатель;
ТЗ_НовСтрока.ТЗ              = Старая_ТЗ; // - вот здесь пытаюсь засунуть старую тз в строку таблицы значений

Старая_ТЗ.Очистить(); // вот здесь очищаю ее!!!!!!!!!!!!!!!!!!!!!!!!!!!!

Для каждого строка из ТекСтрока.ТЗ Цикл
//перебираем строки ТЗ

Вот сюда то я и не могу попасть!

КонецЦикла;
КонецЦикла;
23 ЗлобнийМальчик
 
12.05.12
18:12
(0) нет
24 Radion
 
12.05.12
18:14
(23) чет и я так думаю ((( уже все что предложили испробовал. не получается ((
25 Reset
 
12.05.12
18:19
И чего тебе еще нужно? и решение дал, и даже объяснил, почему не работает, не видя кода. Что еще?
26 НЕА123
 
12.05.12
18:21
ты (11) почему не сделал?!!!

ТЗ_НовСтрока = ТЗ_Док.Добавить(); //Добавляем переменные в НОВУЮ таблицу значений

ТЗ_НовСтрока.НомерЗаказа     = НомерЗаказа;
ТЗ_НовСтрока.ДатаЗаказа      = ДатаЗаказа;
ТЗ_НовСтрока.ТипОрдера       = ТипОрдера;
ТЗ_НовСтрока.Контрагент      = Контрагент;
ТЗ_НовСтрока.Грузополучатель = Грузополучатель;
ТЗ_НовСтрока.ТЗ              = Старая_ТЗ.Скопировать(); // - вот здесь (11)!!!!!


Старая_ТЗ.Очистить();


Для каждого строка из ТекСтрока.ТЗ Цикл
//перебираем строки ТЗ
КонецЦикла;
КонецЦикла;
27 НЕА123
 
12.05.12
18:21
(25)
сегодня пятница - де факто.
28 experimentator76
 
12.05.12
18:22
(22)
пойми что при варианте когда ты присваиваешь ТЗ ты присваиваешь ссылку на конкретную ТЗ
и потом в одном контексте ТЗ очищаешь и получается обращаешься к пустой ТЗ

тебе нужно скопировать ТЗ и присвоить ссылку на эту скопированную ТЗ реквизиту ТЗ
либо заполнение выделить в отдельную процедуру в которую передавать ТЗ как значение
29 experimentator76
 
12.05.12
18:23
(25) понимание (11) не телепатируешь )
30 experimentator76
 
12.05.12
18:25
(0) ты на каком нибудь еще языке программировал ?
31 Radion
 
12.05.12
18:30
(26) спасибо. все работает)))
(28) да. понимаю. спасибо.
32 НЕА123
 
12.05.12
18:34
(28)
>передавать ТЗ как значение
нет. проходили. даст только то, что передастся ссылка на тз, а не ссылка на переменную, которая ссылается на ТЗ.
33 experimentator76
 
14.05.12
10:14
(32) не поленился - проверил
действительно при ЗНАЧ ТЗ не создается новый экземпляр ТЗ
надо быть аккуратнее с такими конструкциями
с другой стороны эту фичу можно использовать когда нужна динамика изменений в разных структурах данных например по ТЗ
но пока таких задачек не попадалось
34 Reset
 
14.05.12
10:20
(33) при передаче тз как параметра по значению создается копия ссылки, а не самой тз.
Т.е.

Х(МояТаблица);

Процедура Х(Знач А)
А=Неопределено; // Так не удастся запоганить МояТаблица из кода выше
А.Очистить(); // А так - удастся. Хотя передана и копия ссылки, указывает она всё туда же
35 experimentator76
 
14.05.12
10:46
всетаки - это фичебага ((

СП
"
Знач
    Необязательное ключевое слово, которое указывает на то, что следующий за ним параметр передается по значению, т.е. изменение значения формального параметра при выполнении процедуры никак не повлияет на фактический параметр, переданный при вызове процедуры. Если это ключевое слово не указано, то параметр процедуры передается по ссылке, то есть изменение внутри процедуры значения формального параметра приведет к изменению значения соответствующего фактического параметра.
"

проверил я и изменение вложенной ТЗ и в процедуре при передаче ее "по значению"
изменения благополучно передаются и в ТЗ переданную по значению
то есть в случае ТЗ скорее всего ЗНАЧ не работает

код

Процедура КнопкаВыполнитьНажатие(Кнопка)
   
   ТЗ = Новый ТаблицаЗначений;
   ТЗ.Колонки.Добавить("ВложеннаяТЗ");
   ВложеннаяТЗ = Новый ТаблицаЗначений;
   ВложеннаяТЗ.Колонки.Добавить("Знач1");
   
   ТЗ_ = ТЗ.Добавить();
   ВложеннаяТЗ_ = ВложеннаяТЗ.Добавить();
   ВложеннаяТЗ_.Знач1 = 1;
   ЗаполнитьВложеннуюТЗ(ТЗ_, ВложеннаяТЗ);
   
   //ВложеннаяТЗ_.Знач1 = 2;
   
   Сообщить(ТЗ_.ВложеннаяТЗ[0].Знач1);
КонецПроцедуры

Процедура ЗаполнитьВложеннуюТЗ(ТЗ_, Знач ВложеннаяТЗ)
   ТЗ_.ВложеннаяТЗ = ВложеннаяТЗ;
   ВложеннаяТЗ[0].Знач1 = 2;    
КонецПроцедуры
36 НЕА123
 
15.05.12
08:06
(34)(35)
для себя я считаю что конструкция со Знач

Процедура Проц1(знач Х)

преобразовывается(это грубо, но суть такая)


Процедура Проц1(знач Х)
Перем ЛокальнаяСгенерированнаяПеременннаяХ;
ЛокальнаяСгенерированнаяПеременннаяХ = Х;

и потом все Х заменяются на ЛокальнаяСгенерированнаяПеременннаяХ.
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство. Фредерик Брукс-младший