Семерка Запрос НЕ в условии

  1. 9 г. назад
    06.09.2015 17:45:16 отредактировано Hans

    Что за логика в семерочных запросах. Есть условие :

    Условие (НЕ( (СтатусГотовности = СтГот) И (ДатаГотовности <> ДГот)));

    Если переделать это условие так:

    Условие (НЕ( (ДатаГотовности <> ДГот) И (СтатусГотовности = СтГот)));

    То результат запроса уже становится другой.

    Запрос на семерке как будто не видит вторую часть "И", видит только первое отрицание.В обоих вариантах показывает не тот вариант который логически правильный!!! Это бак или фича?
    Может как то есть способ переделать это условие так, что бы оно работало по нормально логике? Я уже ничего не соображаю.

    Сам запрос целиком:

    Обрабатывать неПомеченныенаУдаление;
    	Дисп = Справочник.Диспетчеризация.ТекущийЭлемент;
    	Заказнаряд = Справочник.Диспетчеризация.ЗаказНаряд;
            СтатусГотовности = Справочник.Диспетчеризация.СтатусГотовности;
            ДатаГотовности = Справочник.Диспетчеризация.датаГотовности;
    	Группировка Дисп;
           Группировка ДатаГотовности;
            Условие (НЕ( (СтатусГотовности = СтГот) И (ДатаГотовности <> ДГот)));
  2. А если так

    Условие СтатусГотовности <> СтГот;
    Условие ДатаГотовности = ДГот;
    
    Условие ДатаГотовности = ДГот;
    Условие СтатусГотовности <> СтГот;
    Ответы: (5)
  3. Будет отличаться?

  4. По-моему, 1с 7.7 плохо работает с НЕ. Пишут, люди...

  5. :)

  6. 06.09.2015 17:54:47 отредактировано Hans

    (1)
    так вроде правильный. Но не тот который мне нужен.

  7. 06.09.2015 18:04:18 отредактировано Hans

    Вроде эти два условия логически дают одинаковый результат:

    Условие (НЕ( (СтатусГотовности = СтГот) И (ДатаГотовности <> ДГот)));
    Условие ((ДатаГотовности = ДГот) ИЛИ (СтатусГотовности <> СтГот));
  8. XOR, а не OR, вроде

  9. А, не

  10. 06.09.2015 18:07:50 отредактировано jsmith82
    (ДатаГотовности = ДГот) И (СтатусГотовности <> СтГот)

    так, наверно

  11. Так не, не пойдет и так вижу. В Выборку должны попасть элементы в любым статусом кроме "Гот", со статусом "гот" только если дата готовности совпадает с текущимДнем (дгот - тек день)

  12. Есть такая фишка, как предсказуемость результата. Если первая часть условия однозначно определяет результат, то вторая уже даже не рассматривается. По-моему, как раз эта схема здесь срабатывает. Упорядочивайте условия по степени их важности.

    Ответы: (16)
  13. Скобки же есть.

  14. И, кстати, если вторая часть приводит к ошибке, но выпадает по случаю оптимизации - ошибки не будет. Не помню, по какому языку программирования это читал.

    Ответы: (16)
  15. Это классика уж. В 1с8, вроде, так.

  16. Но тут скобки!!!

    Ответы: (18)
  17. Почти уверен - по Васику. Когда интерпретатор компилит код условия, то получается не совсем то, что ожидаете от него вы. И тогда смотри (11) и (13).

  18. А ты не помнишь, когда Конф 1С 8 убирает скобки?

  19. (15) Сколько ни ставь - оставит по своему усмотрению, не?

  20. Хотя тут это вообще неважно.

  21. Независимо оттого, выполняется ли расчёт правого условия, общий расчёт выполняется одинаково и на результат не влияет.

  22. Сделай вложенную проверку - гарантия, что сработает так, как тебе надо. Оптимизатор не сработает. Думаю - скрее баг

    Ответы: (25)
  23. 06.09.2015 18:24:49 отредактировано alex_shkut

    Ну ты понял... Проверь первое условие, а во вложенном Если - второе.

  24. Вы меня если что не хайте, я клюшки работал в 2003 последний раз вроде?

    Ответы: (24)
  25. alex_shkut Вы меня если что не хайте, я клюшки работал в 2003 последний раз вроде?

    Всё правильно. Сам напарывался

    Ответы: (25)
  26. (24) По-моему, это решение (21) поможет в любом из ЯП.

или зарегистрируйтесь чтобы ответить!