Вход | Регистрация
 
1С:Предприятие :: 1С:Предприятие 8 общая

Вызов функции из модуля другой обработки. Клиент-сервер

Вызов функции из модуля другой обработки. Клиент-сервер
Я
   Slon747
 
18.03.19 - 13:02
Почему этот код работает в файловой базе и не работает в клиент-серверном варианте?

&НаКлиенте
Функция ПолучитьНастройкиСервераHTTP(СерверОбменаДанных)

    Обработка1 = Обработки.Обработка1.Создать();
    СутруктураHTTP = Обработка1.ПолучитьСтруктуруHTTP();

КонецФункции

Модуль обработки Обработка1:
&НаСервере
Функция ПолучитьСтруктуруHTTP() Экспорт

КонецФункции

-------
Метод объекта не обнаружен (ПолучитьСтруктуруHTTP)
-------
Отладчиком вижу, что Обработка1 имеет тип ОбработкаОбъект. Но ф-я недоступна.
 
 
   VladZ
 
1 - 18.03.19 - 13:03
(0)

Обработка1 = Обработки.Обработка1.Создать(); 
    СутруктураHTTP = Обработка1.ПолучитьСтруктуруHTTP(); 

- получай на сервере.
   Garykom
 
2 - 18.03.19 - 13:14
Хмм только сча задумался, обработки это же по сути элемент справочника который не сохраняется в базу со своими формами и реквизитами/ТЧ так?
   Slon747
 
3 - 18.03.19 - 13:26
(1) Так пробую:

&НаКлиенте
СтуруктураHTTP = ПолучитьСтруктуруHttpНаСервере();

&НаСервере
Функция ПолучитьСтруктуруHttpНаСервере()
    
    Обработка1 = Обработки.Обработка1.Создать();
    Возврат Обработка1.ПолучитьСтруктуруHTTP();
        
КонецФункции

В конфигураторе ошибок нет. При открытии в предприятии пишет:
------
Процедура или функция с указанным именем не определена (ПолучитьСтруктуруHttpНаСервере)
------

В этом же модуле серверная ф-я не видна. Это глюк или я что-то недопонял?
   Garykom
 
4 - 18.03.19 - 13:34
(3) Ммм как бы помягше сказать...
   Garykom
 
5 - 18.03.19 - 13:34
Это голову ON не пробовал?

Обработка1
Модуль
&НаКлиенте и &НаСервере

Обработка2
Модуль
&НаКлиенте и &НаСервере

Что и откуда можно вызывать?
   Garykom
 
6 - 18.03.19 - 13:36
Обработка1.НаКлиенте можно вызвать Обработка1.НаСервере так?

Обработка1.НаКлиенте не может вызвать Обработка2.НаСервере так?

Какие варианты остаются?
   Slon747
 
7 - 18.03.19 - 13:37
(5) Забудем пока про вторую обработку. Почему тут ф-я не определена?

&НаКлиенте
СтуруктураHTTP = ПолучитьСтруктуруHttpНаСервере();

&НаСервере
Функция ПолучитьСтруктуруHttpНаСервере()
     Возврат Истина;
КонецФункции
   fisher
 
8 - 18.03.19 - 13:42
(7) Начнем с того, что этот код не скомпилируется.
Приведите валидный код и уточните, где он расположен (модуль объекта или модуль формы).
   Slon747
 
9 - 18.03.19 - 13:44
(8) Обе ф-ции из (7) находятся в модуле формы одной обработки.
   Slon747
 
10 - 18.03.19 - 13:46
По F12 перехожу к ПолучитьСтруктуруHttpНаСервере(), а в предприятии не видит
 
 Рекламное место пустует
   Slon747
 
11 - 18.03.19 - 13:48
(7) Простите. Обе ф-ции в модуле обработки, а не формы.
   DrWatson
 
12 - 18.03.19 - 13:51
(11) А что за &НаКлиенте в модуле обработки?
   Slon747
 
13 - 18.03.19 - 13:51
Предприятие в режиме толстого клиента (обычное приложение)
   hhhh
 
14 - 18.03.19 - 13:58
(13) так какого тогда пишешь &НаСервере  ??
   Slon747
 
15 - 18.03.19 - 14:04
(14) Вот оно как...
Теперь понятно, спасибо.

Тогда подскажите, смогу ли я из обычного приложения вызвать ф-ю другой обработки, если у нее директива &НаСервере ?
   fisher
 
16 - 18.03.19 - 14:11
(11)(13) Модуль обработки в толстом клиенте всегда компилируется на клиенте, если только дергается не из фонового задания или серверного общего модуля. Объявлением &НаСервере ты просто выбросил функцию из клиентской версии модуля.
В рядовых сценариях вообще нет смысла использовать директивы компиляции в модулях объектов. В толстом клиенте они почти всегда на клиенте будут компилироваться, в тонком - на сервере. Без возможности переходов.
Директивы &НаКлиенте и &НаСервере ввели спецом для модуля управляемой формы.
(15) Т.е. у тебя есть обработка, в которой есть функция в модуле объекта с директивой &НаСервере? Очень экзотическая конструкция. Никогда такого не видел. Но если ты ничего не напутал, то простых путей до нее добраться с толстого клиента нет. Как я упоминал - только через серверный модуль разве что.
   Slon747
 
17 - 18.03.19 - 14:16
(16) Есть функционал, который работает в тонком клиенте и у него &НаСервере.
Кроме этого иногда запускается обработка под толстым клиентом. В ней хотел использовать существующий функционал из тонкого клиента.
Теперь понял, что не выйдет.
Спасибо за подробное объяснение!
   fisher
 
18 - 18.03.19 - 14:16
Вообще, если в голове каша из особенностей разработки под толстый/тонкий клиент, то очень рекомендую эту статью для прочищения мозгов: http://catalog.mista.ru/public/198766/
   fisher
 
19 - 18.03.19 - 14:21
(17) В тонком клиенте в модуле ОБЪЕКТА никто не использует &НаСервере. Это не имеет смысла. В тонком клиенте модуля объектов и так всегда на сервере. Единственный осмысленный вариант применения этой дерективы - это как раз "выбросить" эту функцию в случае использования в толстом клиенте :)
   Slon747
 
20 - 18.03.19 - 14:40
(19) Уже понял, спасибо. Убрал директиву и теперь ф-я из 2-й обработки доступна как в тонком так и в толстом клиенте.

Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Рекламное место пустует