Имя: Пароль:
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) Так в том и дело, что не одномоментно. Отработала одна серверная процедура, результат ее работы на клиенте в реквизите формы не отобразился. Вызвана другая серверная процедура, в ней в реквизите формы виден результат работы первой процедуры.
Я всеже склонен согласиться, что объект формы существует на сервере все время существования формы, это более логично...
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство. Фредерик Брукс-младший