Обычное приложение. Мутабельность коллекций #673935


#0 by Ненавижу 1С
Почему одни коллекции можно передать на сервер, а другие - нельзя. Почему некоторые из них мутабельные?
#1 by mikecool
а ломало разрабов писать их сериализацию
#2 by H A D G E H O G s
Пофиг.
#3 by Fragster
слайды! слайды!
#4 by Serginio1
Некоторые вещи тяжело сериализовать. Например у строки таблицы значений есть свойство владелец. То есть по уму нужно сериализовать ТЗ и из неё выделить Строку. Кроме того может быть иерархия. Скорее всего с этим и связано. Хотя это относится к способам сериализации графа
#5 by wowik
1С - аксиома. Нужно принимать как есть.
#6 by Ненавижу 1С
какие нах слайды то? ТЗ разве нельзя передать на сервер?
#7 by IШаман
А примеры можно какие именно коллекции можно передать а какие нет.
#8 by Serginio1
А вот строка ТЗ вроде не сериализыется?
#9 by Ненавижу 1С
СП нельзя передать, а массив можно
#10 by vista
Разве нельзя сделать 2 типа переменных - типы по значению и типы по ссылке? И в зависимости от типа сериализовать определённым образом.
#11 by Serginio1
А строку массива?
#12 by ДенисЧ
А что такое "строка массива"?
#13 by Serginio1
Совсем запарился. Это просто элемент.  Нет у строки массива владельца. А что такое СП?
#14 by Ненавижу 1С
не СП, а СЗ=спиок значений
#15 by Kyon8
+1 А сейчас вообще обычное приложение разрабов не интересует.
#16 by IШаман
А в массиве и списке одни и те же элементы?
#17 by Nexux
два липтона этому господину
#18 by Serginio1
(14 ) Почему не сериализуется? Сериализуется. Данный объект может быть сериализован в/из XDTO. Тип XDTO, соответствующий данному объекту, определяется в пространстве имен {. Имя типа XDTO: ValueListType. А вот почему нельзя передать ХЗ
#19 by Maxus43
При чем тут сериализация? Мутабельный это не значит Несериализуемый. Объект тоже сериализуется, но менее мутабельным не становится
#20 by IШаман
А вообще ТЗ не передается по значению. Потому она и является мутабельной.
#21 by Ненавижу 1С
конечно ну и я про тоже
#22 by Ненавижу 1С
а массив?
#23 by Serginio1
18 Просто элементы могут содержать несериализуемые объекты
#24 by IШаман
Массив - точно не знаю, но судя по всему да - надо попробовать.
#25 by Serginio1
Вообще в 1С все параметры передаются по ссылке. Кстат а если поставить перед параметром Знач?
#26 by Ненавижу 1С
думаешь перестанет передавать по ссылке?
#27 by Serginio1
25+ А вообще в том же COM для этого существует маршалинг
#28 by Maxus43
мутабельность - Это официальный термин из теории программирования. Мутабельные и немутабельные значения есть практически во всех языках программирования. Это принцип классификации. Например, в .Net есть строки (String) - немутабельные и объект StringBuilder - мутабельный тип (с) ВР. Так реализовано
#29 by Serginio1
ХЗ передача по ссылке гарантирует изменяемость объекта на стороне сервера.
#30 by IШаман
На 5-й год практики программирования ты открыл для себя что передача парметров может быть осуществлена разными способами?
#31 by IШаман
ТЗ всегда по ссылке передается, х.з. почему так в 1с сделано. Может память экономят:)
#32 by Serginio1
Ну вообще то я это знаю 26 лет.
#33 by IШаман
Слава богу.
#34 by Serginio1
Есть понятие адрес ссылки. Например если я на сервере присвою этому параметру новую тз, то на клиенте она тоже передастся. Значение для тз это адрес Тз в памяти, по ссылке это адрес переменной ссылающуюся на ТЗ
#35 by IШаман
Указателей в 1с нет, поэтому по адресу у вас врят ли что то получиться передать.
#36 by Serginio1
34+ Просто в том же СОМ такие объекты прекрасно маршализируются
#37 by Serginio1
Они есть. Просто все параметры в 1С по умолчпнию передаются как адреса переменных. Для передачи по значению есть Знач     Необязательное ключевое слово, которое указывает на то, что следующий за ним параметр передается по значению, т.е. изменение значения формального параметра при выполнении функции никак не повлияет на фактический параметр, переданный при вызове функции. Если это ключевое слово не указано, то параметр функции передается по ссылке, то есть изменение внутри функции значения формального параметра приведет к изменению значения соответствующего фактического параметра.
#38 by Ненавижу 1С
проверь тут: Процедура Пример(Знач А) КонецПроцедуры
#39 by IШаман
Но для ТЗ всегда передается по ссылке, а не по значению.
#40 by Ненавижу 1С
и там скорее всего не передача ссылки, а inout параметр через стек вызовов
#41 by Infsams654
см. . Проще говоря, все что есть внутри коллекции, тоже должно быть сериализуемо
#42 by Serginio1
Это не то. Очистить все будет. Другого не будет Процедура Пример(Знач А)  А=3; КонецПроцедуры
#43 by Ненавижу 1С
а вот это как раз не интересно
#44 by Serginio1
В любом случае ты можешь сереализовать в строку или лучше в ХранилищеЗначения и не парится
#45 by Serginio1
Передать на сервер СтрокаXML
#46 by Serginio1
Кстати для этого фиксированный массив структура и прочее предусмотрено
#47 by Serginio1
Добавь в голосование, что нехотят заниматься маршалингом и лень им было добавить тип ФиксированныйСписокЗначений. Или вообще ввести конструктор для фиксированной коллекции
#48 by Лефмихалыч
все равно передастся по ссылке. Много объектов еще так себя ведут.
#49 by Serginio1
Не будет как (передается ссылка на Тз, а не ссылка на переменную которая содержит ссылку на ТЗ) А вообще Ответ в фиксированных коллекциях. Например у массива есть фиксированный массив, но и массив может передаваться на сервер. Им нужно было создавать конструктор который бы делал объекто только для чтения. Например в C# есть ReadOnlyCollection
#50 by Serginio1
49 А вообще могли бы добавить просто параметр, который бы делал бы полную копию. В любом случае код в 45 не слишком трудозатратен.
#51 by Serginio1
Кстати хранилище значение передается на сервер. Хранилище = Новый ХранилищеЗначения(СпЗ, Сжатие); Передать на сервер Хранилище Это и будет фиксированным списком Спз= Хранилище.Получить;
#52 by Serginio1
Но я за то, что бы ввести ReadOnlyCollection (Фиксированная коллекция). Тогда если данные передаются в процессе сервера, то передается ссылка на ReadOnlyCollection, а если между клиенто и сервером то коллекция сериализуется.
#53 by Serginio1
Или вводить две функции на сервере Процедура ПроцедураНаСервере(спз) КонецПроцедуры
Тэги: 1С 8
Ответить:
Комментарии доступны только авторизированным пользователям

В этой группе 1С