Показать сообщение отдельно
Старый 18.10.2013, 10:22   #1  
matew is offline
matew
Участник
 
37 / 10 (1) +
Регистрация: 10.07.2006
Адрес: Москва
Поиск проводки ГК по сумме с корреспонденцией
MS DAx 2009, KernelVersion: 5.0.1500.6491
MS SQL Server 2008 R2

Есть задача: найти проводку с корреспондирующей проводкой, по определенным условиям.
а) Запрос такой:

X++:
LedgerTrans             ledgerTrans, ledgerTransCorr;
AmountCur               amountCur = 36809351.98;

select ledgerTrans
    where ledgerTrans.Voucher    == "ОСЖ002243"
        && ledgerTrans.TransDate  == 30\09\2011
        && ledgerTrans.AmountCur == amountCur
        && (ledgerTrans.AccountNum == "41.10159")
    exists join ledgerTransCorr
          where ledgerTransCorr.BondBatch_RU      == ledgerTrans.BondBatch_RU
              && ledgerTransCorr.BondBatchTrans_RU == ledgerTrans.BondBatchTrans_RU
              && ledgerTransCorr.Crediting         != ledgerTrans.Crediting
              && (ledgerTransCorr.AccountNum == "00.010");
Запрос проводку не находит.

б) Если выполнить запрос без поиска корреспонденции:
X++:
select ledgerTrans
    where ledgerTrans.Voucher    == "ОСЖ002243"
               && ledgerTrans.TransDate  == 30\09\2011
               && ledgerTrans.AmountCur == amountCur
               && (ledgerTrans.AccountNum == "41.10159");
Этот запрос находит проводку X.

в) Если выполнить запрос без жесткого условия по сумме:

X++:
select ledgerTrans
      where ledgerTrans.Voucher    == "ОСЖ002243"
          && ledgerTrans.TransDate  == 30\09\2011
          && ledgerTrans.AmountCur >=  amountCur - 0.0001
          && ledgerTrans.AmountCur <=  amountCur + 0.0001
          //&& ledgerTrans.AmountCur == amountCur
          && (ledgerTrans.AccountNum == "41.10159")
      exists join ledgerTransCorr
            where ledgerTransCorr.BondBatch_RU      == ledgerTrans.BondBatch_RU
                && ledgerTransCorr.BondBatchTrans_RU == ledgerTrans.BondBatchTrans_RU
                && ledgerTransCorr.Crediting         != ledgerTrans.Crediting
                && (ledgerTransCorr.AccountNum == "00.010")
                   ;
Этот запрос находит ту же самую проводку Х, что и в запросе б). То есть на самом деле есть 2 проводки по условиям запроса а). Сумму в БД проверял: 36809351.980000000000.

Получается система при запросе с 1 таблицей и с 2-мя по разному сравнивает суммы.
В чем может быть дело? У кого-нибудь есть какие-то соображения?