![]() |
![]() |
![]() |
|
Функция на клиенте не видит сервер | ☑ | ||
---|---|---|---|---|
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); Возврат от; КонецФункции Из-за ссылки самой на себя :) |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |