| 
			
			 | 
		#1 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
			
			 
			
			Многоуважаемая публика. Столкнулась со странной ситуацией: при формировании отчета в 2-х и в 3-х уровневых конфигурациях Axapta отправляет на SQL-сервер разные (!) запросы. 
		
		
		
		
		
		
			В 2-х уровневой версии запрос уходит на сервер вот в таком виде: SELECT A.VOUCHER,A.TRANSDATE,A.BGR_INVENTTRANSID,SUM(B.AMOUNTMST),SUM(B.AMOUNTCUR),B.ACCOUNTNUM,B.CREDITING,B.VOUCHER,B.TRANSDATE,B.BGR_INVENTTRANSID FROM LEDGERTRANS A,LEDGERTRANS B WHERE ((A.DATAAREAID='bgr') AND ((((((((A.TRANSDATE>={ts '2004-06-01 00:00:00.000'}) AND (A.TRANSDATE<={ts '2004-06-30 00:00:00.000'})) AND NOT ((A.BONDBATCH_RU=' '))) AND NOT ((A.BONDBATCHTRANS_RU=0))) AND ((A.PERIODCODE>=1) AND (A.PERIODCODE<=2))) AND NOT ((A.POSTING=19))) AND (A.VOUCHER=' ВП-00000060')) AND ((((((((((A.TRANSTYPE=0) OR (A.TRANSTYPE=3)) OR (A.TRANSTYPE=14)) OR (A.TRANSTYPE=16)) OR (A.TRANSTYPE=19)) OR (A.TRANSTYPE=20)) OR (A.TRANSTYPE=82)) OR (A.TRANSTYPE=80)) OR (A.TRANSTYPE=9)) OR (A.TRANSTYPE=99)))) AND ((B.DATAAREAID='bgr') AND (((B.RECID<>A.RECID) AND (A.BONDBATCH_RU=B.BONDBATCH_RU)) AND (A.BONDBATCHTRANS_RU=B.BONDBATCHTRANS_RU))) GROUP BY A.VOUCHER,A.TRANSDATE,A.BGR_INVENTTRANSID,B.ACCOUNTNUM,B.CREDITING,B.VOUCHER,B.TRANSDATE,B.BGR_INVENTTRANSID ORDER BY A.VOUCHER,A.TRANSDATE,A.BGR_INVENTTRANSID,B.ACCOUNTNUM,B.CREDITING,B.VOUCHER,B.TRANSDATE,B.BGR_INVENTTRANSID OPTION(FAST 19) А в 3-уровневой, вот в таком: SELECT A.VOUCHER,A.TRANSDATE,A.BGR_INVENTTRANSID,SUM(B.AMOUNTMST),SUM(B.AMOUNTCUR),B.ACCOUNTNUM,B.CREDITING,B.VOUCHER,B.TRANSDATE,B.BGR_INVENTTRANSID FROM LEDGERTRANS A,LEDGERTRANS B WHERE ((A.DATAAREAID='bgr') AND ((((((((A.TRANSDATE>={ts '2004-06-01 00:00:00.000'}) AND (A.TRANSDATE<={ts '2004-06-30 00:00:00.000'})) AND NOT ((A.BONDBATCH_RU=' '))) AND NOT ((A.BONDBATCHTRANS_RU=0))) AND ((A.PERIODCODE>=1) AND (A.PERIODCODE<=2))) AND NOT ((A.POSTING=19))) AND (A.VOUCHER=' ВП-00000060')) AND (((((((((A.TRANSTYPE=3) OR (A.TRANSTYPE=14)) OR (A.TRANSTYPE=16)) OR (A.TRANSTYPE=19)) OR (A.TRANSTYPE=20)) OR (A.TRANSTYPE=82)) OR (A.TRANSTYPE=80)) OR (A.TRANSTYPE=9)) OR (A.TRANSTYPE=99)))) AND ((B.DATAAREAID='bgr') AND (((B.RECID<>A.RECID) AND (A.BONDBATCH_RU=B.BONDBATCH_RU)) AND (A.BONDBATCHTRANS_RU=B.BONDBATCHTRANS_RU))) GROUP BY A.VOUCHER,A.TRANSDATE,A.BGR_INVENTTRANSID,B.ACCOUNTNUM,B.CREDITING,B.VOUCHER,B.TRANSDATE,B.BGR_INVENTTRANSID ORDER BY A.VOUCHER,A.TRANSDATE,A.BGR_INVENTTRANSID,B.ACCOUNTNUM,B.CREDITING,B.VOUCHER,B.TRANSDATE,B.BGR_INVENTTRANSID OPTION(FAST 19) Разница отмечена жиным шрифтом: в 2-х уровневой конфигурации добавляется лишний фильтр, который совсем даже не лишний..... Причем, если идти по циклу в дебагере, то фильтр добавляется в обеих конфигурациях. А на SQL-сервер в итоге уходят разные запросы! УЖАС! Кто-нибудь сталкивался с таким? Знает как бороться?! 
				__________________ 
		
		
		
		
	Улыбаемся и машем, парни! Улыбаемся и машем...  | 
| 
	
 | 
| 
			
			 | 
		#2 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Попробуйте почистить кэш в 3-звенке.
		 
		
		
		
		
		
		
		
	 | 
| 
	
 | 
| 
			
			 | 
		#3 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			сталкивался с подобной проблемой, правда безотносительно отчетов. 
		
		
		
		
		
		
		
	Строился Query добавлялись в него фильтры, а затем при вызове QueryRun.next() отправлялись разные фильтры взависимости от конфигурации(в двухуровневой фильтр целиком, в трехуровневой с недостающим условием). Моя проблема вылечилась, когда я стал определять объекты Query и QueryRun на одной стороне (либо оба на сервере, либо оба на клиенте). Когда проблему обнаружил, query у меня определялся с одной стороны, а вызов new QueryRun(query) на другой стороне. Может это как-то сможет Вам помочь.  | 
| 
	
 | 
|
| За это сообщение автора поблагодарили: Logger (2), jasper (1). | |
| 
			
			 | 
		#4 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Да какой там кэш  
		
		
		
		
		
		
			  Я ее тут только-только запустила, первый раз за месяц, наверное, - специально, чтобы разобраться, почему отчет не работает. А тут -такое!Спасибо за версию - но дело не в этом. 
				__________________ 
		
		
		
		
	Улыбаемся и машем, парни! Улыбаемся и машем...  | 
| 
	
 | 
| 
			
			 | 
		#5 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 Цитата: 
	
		
			Изначально опубликовано levsha  
Моя проблема вылечилась, когда я стал определять объекты Query и QueryRun на одной стороне (либо оба на сервере, либо оба на клиенте). Когда проблему обнаружил, query у меня определялся с одной стороны, а вызов new QueryRun(query) на другой стороне. Может это как-то сможет Вам помочь. Query действительно определялся на стороне клиента, а QueryRun - в серверном классе, формирующем данные для отчета. Сейчас проблема успешно излечена, спасибо огромное! Добавлю еще, что попытка вылечиться "простым" способом, сделав в серверном классе при инициализации параметров: query = new Query(_query); к успеху НЕ привела. Действенных решений 2: 1. Объявить класс, в котором делается самое первое query = new Query() серверным. 2. Перенести ту часть формирования query, в которой добавляются Range'и по "сбоящему" полю (в моем случае - по TRANSTYPE) в серверный класс, в котором делается QueryRun. 
				__________________ 
		
		
		
		
	Улыбаемся и машем, парни! Улыбаемся и машем...  | 
| 
	
 | 
| 
			
			 | 
		#6 | 
| 
			
			 Модератор 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Либо не использовать смешанные конфигурации (Очень рекомендую) 
		
		
		
		
		
		
		
	P.S. Anais, levsha! Спасибо за описание интересного бага и способа лечения. С Уважением, Георгий.  | 
| 
	
 | 
| 
			
			 | 
		#7 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 Цитата: 
	
		
			Изначально опубликовано Anais  
Перенести ту часть формирования query, в которой добавляются Range'и по "сбоящему" полю (в моем случае - по TRANSTYPE) в серверный класс, в котором делается QueryRun. Плюс к этому в продолжении темы: плохо в случае переноса QueryRun с клиента на сервер становится не только фильтрам... Сейчас наблюдал такую картину: объекты Query и QueryRun формировались оба на клиенте, а вот вызов QueryRun.next() происходил уже на сервере. Фильтры и на толстом и на тонком клиентах формировались одинаковые (трассировка запросов давала идентичные результаты), но при этом на толстом клиенте процесс отрабатывал успешно, на тонком клиенте происходило зацикливание именно в выполнении процедур на аосе (никаких запросов дополнительно к серверу БД не формировалось, но между объектами на сервере происходила передача ссылки на этот объект QueryRun). Пришлось все параметры, необходимые для формирования query, дублировать на сервере...  | 
| 
	
 | 
| 
			
			 | 
		#8 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 Цитата: 
	
		
			Изначально опубликовано George Nordic  
Либо не использовать смешанные конфигурации (Очень рекомендую) Георгий.  | 
| 
	
 | 
| 
			
			 | 
		#9 | 
| 
			
			 Модератор 
		
			
	 | 
	
	
	
		
		
		
		 
			
			На АОСе надо галку поставить - и все у Вас будет дебажиться и на сервере. Почитайте доку, а лучше - методом научного тыка - там её несложно найти. 
		
		
		
		
		
		
		
	С Уважением, Георгий  | 
| 
	
 | 
| 
			
			 | 
		#10 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 Цитата: 
	
		
			Изначально опубликовано George Nordic  
На АОСе надо галку поставить - и все у Вас будет дебажиться и на сервере.  | 
| 
	
 | 
| 
			
			 | 
		#11 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 Цитата: 
	
		
			Изначально опубликовано George Nordic  
На АОСе надо галку поставить - и все у Вас будет дебажиться и на сервере. Почитайте доку, а лучше - методом научного тыка - там её несложно найти. С Уважением, Георгий  | 
| 
	
 | 
| 
			
			 | 
		#12 | 
| 
			
			 Модератор 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Да, точно. в 2,5 её не было  
		
		
		
		
		
		
		
	![]() Сорри, если кого ввел в заблуждение. С Уважением, Георгий.  | 
| 
	
 | 
| 
			
			 | 
		#13 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 Цитата: 
	
		
			Изначально опубликовано Anais  
Многоуважаемая публика. Столкнулась со странной ситуацией: при формировании отчета в 2-х и в 3-х уровневых конфигурациях Axapta отправляет на SQL-сервер разные (!) запросы.  | 
| 
	
 |