|
2 одинаковых логически, но разных по результатам запроса. | ☑ | ||
---|---|---|---|---|
0
deevil
29.03.12
✎
15:21
|
Есть запрос, для получения оборота по продажам, за исключением данных определенных контрагентов и определенных папок номенклатуры.
Есть 2 варианта для отбора контрагентов: ВЫБОР КОГДА ДоговорКонтрагента ЕСТЬ NULL ТОГДА ИСТИНА ИНАЧЕ ВЫБОР КОГДА ДоговорКонтрагента.Владелец В (&КонтрагентИсключить)ТОГДА ЛОЖЬ ИНАЧЕ ИСТИНА КОНЕЦ КОНЕЦ и ВЫБОР КОГДА ДоговорКонтрагента ЕСТЬ NULL ТОГДА ИСТИНА ИНАЧЕ НЕ (ДоговорКонтрагента.Владелец В (&КонтрагентИсключить)) КОНЕЦ Логически оба запроса одинаковы, но результаты различаются. 1й вариант выдает правильные данные, но интересно в чем ошибка. Полный текст запроса: ВЫБРАТЬ СУММА(ПродажиОбороты.СтоимостьОборот) КАК СтоимостьОборот ИЗ РегистрНакопления.Продажи.Обороты(&ДатаНачала,&ДатаОкончания, Регистратор, НЕ Номенклатура.Родитель В (&НоменклатураРодительИсключить) И НЕ Номенклатура.Услуга и ВЫБОР КОГДА ДоговорКонтрагента ЕСТЬ NULL ТОГДА ИСТИНА ИНАЧЕ ВЫБОР КОГДА ДоговорКонтрагента.Владелец В (&КонтрагентИсключить)ТОГДА ЛОЖЬ ИНАЧЕ ИСТИНА КОНЕЦ КОНЕЦ ) КАК ПродажиОбороты ГДЕ ПродажиОбороты.Регистратор.Организация = &Организация |
|||
1
deevil
29.03.12
✎
15:22
|
Парсер скушал
1й вариант ВЫБОР КОГДА ДоговорКонтрагента ЕСТЬ NULL ТОГДА ИСТИНА ИНАЧЕ ВЫБОР КОГДА ДоговорКонтрагента.Владелец В (&КонтрагентИсключить)ТОГДА ЛОЖЬ ИНАЧЕ ИСТИНА КОНЕЦ КОНЕЦ |
|||
2
deevil
29.03.12
✎
15:23
|
2й вариант
ВЫБОР КОГДА ДоговорКонтрагента ЕСТЬ NULL ТОГДА ИСТИНА ИНАЧЕ НЕ (ДоговорКонтрагента.Владелец В (&КонтрагентИсключить)) КОНЕЦ |
|||
3
lxs
29.03.12
✎
15:23
|
не поверишь, они разные и по логике и по написанию
|
|||
4
Kashemir
29.03.12
✎
15:25
|
(3) Да логика вроде одинакова
|
|||
5
Fragster
гуру
29.03.12
✎
15:27
|
у Выбор может быть более одного когда .. Тогда .., только тсссс!
|
|||
6
Kashemir
29.03.12
✎
15:28
|
Обе конструкции возвращают ЛОЖЬ если Владелец контрагента входит в список исключений и ИСТИНА во всех остальных случаях
(5) Ну это по сути задачу то не меняет |
|||
7
Deon
29.03.12
✎
15:34
|
Я б засунул условие в возвращаемое запросом поле и позырил бы, что оно там насчитало, а то я тоже разницы не вижу
|
|||
8
Fragster
гуру
29.03.12
✎
15:37
|
я бы вывел поле из Справочник.Договоры где
ДоговорКонтрагента.Владелец Есть NULL |
|||
9
deevil
29.03.12
✎
15:40
|
(7) не дает, ругается на "В (&КонтрагентИсключить)"
(8) Условие "ДоговорКонтрагента.Владелец Есть NULL" исключит Продажи без договора (Розница). |
|||
10
Fragster
гуру
29.03.12
✎
15:41
|
(9).2 у тебя договор есть NULL, а не договор.владелец есть NULL
|
|||
11
deevil
29.03.12
✎
15:45
|
(10) для того чтобы не пропали продажи без договора.
|
|||
12
Deon
29.03.12
✎
15:46
|
(9) Как ругается-то хоть?
|
|||
13
lxs
29.03.12
✎
15:46
|
(4) да нихрена логика не одинаковая. если ты не пишешь иначе запрос не ложь возвращает
|
|||
14
Deon
29.03.12
✎
15:48
|
(13) Где там нет "иначе"?
|
|||
15
Kashemir
29.03.12
✎
15:49
|
(13) Ты ошибаешся. В иначе открыта новая конструкция выбор которая в свою очередь и возвращает значение.
|
|||
16
lxs
29.03.12
✎
15:49
|
1. когда а=1 тогда "а" иначе "б"
результат выполнения: или а, или б 2. когда а=1 тогда "а" результат выполнения: "а" или пустой |
|||
17
deevil
29.03.12
✎
15:49
|
(12)
{(1, 44)}: Операция не разрешена в предложении ПродажиОбороты.ДоговорКонтрагента.Владелец <<?>> В (&КонтрагентИсключить) (13) не совсем понял что имеете ввиду |
|||
18
lxs
29.03.12
✎
15:49
|
(15) вот именно, они либо возвращает что-то (конкретно это булево), либо нихрена не возвращает.
|
|||
19
Fragster
гуру
29.03.12
✎
15:50
|
(11) не тупи, NULL = NULL - ложь
|
|||
20
Kashemir
29.03.12
✎
15:50
|
(18) Приведи пример конструкции автора, которая по твоему ничего не возвращает.
|
|||
21
lxs
29.03.12
✎
15:50
|
а если запрос ничего не возвращает, что происходит?
|
|||
22
Kashemir
29.03.12
✎
15:51
|
(21) Происходит NULL
|
|||
23
Deon
29.03.12
✎
15:51
|
(17) Покажи весь запрос
|
|||
24
lxs
29.03.12
✎
15:51
|
(20) второй запрос. у него же результат отличается, он же сам сказал? почему я тебе должен доказательства приводить? если ты не видишь разницы между булево и неопределено, то я тут тебе ничем не помогу.
|
|||
25
deevil
29.03.12
✎
15:52
|
Конструкция в обоих вариантах возвращает данные, но во втором пропадает приличная сумма.
Проверками определил что 1й вариант возвращает верные данные, просто интересно что я не так сделал во втором. |
|||
26
lxs
29.03.12
✎
15:53
|
(22) все, нет вопросов, я не досмотрел)
|
|||
27
Kashemir
29.03.12
✎
15:53
|
(24) Я долго напрягал свое прекрасное зрение и не увидел возможности возврата "неопределено". Соответственно помощь нужна не мне.
|
|||
28
deevil
29.03.12
✎
15:54
|
(24) (27) - там и не может быть неопределенно, откуда оно возьмется?
|
|||
29
lxs
29.03.12
✎
15:56
|
(27) проехали, я из-за херового отображения в тегах не досмотрел текст.
(0) попробуй так ВЫБОР КОГДА ДоговорКонтрагента ЕСТЬ NULL ТОГДА ИСТИНА ИНАЧЕ (НЕ ДоговорКонтрагента.Владелец В (&КонтрагентИсключить)) КОНЕЦ |
|||
30
deevil
29.03.12
✎
15:57
|
По сути я заменил конструкцию
ВЫБОР КОГДА ДоговорКонтрагента.Владелец В (&КонтрагентИсключить) ТОГДА ЛОЖЬ ИНАЧЕ ИСТИНА на НЕ (ДоговорКонтрагента.Владелец В (&КонтрагентИсключить)) И результат разный... |
|||
31
lxs
29.03.12
✎
15:57
|
(30) "НЕ" возьми в скобки
|
|||
32
lxs
29.03.12
✎
16:01
|
off: мля, когда здесь сделают нормальный "кодоопределитель"?
|
|||
33
deevil
29.03.12
✎
16:02
|
(31) все равно.
Такое ощущение, что " НЕ " в запросе тупит. |
|||
34
Kashemir
29.03.12
✎
16:06
|
(33) альтернативная конструкция
ДоговорКонтрагента.Владелец В (&КонтрагентИсключить) = ЛОЖЬ |
|||
35
Fragster
гуру
29.03.12
✎
16:07
|
блин, ну происходит инверсия из-за NULL. Инфа 146%
|
|||
36
Kashemir
29.03.12
✎
16:08
|
(35) Так в оригинальной конструкции не может быть ибо договор проверяется на существование
|
|||
37
Kashemir
29.03.12
✎
16:09
|
+(36) Не может быть NULL *
|
|||
38
Fragster
гуру
29.03.12
✎
16:09
|
(36) договор - да. а договор.Владелец - может быть чем угодно.
|
|||
39
Fragster
гуру
29.03.12
✎
16:09
|
(38)+ у пустой ссылки владелец - NULL, если что
|
|||
40
Kashemir
29.03.12
✎
16:12
|
(38) У пустой ссылки заданного типа при реквизите несоставного типа не может быть нул
|
|||
41
Fragster
гуру
29.03.12
✎
16:13
|
(40)
|
|||
42
Fragster
гуру
29.03.12
✎
16:14
|
(41)+ объяснить, откуда он там, или сам догадаешься?
|
|||
43
Kashemir
29.03.12
✎
16:15
|
(42) Действительно, мой косяк.
|
|||
44
Kashemir
29.03.12
✎
16:16
|
+(43) ВЫБРАТЬ
ТипЗначения(ВЫРАЗИТЬ(NULL КАК Справочник.ДоговорыКонтрагентов).Владелец) Возвращает NULL |
|||
45
Fragster
гуру
29.03.12
✎
16:19
|
(44)
ВЫРАЗИТЬ(NULL КАК Справочник.ДоговорыКонтрагентов) = ЗНАЧЕНИЕ(Справочник.ДОговорыКонтрагентов.ПустаяСсылка) |
|||
46
Kashemir
29.03.12
✎
16:20
|
(45) Та да - я уже увидел
|
|||
47
Kashemir
29.03.12
✎
16:21
|
+(46) Хотя честно говоря не совсем понятно, почему явное приведение типа не привело к выражению пустого ссылочного
|
|||
48
hhhh
29.03.12
✎
16:57
|
(29) надо так
ЕСТЬNULL(НЕ ДоговорКонтрагента.Владелец В (&КонтрагентИсключить), ИСТИНА) чего ты размахал на полстраницы? |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |