|
Странное поведение | ☑ | ||
---|---|---|---|---|
0
ramir
08.04.14
✎
12:46
|
Из модуля формы (&НаСервере) делаю вызов серверной процедуры из общего модуля. Выполняю следующий код:
Объект = Форма.Объект; Для Каждого Стр Из Объект.Таблица Цикл Стр.Реквизит = Истина; КонецЦикла; В отладчике смотрю значения переменных Объект.Таблица[0].Реквизит = Истина Форма.Объект.Таблица[0].Реквизит = Ложь Почему так? ДанныеФормыСтруктура присваиваются не по ссылке, а по значению? |
|||
1
andreymongol82
08.04.14
✎
12:48
|
О сколько раз уже так было.
РеквизитФормыВЗначение ЗначениеВРеквизитФормы |
|||
2
Ненавижу 1С
гуру
08.04.14
✎
12:48
|
(0) да, иначе работаешь с разными данными
|
|||
3
ramir
08.04.14
✎
12:50
|
(1) причем тут это? Мне не нужно выгружать, загружать объект. Мне нужно его изменить. Это раз. "Реквизит" в прикладном объекте не существует, это реквизит формы. Это два.
|
|||
4
ramir
08.04.14
✎
12:50
|
(2) ну ппц, придется переписывать.
|
|||
5
Ненавижу 1С
гуру
08.04.14
✎
12:50
|
(3) при передаче на сервер, ты его неявно сериализуешь, раотаешь с другими данными
это 1С, детка |
|||
6
ramir
08.04.14
✎
12:51
|
(5) ну понятно что сериализую, обратно-то форма тоже сериализуется. Если я пишу
Для Каждого Стр Из Форма.Объект.Таблица Цикл Стр.Реквизит = Истина; КонецЦикла; все работает |
|||
7
ramir
08.04.14
✎
12:55
|
(2) Хорошо хоть массивы и т.п. по ссылке присваиваются. Где бы почитать какие типы данных и как ведут себя при присваивании.
|
|||
8
Ненавижу 1С
гуру
08.04.14
✎
12:57
|
(7) с массивами вообще-то тоже не айс
|
|||
9
ramir
08.04.14
✎
12:58
|
(8) А чего с ними не так? Только если содержат значения, которые не по ссылке присваиваются.
|
|||
10
andreymongol82
08.04.14
✎
12:58
|
(3) И что это меняет-то?
Объект у тебя на сервере живет сам по себе, теперь нужно его передать форме. |
|||
11
ramir
08.04.14
✎
12:59
|
(10) Менять Форма.Объект. По-моему вы не догоняете о чем идет речь.
|
|||
12
Ненавижу 1С
гуру
08.04.14
✎
13:05
|
модуль формы:
&НаКлиенте Процедура КомандаТест(Команда) М = ПолучитьМассивНаСервере(); М.Добавить(1); Сообщить(ПолучитьКоличествоНаСервере()); КонецПроцедуры &НаСервере Функция ПолучитьМассивНаСервере() Об = РеквизитФормыВЗначение("Объект"); Возврат Об.ПолучитьМойМассив(); КонецФункции &НаСервере Функция ПолучитьКоличествоНаСервере() Об = РеквизитФормыВЗначение("Объект"); Возврат Об.ПолучитьМойМассив().Количество(); КонецФункции модуль объекта: Перем МойМассив; Функция ПолучитьМойМассив() Экспорт Возврат МойМассив; КонецФункции МойМассив = Новый Массив; |
|||
13
andreymongol82
08.04.14
✎
13:07
|
(11) Да разные это объекты.
Объект.Таблица[0].Реквизит = Истина Форма.Объект.Таблица[0].Реквизит = Ложь после того как заполнили Объект.Таблица - его нужно отдать форме, то есть по вашему "поменять Форма.Объект" Как это сделать? Целых два способа. ЗначениеВРеквизитФормы или Объект.Таблица.Загрузить(ТЗ). |
|||
14
ramir
08.04.14
✎
13:25
|
(12) так это просто разные экземпляры объектов
(13) это понятно, лучше буду менять Форма.Объект без лишних выгрузок/загрузок |
|||
15
Ненавижу 1С
гуру
08.04.14
✎
13:37
|
(14) если бы все исполнялось на одной стороне (например в клиенте обычного приложения), то это был бы один и тот же объект
|
|||
16
ramir
08.04.14
✎
13:41
|
(15) Согласен, только массивы тут ни причем.
|
|||
17
ramir
08.04.14
✎
13:45
|
Еще интересный момент
Для Каждого Стр Из Форма.Объект.Таблица Цикл Стр.Реквизит = Истина; КонецЦикла; //Работает как хочется Для Каждого Стр Из Форма.Объект.Таблица Цикл Форма.ДругойРеквизит = Истина; //Что-нибудь делаем с другим реквизитом формы Стр.Реквизит = Истина; КонецЦикла; //Не работает |
|||
18
ramir
08.04.14
✎
13:47
|
(17) Сорри поторопился. Не работает когда в цикле меняешь реквизиты формы.
|
|||
19
ramir
08.04.14
✎
13:48
|
(18) Это логично
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |