Имя: Пароль:
1C
1С v8
Вопрос по пониманию УФ
, ,
0 Genayo
 
17.12.12
09:15
Я правильно понимаю, что при вызове в модуле формы процедуры с директивой &НаСервере в памяти сервера создается объект формы, заполненный данными формы с клиента. При возврате на клиента измененные на сервере данные формы копируются в данные формы на клиенте и объект на сервере уничтожается? Или объект формы на сервере продолжает существовать?
1 Asmody
 
17.12.12
09:18
(0) неправильно. всё с точностью до наоборот
2 Genayo
 
17.12.12
09:19
(1) Т.е. объект формы существует на сервере все время существования формы?
3 Asmody
 
17.12.12
09:20
на сервере форма существует с момента создания (ещё до открытия) и до уничтожения (после закрытия). на клиенте существуют копии данных формы сервера, причем не всегда прямые.
4 ДенисЧ
 
17.12.12
09:21
хм... А Асмодей ещё и одинэсит? О_о
5 Asmody
 
17.12.12
09:22
(4) изредка, для души
6 samozvanec
 
17.12.12
09:25
(1) пытаюсь представить этот наоборот, никак не получается)

(0) объекты сборщик мусора уничтожает, когда - его личное дело, но по-любому после выхода из процедуры. туда-сюда данные формы(и не только) гоняются.
7 Genayo
 
17.12.12
09:25
(3) Следовательно, ситуация, когда данные формы на клиенте и на сервере различаются при возвращении управления с сервера на клиент вполне возможна. Интересно...
8 Genayo
 
17.12.12
09:29
Тогда вопрос, а как-нибудь принудительно синхронизировать объект формы на клиенте и на сервере возможно?
9 Asmody
 
17.12.12
09:33
(8) измененные реквизиты при любом вызове сервера обновятся, верно и обратное, зачем еще что-то синхронизировать?
10 olegves
 
17.12.12
09:41
(8) на сервере нет объекта, а только данные формы, которые уничтожаются при закрытии процедуры (ф-ии)
Если в серверной процедуре изменить данные формы (реквизит формы или реквизит объекта, то эти изменения передаются на клиента.
11 Genayo
 
17.12.12
09:44
(9) Я вот тоже так думал, однако получил такую ситуацию. На форме реквизит типа СписокЗначений, его значениями являются структуры. И изменения, внесенные в эти структуры на сервере не видны на клиенте и наоборот (Если не меняется сам Список Значений).
Оно конечно понятно, что в реальной разработке так делать не надо, это был просто эксперимент. Ну ладно, видимо это особенность платформы.
12 Genayo
 
17.12.12
09:46
(10) Так. А вот и альтернативное мнение. Когда есть 2 разных мнения, хочется получить обоснования с обеих сторон...
13 ДенисЧ
 
17.12.12
09:49
(5)
а) откуда душа у демона? :-)
б) Это ж какую душу надо иметь, чтобы для неё одинесить? :-))
14 olegves
 
17.12.12
10:01
(12) попробуй создать переменную в серверной процедуре, в которую присвоишь там значение. Вызови эту же процедуру повторно. Твоя переменная будет неопределена в начале процедуры.
15 milan
 
17.12.12
10:03
(11) может системе подсказать как-то ? дернуть не только внутри списка а сам список.
16 Cunni
 
17.12.12
10:05
(3) По идее она должна уничтожаться с сервера после обработчика ПриСозданииНаСервере().
С курса Гилева: Если осуществляется открытие существующего документа, то происходит обращение к базе данных. Создается объект с типом данных ДокументОбъект.<ИмяДокумента>, данные объекта заполняются из информационной базы. После этого на стороне сервера создается управляемая форма с основным реквизитом ДокументОбъект.<ИмяДокумента> и осуществляется конвертация данных объекта ДокументОбъект.<ИмяДокумента в реквизит формы Объект. ДокументОбъект.<ИмяДокумента> удаляется на сервере. Заполненная управляемая форма передается на сторону клиента. На стороне клиента управляемая форма открывается. Управляемая форма удаляется на стороне сервера.
17 milan
 
17.12.12
10:11
(16) в каком-то релизе писали про оптимизацию вызовов сервера в части передачи с клиента только изменившихся реквизитов, так  что скорее всего (3) прав. Вообще, судя по тусе в софтпоинте, управляемые формы все используют только теоретически ;)
18 Genayo
 
17.12.12
10:12
(14) Переменная тут причем? Я в описанной в (11) ситуации  изменениия, сделанные в одной серверной процедуре вижу в другой серверной процедуре модуля формы. Тут может быть 2 объяснения - либо объект формы на сервере живет всегда, либо я обратился к нему до момента его удаления сборщиком мусора, как пишут в (6) (что, конечно, было бы достаточно странно).
19 Genayo
 
17.12.12
10:13
(16) Гилева я читал :) Но практика вот вызвала сомнения...
А мне не нравится, когда я что-то не до конца понимаю...
20 olegves
 
17.12.12
10:32
(18) для этого используют модули с повторным использованием
А переменная у тебя д.б. сохраниться, если б данные формы на сервере хранились.
Как ты одномоментно можешь видеть 2 серверные процедуры?
21 Genayo
 
17.12.12
11:07
(20) Так в том и дело, что не одномоментно. Отработала одна серверная процедура, результат ее работы на клиенте в реквизите формы не отобразился. Вызвана другая серверная процедура, в ней в реквизите формы виден результат работы первой процедуры.
Я всеже склонен согласиться, что объект формы существует на сервере все время существования формы, это более логично...
2 + 2 = 3.9999999999999999999999999999999...