|  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, 12:00 | #4 | 
| NavAx | 
			
			и все же стоит проверить в отладчике, наверняка в каком то знаке различаются.
		 | 
|  | 
|  18.10.2013, 12:08 | #5 | 
| ---------------- | 
			
			попробуйте повторить те же запросы на SQL  и посмотрите на результаты | 
|  | 
|  18.10.2013, 13:59 | #6 | 
| Участник | 
			
			Проводка чем пишется? Есть ли при разноске Currency:amount() к сумме?
		 | 
|  | 
|  22.10.2013, 09:32 | #7 | 
| Участник | |
|  | 
|  22.10.2013, 09:58 | #8 | 
| Участник | |
|  |