Вход | Регистрация


1С:Предприятие :: 1С:Предприятие 8 общая

УФ. Как из клиентской процедуры вызвать серверную функцию?

УФ. Как из клиентской процедуры вызвать серверную функцию?
Я
   megabax
 
20.09.16 - 15:03
Добрый день. У меня в УФ есть общий модуль, у него стоят галочки "Клиент", "Сервер", "Вызов сервера". В нем есть клиентская процедура, которая вызывает серверную функцию:
&НаСервере
функция ПолучитьДатуСреза()
    возврат НачалоДня(Константы.шапДатаПоследнегоСреза.Получить());    
конецфункции    

&НаКлиенте
Процедура шапПриНачалеРаботыСистемы() Экспорт
    //сообщить("При начале работы системы");

    если ПолучитьДатуСреза()+7*24*3600>НачалоДня(ТекущаяДата()) тогда
        
    конецесли;
конецпроцедуры

И почему то ругается синтаксический контроль, что  ПолучитьДатуСреза не обнаружена. Подскажите пожалуйста, как лечить? Очень надо из клиентской процедуры вызвать серверную функцию.
 
 
   Nuobu
 
1 - 20.09.16 - 15:05
Экспорт.
   megabax
 
2 - 20.09.16 - 15:06
(1) НЕ помогло
   Nuobu
 
3 - 20.09.16 - 15:07
функция ПолучитьДатуСреза() экспорт
   butterbean
 
4 - 20.09.16 - 15:08
кэш почисти
   aleks_default
 
5 - 20.09.16 - 15:09
вначале должно идти название общего модуля потом название фуннкции этого модуля
   megabax
 
6 - 20.09.16 - 15:10
(3) Так и сделал
(4)  Это как?
   Timon1405
 
7 - 20.09.16 - 15:10
Имямодуля.ПолучитьДатуСреза()
   aleks_default
 
8 - 20.09.16 - 15:10
через точку
   megabax
 
9 - 20.09.16 - 15:10
(5) В одном и том же модуле процедура и функция
   Nuobu
 
10 - 20.09.16 - 15:11
(9) А, вот оно че. Ну, раз в одном и том же, то работать не будут. Разноси по разным модулям.
 
 Рекламное место пустует
   sitex
 
11 - 20.09.16 - 15:12
(0) что то мне кажется ты для общего модуля дофига галок поставил)
   jsmith
 
12 - 20.09.16 - 15:13
(11) +1
   sitex
 
13 - 20.09.16 - 15:14
(10) +1
   megabax
 
14 - 20.09.16 - 15:14
(11) Сначала было меньше, думал, мало поставил поэтому не работает, поставил побольше... все равно не работает
   megabax
 
15 - 20.09.16 - 15:16
(10) Разнес по разным модулям, теперь говорит:
{ОбщийМодуль.шапСобытияКлиент.Модуль(3)}: Метод объекта не обнаружен (шапПриНачалеРаботыСистемы)
    шапСобытия.шапПриНачалеРаботыСистемы();
   jsmith
 
16 - 20.09.16 - 15:17
&НаКлиенте
Процедура Икс1()
    
    ОбщийМодуль1.Икс2();
    
КонецПроцедуры

&НаСервере
Процедура Икс2() Экспорт
КонецПроцедуры
   jsmith
 
17 - 20.09.16 - 15:17
В данном случае будет скомпилировано два экземпляра этого общего модуля, один на сервере, один на клиенте. Все процедуры и функции, объявленные с директивой компиляции &НаСервере, попадут в серверный экземпляр модуля, соответственно все процедуры и функции, объявленные с директивой компиляции &НаКлиенте, попадут в клиентский экземпляр модуля. Все процедуры и функции, объявленные без директив компиляции попадут и в клиентский, и в серверный экземпляры модуля.
   gitotuta
 
18 - 20.09.16 - 15:18
в общем модуле никак.
Вообще клиент сервер в общем модуле рекомендуется использовать только для общих процедур для сервера и клиента
   sitex
 
19 - 20.09.16 - 15:18
(15) Дели по общим модулям короче. (17) +1
   jsmith
 
20 - 20.09.16 - 15:19
Ну можно в одном как в (16)
   megabax
 
21 - 20.09.16 - 15:19
(16) (18) А если надо, тогда как быть? Как мне на клиенте получить значение константы?
   gitotuta
 
22 - 20.09.16 - 15:20
(21) вызвать серверный модуль
   gitotuta
 
23 - 20.09.16 - 15:20
Сделай 2 модуля:
шапКлиент и шапСервер
   gitotuta
 
24 - 20.09.16 - 15:21
и шапВызовСервера еще
   Nuobu
 
25 - 20.09.16 - 15:21
(21) У тебя есть какой-то модуль:
РасчетКонстант.
Он делается на клиенте, значит должен называться: РасчетКонстантНаКлиенте.
Тебе из него нужно получать данные с сервера, тогда нужно создавать еще один модуль:
РасчетКонстантСервер.
   megabax
 
26 - 20.09.16 - 15:22
(17) (19) Если я из модуля шапСобытия убираю от процедур шапПриНачалеРаботыСистемы и ПолучитьДатуСреза опять ругается, что нету такой функции
)
(25) Дык я так и делаю. А он ругается, что такая функция не обнаружена.
   megabax
 
27 - 20.09.16 - 15:23
(26) То есть выдается сообщение как в (15)
   sitex
 
28 - 20.09.16 - 15:24
(27)  прочти (25) , + процедуры то сделай экспортные и обращайся к ним с учетом своих названий.
   DrZombi
 
29 - 20.09.16 - 15:27
(26) Убери Команды компелятору
   jsmith
 
30 - 20.09.16 - 15:28
Короче, такая байда будет работать только в режиме толстого клиента.
В тонком клиенте другой расклад. Делай 2 модуля.
   megabax
 
31 - 20.09.16 - 15:31
(28) Дык так и сделал.
В клеинтсокм модуле:
Процедура шапПриНачалеРаботыСистемы() Экспорт
    шапСобытияСервер.шапПриНачалеРаботыСистемы();
конецпроцедуры


В модуле шапСобытияСервер:
&НаСервере
функция ПолучитьДатуСреза() экспорт
    возврат НачалоДня(Константы.шапДатаПоследнегоСреза.Получить());    
конецфункции    


&НаСервере
Процедура шапПриНачалеРаботыСистемы() Экспорт
    //сообщить("При начале работы системы");

    если ПолучитьДатуСреза()+7*24*3600>НачалоДня(ТекущаяДата()) тогда
        
    конецесли;
конецпроцедуры

не работает 
(29) убираю, после этого не проходит синтаксический контроль
   gitotuta
 
32 - 20.09.16 - 15:32
вызов сервера стоит?
   megabax
 
33 - 20.09.16 - 15:37
(32) в модуле шапСобытияСервер стоит
 
 
   elCust
 
34 - 20.09.16 - 15:43
(17)  >>> Все процедуры и функции, объявленные без директив компиляции попадут и в клиентский, и в серверный экземпляры модуля.

Хотел поинтересоваться. Откуда в вас такие сведения? Без указания директивы всегда выполнялось на сервере вроде?

P.S
Мне для общего развития.
   gitotuta
 
35 - 20.09.16 - 15:44
(33) а еще какие галки стоят?
   megabax
 
36 - 20.09.16 - 15:47
(35) Клиент и Сервер
   sitex
 
37 - 20.09.16 - 15:57
(36) Каждый модуль для своих целей в (25) так и описал. Галки также расставь соответственно правильно, для клиентских "Клиент" , которые на сервере выполняются "Сервер".
   megabax
 
38 - 20.09.16 - 16:05
(37) Дык я уже всяко пробовал. И ставил галки и выключал.
Помогло только когда я из модуля управляемого приложения перенес вызов в модуль сеанса.
Непонятно, почему из ПриНачалеРаботы системы невозможно вызвать процедуру серверного модуля???
   aleks_default
 
39 - 20.09.16 - 16:18
(38) ты вызов сервера на серверном общем модуле не поставил
   sitex
 
40 - 20.09.16 - 16:21
(38) В проц-е ПриНачалеРаботыСистемы  можно вызывать и проц-ы и функции.
   sitex
 
41 - 20.09.16 - 16:21
(38) +модуля управляемого приложения
   aleks_default
 
42 - 20.09.16 - 16:25
(39)+ Или влез в директиву компиляции 
#Если Клиент Тогда
   aleks_default
 
43 - 20.09.16 - 16:28
(42)т.е. инструкции препроцессора
   Мыш
 
44 - 20.09.16 - 16:50
Если у общего модуля установлено свойство Сервер и еще какое-либо свойство, то это означает, что общий модуль будет доступен одновременно на сервере и в выбранном клиенте. При этом необходимо понимать, что фактически это будет несколько вариантов скомпилированного кода (по числу выбранных клиентов и собственно для сервера).

При этом если метод, расположенный в таком общем модуле, вызывается со стороны клиента, то будет использована клиентская копия общего модуля, а если с сервера – серверная.


Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Тема не обновлялась длительное время, и была помечена как архивная. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.
Рекламное место пустует