|
Выполнить и директивы прекомпиляции
| ☑ |
0
Ksandr
17.01.12
✎
16:01
|
Пишу в консолидации процедуру заполнения, эта процедура выполняется командой Выполнить.
В этой процедуре используется следующий код:
#Если Клиент ИЛИ ВнешнееСоединение Тогда
База = ОбщегоНазначения.ПолучитьСоединение(глТаблицаПодключений, ИспользуемаяИБ, 1);
#ИначеЕсли Сервер Тогда
База = УправлениеСоединениямиВИБ.ПолучитьСоединение(ИспользуемаяИБ, 1);
#Иначе
База = Неопределено;
#КонецЕсли
При выполнении данного кода вне процедуры Выполнить все замечательно, при выполнении внутри процедуры Выполнить всегда попадает в #Иначе независимо от того, на сервере выполняется или на клиенте.
Подскажите, пожалуйста, это баг или фича? Где может выполняться данный код, если не на сервере и не на клиенте?
Платформа 8.2.14.533
|
|
1
orefkov
17.01.12
✎
16:35
|
Очевидно, что в Выполнить ни одно из условий не определено.
Выполняется - хз, наверное там же, где и текущее выполнение.
|
|
2
Ksandr
20.01.12
✎
16:47
|
(1) Спасибо, на партнерском сказали, что любое из условий в конструкции выполнить = Ложь, т.е.
Если НЕ Клиент Тогда
А=10;
КонецЕсли
Если Сервер Тогда
А=1;
КонецЕсли
Результат всегда будет А=10
|
|
3
TormozIT
гуру
21.01.12
✎
10:03
|
Код методом/оператором Выполнить выполняется всегда в том контексте, где запущен. Если хочется на сервере, то надо делать серверную функцию, внутри которой будет Выполнить.
|
|
4
TormozIT
гуру
21.01.12
✎
10:09
|
(2) Я кстати возможно не совсем корректно сформулировал правило, хотя пример его четко поясняет.
Думаю правильнее будет
"Метод Выполнить все термы-значения в директивах препроцессора считает равными Ложь".
|
|