|
УФ. Как из клиентской процедуры вызвать серверную функцию? | ☑ | ||
---|---|---|---|---|
0
megabax
20.09.16
✎
15:03
|
Добрый день. У меня в УФ есть общий модуль, у него стоят галочки "Клиент", "Сервер", "Вызов сервера". В нем есть клиентская процедура, которая вызывает серверную функцию:
&НаСервере функция ПолучитьДатуСреза() возврат НачалоДня(Константы.шапДатаПоследнегоСреза.Получить()); конецфункции &НаКлиенте Процедура шапПриНачалеРаботыСистемы() Экспорт //сообщить("При начале работы системы"); если ПолучитьДатуСреза()+7*24*3600>НачалоДня(ТекущаяДата()) тогда конецесли; конецпроцедуры И почему то ругается синтаксический контроль, что ПолучитьДатуСреза не обнаружена. Подскажите пожалуйста, как лечить? Очень надо из клиентской процедуры вызвать серверную функцию. |
|||
1
Nuobu
20.09.16
✎
15:05
|
Экспорт.
|
|||
2
megabax
20.09.16
✎
15:06
|
(1) НЕ помогло
|
|||
3
Nuobu
20.09.16
✎
15:07
|
функция ПолучитьДатуСреза() экспорт
|
|||
4
butterbean
20.09.16
✎
15:08
|
кэш почисти
|
|||
5
aleks_default
20.09.16
✎
15:09
|
вначале должно идти название общего модуля потом название фуннкции этого модуля
|
|||
6
megabax
20.09.16
✎
15:10
|
(3) Так и сделал
(4) Это как? |
|||
7
Timon1405
20.09.16
✎
15:10
|
Имямодуля.ПолучитьДатуСреза()
|
|||
8
aleks_default
20.09.16
✎
15:10
|
через точку
|
|||
9
megabax
20.09.16
✎
15:10
|
(5) В одном и том же модуле процедура и функция
|
|||
10
Nuobu
20.09.16
✎
15:11
|
(9) А, вот оно че. Ну, раз в одном и том же, то работать не будут. Разноси по разным модулям.
|
|||
11
sitex
naïve
20.09.16
✎
15:12
|
(0) что то мне кажется ты для общего модуля дофига галок поставил)
|
|||
12
jsmith
20.09.16
✎
15:13
|
(11) +1
|
|||
13
sitex
naïve
20.09.16
✎
15:14
|
(10) +1
|
|||
14
megabax
20.09.16
✎
15:14
|
(11) Сначала было меньше, думал, мало поставил поэтому не работает, поставил побольше... все равно не работает
|
|||
15
megabax
20.09.16
✎
15:16
|
(10) Разнес по разным модулям, теперь говорит:
{ОбщийМодуль.шапСобытияКлиент.Модуль(3)}: Метод объекта не обнаружен (шапПриНачалеРаботыСистемы) шапСобытия.шапПриНачалеРаботыСистемы(); |
|||
16
jsmith
20.09.16
✎
15:17
|
&НаКлиенте
Процедура Икс1() ОбщийМодуль1.Икс2(); КонецПроцедуры &НаСервере Процедура Икс2() Экспорт КонецПроцедуры |
|||
17
jsmith
20.09.16
✎
15:17
|
В данном случае будет скомпилировано два экземпляра этого общего модуля, один на сервере, один на клиенте. Все процедуры и функции, объявленные с директивой компиляции &НаСервере, попадут в серверный экземпляр модуля, соответственно все процедуры и функции, объявленные с директивой компиляции &НаКлиенте, попадут в клиентский экземпляр модуля. Все процедуры и функции, объявленные без директив компиляции попадут и в клиентский, и в серверный экземпляры модуля.
|
|||
18
gitotuta
20.09.16
✎
15:18
|
в общем модуле никак.
Вообще клиент сервер в общем модуле рекомендуется использовать только для общих процедур для сервера и клиента |
|||
19
sitex
naïve
20.09.16
✎
15:18
|
(15) Дели по общим модулям короче. (17) +1
|
|||
20
jsmith
20.09.16
✎
15:19
|
Ну можно в одном как в (16)
|
|||
21
megabax
20.09.16
✎
15:19
|
(16) (18) А если надо, тогда как быть? Как мне на клиенте получить значение константы?
|
|||
22
gitotuta
20.09.16
✎
15:20
|
(21) вызвать серверный модуль
|
|||
23
gitotuta
20.09.16
✎
15:20
|
Сделай 2 модуля:
шапКлиент и шапСервер |
|||
24
gitotuta
20.09.16
✎
15:21
|
и шапВызовСервера еще
|
|||
25
Nuobu
20.09.16
✎
15:21
|
(21) У тебя есть какой-то модуль:
РасчетКонстант. Он делается на клиенте, значит должен называться: РасчетКонстантНаКлиенте. Тебе из него нужно получать данные с сервера, тогда нужно создавать еще один модуль: РасчетКонстантСервер. |
|||
26
megabax
20.09.16
✎
15:22
|
(17) (19) Если я из модуля шапСобытия убираю от процедур шапПриНачалеРаботыСистемы и ПолучитьДатуСреза опять ругается, что нету такой функции
) (25) Дык я так и делаю. А он ругается, что такая функция не обнаружена. |
|||
27
megabax
20.09.16
✎
15:23
|
(26) То есть выдается сообщение как в (15)
|
|||
28
sitex
naïve
20.09.16
✎
15:24
|
(27) прочти (25) , + процедуры то сделай экспортные и обращайся к ним с учетом своих названий.
|
|||
29
DrZombi
гуру
20.09.16
✎
15:27
|
(26) Убери Команды компелятору
|
|||
30
jsmith
20.09.16
✎
15:28
|
Короче, такая байда будет работать только в режиме толстого клиента.
В тонком клиенте другой расклад. Делай 2 модуля. |
|||
31
megabax
20.09.16
✎
15:31
|
(28) Дык так и сделал.
В клеинтсокм модуле: Процедура шапПриНачалеРаботыСистемы() Экспорт шапСобытияСервер.шапПриНачалеРаботыСистемы(); конецпроцедуры В модуле шапСобытияСервер: &НаСервере функция ПолучитьДатуСреза() экспорт возврат НачалоДня(Константы.шапДатаПоследнегоСреза.Получить()); конецфункции &НаСервере Процедура шапПриНачалеРаботыСистемы() Экспорт //сообщить("При начале работы системы"); если ПолучитьДатуСреза()+7*24*3600>НачалоДня(ТекущаяДата()) тогда конецесли; конецпроцедуры не работает (29) убираю, после этого не проходит синтаксический контроль |
|||
32
gitotuta
20.09.16
✎
15:32
|
вызов сервера стоит?
|
|||
33
megabax
20.09.16
✎
15:37
|
(32) в модуле шапСобытияСервер стоит
|
|||
34
elCust
20.09.16
✎
15:43
|
(17) >>> Все процедуры и функции, объявленные без директив компиляции попадут и в клиентский, и в серверный экземпляры модуля.
Хотел поинтересоваться. Откуда в вас такие сведения? Без указания директивы всегда выполнялось на сервере вроде? P.S Мне для общего развития. |
|||
35
gitotuta
20.09.16
✎
15:44
|
(33) а еще какие галки стоят?
|
|||
36
megabax
20.09.16
✎
15:47
|
(35) Клиент и Сервер
|
|||
37
sitex
naïve
20.09.16
✎
15:57
|
(36) Каждый модуль для своих целей в (25) так и описал. Галки также расставь соответственно правильно, для клиентских "Клиент" , которые на сервере выполняются "Сервер".
|
|||
38
megabax
20.09.16
✎
16:05
|
(37) Дык я уже всяко пробовал. И ставил галки и выключал.
Помогло только когда я из модуля управляемого приложения перенес вызов в модуль сеанса. Непонятно, почему из ПриНачалеРаботы системы невозможно вызвать процедуру серверного модуля??? |
|||
39
aleks_default
20.09.16
✎
16:18
|
(38) ты вызов сервера на серверном общем модуле не поставил
|
|||
40
sitex
naïve
20.09.16
✎
16:21
|
(38) В проц-е ПриНачалеРаботыСистемы можно вызывать и проц-ы и функции.
|
|||
41
sitex
naïve
20.09.16
✎
16:21
|
(38) +модуля управляемого приложения
|
|||
42
aleks_default
20.09.16
✎
16:25
|
(39)+ Или влез в директиву компиляции
#Если Клиент Тогда |
|||
43
aleks_default
20.09.16
✎
16:28
|
(42)т.е. инструкции препроцессора
|
|||
44
Мыш
20.09.16
✎
16:50
|
Если у общего модуля установлено свойство Сервер и еще какое-либо свойство, то это означает, что общий модуль будет доступен одновременно на сервере и в выбранном клиенте. При этом необходимо понимать, что фактически это будет несколько вариантов скомпилированного кода (по числу выбранных клиентов и собственно для сервера).
При этом если метод, расположенный в таком общем модуле, вызывается со стороны клиента, то будет использована клиентская копия общего модуля, а если с сервера – серверная. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |