|
ВЫБОР в Запросе | ☑ | ||
---|---|---|---|---|
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) |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |