Error de Busqueda --- Solucionado

Error de Busqueda --- Solucionado

Postby Garbi » Thu Oct 26, 2023 11:34 am

Hola, os cuento un poco, existe un contador de etiqueta que se debe ir incrementando conforme el año que se indique al crear la el registro.

Por ejemplo si ya fuera enero de 2024 y fuera la primera me crearía la etiqueta 2024-1, la siguiente la 2024-2 y asi sucesivamente, pero si pongo una en el 2023 por la razón que fuera deberia ser la ultima etiqueta +1
Estoy intentando mejorar el codigo pero el problema que tengo es que el if siempre me inidca que falso aunque la consulta previa me diga verdadero.
El indice esta creado así :

INDEX ON Transform(year(fecha),"9999")+STRTRAN(Transform(etiqueta,"9999999999")," ","0") TAG "ETIQUETA" DESCENDING


Code: Select all  Expand view  RUN

          regno:=recno()
         (ccorte)->(DbSetOrder(5))
         (ccorte)->(Dbgotop())
         dbseek(transform(year(Var(4)),"9999"))
*         if year(Var(4)) != year((ccorte)->fecha) -----> Linea anterior de control
        msgalert(found())  ----------> Aqui me indica que .T.
        msgalert(recno())  ----------> Me indica el registro correcto, con el numero de etiqueta correcto, el 2, el 14 o el que corresponda.
        msgalert((ccorte)->etiqueta)   ----> Me indica el numero de etiqueta correcto al que hay que sumarle 1
         if !found()   ------->SIEMPRE ME ENTRA EN ESTA OPCION AUNQUE LA CONSULTA ANTERIOR HAYA SIDO .T., POR LAS PRUEBAS QUE HECHO ENTRA SEA  .F. o .T. la consulta del msgalert(found()) , lo he cambiado por (ccorte)->(found()) y sigue con el mismo error
             msgalert("NO")
             vnumetiqueta:= 1
          else
             msgalert("SI")
             vnumetiqueta:= (ccorte)->etiqueta+1
          endif
         (ccorte)->(DbSetOrder(1))
         (ccorte)->(Dbgotop())
         (ccorte)->(Dbgoto(regno))


Y la verdad ya no se puede estar pasando. Estoy aqui parado. Puedo activar la linea que esta desactivada y no buscar, pero no podría hacer etiquetas de un año anterior.

¿Alguna idea? Ya es más por orgullo que por otra cosa
Last edited by Garbi on Thu Oct 26, 2023 3:48 pm, edited 1 time in total.
Saludos,
Regards,

Jose Luis Alepuz
joseluis@mancomputer.com
www.mancomputer.com
Garbi
 
Posts: 341
Joined: Wed Nov 02, 2005 3:28 pm

Re: Error de Busqueda

Postby cmsoft » Thu Oct 26, 2023 2:02 pm

Esto podría ser una idea.
Suponiendo que tienes la tabla ordenada de forma ascendente por el numero de etiqueta
Code: Select all  Expand view  RUN

#include "FiveWin.ch"
Function Main()
Local nBusqueda := 0, oDlg1, oBrw, oBot1, oGet
set softseek on // Esto es importante, que si no encuentra exactamente igual, que se quede con el mas parecido
use etique index etique shared new alias "etiq"
/*La estructura que cree para  probar solo tiene un campo ETIQUETA  de tipo caracter con 7 lugares y lo que guarde tiene el formato '2022-01'*/
DEFINE DIALOG oDlg1 TITLE "Envio de whatsapp" SIZE 200,100 PIXEL TRUEPIXEL RESIZABLE  
@ 05,05 SAY "Año a buscar" GET oGet VAR nBusqueda PICTURE "9999" OF oDlg1 PIXEL RIGHT
@ 35,15 BUTTON oBot1 PROMPT "&Buscar Proxima" OF oDlg1 SIZE 90,25 ACTION Buscar(nBusqueda) PIXEL  
ACTIVATE DIALOG oDlg1 CENTERED
close etiq
Return nil

Static Function Buscar(n)
Local nProximo := 1
etiq->(dbgotop())
if str(n,4) < left(etiq->etiqueta,4) // Si lo que busco es menor que el menor año
   MsgInfo("El proximo numero es "+Str(nProximo),"Atencion")
   Return nProximo       
endif

etiq->(dbseek( STR(n+1,4))) //Busco el proximo año al que quiero averiguar cual nro le corresponde
if etiq->(found()) //Si existe un año superior
   etiq->(dbskip(-1)) //Voy al anterior
   nProximo := VAL(RIGHT(etiq->etiqueta,2))+1 // Obtengo el numero del ultimo y le sumo 1
   else  // Si el año superior todavia no existe
   etiq->(dbseek( STR(n,4))) // , me fijo si ese año existe
   if etiq->(found()) // Si existe
      etiq->(dbgobottom()) // Voy al ultimo registro
      nProximo := VAL(RIGHT(etiq->etiqueta,2))+1 // Obtengo el siguiente
   endif  
