Lo he resuelto utilizando ordwildseek():
Code: Select all
function modificacampo()
local osay,oget,oDlg,i,oboton,oboton1,oini
local cfecha,cnombre,cimporte:=0,continua:=.F.
cfecha := CTOD ("01/01/"+Right(DtoC(Date()),2))
DEFINE DIALOG oDlg RESOURCE "MODIFICACAMPO"
for i = 10 to 12
REDEFINE SAY osay ID i OF oDlg COLOR CLR_GREEN
next i
REDEFINE Dtpicker oini VAR cfecha ID 104 OF oDlg
REDEFINE GET oGet VAR cnombre ID 105 OF oDlg Update
REDEFINE GET oGet VAR cimporte ID 106 OF oDlg Update picture "@Z 9,999.99"
REDEFINE BUTTON oboton ID 550 OF oDlg PROMPT "Aceptar" ;
ACTION (grabalo(oDlg,cfecha,cnombre,cimporte),oboton:oJump:=oini,oini:setfocus())
REDEFINE BUTTON oboton1 ID 551 OF oDlg PROMPT "Cancelar" ;
ACTION (oDlg:End() ) CANCEL
ACTIVATE DIALOG oDlg CENTERED
return nil
//------------------------------
static function grabalo(oDlg,cfecha,cnombre,cimporte)
local numero:=1
dbUseArea(.T.,,Publicas:cUnidad+Publicas:cSubd+"\ALBARAN",,.T.)
Albaran->(OrdSetFocus("spro"))
Albaran->( dbGotop() )
FastFilter( "*"+ Upper(alltrim(cnombre) ), 16 ) //El 16 para indicar el numero del Indice
albaran->(dbgotop())
do while !Albaran->(Eof())
if Albaran->Fecha >= cfecha
numero+=1
While .not. Albaran->(Rlock()); end
Albaran->Baseimpo:=cimporte
Albaran->( dbUnlock() )
endif
Albaran->( dbskip() )
enddo
Albaran->(Dbclosearea())
msginfo("_ los datos del campo ","Cambio Realizado")
return nil
//****************************************************
Function FastFilter( cCad, nOrder )
Local nIndice := OrdNumber()
Set order to nOrder
INDEX ON &(IndexKey()) TAG _TEMP_ TO tHarbourt CUSTOM ADDITIVE MEMORY
Set order to nOrder
dbGotop()
Do While OrdWildSeek( cCad, .T. )
OrdKeyAdd( "_TEMP_" )
Enddo
OrdSetFocus( "_TEMP_" )
Return nIndice
Un saludo