![]() |
|
Вызов функции из модуля другой обработки. Клиент-сервер | ☑ | ||
---|---|---|---|---|
0
Slon747
18.03.19
✎
13:02
|
Почему этот код работает в файловой базе и не работает в клиент-серверном варианте?
&НаКлиенте Функция ПолучитьНастройкиСервераHTTP(СерверОбменаДанных) Обработка1 = Обработки.Обработка1.Создать(); СутруктураHTTP = Обработка1.ПолучитьСтруктуруHTTP(); КонецФункции Модуль обработки Обработка1: &НаСервере Функция ПолучитьСтруктуруHTTP() Экспорт КонецФункции ------- Метод объекта не обнаружен (ПолучитьСтруктуруHTTP) ------- Отладчиком вижу, что Обработка1 имеет тип ОбработкаОбъект. Но ф-я недоступна. |
|||
1
VladZ
18.03.19
✎
13:03
|
(0)
Обработка1 = Обработки.Обработка1.Создать(); СутруктураHTTP = Обработка1.ПолучитьСтруктуруHTTP(); - получай на сервере. |
|||
2
Garykom
гуру
18.03.19
✎
13:14
|
Хмм только сча задумался, обработки это же по сути элемент справочника который не сохраняется в базу со своими формами и реквизитами/ТЧ так?
|
|||
3
Slon747
18.03.19
✎
13:26
|
(1) Так пробую:
&НаКлиенте СтуруктураHTTP = ПолучитьСтруктуруHttpНаСервере(); &НаСервере Функция ПолучитьСтруктуруHttpНаСервере() Обработка1 = Обработки.Обработка1.Создать(); Возврат Обработка1.ПолучитьСтруктуруHTTP(); КонецФункции В конфигураторе ошибок нет. При открытии в предприятии пишет: ------ Процедура или функция с указанным именем не определена (ПолучитьСтруктуруHttpНаСервере) ------ В этом же модуле серверная ф-я не видна. Это глюк или я что-то недопонял? |
|||
4
Garykom
гуру
18.03.19
✎
13:34
|
(3) Ммм как бы помягше сказать...
|
|||
5
Garykom
гуру
18.03.19
✎
13:34
|
Это голову ON не пробовал?
Обработка1 Модуль &НаКлиенте и &НаСервере Обработка2 Модуль &НаКлиенте и &НаСервере Что и откуда можно вызывать? |
|||
6
Garykom
гуру
18.03.19
✎
13:36
|
Обработка1.НаКлиенте можно вызвать Обработка1.НаСервере так?
Обработка1.НаКлиенте не может вызвать Обработка2.НаСервере так? Какие варианты остаются? |
|||
7
Slon747
18.03.19
✎
13:37
|
(5) Забудем пока про вторую обработку. Почему тут ф-я не определена?
&НаКлиенте СтуруктураHTTP = ПолучитьСтруктуруHttpНаСервере(); &НаСервере Функция ПолучитьСтруктуруHttpНаСервере() Возврат Истина; КонецФункции |
|||
8
fisher
18.03.19
✎
13:42
|
(7) Начнем с того, что этот код не скомпилируется.
Приведите валидный код и уточните, где он расположен (модуль объекта или модуль формы). |
|||
9
Slon747
18.03.19
✎
13:44
|
(8) Обе ф-ции из (7) находятся в модуле формы одной обработки.
|
|||
10
Slon747
18.03.19
✎
13:46
|
По F12 перехожу к ПолучитьСтруктуруHttpНаСервере(), а в предприятии не видит
|
|||
11
Slon747
18.03.19
✎
13:48
|
(7) Простите. Обе ф-ции в модуле обработки, а не формы.
|
|||
12
DrWatson
18.03.19
✎
13:51
|
(11) А что за &НаКлиенте в модуле обработки?
|
|||
13
Slon747
18.03.19
✎
13:51
|
Предприятие в режиме толстого клиента (обычное приложение)
|
|||
14
hhhh
18.03.19
✎
13:58
|
(13) так какого тогда пишешь &НаСервере ??
|
|||
15
Slon747
18.03.19
✎
14:04
|
(14) Вот оно как...
Теперь понятно, спасибо. Тогда подскажите, смогу ли я из обычного приложения вызвать ф-ю другой обработки, если у нее директива &НаСервере ? |
|||
16
fisher
18.03.19
✎
14:11
|
(11)(13) Модуль обработки в толстом клиенте всегда компилируется на клиенте, если только дергается не из фонового задания или серверного общего модуля. Объявлением &НаСервере ты просто выбросил функцию из клиентской версии модуля.
В рядовых сценариях вообще нет смысла использовать директивы компиляции в модулях объектов. В толстом клиенте они почти всегда на клиенте будут компилироваться, в тонком - на сервере. Без возможности переходов. Директивы &НаКлиенте и &НаСервере ввели спецом для модуля управляемой формы. (15) Т.е. у тебя есть обработка, в которой есть функция в модуле объекта с директивой &НаСервере? Очень экзотическая конструкция. Никогда такого не видел. Но если ты ничего не напутал, то простых путей до нее добраться с толстого клиента нет. Как я упоминал - только через серверный модуль разве что. |
|||
17
Slon747
18.03.19
✎
14:16
|
(16) Есть функционал, который работает в тонком клиенте и у него &НаСервере.
Кроме этого иногда запускается обработка под толстым клиентом. В ней хотел использовать существующий функционал из тонкого клиента. Теперь понял, что не выйдет. Спасибо за подробное объяснение! |
|||
18
fisher
18.03.19
✎
14:16
|
Вообще, если в голове каша из особенностей разработки под толстый/тонкий клиент, то очень рекомендую эту статью для прочищения мозгов: http://catalog.mista.ru/public/198766/
|
|||
19
fisher
18.03.19
✎
14:21
|
(17) В тонком клиенте в модуле ОБЪЕКТА никто не использует &НаСервере. Это не имеет смысла. В тонком клиенте модуля объектов и так всегда на сервере. Единственный осмысленный вариант применения этой дерективы - это как раз "выбросить" эту функцию в случае использования в толстом клиенте :)
|
|||
20
Slon747
18.03.19
✎
14:40
|
(19) Уже понял, спасибо. Убрал директиву и теперь ф-я из 2-й обработки доступна как в тонком так и в толстом клиенте.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |