Имя: Пароль:
1C
1С v8
Вызов функции из модуля другой обработки. Клиент-сервер
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-й обработки доступна как в тонком так и в толстом клиенте.