|
Вызвать модуль объекта с клиента? | ☑ | ||
---|---|---|---|---|
0
Euroset1
14.02.19
✎
10:40
|
Реально ли?
Допустим, это внешняя обработка. Не хочу контекстный вызов сервера, если много данных на форме. При этом в модуле объекта есть процедура, которую не хотелось бы дублировать в модуле формы. |
|||
1
lxs
14.02.19
✎
10:43
|
Об = РеквизитФормыВЗначение("ОбработкаОбъект");
Об.Автозаполнение(); |
|||
2
sieben
14.02.19
✎
10:44
|
(0) > Не хочу контекстный вызов сервера,
Программный модуль объекта всегда получается из объекта - основного реквизита формы и неразрыно связан с ним. Реквизит формы - часть контекста. Так что извини, но нет. |
|||
3
lxs
14.02.19
✎
10:44
|
Отбой.. это только на сервере
|
|||
4
sieben
14.02.19
✎
10:47
|
(0) Передавай "свой контекст" структурой. А в модуле объекта что-то типа ТекущийКонтекст = ?(ПараметрКонтекст = Неопределено, ЭтотОбъект, ПараметрКонтекст) и алга.
|
|||
5
Euroset1
14.02.19
✎
12:10
|
(4) вот представь, у меня на форме много данных, которые не хочу синхронизировать с сервером без надобности. И бац - нужен вызов функции. Не совсем понял, что именно ты предлагаешь. Всмысле откуда куда передать.
На крайний случай я подумываю примерно о следующем: 1) При создании на сервере - получаю объект и кладу его во временное хранилище, возможно сериализую или через структуру 2) Адрес этого хранилища транслирую на клиент 3) Для вызова модуля объекта иду с клиента на сервер без контекста, туда пинаю адрес и там вскрываю хранилище и юзаю мой объект для вызова его методов. Мне кажется, должно работать.. но не откажусь от более изящного способа извращения =) |
|||
6
sieben
14.02.19
✎
12:48
|
(5) А, ну да, у тебя ж модуля объекта и не будет, это я загнался. Отменяется.
Объект, например СправочникОбъект или ОбработкаОбъект ты в хранилище не положишь, он мутабельный. Его надо каждый раз создавать заново. РеквизитФормыВЗначение, кстати, так и поступает - всегда создает объект заново, компилирует модуль и выполняет секцию инициализаци, потом тупо переносит в него данные из данных реквизита формы и отдает тебе. Ну еще чуть подправляет внутреннее состояние чтобы разные ЭтоНовый работали. Так что то, что ты задумал - не взлетит. Хранилище - оно для данных, а не для кода. Переходи на использование общих модулей, уменьшай размер данных формы - например, переносом в клиентские переменные, ты ж все равно с сервером их синхронизировать не хочешь. И т.п. |
|||
7
Вафель
14.02.19
✎
12:52
|
не размещай тогда процедуры в модуле объекта
|
|||
8
DrWatson
14.02.19
✎
13:19
|
А это "Допустим, это внешняя обработка" или "это внешняя обработка"?
Потому что при таких вызовах лучше сделать функцию общего модуля или функцию менеджера объекта. |
|||
9
Euroset1
14.02.19
✎
13:31
|
Речь именно о внешней обработке. Если бы оформлял в виде расширения, то там без вопросов.
Почему именно модуль объекта? Потому что подключаю обработку через БСП в доп отчеты и обработки. Там действие должно работать по расписанию, а часть действия должна работать и принудительно через форму. Следовательно, код одинаковый. А дублировать его не хочется, очень (часто приходится допиливать). Там через форму все делается осознанно пользователем, а по расписанию - всплепую без выбора. Потому форма тяжелая с точки зрения контекста. Про мутабельный это круто, но я даже ком объект умудряюсь в временное хранилище запихать и использовать его раз 20 не создавая заново. В частности, ADODB Connection. Сейчас не помню код наверняка, но там что-то типа запихнутого в структуру ком объекта, потом эту структуру во временное хранилище и далее адрес в помощь. |
|||
10
sieben
14.02.19
✎
14:35
|
(9) > но я даже ком объект умудряюсь в временное хранилище запихать
Еще один гений архитектуры. Это ровно до тех пор, пока у тебя серверные вызовы в один процесс рпхоста приходят. Как только нагрузка повысится, тебя ожидают изумительные эффекты. |
|||
11
YAGolova
14.02.19
✎
15:37
|
А если передать данные формы на сервер без контекста, а там воспользоваться ДанныеФормыВЗначение. Мне кажется должно взлететь
|
|||
12
lodger
14.02.19
✎
15:42
|
(0)
&НаКлиенте че-то параметр.Вставить("ПутьКОбработкеДоступныйССервера",СтрокаПуть) вызываемсервер(параметр) че-то &НаСервереБезКонтекста процедура вызываемсервер(параметр) твояобработка = получаемобработку(параметр.СтрокаПуть); твояобработка.твояпроцедурамодуля(параметр) конецпроцедуры |
|||
13
Вафель
14.02.19
✎
15:45
|
(9) у тебя какой релиз что ком объект во временное лезет?
|
|||
14
YAGolova
14.02.19
✎
15:56
|
ДанныеФормыВЗначение для внешней обработки
Ответ в 22 сообщении |
|||
15
Tonik992
14.02.19
✎
16:05
|
(14) Я такого извращения давно не видел, спс. Не даете забыть, что мы работаем с 1С
|
|||
16
Euroset1
15.02.19
✎
14:23
|
(10) Какие проблемы? Неопределено - значит создам заново и опять запихну. А если объект еще жив, то работаю с ним. Я же не говорю о вечном, конечно же он теряется периодически. Но нам ведь он нужен на один раз по сути.
(13) во всех релизах начиная с 8.3.3 и по 8.3.12 лезет. Не напрямую, а через структуру. (14) спасибо. вот этот способ мне тоже подойдет. |
|||
17
ssh2006
15.02.19
✎
14:33
|
(0) > Не хочу контекстный вызов сервера
Хочу нагородить костылей? |
|||
18
ptiz
15.02.19
✎
14:49
|
(0) Вопрос в том, важно ли тебе состояние объекта при вызове этой экспортной процедуры. Если нет - в чем проблема? Создать новый объект и вызвать процедуру. Если да - необходимо объект привести в состояние, при котором процедура даст верный результат.
|
|||
19
Конструктор1С
15.02.19
✎
15:22
|
Просто не надо бизнес-логику в модуль формы пихать, и подобных проблем не будет. В модуле формы должен быть только код, отвечающий за интерфейс
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |