|   |   | 
| 
 | Передача переменных по ссылке с клиента на сервер | ☑ | ||
|---|---|---|---|---|
| 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 | 
        Вторая часть фрагмента еще интереснее - там одна структура превращается в две.     | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |