Имя: Пароль:
1C
1С v8
Помогите с ТаблицейЗначений
0 aki_rezak
 
16.07.12
14:03
Форумчане помогите, не догоняю.
Есть ТЗ1 в ней какие то данный. Далее простой Код
//
ВТ = Новый ТаблицаЗначений;
ВТ = ТЗ1;
ВТ.Свернуть("МояКолонка");

не понимаю почему сворачивается и ТЗ1, как разорвать эту свзяь...
1 shuhard
 
16.07.12
14:04
(0) кури скопировать
2 Cube
 
16.07.12
14:05
ВТ = ТЗ1.Скопировать();
ВТ.Свернуть("МояКолонка");
3 w2k3
 
16.07.12
14:05
(0) там есть типо "Скопировать" или "выгрузить" точно не помню. через нее сделай.
ЗЫ пишу на ходу. метод не помню....
4 aki_rezak
 
16.07.12
14:07
Да понятно что можно скопировать колонку например.... Не понятно почему остается связь ТЗ1 и ВТ. по идеи должна быть копия...
5 Reset
 
16.07.12
14:08
(4) Не должна. Нужна копия -> (1)
6 Kashemir
 
16.07.12
14:08
(4) Потому что ты скопировал ссылку на тот же самый объект.
7 aki_rezak
 
16.07.12
14:09
(6) палин песец. пора обедать. Всем спасибо:)
Тема закрыта
8 Infsams654
 
16.07.12
14:11
На обед

ВТ = СвернутьТ31(Т31);

Функция СвернутьТ31(Знач ТаблицаДляСворачивания)
 ВТ = Новый ТаблицаЗначений;
 ВТ = ТаблицаДляСворачивания;
 ВТ.Свернуть("МояКолонка");
 Возврат ВТ;
КонецФункции;
9 Рэйв
 
16.07.12
14:12
(8)Тогда уж параметром передавай имена колонок,а вторым- имена колонок для сложения.
10 palpetrovich
 
16.07.12
14:15
(8) фигня какая-то (цы) некий Бекас
11 Infsams654
 
16.07.12
14:17
(9)(10) так приколываюсь, чтоб различали разницу меж значением и ссылкой
12 Reset
 
16.07.12
14:18
(8) Бред.
Во первых, заем-то объяевляется переменная ВТ, котрая во второй же строке затирается.
Во вторых, Таблица-параметр по прежнему сворачивается
13 Reset
 
16.07.12
14:20
Учи разницу между значением и ссылкой (с) не мое
14 Buster007
 
16.07.12
14:26
(8) тогда уж
ВТ = СвернутьТ31(Т31);

Функция СвернутьТ31(Знач ТаблицаДляСворачивания)
 ТаблицаДляСворачивания.Свернуть("МояКолонка");
 Возврат ТаблицаДляСворачивания;
КонецФункции
15 Рэйв
 
16.07.12
14:27
+(14)Тогда уж

Процедура СвернутьТ31(ТаблицаДляСворачивания)
 ТаблицаДляСворачивания.Свернуть("МояКолонка");
КонецПроцедуры

:-)
16 CepeLLlka
 
16.07.12
14:30
(15) Смысл?
17 CepeLLlka
 
16.07.12
14:30
В (2) Уже был тру ответ.. что ещё то %)
18 Рэйв
 
16.07.12
14:31
(16)Короче.Быстрее.

А так смысла вообще нет. Потому что быстрее всего будет

ВТ=ТаблицаДляСворачивания.Свернуть("КолСвернуть","КолСум")
19 Рэйв
 
16.07.12
14:32
(17)Да просто изгаляемся:-)
20 Рэйв
 
16.07.12
14:32
+(18)..ну то есть сначала скопировать:-)  потом свернуть
21 CepeLLlka
 
16.07.12
14:38
(16) Быстрее? Помоему ты наркоман :)
22 Рэйв
 
16.07.12
14:40
(21)Ты будешь спорить, что ссылку передать в процедуру быстрее, чем скопировать объект тз, у которой может быть мильен строк?
23 Песец
 
16.07.12
14:42
(8) Наличие "Знач" приведет к тому, что внутри твоей функции будет не ссылка на тз, а копия ссылки, указывающая на ту же самую тз. Т. е. копии тз не создается.
24 Песец
 
16.07.12
14:46
(23+)

Функция СвернутьТ31(Знач ТаблицаДляСворачивания)
 ВТ = Новый ТаблицаЗначений;
 ВТ = ТаблицаДляСворачивания;
 ВТ.Свернуть("кол1");
   ВТ.выбратьстроку("тз внутри функции");
   ВТ=Новый ТаблицаЗначений;
   ВТ.ВыбратьСтроку("совсем другая тз, исходная не затирается");
 Возврат ВТ;
КонецФункции
Процедура КнопкаСформироватьНажатие(Кнопка)
   тз=Новый ТаблицаЗначений;
   тз.Колонки.Добавить("кол1");
   тз.Колонки.Добавить("кол2");
   стз=тз.Добавить();
   стз.кол1=1;
   стз.кол2=2;
   стз=тз.Добавить();
   стз.кол1=1;
   стз.кол2=3;
   тз.ВыбратьСтроку("исходная тз");
   СвернутьТ31(тз);
   тз.ВыбратьСтроку("исходная после обработки функцией");
   
   // Вставить содержимое обработчика.
КонецПроцедуры
25 Песец
 
16.07.12
15:03
(23++) можно позапускать вот этот код с "Знач" и без "Знач":


Функция СвернутьТ31(Знач ТаблицаДляСворачивания)
 ТаблицаДляСворачивания = ТаблицаДляСворачивания;
 ТаблицаДляСворачивания.Свернуть("кол1");
   ТаблицаДляСворачивания.выбратьстроку("тз внутри функции");
   ТаблицаДляСворачивания = Новый ТаблицаЗначений;
   ТаблицаДляСворачивания.ВыбратьСтроку("если по Знач, то это совсем другая тз, исходная не затирается, иначе затирается");
 Возврат ТаблицаДляСворачивания;
КонецФункции
Процедура КнопкаСформироватьНажатие(Кнопка)
   тз=Новый ТаблицаЗначений;
   тз.Колонки.Добавить("кол1");
   тз.Колонки.Добавить("кол2");
   стз=тз.Добавить();
   стз.кол1=1;
   стз.кол2=2;
   стз=тз.Добавить();
   стз.кол1=1;
   стз.кол2=3;
   тз.ВыбратьСтроку("исходная тз");
   СвернутьТ31(тз);
   Если тз.Количество()=0 Тогда
       Предупреждение("параметр был передан НЕ по Знач, исходная таблица очищена");
   Иначе
       Предупреждение("параметр был передан по Знач, в исходной таблице есть колонки и строки");
   КонецЕсли;
   тз.ВыбратьСтроку("исходная после обработки функцией");
КонецПроцедуры
26 pessok
 
16.07.12
15:33
а шо ты хотел, тс? ты ж не копируешь объект, а передаешь ссылке адрес, все верно и логично