|   |   | 
| 
 | Вызов функции из модуля другой обработки. Клиент-сервер | ☑ | ||
|---|---|---|---|---|
| 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-й обработки доступна как в тонком так и в толстом клиенте.     | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |