Выражения в querybuildRange - PullRequest
0 голосов
/ 07 ноября 2018

Привет, я пытаюсь сделать этот запрос:

Select ProjInvoiceJour 
where NOT (ProjInvoiceJour.ProjInvoiceType == ProjInvoiceType::Onaccount && ProjInvoiceJour.CountryRegionID != "ES")

Но мне нужно сделать это с помощью buildbuilder:

qbds.addRange(fieldnum(ProjInvoiceJour, ProjInvoiceType)).value(strfmt('!%1',
                           strfmt("((%1.%2 == %3) && (%4.%5 != '%6'))",
                                    tablestr(ProjInvoiceJour),
                                    fieldstr(ProjInvoiceJour, ProjInvoiceType),
                                    any2int(ProjInvoiceType::OnAccount),
                                    tablestr(ProjInvoiceJour),
                                    fieldstr(ProjInvoiceJour, CountryRegionID),
                                    queryvalue("ES"))));

Но в запросе есть какая-то ошибка:

SELECT * FROM ProjInvoiceJour WHERE ((NOT (ProjInvoiceType = 255)))

Спасибо

1 Ответ

0 голосов
/ 08 ноября 2018

Закон де Моргана приходит на помощь:

select ProjInvoiceJour 
    where !(ProjInvoiceJour.ProjInvoiceType == ProjInvoiceType::Onaccount && 
            ProjInvoiceJour.CountryRegionID != 'ES')

эквивалентно:

select ProjInvoiceJour 
    where ProjInvoiceJour.ProjInvoiceType != ProjInvoiceType::Onaccount ||
          ProjInvoiceJour.CountryRegionID == 'ES'

Или в запросе:

qbds.addRange(fieldnum(ProjInvoiceJour, ProjInvoiceType)).value(strfmt('((%1.%2 != %3) || (%4.%5 == "%6"))',
                                tablestr(ProjInvoiceJour),
                                fieldstr(ProjInvoiceJour, ProjInvoiceType),
                                0+ProjInvoiceType::OnAccount,
                                tablestr(ProjInvoiceJour),
                                fieldstr(ProjInvoiceJour, CountryRegionID),
                                'ES'));
...