Имя: Пароль:
1C
1С v8
Поясните различие инструкций препроцессора и директив компиляции.
0 ptiz
 
08.08.11
15:52
Читаю:
"Основное отличие инструкций препроцессора от директив компиляции заключается в том, что инструкции препроцессора описывают, где компилируется код, а директивы компиляции указывают, где нужно компилировать код."

2 вопроса
1) Никак в толк не возьму, чем "описывают, где компилируется код" отличается от "где нужно компилировать код" ?
Где в он будет скомпилирован?

2) Откуда можно будет вызвать такую процедуру: с сервера или с клиента?

#Если Сервер Тогда

&НаКлиенте
Процедура МояПроцедура()

КонецПроцедуры

#КонецЕсли
1 ptiz
 
08.08.11
15:54
И какая разница  между

#Если Клиент Тогда
Процедура МояПроцедура()

КонецПроцедуры
#КонецЕсли

и

&НаКлиенте
Процедура МояПроцедура()

КонецПроцедуры
2 Fragster
 
гуру
08.08.11
15:55
где нужно ВЫПОЛНЯТЬ код
3 ДенисЧ
 
08.08.11
15:56
(1)
в первом случае в исполняемый не на клиенте код процедура не попадёт в принципе.
4 Fragster
 
гуру
08.08.11
15:57
или набоборот... короче будет ошибка "Процедура с указанным именем не обнаружена"

#Если Клиент
Процедура Тыц()

КонецПроцедуры
#КонецЕсли

&Сервер
Процедура ТыцТыц()
 Тыц();
КонецПроцедуры
5 ptiz
 
08.08.11
15:57
(3) А во втором?
6 ДенисЧ
 
08.08.11
15:58
(5) а во втором - может попасть, но выполняться не будет.
Я не знаю, как работает оптимизатор в 1с
7 Fragster
 
гуру
08.08.11
15:58
(6) а во втором - функция будет обрабатываться на сервере, но доступна будет и из сервера и из клиента
8 ptiz
 
08.08.11
16:01
Т.е. если указано:

&Сервер
То код будет выполняться всегда на сервере, независимо от того, откуда вызван.

Если указано &Клиент, то код будет присутствовать на сервере, но выполнить его можно будет только с клиента.

Так?
9 Fragster
 
гуру
08.08.11
16:03
(8) где там присутствовать код будет - не скажу, но то, что вызвать функцию из другого места (из клиента &сервер и наоборот) можно - это факт. а # - просто убирает код из соответствующего контекста - как будто его и не было
10 Stepa86
 
08.08.11
16:04
В случае инструкции препроцессору (#Если ) участок кода или выполняется или пропускается в зависимости от выполнения условия, а в случае директивы выполнение кода будет перенаправлено в указанную среду выполнения, если возможно
11 Stepa86
 
08.08.11
16:08
вот этот код например выведет 1, 2, 3 , а не все 4

&НаКлиенте
Процедура ВывестиЦыферки()

ВывестиОдин();
ВывестиДва();
ВывестиТри();
ВывестиЧетыре();

КонецПроцедуры

&НаКлиенте
Процедура ВывестиОдин()
Сообщить(1);
КонецПроцедуры

#Если НаКлиенте Тогда
Процедура ВывестиДва()
Сообщить(2);
КонецПроцедуры
#КонецЕсли

&НаСервере
Процедура ВывестиТри()
Сообщить(3);
КонецПроцедуры

#Если НаСервере Тогда
Процедура ВывестиЧетыре()
Сообщить(4);
КонецПроцедуры
#КонецЕсли
12 acsent
 
08.08.11
16:10
# - где компилируется код
& - где выполняется код.
Это если простым языком
13 ptiz
 
08.08.11
16:22
(11) А ошибку этот код не вызовет при попытке вызова ВывестиЧетыре() ?
14 Stepa86
 
08.08.11
16:24
(13) должен так то... ну я думаю смысл понятен в общем
Оптимист верит, что мы живем в лучшем из миров. Пессимист боится, что так оно и есть.