|
Передача переменных по ссылке с клиента на сервер | ☑ | ||
---|---|---|---|---|
0
conscious
17.11.21
✎
15:59
|
Просто стало интересно...
Вот это все не вызвало бы вопросов, если бы выполнялось на одной машине, с одной кучей, но тут передача с клиента на сервер и обратно, и, как бы, эмуляция передачи переменной по ссылке (по указателю). Подскажите, где-нибудь в документации написано, что если не указано ЗНАЧ, то переменные всегда передаются по ссылке, даже с клиента на сервер? Проблемы в этом никакой нет, просто интересно, как это реализовано. |
|||
1
ДенисЧ
17.11.21
✎
16:03
|
Вообще-то все переменные передаются по ссылке, если не указано иначе...
|
|||
2
Ненавижу 1С
гуру
17.11.21
✎
16:07
|
||||
3
Ненавижу 1С
гуру
17.11.21
✎
16:08
|
со ЗНАЧ тоже интересно:
&НаКлиенте Процедура НажатиеКнопки(Элемент) М = Новый Массив; ДобавитьВМассивСервер(М); Сообщить("Количество = "+М.Количество()); ДобавитьВМассивКлиент(М); Сообщить("Количество = "+М.Количество()); КонецПроцедуры &НаСервере Процедура ДобавитьВМассивСервер(Знач Парам) Парам.Добавить(); КонецПроцедуры &НаКлиенте Процедура ДобавитьВМассивКлиент(Знач Парам) Парам.Добавить(); КонецПроцедуры |
|||
4
Малыш Джон
17.11.21
✎
16:09
|
(3) а что интересного? что в массив элемент таки добавляется?
|
|||
5
Ненавижу 1С
гуру
17.11.21
✎
16:13
|
(4) но только в одном из двух случаев
|
|||
6
conscious
17.11.21
✎
16:20
|
(2) Спасибо )
(3) А это нечто загадочное... Как из копии массива значение попадает в исходный массив? |
|||
7
Ненавижу 1С
гуру
17.11.21
✎
16:21
|
(6) никак, в параметр передается ссылка с в случае одного клиента или сервера, в случае передачи - копируется объект через сериализацию
|
|||
8
conscious
17.11.21
✎
16:25
|
(7) "Знач" тут теряет смысл...
|
|||
9
Ненавижу 1С
гуру
17.11.21
✎
17:02
|
(2) прошу прощения, все-таки по ссылке, вот пример:
&НаКлиенте Процедура Команда1(Команда) А = 42; Тест(А,А); Сообщить(А); КонецПроцедуры &НаКлиенте Процедура Тест(А,Б) А = А+1; //изменяются обе переменные Сообщить(А); Сообщить(Б); Б = Б+5; Сообщить(А); Сообщить(Б); КонецПроцедуры |
|||
10
ДедМорроз
17.11.21
✎
17:16
|
Вы просто поймите,что знач определяет копию переменной,а на объекта,который в ней живет.
А=объект Б=А Вот это дает результат,аналогичный использованию ЗНАЧ. У вас в переменной Б тот же объект,но переменная другая. Когда мы идем на сервер,то объект сериализуется,то есть превращается в строку,а перед вызовом собирается. А ЗНАЧ определяет,будет ли обратная сериализация. Для понимания фрагменты: Наклиенте Процедура Клиент() М=Новый Массив() М Добавить(1); Сервер1(М,М); Сервер2(М,М) КонецПроцедуры НаСервере Процедура Сервер1(А,Б) А.Добавить(2); КонецПроцедуры НаСервере Процедура Сервер2(А,Б) Б.Добавить(3); КонецПроцедуры Или такой фрагмент НаКлиенте Процедура Клиент() С=Новый Структура; С.Всьавить("А",1); М=Новый Массив; М.Добавить(С); М.Добавить(С); Сервер1(М); // Что у нас в М КонецПроцедуры Насервере Процедура Сервер1(М) М[0].Вставить("А",10); КонецПроцедуры |
|||
11
polosov
17.11.21
✎
17:29
|
||||
12
polosov
17.11.21
✎
17:30
|
+(11) Т.е. вот https://its.1c.ru/db/v8320doc#bookmark:dev:ti000000151
|
|||
13
conscious
17.11.21
✎
17:46
|
(12) В принципе, эта ссылка всё объясняет )
|
|||
14
pechkin
17.11.21
✎
17:46
|
просто с сервера приходит значение переменной
|
|||
15
fisher
17.11.21
✎
17:48
|
(12) "Если в качестве формальных параметров указано значение одной и той же переменной, то после возврата управления с сервера значение этой переменной будет установлено в значение самого правого формального параметра (без модификатора Знач), который изменялся в вызываемой функции"
Прикольно. В общем, кто познал дзен, тот просто использует чистые функции и с недоумением поправляет пенсне, выслушивая чужие проблемы. |
|||
16
ДедМорроз
17.11.21
✎
21:06
|
Вторая часть фрагмента еще интереснее - там одна структура превращается в две.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |