Имя: Пароль:
1C
 
Функция на клиенте не видит сервер
0 xReason
 
01.12.09
11:32
В Глобальному модуле есть вот такие функции. Флажки Клиент, Сервер и ВызовСервера установлены.

&НаКлиенте
Функция ДатаПлюсПродолжительность(День, Продолжительность) Экспорт
   Возврат ДатаПлюсПродолжительностьСервер(День, Продолжительность);
КонецФункции

&НаСервере
Функция ДатаПлюсПродолжительностьСервер(День, Продолжительность) Экспорт
   Возврат ДобавитьДень(День,(Продолжительность.Код-1)/2);
КонецФункции


Выдает вот такую ошибку

{ОбщийМодуль.фнГлобальный.Модуль(102,10)}: Процедура или функция с указанным именем не определена (ДатаПлюсПродолжительностьСервер)
   Возврат <<?>>ДатаПлюсПродолжительностьСервер(День, Продолжительность); (Проверка: Тонкий клиент)


Почему мы с клиента не видим сервер?
1 XLife
 
01.12.09
11:34
сделай не глобальным
2 xReason
 
01.12.09
11:47
Видимо так и придется
3 xReason
 
01.12.09
11:49
В не глобальном такая же ошибка
4 XLife
 
01.12.09
11:56
Возврат фнГлобальный.ДатаПлюсПродолжительностьСервер(День, Продолжительность);
5 almar
 
01.12.09
11:57
А зачем так сложно? Сразу из формы на клиенте вызывай функцию на сервере? Зачем в общем модуле клиентская функция из одной строки?
6 Ненавижу 1С
 
гуру
01.12.09
11:58
(5) это был тест думаю
7 Aswed
 
01.12.09
11:59
Сделай не глобальной
Оставь только один флажок "Сервер"
8 xReason
 
01.12.09
12:03
Есть алгоритм расчет продолжительности. Этот алгоритм используется в нескольких местах. Зачем плодить 10 одинаковых функций?
9 xReason
 
01.12.09
12:05
(4) Выходит, что в пределах своего модуля он не видит свои функции?
10 hhhh
 
01.12.09
12:08
(9) ну ты же написал &НаСервере. Значит если клиент, то эта функция не видна, он тебе об этом честно говорит.
11 xReason
 
01.12.09
12:11
(10) тогда почему если такой финт провернуть в модули формы, то он работает ?
12 5 Элемент
 
01.12.09
12:11
(10) вообще-то нечестно
13 5 Элемент
 
01.12.09
12:13
Директива указывает где будет выполняеться, а не где будет доступна
14 BabySG
 
01.12.09
14:11
(0) Оберни вызов модуля в &НаСервере
15 ddiimmaann
 
04.12.09
09:09
Что значит "Оберни вызов модуля в &НаСервере" ?
Можно как-то указать при вызове какую функцию мы вызываем?
16 ddiimmaann
 
04.12.09
09:15
Тестирование показало, что в режиме Толстого клиента (управляемое приложение) указанный выше код работает (правда если обращаться к серверным процедурам и функциям не напрямую, а с указанием общего модуля: фнГлобальный.ДатаПлюсПродолжительностьСервер(День, Продолжительность);  )

Тот же код в режиме тонкого клиента - не работает, так как видимо в пространство имен клинта, серверные процедуры и функции - не включаются. как быть?

С одной стороны наверное можно перейти насервер еще в модуле формы - и вызвать серверную функцию общего модуля... Однако некоторую часть алгоритма можно (и нужно) использовать НаКлиенте. Следовательно - необходим вызов серверной функции общего модуля из клиентской функции тогоже самого общего модуля.

Если ли так называемый "нужный кнопарик", который решит проблему, кроме reseta...?
17 hhhh
 
04.12.09
09:18
(16) ну может разноска этих функций в разные общие модули спасет гиганта мысли?
18 5 Элемент
 
04.12.09
09:19
А может спасет новая версия платформы?
19 ddiimmaann
 
04.12.09
09:59
RE: разноска этих функций в разные общие модули

Общий модуль без галки "Клиент" вообще недоступен на клиенте, а с галками как в первом посте - сам модуль доступен, а серверные функции - нет.
20 Mort
 
04.12.09
10:31
(19) не обманывай народ.
21 ddiimmaann
 
04.12.09
15:07
Ну почему же обманываю?

Давайте повторимся. Вот такие 2 кусочка кода:

&НаКлиенте
Функция ПодготовкаКРасчету() Экспорт
   Результат = НашОбщийМодуль.Расчет();
   Возврат Результат;
КонецФункции

&НаСервере
Функция Расчет() Экспорт
   Результат = 10;
   Возврат Результат;
КонецФункции

1 вариант: Обе функции в 1 модуле (под названием НашОбщийМодуль, с галочками Клиент, Сервер и ВызовСервера.
В этом случае в режиме Толстого клиента (управляемое приложение) указанный выше код работает,  в режиме тонкого клиента - не работает. Возникает ошибка во время выполнения следующего содержания:

{ОбщийМодуль.НашОбщийМодуль.Модуль(4)}: Метод объекта не обнаружен (Расчет)
   Результат = НашОбщийМодуль.Расчет();

2 вариант. Первая функция находится в модуле ЕщеОдинМодуль (с галочками Клиент, Сервер и ВызовСервера) Вторая - тамже ( модуль НашОбщийМодуль с галочками Сервер и ВызовСервера).
В режиме тонкого клиента возникает та же самая ошибка. Текст - точно такойже, повторяться не буду.

Был бы очень рад ошибиться...

Неужели никто не знает / проблема нерешаема?
22 BabySG
 
06.12.09
23:12
(21) Еще раз читай (14)

&НаКлиенте
Процедура КакаяТо()
  ВызовОбертки()
КонецПроцедуры

&НаСервере
Процедура ВызовОбертки()
  Модуль.ПроцСервера();
КонецПроцедуры


А вообще - открыл бы новые типовые или демку и давно бы сам уже посмотрел, раз документацию лень читать
23 ddiimmaann
 
07.12.09
14:07
Вооооот. Спасибо. Теперь ясно: передача на исполнение серверу возможна только через форму (модуль формы).
24 ddiimmaann
 
07.12.09
14:07
Всмысле моя фраза верная для тонокого и Web клиентов. :)
25 5 Элемент
 
08.12.09
09:19
Автар, попробуй на 8.2.10, будет ли ошибка?
26 xReason
 
08.12.09
13:00
бетка 8.2.10 теперь падает на таком варианте :)

&НаКлиенте
Функция ДатаПлюсПродолжительность(День, Продолжительность) Экспорт    
   от=фнМодуль.ДатаПлюсПродолжительность(День, Продолжительность);
   Возврат от;
КонецФункции

&НаСервере
Функция ДатаПлюсПродолжительностьСервер(День, Продолжительность)  Экспорт
   от= ДобавитьДеньСервер(День,(Продолжительность.Код-1)/2);
   Возврат от;
КонецФункции

Из-за ссылки самой на себя :)