|
Выполнение кода на сервере | ☑ | ||
|---|---|---|---|---|
|
0
Zaid
19.05.10
✎
16:43
|
Добрый день. Кто сталкивался, подскажите пожалуйста по такому вопросу.
Есть общий модуль с галками "Клиент" и "Сервер". В нем такой код: #Если Сервер Тогда Функция Мояфункция() Экспорт .... КонецФункции; #КонецЕсли Когда я пытаюсь вызвать эту функцию, например из обработки - пишет, что "Метод объекта не обнаружен(МояФункция)". Почему? В справке написано следующее: "он в соответствии с инструкцией препроцессора #Если Сервер Тогда … #КонецЕсли будет скомпилирован только на стороне сервера, а на стороне клиента данный фрагмент «выпадет» из компилируемого текста и, таким образом, процедура на стороне клиента не будет представлена совсем. Далее, при компиляции на стороне клиента модулей, в которых содержится обращение к данной процедуре, будет произведен ее поиск на стороне клиента. На стороне клиента таковой процедуры нет, следовательно, она не будет найдена. Тогда будет произведен поиск процедуры в общих модулях на стороне сервера, где она будет обнаружена и все вызовы будут переправляться для выполнения на сервер 1С:Предприятия." Что я не так делаю?? |
|||
|
1
Сергиус
19.05.10
✎
16:47
|
(0) смысл ставить конструкцию #Если Сервер Тогда ... #КонецЕсли, если у модуля стоят признаки клиента и сервера?
Вызываешь эту функцию на сервере (например в регламентных заданиях) - выполнится на сервере, вызовешь на клиенте - будет на клиенте выполнятся.. А так получается, что заключив ее в конструкцию данного типа из клиента ты ее просто не увидишь..точнее не получишь к ней доступ. |
|||
|
2
Zaid
19.05.10
✎
16:49
|
(1) Смысл в том, чтобы данный кусок выполнялся именно на сервере.
|
|||
|
3
Defender aka LINN
19.05.10
✎
16:50
|
(2) Ну так и выноси в отдельный серверный модуль.
З.Ы. 8.2? |
|||
|
4
Сергиус
19.05.10
✎
16:50
|
(2) это да..только и доступна она будет при работе с сервера...
|
|||
|
5
Сергиус
19.05.10
✎
16:51
|
+4 в (3) хорошее предложение)
|
|||
|
6
xzorkiix
19.05.10
✎
16:51
|
Функция Мояфункция() Экспорт
Результат = 0; #Если Сервер Тогда Результат = 1; #КонецЕсли возврат Результат; КонецФункции; |
|||
|
7
Zaid
19.05.10
✎
16:52
|
(3) и 8.2 и 8.1
Уже вынес - так работает. Теперь нужно, чтобы работало в общем Клиент-Серверном модуле. В справке ясно написано, как должно происходить. Вопрос почему не происходит так, как в справке? |
|||
|
8
Zaid
19.05.10
✎
16:53
|
(6) что это?
|
|||
|
9
Zaid
19.05.10
✎
16:54
|
+(4) Вариант, подсказанный в (3) - работает при работе с клиента. Т.е. работа выполнение передается на сервер. Почему этого не происходит, если в модуле поставить и галочку "Клиент" тоже?
|
|||
|
10
Сергиус
19.05.10
✎
16:55
|
(7) что тебе смущает в справке?
"а на стороне клиента данный фрагмент «выпадет» из компилируемого текста и, таким образом, процедура на стороне клиента не будет представлена совсем." У тебя так и происходит..как описано |
|||
|
11
Zaid
19.05.10
✎
16:57
|
(10) а второй абзац? Там, где "Далее..." и далее :)
|
|||
|
12
Ненавижу 1С
гуру
19.05.10
✎
16:57
|
не совсем так, когда ты на клиенте пишешь:
МойМодуль.МойМетод(); то платформа интерпретирует это в первую как обращение к экземпляру (не совсем правильное выражение) модуля МойМодуль далее видит, что он может работать на клиенте и заставляет обращаться именно с клиента, а вот сам модуль откомпилирован в соответствии с инструкцией как-то так |
|||
|
13
Zaid
19.05.10
✎
16:59
|
(12) хм... похоже на правду. Спасибо!
Не понятно, о чем они тогда пишут в справке. Вводит в заблуждение. |
|||
|
14
Ненавижу 1С
гуру
19.05.10
✎
17:00
|
+(12) написал, прочитал: бред
|
|||
|
15
Сергиус
19.05.10
✎
17:01
|
(14) но смысл понятен))
|
|||
|
16
ll13
19.05.10
✎
17:02
|
(0)
Глава 4. Встроенный язык. стр.58 "Если используется неглобальный общий модуль, для которого установлено использование на клиенте (любом) и на сервере, то методы, заключенные в условие #Если Сервер Тогда #КонецЕсли, будут доступны только в том случае, если вызов этих методов выполняется со стороны сервера. Вызов таких методов со стороны клиента недоступен" Вывод: поаккуратней с клиент-серверными модулями... |
|||
|
17
Ненавижу 1С
гуру
19.05.10
✎
17:04
|
(16) вывод: 1С как всегда сделала хрень
|
|||
|
18
ll13
19.05.10
✎
17:05
|
(17) Сам недавно на этот косяк напоролся... вопрос зачем и почему это было сделано остался открыт ...
|
|||
|
19
Zaid
19.05.10
✎
17:07
|
(16) А откуда копипаста?
|
|||
|
20
ll13
19.05.10
✎
17:12
|
(19) Официальное руководство разработчика 1С (с диска ИТС)
|
|||
|
21
NcSteel
19.05.10
✎
17:15
|
(17) Все она сделала правильно , прописали инструкцию сосите лапу.
|
|||
|
22
Ненавижу 1С
гуру
19.05.10
✎
17:17
|
(21) кому это надо, это полный бред
|
|||
|
23
a_alenkin
19.05.10
✎
17:19
|
Может надо так?
#НаСервере Функция МояФункция() КонецФункции И ее ты сможешь вызывать с клиента но выполняться она будет на сервере И я все же так понимаю что это 8.2? |
|||
|
24
Zaid
19.05.10
✎
17:25
|
(23) Да 8.2. На 8.1 тоже самое.
"Для выполнения на сервере (инструкции Сервер и НаСервере равнозначны)" (20) Спасибо! И всем спасибо. |
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |