|
Вопрос про &НаСервереБезКонтекста, странно как-то | ☑ | ||
---|---|---|---|---|
0
МЮЛЛЕР
07.08.13
✎
23:56
|
В форме документа есть реквизит формы Таблица (ТаблицаЗначений).
Реквизит Таблица выведен как элемент формы в виде таблицы. &НаСервере Процедура Процедура1() Структура = Новый Структура(); Структура.Вставить("Таблица", Таблица); ОбработатьТаблицу(СтруктураПараметров); КонецПроцедуры &НаСервереБезКонтекста Процедура ОбработатьТаблицу(СтруктураПараметров) ДанныеФормыКоллекция = СтруктураПараметров.Таблица; ДанныеФормыКоллекция.Очистить(); КонецПроцедуры Почему при таком раскладе очищается реквизит формы Таблица? |
|||
1
welwel
08.08.13
✎
00:01
|
А что требуется?
|
|||
2
МЮЛЛЕР
08.08.13
✎
00:03
|
(1) почему Таблица на форме очищается, не смотря на то, что реквизит передан внутри структуры в серверный внеконтекстный вызов?
|
|||
3
МЮЛЛЕР
08.08.13
✎
00:05
|
Наведу красоту
&НаСервере Процедура Процедура1() Структура = Новый Структура(); Структура.Вставить("Таблица", Таблица); ОбработатьТаблицу(Структура); КонецПроцедуры &НаСервереБезКонтекста Процедура ОбработатьТаблицу(СтруктураПараметров) ДанныеФормыКоллекция = СтруктураПараметров.Таблица;// (тип ДанныеФормыКоллекция) ДанныеФормыКоллекция.Очистить(); КонецПроцедуры |
|||
4
welwel
08.08.13
✎
00:07
|
все что передается в параметрах, доступно и работает, как и с контекстным вызовом
неконтекстный вызов просто не тащит сразу все данные формы на сервер |
|||
5
GROOVY
08.08.13
✎
00:08
|
1. Так делать не надо. Если есть желание передавать всю таблицу - юзай серверный метод с контекстом, или передавай данные в виде временного хранилища.
2. Да здравствуйте связь по ссылке. |
|||
6
МЮЛЛЕР
08.08.13
✎
00:09
|
(5)
1. Почему так делать не надо? 2. Какая может быть связь по ссылке, если &НаСервереБезКонтекста Тонкий клиент. |
|||
7
Поросенок Петр
08.08.13
✎
00:10
|
&НаСервереБезКонтекста должна уметь с клиента запускаться. \
А по поводу структуры, можно подумать структурой можно нае*ть платформу с передачей параметров. |
|||
8
МЮЛЛЕР
08.08.13
✎
00:11
|
(7) из серверной процедуры модуля формы нельзя вызывать &НаСервереБезКонтекста или что сказать хотел?
|
|||
9
Поросенок Петр
08.08.13
✎
00:13
|
(8) Можно. Только когда процедура, которая подразумевает возможность вызова с клиента на это тупо не способна, это называется г-код.
|
|||
10
GROOVY
08.08.13
✎
00:15
|
(6) Потому-что данные формы на клиенте лишь проекция данных хранящихся на сервере. передавая их обратно на сервер (с контекстом или без) ты заставляешь систему гнать данные с сервера клиенту, потом обратно на сервер, а когда закончится процедура то все поедет опять на клиента и синхронизируется с сервером. Короче бред. Проще и правильнее просто уйти на сервер и обработать данные там.
|
|||
11
GROOVY
08.08.13
✎
00:15
|
(6) 2. А это как-то связано? 0_о
|
|||
12
МЮЛЛЕР
08.08.13
✎
00:16
|
(9) где написано, что если процедура запущенная на сервере вызывает процедуру с директивой НаСервереБезКонтекста, то это копрокод?
|
|||
13
МЮЛЛЕР
08.08.13
✎
00:17
|
(10) Где там у меня клиентская процедура?
|
|||
14
Поросенок Петр
08.08.13
✎
00:18
|
(12) Копрокод если процедура НаСервере сует в процедуру НаСервереБезКонтекста куски своего контекста (таблицу формы, например).
|
|||
15
GROOVY
08.08.13
✎
00:19
|
(13) Промахнулся я.
А нафига тебе с сервера же сервер вызывать? Контекст уже синхронизирован. |
|||
16
GROOVY
08.08.13
✎
00:21
|
И я не понял почему связь по ссылке не должна работать?
|
|||
17
Поросенок Петр
08.08.13
✎
00:21
|
Другое дело, передача всего контекста (Форма) в процедуру
&НаКлиентеНаСервереБезКонтекста эт практикуется. |
|||
18
МЮЛЛЕР
08.08.13
✎
00:22
|
(15) не хочу, чтобы ВЕСЬ контекст передавался в Процедура ОбработатьТаблицу
Форма перегружена информацией. |
|||
19
МЮЛЛЕР
08.08.13
✎
00:24
|
(10) ты хочешь сказать ,что если в модуле формы из процедуры с директивой НаКлиенте вызову НаСервереБезКонтекста, то форма все равно будет синхронизироваться с сервером?
|
|||
20
GROOVY
08.08.13
✎
00:24
|
(18) Так он у тебя УЖЕ передался на сервер. Если ты будешь вызывать другие серверные процедуры то новых вызовов сервера не будет.
|
|||
21
Поросенок Петр
08.08.13
✎
00:25
|
(19) Не вызовешь ты её с клиента, блин. О чем так долго говорили большевики...
Ухожу спать. |
|||
22
GROOVY
08.08.13
✎
00:26
|
(19) Если будешь таблицу(ДанныеФормы) Передавать, то да. Конвертированные данные формы на клиенте лишь проекция (обычно ссылка+представление), да т то что клиент видит может быть далеко не все что в данных формы есть на сервере.
|
|||
23
МЮЛЛЕР
08.08.13
✎
00:26
|
(20) Это я понимаю. Я не хочу, чтобы вызываемая процедура отрабатывала в контексте формы.
|
|||
24
GROOVY
08.08.13
✎
00:27
|
(23) Ок. Она и не отрабатывает. А тупо очищает коллекция и по ссылке возвращает пустую обратно в точку вызова. Вопрос в чем?
|
|||
25
МЮЛЛЕР
08.08.13
✎
00:28
|
(22) то есть, ДанныеФормыКоллекция - это ссылка на конкретный реквизит формы на сервере. И куда его не пихай, он ссылкой и останется?
|
|||
26
Либерал
08.08.13
✎
00:29
|
да, это не про собянина, ходорковского и американцев флудить..
|
|||
27
МЮЛЛЕР
08.08.13
✎
00:29
|
(24) вопрос тут (25)
|
|||
28
GROOVY
08.08.13
✎
00:31
|
(25) Нет. ДанныеФормыКоллекция - это конвертированные типы значения которые не могут существовать на клиенте. Для коллекций значений это особо важно, так как сама коллекция живет на сервере и периодически синхронизируется с клиентом. О чем, в частности, может говорить что ТекущиеДанные на клиенте и сервере у ТЧ зачастую ссылаются на разные строки.
|
|||
29
МЮЛЛЕР
08.08.13
✎
00:32
|
+(25) чтобы избавиться от ссылки надо сделать так: РеквизитФормыВЗначение(Таблица, ТИП("ТаблицаЗначений"))?
|
|||
30
МЮЛЛЕР
08.08.13
✎
00:33
|
(28) тогда мне не фига не понятно.
Почему после засовывания "таблица" в структуру и последующей передачи её во внеконтекстный вызов, меняется реквизит формы? |
|||
31
GROOVY
08.08.13
✎
00:35
|
(30) Свзь по ссылке. Ты чистишь данные формы, при синхронизации с сервром они конвертируются в ТЗ и как следствие она очищается, а потом конвертируется в ДанныеФормы и едет на клиента где мы видим очищенную таблицу, содержащую данные формы.
|
|||
32
МЮЛЛЕР
08.08.13
✎
00:37
|
(31) в (25) я не это написал?
|
|||
33
МЮЛЛЕР
08.08.13
✎
00:41
|
&НаСервереБезКонтекста (&AtServerNoContext) — определяет серверную процедуру (функцию), исполняемую на сервере вне контекста формы. Переменные не могут быть внеконтекстными. В таких методах недоступен контекст формы (включая данные формы).
Все понятно, если в такую процедуру я запихиваю данные, относящиеся к контексту формы, то они тупо передаются по ссылке и их изменение влечет за собой изменение данных формы. |
|||
34
МЮЛЛЕР
08.08.13
✎
00:43
|
то есть, если в процедуру &НаСервереБезКонтекста передать в параметрах данные относящиеся к контексту формы, то это будет ссылка на данные формы.
|
|||
35
МЮЛЛЕР
08.08.13
✎
00:44
|
+(34) Таким образом, контекст всей формы не доступен, но значения параметров, относящихся к контексту формы, доступны. Происходит своеобразное обрезание контекста.
|
|||
36
МЮЛЛЕР
08.08.13
✎
00:45
|
Всем спасибо, все понятно, разобрался
|
|||
37
МЮЛЛЕР
08.08.13
✎
00:50
|
(21)> Не вызовешь ты её с клиента, блин. О чем так долго говорили большевики...
Че-гооо? |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |