View previous topic  :: View next topic    
	 
	
	
		Author 
		Message 
	 
	
		ewgen  Joined: 23 Nov 2002 Posts: 339 Location: Евгений Occupation: (инженер программист) Interests: Надым 
		
			
				Posted: 14 Sep 2007 15:05     Post subject: Изменились параметры setscope() в БЭСТ5?  
				     
			 
			
				 
			 
			
				БЭСТ 5/3.3/32
 
В файле bases_00.dbf для файла main.dbf существует индекс:
 
  	  Code:  	 		  Tag_nomer: 02
 
Tag_name:  TAG_TASK
 
Index:         TASK+DTOS(DATAOPER)+UPPER(NNDOC) 	 
 
 
NETUSE("_main",LoadPath()+"\main.dbf",,.F.)
 
_main->(ORDSETFOCUS("TAG_TASK"))  //это работатет
 
...
 
Пытаюсь поставить скоп по модулю зарплата, по определенному месяцу.
 
первый вариант:
 
  	  Code:  	 		     _main->(setscope("TAG_TASK",
 
                 "14"+dtos(ctod("01/"+b+"/"+g)),
 
                 "14"+dtos(EOM(ctod("01/"+b+"/"+g))))) //не работает. 	 
второй вариант (работает):
 
  	  Code:  	 		    _main->(setscope("02",
 
                "14"+dtos(ctod("01/"+b+"/"+g)),
 
                "14"+dtos(EOM(ctod("01/"+b+"/"+g))))) //работает 	 
 
 
В БЭСТ 4+/12/35 работал первый вариан  
			 
		
 
	 
	
		Back to top  
		 
	 
	
		 
	 
	
		nordk  Joined: 27 Jun 2005 Posts: 1000 Location: Горбунов Константин Occupation: БЭСТ-Партнер Interests: СПб 
		
			
				Posted: 14 Sep 2007 15:24     Post subject: Re: Изменились параметры setscope() в БЭСТ5?  
				     
			 
			
				 
			 
			
				 	  ewgen wrote:  	 		  :
 
 	  Code:  	 		     _main->(setscope("TAG_TASK",
 
                 "14"+dtos(ctod("01/"+b+"/"+g)),
 
                 "14"+dtos(EOM(ctod("01/"+b+"/"+g))))) //не работает. 	 
второй вариант (работает):
 
  	  Code:  	 		    _main->(setscope("02",
 
                "14"+dtos(ctod("01/"+b+"/"+g)),
 
                "14"+dtos(EOM(ctod("01/"+b+"/"+g))))) //работает 	 
 
 
В БЭСТ 4+/12/35 работал первый вариант.  	 
 
 
Ни первый ни второй вариант ни в Б5 ни в Б4 не правильно.
 
(Не соответствует документации)
 
 
  	  Quote:  	 		  SetScope(cScope,xScope,xScope1,aOrder) – задание ключевого интервального фильтра 
 
 
 · cScope  выражение для ключевой фильтрации в виде символьной строки для вычисления (путем макроподстановки) значения ключа при фильтрации.   
 
  	 
 
 
 
Первый параметр SCOPE() не имя индекса а старшая часть индексного ключа должны быть.
 
У Вас индексный ключ
 
  	  Code:  	 		   TASK+DTOS(DATAOPER)+UPPER(NNDOC) 	 
 
Вот и пишите из него
 
  	  Code:  	 		  _main->(setscope("TASK",.......) 	 
 
			 
		
 
	 
	
		Back to top  
		 
	 
	
		 
	 
	
		ewgen  Joined: 23 Nov 2002 Posts: 339 Location: Евгений Occupation: (инженер программист) Interests: Надым 
		
			
				Posted: 15 Sep 2007 08:13     Post subject:   
				     
			 
			
				 
			 
			
				Спасибо! Работает.
 
 
Странно...
 
Я уже больше года пользуюсь именем индекса при установке скопа.
 
И все работало    
 
 
  	  Code:  	 		  function main()
 
private a,b,sum
 
private aSet,aSetKey
 
 
dbpush()
 
aSet:=SaveSet()
 
aSetKey:=SaveSetKey()
 
 
NETUSE("_main",LoadPath()+"\main.dbf",,.F.)
 
_main->(ORDSETFOCUS("summa_data"))
 
 
a:=str(1000,19,3)
 
b:=str(2000,19,3)
 
sum:=0
 
 
 _main->(SETSCOPE())
 
 _main->(SETSCOPE("summa_data",a,b))
 
 _main->(DBGOTOP())
 
 
while (_main->(!EOF()))
 
    sum:=sum+_main->summa
 
 _main->(DBSKIP())
 
enddo
 
 
sayandwait("Сумма по проводкам от 1000 до 2000 составляет_"+str(sum))
 
 
_main->(DBCLOSEAREA())
 
RestSetKey(aSetKey)
 
RestSet(aSet)
 
dbpop()
 
return nil 	 
 
 
Даже когда создавал собственные индексы, в первый параметр скопа писал их имя.
 
 
  	  Code:  	 		  NETUSE("_iznos",LoadPath()+"\oc\iznos.DBF",,.F.)
 
 _iznos->(ordcreate(LoadPath()+"\oc\_iznos","uoc",UPPER("unioc+dtos(period)")))
 
 _iznos->(dbsetindex(LoadPath()+"\oc\_iznos.cdx"))
 
 _iznos->(ORDSETFOCUS("uoc"))
 
 _iznos->(setscope(UPPER("uoc"),_coc->unioc+"20010101",_coc->unioc+"20011231"))
 
  _iznos->(dbgotop())
 
  s:=0
 
  while _iznos->(!eof())
 
   s:=s+_iznos->summa
 
   _iznos->(dbskip())
 
  enddo 	 
 
			 
		
 
	 
	
		Back to top  
		 
	 
	
		 
	 
	
		nordk  Joined: 27 Jun 2005 Posts: 1000 Location: Горбунов Константин Occupation: БЭСТ-Партнер Interests: СПб 
		
			
				Posted: 17 Sep 2007 12:00     Post subject:   
				     
			 
			
				 
			 
			
				Ну что сказать....все ли корректно работало не знаю.
 
Возможно в Б4+ была защита от тех, кто имя индекса вписать
 
вдумает (не анализировал) или просто совпадения.
 
Одно могу сказать точно:
 
ЧИТАЙТЕ ВНИМАТЕЛЬНО ДОКУМЕНТАЦИЮ !!!    
 
Если чего нет или непонятно - всегда можно спросить.  
			 
		
 
	 
	
		Back to top  
		 
	 
	
		 
	 
	
		 
	 
  
	 
	    
	   
	
You cannot  post new topics in this forum You cannot  reply to topics in this forum You cannot  edit your posts in this forum You cannot  delete your posts in this forum You cannot  vote in polls in this forum  
   
 
Powered by phpBB  © phpBB Group