Имя: Пароль:
1C
1С v8
Выполнить и директивы прекомпиляции
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) Я кстати возможно не совсем корректно сформулировал правило, хотя пример его четко поясняет.
Думаю правильнее будет
"Метод Выполнить все термы-значения в директивах препроцессора считает равными Ложь".