| 
	 | 
| 
			
			 | 
		#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-мя по разному сравнивает суммы. В чем может быть дело? У кого-нибудь есть какие-то соображения?  | 
| 
	
 | 
| 
			
			 | 
		#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.  | 
| 
	
 | 
| 
			
			 | 
		#3 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Результат = 0,00. 
		
		
		
		
		
		
		
	Интересно, что для проводок с другими суммами все работает, как надо. И если в этих проводках подменить суммы, например на 36809351.33, то все работает. Проблемы начинаются, если сумма больше 36809351.5.  | 
| 
	
 | 
| 
			
			 | 
		#4 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Проводка чем пишется? Есть ли при разноске Currency:amount() к сумме?
		 
		
		
		
		
		
		
		
	 | 
| 
	
 | 
| 
			
			 | 
		#5 | 
| 
			
			 Участник 
		
			
	 | 
	
	|
| 
	
 | 
| 
			
			 | 
		#6 | 
| 
			
			 NavAx 
		
			
	 | 
	
	
	
		
		
		
		 
			
			и все же стоит проверить в отладчике, наверняка в каком то знаке различаются.
		 
		
		
		
		
		
		
		
	 | 
| 
	
 | 
| 
			
			 | 
		#7 | 
| 
			
			 ---------------- 
		
			
	 | 
	
	
	
		
		
		
		 
			
			попробуйте повторить те же запросы на SQL  
		
		
		
		
		
		
		
	и посмотрите на результаты  | 
| 
	
 | 
| 
			
			 | 
		#8 | 
| 
			
			 Участник 
		
			
	 | 
	
	|
| 
	
 |