| 
    
 | 
        Не могу понять запрос         | 
☑ | 
    
        | 
    0
    
        serg999    
       
    
    10.10.18 
            ✎
    15:26 
 | 
         
        Не пинайте, но не могу понять конструкцию ...
 
 =========
 ГДЕ
     ВЫБОР
         КОГДА ХозрасчетныйОбороты.КорСчет В (&ФильтрСписокСчетов)
         ТОГДА ВЫБОР
             КОГДА &ДоговорКонтрагента = НЕОПРЕДЕЛЕНО
                 ТОГДА НЕ ЕСТЬNULL(ХозрасчетныйОбороты.КорСубконто1, НЕОПРЕДЕЛЕНО) = &Контрагент
         ИНАЧЕ НЕ(ЕСТЬNULL(ХозрасчетныйОбороты.КорСубконто1, НЕОПРЕДЕЛЕНО) = &Контрагент
                 И ЕСТЬNULL(ХозрасчетныйОбороты.КорСубконто2, НЕОПРЕДЕЛЕНО) = &ДоговорКонтрагента)
             КОНЕЦ
         ИНАЧЕ ИСТИНА
     КОНЕЦ
 =========
 
 Что по итогу тут: 
 ТОГДА НЕ ЕСТЬNULL(ХозрасчетныйОбороты.КорСубконто1, НЕОПРЕДЕЛЕНО) = &Контрагент
 и тут 
 НЕ(ЕСТЬNULL(ХозрасчетныйОбороты.КорСубконто1, НЕОПРЕДЕЛЕНО) = &Контрагент
                 И ЕСТЬNULL(ХозрасчетныйОбороты.КорСубконто2, НЕОПРЕДЕЛЕНО) = &ДоговорКонтрагента)     
         | 
 | 
    
    
        | 
    1
    
        Cool_Profi    
       
    
    10.10.18 
            ✎
    15:26 
 | 
         
        Проверка заполненности полей     
         | 
 | 
    
    
        | 
    2
    
        serg999    
       
    
    10.10.18 
            ✎
    15:30 
 | 
         
        Зачем из проверять в "ГДЕ" ?     
         | 
 | 
    
    
        | 
    3
    
        Cool_Profi    
       
    
    10.10.18 
            ✎
    15:31 
 | 
         
        (2) А где ты предлагашь это сделать?     
         | 
 | 
    
    
        | 
    4
    
        serg999    
       
    
    10.10.18 
            ✎
    15:36 
 | 
         
        Тогда еще раз .. допустим "ХозрасчетныйОбороты.КорСубконто1" = "NULL" проверил: 
 
 ЕСТЬNULL(ХозрасчетныйОбороты.КорСубконто1, НЕОПРЕДЕЛЕНО)
 
 Вернул "НЕОПРЕДЕЛЕНО"
 
 Далее зачем второй раз проверить:
 НЕОПРЕДЕЛЕНО = &Контрагент     
         | 
 | 
    
    
        | 
    5
    
        Cool_Profi    
       
    
    10.10.18 
            ✎
    15:40 
 | 
         
        А если ЕСТЬNULL(ХозрасчетныйОбороты.КорСубконто1, НЕОПРЕДЕЛЕНО) вернул какое-то приличное значение, а не NULL?     
         | 
 | 
    
    
        | 
    6
    
        Cool_Profi    
       
    
    10.10.18 
            ✎
    15:40 
 | 
         
        Но не контрагента, например. Или другого контру?     
         | 
 | 
    
    
        | 
    7
    
        Михаил Козлов    
       
    
    10.10.18 
            ✎
    15:44 
 | 
         
        Если параметр Договор не указан, проверяется на совпадение контрагента. В противном случае на совпадение и договора и контрагента.     
         | 
 | 
    
    
        | 
    8
    
        unregistered    
       
    
    10.10.18 
            ✎
    15:50 
 | 
         
        (7) Точнее не "на совпадение", а "на НЕ совпадение".     
         | 
 | 
    
    
        | 
    9
    
        serg999    
       
    
    10.10.18 
            ✎
    16:00 
 | 
         
        То что проверятся заполнение параметра &ДоговорКонтрагента это понятно, вопрос по ЕСТЬNULL .. 
 (6) Но NULL, как и "НЕОПРЕДЕЛЕНО" не будет равно &Контрагент, почему не написать:
 "ТОГДА НЕ ХозрасчетныйОбороты.КорСубконто1 = &Контрагент"
 ?     
         | 
 | 
    
    
        | 
    10
    
        Cool_Profi    
       
    
    10.10.18 
            ✎
    16:04 
 | 
         
        (9) потому что любое сравнение с NULL даёт ложь     
         | 
 | 
    
    
        | 
    11
    
        serg999    
       
    
    10.10.18 
            ✎
    16:43 
 | 
         
        Cool_Profi .. спасибо!!!     
         | 
 | 
    
        Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство. Фредерик Брукс-младший