| 
			
			 | 
		#1 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
			
			
			Range в запросе
			 
			
			Будьте добрые, поправьте мне пожалуйста этот фрагмент 
		
		
		
		
		
		
		
	X++: queryBuildRangeTime = queryBuildDataSource.findRange(fieldnum(ReqPO,ReqDateDlv)); if (! queryBuildRangeTime) queryBuildRangeTime = queryBuildDataSource.addRange(fieldnum(ReqPO,ReqDateDlv)); queryBuildRangeTime.value(strfmt('(%2 <= %1) && (%2 >= %3)',toDateReq,fieldstr(ReqPO,ReqDateDlv),fromDateReq)); Ошибка расширенного диапазона запроса: Ожидается правая круглая скобка рядом с 23.  | 
| 
	
 | 
| 
			
			 | 
		#2 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Заключите все условие еще раз в скобки ((%2 <= %1) && (%2 >= %3))
		 
		
		
		
		
		
		
		
	 | 
| 
	
 | 
| 
			
			 | 
		#3 | 
| 
			
			 Программатор 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Вот так должно работать... 
		
		
		
		
		
		
		
	X++: queryBuildRangeTime.value(strfmt('(("%2" <= "%1") && ("%2" >= "%3"))',toDateReq,fieldstr(ReqPO,ReqDateDlv),fromDateReq));  | 
| 
	
 | 
| 
			
			 | 
		#4 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Лучше всего, мне кажется, использовать функцию date2strXpp для преобразования даты в нужный формат.
		 
		
		
		
		
		
		
			
		
		
		
		
	 | 
| 
	
 | 
|
| За это сообщение автора поблагодарили: longson (1). | |
| 
			
			 | 
		#5 | 
| 
			
			 Программатор 
		
			
	 | 
	
	|
| 
	
 | 
| 
			
			 | 
		#6 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Спасибо  
		
		
		
		
		
		
		
	  . Попробовал оба вариант.Цитата: 
	
Цитата: 
	
 
		 | 
| 
	
 | 
| 
			
			 | 
		#7 | 
| 
			
			 Участник 
		
			
	 | 
	
	|
| 
	
 | 
| 
			
			 | 
		#8 | 
| 
			
			 Программатор 
		
			
	 | 
	
	
	
		
		
		
		 X++: queryBuildRangeTime = queryBuildDataSource.findRange(fieldnum(ReqPO,RecId)); if (! queryBuildRangeTime) queryBuildRangeTime = queryBuildDataSource.addRange(fieldnum(ReqPO,RecId)); queryBuildRangeTime.value(strfmt('(("%2" <= "%1") && ("%2" >= "%3"))',toDateReq,fieldstr(ReqPO,ReqDateDlv),fromDateReq)); ![]() Строку нада по моему накладывать не на поле а на RecId Последний раз редактировалось Sada; 12.04.2007 в 10:47.  | 
| 
	
 | 
| 
			
			 | 
		#9 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 Цитата: 
	
		
			Сообщение от Sada
			 
 
			X++: queryBuildRangeTime = queryBuildDataSource.findRange(fieldnum(ReqPO,RecId)); if (! queryBuildRangeTime) queryBuildRangeTime = queryBuildDataSource.addRange(fieldnum(ReqPO,RecId)); queryBuildRangeTime.value(strfmt('(("%2" <= "%1") && ("%2" >= "%3"))',toDateReq,fieldstr(ReqPO,ReqDateDlv),fromDateReq)); ![]() Строку нада по моему накладывать не на поле а на RecId А "%1" в дальнейшем тоже выдаст ошибку о некорректном формате даты, afair.  | 
| 
	
 | 
| 
			
			 | 
		#10 | 
| 
			
			 ---------------- 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Господа, скажите, пожалуйста, в чем тайный смысл написания комбинации 
		
		
		
		
		
		
		
		
			"%1",fieldstr(ReqPO,ReqDateDlv) вместо простого "ReqDateDlv"? Последний раз редактировалось Wamr; 12.04.2007 в 10:57.  | 
| 
	
 | 
| 
			
			 | 
		#11 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 Цитата: 
	
![]() Нууу, хотя бы в том, что на этапе компиляции выполнится проверка существования поля ReqDateDlv  
		 | 
| 
	
 | 
| 
			
			 | 
		#12 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			А если в DataSource две таблицы и имеются поля одинакового имени, которые нужно включить в Range ?
		 
		
		
		
		
		
		
		
	 | 
| 
	
 | 
| 
			
			 | 
		#13 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 Цитата: 
	
http://www.axaptapedia.com/Expressions_in_query_ranges  | 
| 
	
 | 
| 
			
			 | 
		#14 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			А не проще ли использовать 
		
		
		
		
		
		
		
		
			X++: ... queryBuildRangeTime.value(SysQuery::range(fromDateReq, toDateReq)); Последний раз редактировалось johny77; 12.04.2007 в 11:49.  | 
| 
	
 | 
| 
			
			 | 
		#15 | 
| 
			
			 Участник 
		
			
	 | 
	
	|
| 
	
 | 
|
| За это сообщение автора поблагодарили: oip (2). | |
| 
			
			 | 
		#16 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Так а если в Range я хочу написать функцию, это возможно?  
		
		
		
		
		
		
		
	Например: strfind(InventTable.ItemGroupId,"J",1)>0  | 
| 
	
 | 
| 
			
			 | 
		#17 | 
| 
			
			 Дмитрий Ерин 
		
			
	 | 
	
	
	
		
		
		
		 
			
			нет
		 
		
		
		
		
		
		
			
				__________________ 
		
		
		
		
	 
			 | 
| 
	
 | 
| 
			
			 | 
		#18 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 Цитата: 
	
X++: ItemGroupId like "*J*"  | 
| 
	
 | 
| 
			
			 | 
		#19 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Спасибо. Но решил обойти следующем образом 
		
		
		
		
		
		
		
	X++: queryBuildRangeType = queryBuildDataSource.findRange(fieldnum(InventTable,ItemGroupId)); if (!queryBuildRangeType) queryBuildRangeType = queryBuildDataSource.addRange(fieldnum(InventTable,ItemGroupId)); switch(planType) { case PlanType_REP::Production : queryBuildRangeType.value(strfmt( '((%10 == %1) || (%10 == %2) || (%10 == %3) || (%10 == %4) || (%10 == %5) || (%10 == %6) || (%10 == %7) || (%10 == %8) || (%10 == %9))', queryValue("БПА_J"),queryValue("БПО_J"),queryValue("БПС_J"),queryValue("БСБ_J"),queryValue("БСБП_J"),queryValue("БСМ_J"),queryValue("БСМат_J"),queryValue("БСО_J"),queryValue("БСП_J"),fieldstr(InventTable,ItemGroupId))); break;  | 
| 
	
 | 
| 
			
			 | 
		#20 | 
| 
			
			 Программатор 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Боже мой... зашивать руские букавы в код по-моему не прально в корне...
		 
		
		
		
		
		
		
		
	 | 
| 
	
 |