Имя: Пароль:
1C
1С v8
Директивы компиляции в общих модулях
0 Nik777
 
17.04.12
18:50
Вообщем есть следующие тонкости: флаг "Вызов сервера" работает лишь тогда, когда установлен только один флаг: "Сервер", т.е. если, допустим, установлен еще и флаг "Клиент", то из клиентских процедур нельзя будет вызывать методы этого общего модуля, которые компилируются на сервере. Почему так - сам понять не могу, где логика?
1 pumbaEO
 
17.04.12
19:14
в ЖКХ
2 zak555
 
17.04.12
19:19
(1) там точно про это не в курсе =)
3 Нуф-Нуф
 
17.04.12
19:21
курсы гилева рулят и разруливают
4 Nik777
 
17.04.12
19:21
(3) как раз этот пример из курсов Гилева.
5 le_
 
17.04.12
19:22
СП: ОбъектМетаданных: ОбщийМодуль (MetadataObject: CommonModule) ВызовСервера (ServerCall)

Если свойство установлено в значение Истина, то экспортные процедуры и функции модуля могут быть использованы на клиенте.
Если свойство не установлены, то процедуры и функции данного модуля доступны только на сервере.
6 YF
 
17.04.12
19:23
(0)
Логика в том, что при одной только галке Сервер - модуль компилируется на сервере, с установкой галки вызов сервера методы становятся доступны с клиента.

при обоих галках модуль компилится в двух местах и на клиенте и на сервере. в этом случае с клиента ты увидишь только скомпилированную на клиенте часть модуля ...
7 Nik777
 
17.04.12
19:24
(5) Если Вы помимо сервера поставите галочку "Клиент", то от "Вызов сервера" не будет никакого толку - при вызове серверных методов будут вываливаться ошибки.
8 le_
 
17.04.12
19:25
(7) Это не так.
9 Nik777
 
17.04.12
19:26
(6) Мне кажется, что это не совсем правильно. Зачем тогда нужен вызов сервера? Было бы более правильным сделать так, чтобы была возможность вызова сервера в данном случае. Иначе - какие могут быть ошибки?
10 Nik777
 
17.04.12
19:27
(8) Да ладно, только что смотрел видеоуроки Гилева - там сказано именно так.
11 YF
 
17.04.12
19:27
(9) Согласен, но вот так работает у них компилятор, судя по всему ...
12 Nik777
 
17.04.12
19:29
(11) Может быть в следующей версии платформы будет что-то вроде "По заявкам телезрителей" :)
13 le_
 
17.04.12
19:51
(10) Смотри еще раз.
Когда посмотришь, открой конфигуратор, добавь новый модуль, поставь галки:
- клиент (управляемое приложение)
- сервер
- вызов сервера

Добавь в этот модуль такой текст:
Процедура МояПроцедура() Экспорт
   Сообщить("aaa");
Конецпроцедуры


Далее, создай внешнюю обработку с управляемой формой и одной командой:
&НаКлиенте
Процедура Команда1(Команда)
   ДобавленныйМодуль.МояПроцедура();
КонецПроцедуры


Запусти - Enjoy!

Сними галку "Клиент", перезапусти - снова Enjoy!
Поставь галку "Клиент", перезапусти - снова Enjoy!
Последние два пункта выполняй пока не надоест.
14 Nik777
 
17.04.12
20:06
(13) А тебя не смущает тот факт, что в первом случае (когда стоят галки и клиента и сервера) - компиляция процедуры происходит и на сервере, и на клиенте, что означает, что ты запускаешь процедуру, которая находится на клиенте, а не насервере?

Если снять галку "Клиент" - то тут, естественно, ошибок не возникнет.
15 le_
 
17.04.12
23:25
(14) Да, ты прав, пардон.
СП говорит, если директива компиляции не указана, используется директива по-умолчанию. Директивой по-умолчанию является &НаСервере. Т.о., можно подумать, что процедура МояПроцедура() из (13) должна быть скомпилирована на сервере. Однако, она оказывается и на клиенте...
Есть два вида языков, одни постоянно ругают, а вторыми никто не пользуется.