Имя: Пароль:
1C
1С v8
Почему тонкий клиент не видит процедуру?
0 Икогнито
 
12.08.11
16:56
Есть общий модуль, на нем галки "Клиент", "Сервер","Вызов сервера"

В модуле две процедуры:

&НаКлиенте
Процедура ПоместитьВнешнююОбработкуОбмена() Экспорт
   // На клиенте размещаем обработку во временном хранилище
   АдресХранилища = "";
   Результат = ПоместитьФайл(АдресХранилища,"D:\Work\Разработка\ОтладкаОбмена.epf",,Ложь);
   Подключить(АдресХранилища);
КонецПроцедуры

&НаСервере
Процедура Подключить(АдресХранилища) Экспорт
   // На сервере подключаем обработку из созданного ранее
   // временного хранилища.
   ИмяОбработки = ВнешниеОбработки.Подключить(АдресХранилища);
   Константы.ВременнаяКонстанта.Установить(ИмяОбработки);    
КонецПроцедуры

1. Тонкий клиент ругается так:
{ОбщийМодуль.ВременныйОтладкаКлиентСервер.Модуль(6,2)}: Процедура или функция с указанным именем не определена (Подключить)
   <<?>>Подключить(АдресХранилища); (Проверка: Тонкий клиент)

2.Толстый клиент не ругается и исполняет.
1 Jstunner
 
12.08.11
16:58
галка "Клиент" которая?
2 mikecool
 
12.08.11
16:59
есть еще Клиент (управляемое приложение)
3 Rebelx
 
12.08.11
16:59
потому что не надо ставить на модуле и клиент и сервер и вызов сервера, т.к. вызов сервера никогда не сработает.

у тебя база в файловом варианте, т.е. в толстом клиенте то что с галкой сервер все равно выполняется на клиенте.

а в случае с тонким клиентом - модуль компилируется на клиенте (т.к. стоит галка) и вызов сервера не происходит
4 Defender aka LINN
 
12.08.11
17:00
(0) Выкинь свои директивы нахрен. Они работают только в формах и командах.
5 Rebelx
 
12.08.11
17:03
(4) неужели?
Каждая процедура и функция модуля формы, модуля команды и общего модуля управляемого приложения предваряется директивой компиляции, определяющей среду исполнения данной процедуры. Директива предваряется символом "&". Допустимые директивы:
6 5 Элемент
 
12.08.11
17:04
(5) в ОМ они не используются
7 Rebelx
 
12.08.11
17:05
(6) документация и факты (см.(0)) фуфло?

смотрим справку 1С:
...
Общий модуль
 В общем модуле доступны директивы компиляции – &НаКлиенте, &НаСервере.
8 alxxsssar
 
12.08.11
17:13
А не может быть как в семерке? Чтобы вызываемая процедура была перед вызывающей ее?
9 5 Элемент
 
12.08.11
17:22
(7)И как они там работают?
10 MRAK
 
12.08.11
17:48
(9) + тоже интересно. В типовых не встречал в ОМ директив &НаКлиенте, &НаСервере

Попадались только типа:


#Если Не ВебКлиент Тогда

...

#КонецЕсли
11 5 Элемент
 
12.08.11
17:54
(10) они там не имеют смысла, интересно услышать (7)
12 Икогнито
 
12.08.11
17:55
(3) > потому что не надо ставить на модуле и клиент и сервер и вызов сервера, т.к. вызов сервера никогда не сработает.


Рекомендуешь каждую процедуру в модуль со своей индивидуальной галкой запихать?
13 Reaper_1c
 
12.08.11
17:56
(12) Рекомендуется делать не один общий модуль.
14 H A D G E H O G s
 
12.08.11
17:57
Нельзя вызывать сервер в рамках 1 модуля.
15 Икогнито
 
12.08.11
18:21
(14) можно пояснее, плиз?
16 Икогнито
 
12.08.11
18:25
(14) т.е. первая процедура запустившись на клиенте, сделала его клиентским, соответственно не может запуститься (не находит) процедуру с директивой "сервер"?
17 Rebelx
 
12.08.11
18:34
(11)мое имхо - они в ОМ равнозначны директивам #
18 Rebelx
 
12.08.11
18:38
+(17) об этом же говорит документация:

Инструкции препроцессора и директивы компиляции предназначены для того, чтобы оставить в скомпилированном модуле только то, что действительно должно присутствовать в том или ином контексте. При этом инструкции препроцессора действуют на исходный текст модуля (т. е. удаляют из модуля текст, который не может там находится), а директивы компиляции действуют на структурные единицы программного кода (методы — процедуры или функции, а также объявления переменных).
19 Икогнито
 
12.08.11
18:39
(10)>  В типовых не встречал в ОМ директив &НаКлиенте, &НаСервере

т.е. если в ОМ установлены галки "Клиент", "Сервер", то система сама решает где выполнить?
20 Икогнито
 
12.08.11
18:41
(18)теперь все ясно.

Первая процедура запустилась с клиентской директивой и компилятор вычистил из модуля процедуру с серверной директивой. Потому и не находит её тонкий клиент.

Тогда непонятно почему толстый прокатывает.
21 Rebelx
 
12.08.11
18:43
потому что в файловом варианте все что "сервер" выполняется на клиенте (если толстый)
22 Rebelx
 
12.08.11
18:44
(19) нет, не сама решает
а выполняет в текущем контексте
23 Икогнито
 
12.08.11
19:11
(18) К модулям форм, естественно, это не относится?
Я не хочу быть самым богатым человеком на кладбище. Засыпать с чувством, что за день я сделал какую-нибудь потрясающую вещь — вот что меня интересует. Стив Джобс