Имя: Пароль:
1C
1С v8
Передать ЭлементыФормы на сервер
,
0 Shrek_yar
 
27.11.13
12:52
Добрый день
Как можно передать на сервер "Элементы" (тип ЭлементыФормы)
Пытаюсь переедать в параметр процедуры с директивой на СервереБезКонтекста.
1 dj_serega
 
27.11.13
12:55
&НаСервереБезКонтекста нет доступа к форме.
Сделай &НаСервере
2 Shrek_yar
 
27.11.13
12:56
Вот пример

&НаКлиенте
функция ТестНаКлиенте()

  аа = Элементы;

  ТестНаСервер(аа);

КонецФункции

&НаСервереБезКонтекста
функция ТестНаСервер(аа)

/// обрабока

КонецФункции


ошибка

{Справочник.ВнутренниеДокументы.Форма.ФормаСпискаСПапками.Форма(546)}: Ошибка при вызове метода контекста (хн_УстановитьОсобыеКолонкиПросмотраСервер)
        хн_УстановитьОсобыеКолонкиПросмотраСервер(Элементы.Список.ПодчиненныеЭлементы,ТекущаяПапка,хн_ОтображениеПапки,ВидПросмотра);
по причине:
Ошибка передачи данных между клиентом и сервером. Значение недопустимого типа.
по причине:
Ошибка преобразования данных XDTO:
Запись значения свойства 'param':
    форма: Элемент
    имя: {http://v8.1c.ru/8.2/managed-application/modules}param
по причине:
Ошибка отображения типов:
Отсутствует отображение для типа 'ЭлементыФормы'
3 Euguln
 
27.11.13
12:56
(0) Передай в параметрах форму
4 Shrek_yar
 
27.11.13
12:56
[1] хотелось чтоб быстрее было.
так понятно.
5 Shrek_yar
 
27.11.13
12:57
(3) Просто

ТестНаСервер(Форма);

так что ди?
6 Shrek_yar
 
27.11.13
12:59
(3)
ошибка же

Запись значения свойства 'param':
    форма: Элемент
    имя: {http://v8.1c.ru/8.2/managed-application/modules}param
по причине:
Ошибка отображения типов:
Отсутствует отображение для типа 'УправляемаяФорма'
7 Dzenn
 
гуру
27.11.13
13:02
Форма не передаётся параметром между клиентскими и серверными процедурами.
8 Shrek_yar
 
27.11.13
13:04
(7) это ясно.
Значит элементы формы мне ни как не передать на сервер?
9 Shrek_yar
 
27.11.13
13:05
(7)и придеться использовать &НаСервере
Здорово!!!
10 dj_serega
 
27.11.13
13:06
(8) я ооооочень редко пользуюсь &НаСервереБезКонтекста.
11 Shrek_yar
 
27.11.13
13:07
(10)ну да, гонять туда - сюда все форму это правильно))))з
12 Shrek_yar
 
27.11.13
13:08
(10)но вопрос не в этом, хотел оптимизировать код
13 Darth Anyan
 
27.11.13
14:11
(11) летает не вся форма, а дельта с момента последнего изменения - остальное и так на сервере живет. Если нам нужно менять элементы - делаем серверный вызов и не мучимся :-)

Кстати, если посмотреть типовую БП 3.0, то там можно увидеть процедуры с директивой &НаКлиентеНаСервереБезКонтекста, которым параметром скармливается ЭтаФорма, соответственно, в коде процедуры обращение идет к свойствам параметра. Но это используется для исключения передачи контекста вообще.
14 Darth Anyan
 
27.11.13
14:12
(12) а в чем проблема-то? Форма такая суровая и тяжелая?
15 grayshadow
 
27.11.13
14:15
закон парных случаев...
v8: Обработка заполнения
тот же вопрос: ЗАЧЕМ надо передавать все элементы формы на сервер?:)
16 dj_serega
 
27.11.13
14:21
(11) не приходилось еще не работать с формой на сервере :)
тоесть, как-то получается что в 90% мне нужна форма на сервере :)
17 grayshadow
 
27.11.13
14:22
вы не поверите... форма существует и на сервере тоже...
18 sikuda
 
27.11.13
14:27
(17) И как она там выглядит? (Шучу, скорее <form>)
19 grayshadow
 
27.11.13
14:28
я не сказала, что ее там можно открыть:)
20 fisher
 
27.11.13
14:35
(13) А чуть поподробнее? В чем фишка? Когда удобно юзать эдакое? Что при этом происходит?
21 Infsams654
 
27.11.13
14:35
(17) спросите у 1С.
Это зло, в конфигураторе у объекта есть ветка формы, значит, и сама форма конкретного объекта есть на сервере
22 программистище
 
27.11.13
14:38
(9) а какой смысл в безконтекста
если форма потащится итак на сервере в виде параметра?
23 grayshadow
 
27.11.13
14:38
(13) >&НаКлиентеНаСервереБезКонтекста, которым параметром скармливается ЭтаФорма
а правда, нафига такие извращения?:)
24 Darth Anyan
 
27.11.13
14:40
(20) а суть вот какая - пишем какой-то код, который будет работать и на клиенте, и на сервере, и при этом использует контекст формы. Директива &НаКлиентеНаСервереБезКонтекста позволяет определить процедуру, которая будет работать и на клиенте, и на сервере, но не имеет возможности использовать контекст сервера. Если не передавать форму параметром, придется либо держать 2 одинаковые процедуры (клиентскую и серверную), либо постоянно делать серверные вызовы.

В целом согласен - попахивает извратом :-)
25 grayshadow
 
27.11.13
14:45
ясно, то есть они сами за***лись вызывать сервер:)))
26 Darth Anyan
 
27.11.13
14:56
не совсем. В серверном вызове ничего плохого нет :-)

Но вот есть у тебя, например, процедурка, которая играет доступностью элементов или активными страницами - это можно делать и на клиенте, и на сервере. И приспичило тебе ее вызвать, например, ПриСозданииНаСервере, причем так приспичило, что до ПриОткрытии дотерпеть нельзя. Вот чтобы не копипастить процедуру, и делают такой вот фокус :-)
29 GROOVY
 
27.11.13
14:59
Практически всем отметившимся в этой теме не мешало бы посетить мой курс: http://goo.gl/tZlKfk

:)
30 fisher
 
27.11.13
15:00
(24) В данном случае получается, что она как раз использует контекст формы. Т.к. на стороне сервера она может быть вызвана только из контекстной серверной процедуры, которая явно передаст ей ссылку на контекст.
Т.е. такой оксюморон получается. "БезКонтекста", но с контекстом :)
Я так понял, что это эмуляция &НаКлиентеНаСервере, которая недоступна в модуле формы.
31 Sabbath
 
27.11.13
15:02
(0)тебе прям там элементы нужны или их значения?
32 GROOVY
 
27.11.13
15:06
&НаКлиентеНаСервереБезКонтекста, при вызове из серверной процедуры не передаст контекста формы. По сути отработает как &НаСебвереБезКонтекста.
33 Sabbath
 
27.11.13
15:07
(32) это точно, откуда вызываешь, там и отрабатывает в таких случаях
34 fisher
 
27.11.13
15:09
(32) Дык ей из контекстной серверной процедуры ЭтаФорма передается через параметр. Т.е. работая через этот параметр фактически работаешь с контекстом формы, хоть и окольным путем.
35 GROOVY
 
27.11.13
15:13
(34) Так делать не рекомендуется.
Я бы вообще посоветовал не таскать форму с клиента никогда. Она и так елозит между клиентом и сервером при кучи разных событий.
36 GROOVY
 
27.11.13
15:14
Вот, что есть про директивы компиляции http://goo.gl/oMYBcM текст был в свое время одобрен известным методистом фирмы 1С.
37 fisher
 
27.11.13
15:16
(35) Выше было сказано, что этот прием используется в типовых. Предполагается, что выполнение происходит в рамках "нужного" серверного вызова. А дублирования кода позволяет избежать.
Так что ничего криминального не вижу. Полезный прием в копилку.
38 Darth Anyan
 
27.11.13
15:27
(37) я обычно такие приемы использую как индикаторы, если до них доходит, надо сесть и задуматься - а куда меня полет фантазии ведет :-)
39 sikuda
 
27.11.13
15:38
Из (36) Понравилось - нельзя делать расчета на клиенте, так как это может быть смартфон. Очень Вас уважаю, но я реально не представляю, что Гигигерцовый процессор смартфона не справиться с расчетом 100 строк...
40 GROOVY
 
27.11.13
15:40
(39) Нужно понимать, что данные все на клиенте не хранятся, при пересчете сотни строк они будут постоянно в двух направлениях синхронизироваться. Зачем создавать трафик? Можно же произвести 1 серверный вызов.
41 GROOVY
 
27.11.13
15:41
+40 и вопрос тут скорее не в производительности смартфона, а в канале связи.
42 grayshadow
 
28.11.13
07:52
(36) Groovy, спасибо за док! а существуют ли главы 02, 03 и т.д.?:) если это книжка, куплю...
и на курсы ваши съездила бы с радостью, кто бы оплатил командировку из Новосиба в Питер:)
43 Jolly Roger
 
28.11.13
08:37
(39) ну дык кого-то же еще и информационная безопасность волнует...
Оптимист верит, что мы живем в лучшем из миров. Пессимист боится, что так оно и есть.