Имя: Пароль:
1C
1С v8
ВЫБОР в Запросе
,
0 rull9ss
 
03.10.12
13:27
Сильно не пинать, только учусь.

Есть запрос:

ВЫБРАТЬ
...
Выбор Когда Ссылка.ВидОперации = Значение(Перечисление.ВидыОперацийПереоценки.Уценка) И Тмц.ВидНоменклатуры <> Значение(Перечисление.ТипыНоменклатуры.МБП) Тогда Ссылка.СчетПереучета
Когда Ссылка.ВидОперации = Значение(Перечисление.ВидыОперацийПереоценки.Уценка) И Тмц.ВидНоменклатуры = Значение(Перечисление.ТипыНоменклатуры.МБП) Тогда ТМЦ.СчетФонда
Когда Ссылка.ВидОперации = Значение(Перечисление.ВидыОперацийПереоценки.Уценка) И Тмц.СчетУчета.Забалансовый = Истина Тогда NULL
Когда Ссылка.ВидОперации <> Значение(Перечисление.ВидыОперацийПереоценки.Уценка) Тогда СчетУчета Конец КАК СчетДт,
...


Загвоздка в том что  
Условие ... Тогда NULL Всегда затирается.
пробовал удалить все условия кроме данного - отрабатывает нормально,
Пробовал ставить условие 1м или последним в выборе - все равно перекрывается.

Вопрос: Как этого избежать? как задать, что при выполнении условия всегда будет Нулл?
1 IronDemon
 
03.10.12
13:29
Видимо у всех ТМЦ  СчетУчета.Забалансовый = Истина :)
2 rs_trade
 
03.10.12
13:30
(0) у тебя только два первых условия будут отрабатывать
3 rull9ss
 
03.10.12
13:30
(2) Поясни почему
4 rull9ss
 
03.10.12
13:31
(3)+
4е тоже отрабатывается
5 Oleg_Kag
 
03.10.12
13:32
1-ый раз "не равно", 2-ой раз "равно"...третьего не надо
6 rs_trade
 
03.10.12
13:33
(3)

Выбор когда ВидОперации  <> 1 Тогда
         ...
     когда ВидОперации  = 1 Тогда
         ...

все остальные условия не важны ибо отработает одно из двух первых
7 rs_trade
 
03.10.12
13:36
сделай иерархию выборов. как тебе там надо

Выбор
   Когда Ссылка.ВидОперации = Значение(Перечисление.ВидыОперацийПереоценки.Уценка) Тогда
       
        Выбор Тмц.ВидНоменклатуры = Значение(Перечисление.ТипыНоменклатуры.МБП) Тогда
             ....
   Иначе
        ....
8 rull9ss
 
03.10.12
13:38
(7) попробовал


Выбор Когда Ссылка.ВидОперации = Значение(Перечисление.ВидыОперацийПереоценки.Уценка) И Тмц.СчетУчета.Забалансовый = Истина Тогда NULL
Иначе Выбор    Когда Ссылка.ВидОперации = Значение(Перечисление.ВидыОперацийПереоценки.Уценка) И Тмц.ВидНоменклатуры <> Значение(Перечисление.ТипыНоменклатуры.МБП) Тогда Ссылка.СчетПереучета
Когда Ссылка.ВидОперации = Значение(Перечисление.ВидыОперацийПереоценки.Уценка) И Тмц.ВидНоменклатуры = Значение(Перечисление.ТипыНоменклатуры.МБП) Тогда ТМЦ.СчетФонда
Когда Ссылка.ВидОперации <> Значение(Перечисление.ВидыОперацийПереоценки.Уценка) Тогда СчетУчета Конец Конец КАК СчетДт

Все равно не торт((
9 rull9ss
 
03.10.12
13:48
ап штоли, решить проблему очень надо
10 rs_trade
 
03.10.12
13:53
(9) опиши нужную тебе логику словами.
11 Oleg_Kag
 
03.10.12
13:55
Добавь третье сравнение в первые 2 выбора, как то так
Выбор
Когда Ссылка.ВидОперации = Значение(Перечисление.ВидыОперацийПереоценки.Уценка) И
Тмц.ВидНоменклатуры <> Значение(Перечисление.ТипыНоменклатуры.МБП) И Тмц.СчетУчета.Забалансовый = Ложь Тогда Ссылка.СчетПереучета
Когда Ссылка.ВидОперации = Значение(Перечисление.ВидыОперацийПереоценки.Уценка) И Тмц.ВидНоменклатуры = Значение(Перечисление.ТипыНоменклатуры.МБП) И Тмц.СчетУчета.Забалансовый = Ложь Тогда ТМЦ.СчетФонда


"ключ" : И Тмц.СчетУчета.Забалансовый = Ложь
вот от этого пляши
12 rull9ss
 
03.10.12
13:56
(10) описывал же вроде
Необходимо при условии
Ссылка.ВидОперации = Значение(Перечисление.ВидыОперацийПереоценки.Уценка) И Тмц.СчетУчета.Забалансовый = Истина
Присваивать NULL, и все, на дальнейшие условия не смотреть
Если же условие не выполняется идти дальше по условиям и присваивать то что надо
13 rull9ss
 
03.10.12
13:58
(11)
почему Ложь?

наоборот надо если счет учета забалансовый СчетДт = Нулл
14 Oleg_Kag
 
03.10.12
14:09
(12) Потому, что в 3 сравнении идет проверка на то, что счет забалансовый=истина
, то есть в первых двух он явно НЕ должен быть забалансовый.
хорошо, пишем "по-китайски"
Выбор Когда (а=b) и (с<>d) Тогда y
     Когда (а=b) и (с=d)  Тогда х
таким образом полностью закрыли варианты когда с "с" и "d", так как и в 1-ом и втором случае первое условие одинаковое. То есть записи с условием (a=b) мы уже ВСЕ выбрали.
Далее третье условие начинается с (a=b), но на первых двух шагах мы уже ВСЕ записи выбрали. Следовательно надо или отказываться от этого сравнения дальше, или накладывать доп условие сравнения на первые 2.
Первое "или" тогда будет:
   Когда Тмц.СчетУчета.Забалансовый = Истина Тогда NULL
То есть БЕЗ первого сравнения.
Для второго "или" смотри (11)