endif      
MsgInfo("El proximo numero es "+Str(nProximo),"Atencion")
Return nProximo
 
User avatar
cmsoft
 
Posts: 1291
Joined: Wed Nov 16, 2005 9:14 pm
Location: Mercedes - Bs As. Argentina

Re: Error de Busqueda

Postby Garbi » Thu Oct 26, 2023 2:11 pm

Hola gracias por tu ejemplo. si que sitúa en en registro adecuado, por que con el el msgalert() me indica el registro y es el correcto.
El problema esta en que usando tu ejemplo:

etiq->(dbseek( STR(n+1,4))) //Busco el proximo año al que quiero averiguar cual nro le corresponde
if etiq->(found()) -----> SIEMPRE ME DEVUELVE .F.

Aunque en el msgalert(found()) de antes me indica .T.
Saludos,
Regards,

Jose Luis Alepuz
joseluis@mancomputer.com
www.mancomputer.com
Garbi
 
Posts: 341
Joined: Wed Nov 02, 2005 3:28 pm

Re: Error de Busqueda

Postby cmsoft » Thu Oct 26, 2023 2:22 pm

Le pusiste el set softseek on ?
Porque a mi me devuelve .t.
User avatar
cmsoft
 
Posts: 1291
Joined: Wed Nov 16, 2005 9:14 pm
Location: Mercedes - Bs As. Argentina

Re: Error de Busqueda

Postby Garbi » Thu Oct 26, 2023 2:34 pm

Si esta puesto,

El caso es que si pongo primero msgalert(found()) me devuelve .T.

Pero despues en if found() entra como que el resultado es .f.

Por eso digo que es algo raro y no se porque puede ser.
Saludos,
Regards,

Jose Luis Alepuz
joseluis@mancomputer.com
www.mancomputer.com
Garbi
 
Posts: 341
Joined: Wed Nov 02, 2005 3:28 pm

Re: Error de Busqueda --- Solucionado

Postby cmsoft » Thu Oct 26, 2023 3:50 pm

Si quieres pasame un mail y te comparto la dbf y el indice. También si quieres podemos hacer al revez y pasarme vos tu dbf e indice para probar
User avatar
cmsoft
 
Posts: 1291
Joined: Wed Nov 16, 2005 9:14 pm
Location: Mercedes - Bs As. Argentina

Re: Error de Busqueda --- Solucionado

Postby Garbi » Thu Oct 26, 2023 3:52 pm

A ver lo que he hecho para resolverlo, que no se porque ya funciona pero es lo que hecho y ha funcionado,

He copiado : dbseek(transform(year(Var(4)),"9999"))

He borrado todas las líneas que habia puesto para la comprobación de porque no me funcionaba, la he vuelto a poner, compilar y ahora funciona como debería haber funcionado desde el primer momento.

Ya sabemos que a veces no hay lógica, pero ya me funciona correctamente. :D :D
Saludos,
Regards,

Jose Luis Alepuz
joseluis@mancomputer.com
www.mancomputer.com
Garbi
 
Posts: 341
Joined: Wed Nov 02, 2005 3:28 pm

Re: Error de Busqueda --- Solucionado

Postby cmsoft » Thu Oct 26, 2023 3:59 pm

Me alegro mucho que lo hayas solucionado!
User avatar
cmsoft
 
Posts: 1291
Joined: Wed Nov 16, 2005 9:14 pm
Location: Mercedes - Bs As. Argentina

Re: Error de Busqueda --- Solucionado

Postby Garbi » Thu Oct 26, 2023 4:04 pm

Muchas gracias por tu ayuda.

No se que ha podido ser, pero bueno borrar líneas y copiar el comando que debía ser y comprobado por distintos años y todo perfecto.

De nuevo muchas gracias por tu interés en ayudarme.
Saludos,
Regards,

Jose Luis Alepuz
joseluis@mancomputer.com
www.mancomputer.com
Garbi
 
Posts: 341
Joined: Wed Nov 02, 2005 3:28 pm

Re: Error de Busqueda --- Solucionado

Postby sysctrl2 » Thu Oct 26, 2023 9:07 pm

siempre el error lo tenemos nosotros y no el código :D
Cesar Cortes Cruz
SysCtrl Software
Mexico

' Sin +- FWH es mejor "
User avatar
sysctrl2
 
Posts: 1022
Joined: Mon Feb 05, 2007 7:15 pm


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: Google [Bot] and 39 guests