|
Копирование ТЗ в другую ТЗ. Связь на века? :) | ☑ | ||
---|---|---|---|---|
0
Полька
08.11.13
✎
15:37
|
Это опять я. Просто интересно :)
ТЗ1 = ВыборкаДокументов.Продукция.Выгрузить(); ТЗ=ТЗ1; ТЗ.Очистить(); Почему при этом очищаются обе таблицы? Они что, связаны между собой? |
|||
1
zak555
08.11.13
✎
15:38
|
делать надо так
ТЗ = ТЗ1.Скопировать(); |
|||
2
zak555
08.11.13
✎
15:39
|
это не обе, а одна таблица, к которой можно обращаться через две переменные
|
|||
3
Ненавижу 1С
гуру
08.11.13
✎
15:39
|
это не копирование объектов, это копирование ссылки на один и тот же объект
есть же Скопировать |
|||
4
XLife
08.11.13
✎
15:39
|
(1) не угадал... ТЗ = ТЗ1.СкопироватьКолонки();
|
|||
5
Полька
08.11.13
✎
15:39
|
ясно
|
|||
6
zak555
08.11.13
✎
15:41
|
(4) она хотела скопировать универсальную коллекцию, а ты предлагаешь скопировать только структуру
|
|||
7
zak555
08.11.13
✎
15:42
|
(5) думаю, что нет
|
|||
8
XLife
08.11.13
✎
15:43
|
(6) а тз.очистить(); тогда зачем?
|
|||
9
zak555
08.11.13
✎
15:43
|
+ (7)
проц(знач ТЗ) ТЗ.Очистить() конецпроц ТЗ1 = ВыборкаДокументов.Продукция.Выгрузить(); ТЗ=ТЗ1; проц(ТЗ); |
|||
10
zak555
08.11.13
✎
15:43
|
(8) для теста, чтобы понять, как это работает =)
|
|||
11
Ненавижу 1С
гуру
08.11.13
✎
15:44
|
(9) результат будет тот же
|
|||
12
НеБорис Нуралиев
08.11.13
✎
15:46
|
Эх молодежь! Не застали чудесной поры кодирования на Си... Не знают про указатели и переменные в памяти.
|
|||
13
Полька
08.11.13
✎
15:52
|
(6) хотела скопировать структуру :)
|
|||
14
wPa
08.11.13
✎
15:54
|
вот и пришло время в ИТ тех, кто никогда не передавал указатели )
|
|||
15
zak555
08.11.13
✎
16:12
|
(11) почему ?*
|
|||
16
Ненавижу 1С
гуру
08.11.13
✎
16:20
|
потому что (знач ТЗ) тут не прокатит ТЗ все равно ссылка
|
|||
17
zak555
08.11.13
✎
16:24
|
(16) ???
|
|||
18
Холодильник
08.11.13
✎
16:25
|
сериализация
|
|||
19
zak555
08.11.13
✎
16:32
|
Знач
Необязательное ключевое слово, которое указывает на то, что следующий за ним параметр передается по значению, т.е. изменение значения формального параметра при выполнении процедуры никак не повлияет на фактический параметр, переданный при вызове процедуры. Если это ключевое слово не указано, то параметр процедуры передается по ссылке, то есть изменение внутри процедуры значения формального параметра приведет к изменению значения соответствующего фактического параметра. |
|||
20
mikecool
08.11.13
✎
16:35
|
(19) ТЗ накласть на Знач
|
|||
21
mikecool
08.11.13
✎
16:35
|
+20 как и СЗ
|
|||
22
mikecool
08.11.13
✎
16:35
|
(19) проверь
|
|||
23
mikecool
08.11.13
✎
16:35
|
я с этим столкнулся лет 5 назад вроде...
|
|||
24
zak555
08.11.13
✎
16:36
|
(21) и на массив
на все универсальные коллекции значений ? |
|||
25
Classic
08.11.13
✎
16:39
|
(20)
Не совсем |
|||
26
banco
08.11.13
✎
16:40
|
||||
27
Classic
08.11.13
✎
16:40
|
Приводил пример
Процедура Проц(ЗНАЧ ТЗ) ТЗ = Новый ТаблицаЗначений; КонецПроцедуры Процедура Проц(ТЗ) ТЗ = Новый ТаблицаЗначений; КонецПроцедуры Будут разные результаты |
|||
28
mikecool
08.11.13
✎
16:41
|
(27) какие?
|
|||
29
smaharbA
08.11.13
✎
16:42
|
в первом переданная тз не изменится
|
|||
30
zak555
08.11.13
✎
16:43
|
(26) выдержу приведи, а то с этого компа у менят доступа
|
|||
31
Classic
08.11.13
✎
16:44
|
(28)
Процедура Проц(ЗНАЧ ТЗ) ТЗ = Новый ТаблицаЗначений; КонецПроцедуры Процедура Проц1(ТЗ) ТЗ = Новый ТаблицаЗначений; КонецПроцедуры Процедура КнопкаВыполнитьНажатие(Кнопка) ТЗ = Новый ТаблицаЗначений; ТЗ.Колонки.Добавить("Номер1"); Проц(ТЗ); Сообщить(ТЗ.Колонки.Количество()); //================ ТЗ = Новый ТаблицаЗначений; ТЗ.Колонки.Добавить("Номер1"); Проц1(ТЗ); Сообщить(ТЗ.Колонки.Количество()); КонецПроцедуры Проверяй |
|||
32
zak555
08.11.13
✎
16:46
|
(31)
1 0 |
|||
33
ASU_Diamond
08.11.13
✎
16:46
|
(19) если бы для ТЗ это работало, то какой бы результат твоей программы был? у тебя выходит что внутри процедуры изменяется параметр, но это не влияет на фактический, значит ничего не измениться в месте вызова процедуры
|
|||
34
zak555
08.11.13
✎
16:47
|
ты же явно в процедуре создаёшь локальный объект
|
|||
35
Classic
08.11.13
✎
16:47
|
(33)
Это работает для ТЗ. Просто надо понимать, что переменная ТЗ хранит не таблицу значений, а ссылку на набор значений |
|||
36
Classic
08.11.13
✎
16:48
|
(34)
Это параметр процедуры |
|||
37
zak555
08.11.13
✎
16:49
|
(36) который ты переобозначаешь
|
|||
38
Classic
08.11.13
✎
16:49
|
(37)
Что значит "переобозначаешь"? Я его меняю |
|||
39
Classic
08.11.13
✎
16:49
|
Ладно, давай по-другому
|
|||
40
Classic
08.11.13
✎
16:51
|
Процедура Проц(ЗНАЧ ТЗ, ТЗ1)
ТЗ = ТЗ1; КонецПроцедуры Процедура Проц1(ТЗ, ТЗ1) ТЗ = ТЗ1; КонецПроцедуры Процедура КнопкаВыполнитьНажатие(Кнопка) ТЗ1 = Новый ТаблицаЗначений; ТЗ = Новый ТаблицаЗначений; ТЗ.Колонки.Добавить("Номер1"); Проц(ТЗ, ТЗ1); Сообщить(ТЗ.Колонки.Количество()); //================ ТЗ1 = Новый ТаблицаЗначений; ТЗ = Новый ТаблицаЗначений; ТЗ.Колонки.Добавить("Номер1"); Проц1(ТЗ, ТЗ1); Сообщить(ТЗ.Колонки.Количество()); КонецПроцедуры |
|||
41
zak555
08.11.13
✎
16:51
|
(38)
Процедура Проц(ЗНАЧ ТЗ) //у тебя тут ТЗ передаётся, как я понимаю по ссылке ТЗ = Новый ТаблицаЗначений; //а тут ты создаёшь локальную переменную процедуры |
|||
42
mikecool
08.11.13
✎
16:51
|
а блин, я не с этим сталкивался )))
вот с чем роцедура РазРаз(ТЗ) //ТЗ = СоздатьОбъект("ТаблицаЗначений"); ТЗ.УстановитьЗначение(1, "Раз", "Три"); ТЗ.УстановитьЗначение(2, "Раз", "Четыре"); КонецПроцедуры Процедура ДваДва(Знач ТЗ) //ТЗ = СоздатьОбъект("ТаблицаЗначений"); ТЗ.УстановитьЗначение(1, "Раз", "Три"); ТЗ.УстановитьЗначение(2, "Раз", "Четыре"); КонецПроцедуры //******************************************* Процедура Сформировать() ТЗ = СоздатьОбъект("ТаблицаЗначений"); ТЗ.НоваяКолонка("Раз"); ТЗ.НоваяСтрока(); ТЗ.Раз = "Рас"; ТЗ.НоваяСтрока(); ТЗ.Раз = "Два"; Сообщить(ТЗ.КоличествоСтрок()); РазРаз(ТЗ); Сообщить(ТЗ.КоличествоСтрок()); Сообщить(тз.ПолучитьЗначение(1, "Раз")); Сообщить(тз.ПолучитьЗначение(2, "Раз")); ТЗ = СоздатьОбъект("ТаблицаЗначений"); ТЗ.НоваяКолонка("Раз"); ТЗ.НоваяСтрока(); ТЗ.Раз = "Рас"; ТЗ.НоваяСтрока(); ТЗ.Раз = "Два"; Сообщить(ТЗ.КоличествоСтрок()); ДваДва(ТЗ); Сообщить(ТЗ.КоличествоСтрок()); Сообщить(тз.ПолучитьЗначение(1, "Раз")); Сообщить(тз.ПолучитьЗначение(2, "Раз")); КонецПроцедуры результаты 2 2 Три Четыре 2 2 Три Четыре |
|||
43
Classic
08.11.13
✎
16:52
|
(42)
Я просто показал, что не совсем пофиг на ЗНАЧ :) |
|||
44
zak555
08.11.13
✎
16:53
|
(40) должно быть
0 0 |
|||
45
Classic
08.11.13
✎
16:53
|
(41)
У тебя странные представления про локальность переменных :) |
|||
46
Classic
08.11.13
✎
16:53
|
(44)
А сколько выдает? |
|||
47
banco
08.11.13
✎
16:54
|
прочитали бы уже статью на ИТС
Разница для всех типов при передаче параметра процедуры или функции по ссылке или по значению проявляется в присвоении фактическому параметру процедуры или функции нового значения. Вызов свойств и методов контекста фактического параметра, если таковые имеются, влияет на формальный параметр независимо от того, передается ли он по ссылке или по значению. |
|||
48
Classic
08.11.13
✎
16:55
|
(47)
Для этого ИТС читать не надо. передача по ссылке и по значению есть в любом языке. Правда как правило по умолчанию значение, а не ссылка, как в 1С |
|||
49
Ненавижу 1С
гуру
08.11.13
✎
16:57
|
(44) Знач означает, что значение переменной ТЗ (а это ССЫЛКА на объект, а не сам объект) не вернется из процедуры
но сам то объект изменен! и не важно чему стала потом равняться ссылка |
|||
50
zak555
08.11.13
✎
18:42
|
тупанул
|
|||
51
ilkoder
08.11.13
✎
19:38
|
если я передам по значению ссылку на элемент справочника - оно мне что, новый элемент справочника сделает? это будет тот же самый элемент справочника
|
|||
52
sapphire
08.11.13
✎
20:37
|
(0) Нет, просто дура.
ТЗ=ТЗ1; //Указатель на одну переменную для сериализованного объекта присваивается другому ТЗ=ТЗ1.Скопировать();// Создается новый объект |
|||
53
rozer76
09.11.13
✎
12:01
|
(47) + открыл для себя недавно такое "Знач блокирует возврат параметра из другого контекста" см. v8: "Знач" в параметре функции - 12 пост
|
|||
54
К_Дач
09.11.13
✎
13:49
|
(47) не совсем понятно, а можно пример?
Если я передам в процедуру Проц(Знач ТЗ) таблицу значений и попытаюсь переопределить ее - ничего не выйдет, это нам уже Classic продемонстрировал. А что с остальными типами? Другие коллекции значений, а простые типы? |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |