|
18.10.2013, 10:22 | #1 |
Участник
|
Поиск проводки ГК по сумме с корреспонденцией
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++: 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") ; Получается система при запросе с 1 таблицей и с 2-мя по разному сравнивает суммы. В чем может быть дело? У кого-нибудь есть какие-то соображения? |
|
18.10.2013, 10:35 | #2 |
NavAx
|
Думаю надо посмотреть результат.
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") ; print((ledgerTrans.AmountCur - amountCur)*1000); pause; Последний раз редактировалось raz; 18.10.2013 в 10:38. |
|
18.10.2013, 11:48 | #3 |
Участник
|
Результат = 0,00.
Интересно, что для проводок с другими суммами все работает, как надо. И если в этих проводках подменить суммы, например на 36809351.33, то все работает. Проблемы начинаются, если сумма больше 36809351.5. |
|
18.10.2013, 13:59 | #4 |
Участник
|
Проводка чем пишется? Есть ли при разноске Currency:amount() к сумме?
|
|
22.10.2013, 09:58 | #5 |
Участник
|
|
|
18.10.2013, 12:00 | #6 |
NavAx
|
и все же стоит проверить в отладчике, наверняка в каком то знаке различаются.
|
|
18.10.2013, 12:08 | #7 |
----------------
|
попробуйте повторить те же запросы на SQL
и посмотрите на результаты |
|
22.10.2013, 09:32 | #8 |
Участник
|
|
|