Error de Busqueda --- Solucionado

Post Reply
Garbi
Posts: 344
Joined: Wed Nov 02, 2005 3:28 pm

Error de Busqueda --- Solucionado

Post by Garbi »

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

          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
User avatar
cmsoft
Posts: 1297
Joined: Wed Nov 16, 2005 9:14 pm
Location: Mercedes - Bs As. Argentina
Been thanked: 2 times

Re: Error de Busqueda

Post by cmsoft »

Esto podría ser una idea.
Suponiendo que tienes la tabla ordenada de forma ascendente por el numero de etiqueta

Code: Select all | Expand

#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
 
Garbi
Posts: 344
Joined: Wed Nov 02, 2005 3:28 pm

Re: Error de Busqueda

Post by Garbi »

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
User avatar
cmsoft
Posts: 1297
Joined: Wed Nov 16, 2005 9:14 pm
Location: Mercedes - Bs As. Argentina
Been thanked: 2 times

Re: Error de Busqueda

Post by cmsoft »

Le pusiste el set softseek on ?
Porque a mi me devuelve .t.
Garbi
Posts: 344
Joined: Wed Nov 02, 2005 3:28 pm

Re: Error de Busqueda

Post by Garbi »

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
User avatar
cmsoft
Posts: 1297
Joined: Wed Nov 16, 2005 9:14 pm
Location: Mercedes - Bs As. Argentina
Been thanked: 2 times

Re: Error de Busqueda --- Solucionado

Post by cmsoft »

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
Garbi
Posts: 344
Joined: Wed Nov 02, 2005 3:28 pm

Re: Error de Busqueda --- Solucionado

Post by Garbi »

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
User avatar
cmsoft
Posts: 1297
Joined: Wed Nov 16, 2005 9:14 pm
Location: Mercedes - Bs As. Argentina
Been thanked: 2 times

Re: Error de Busqueda --- Solucionado

Post by cmsoft »

Me alegro mucho que lo hayas solucionado!
Garbi
Posts: 344
Joined: Wed Nov 02, 2005 3:28 pm

Re: Error de Busqueda --- Solucionado

Post by Garbi »

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
User avatar
sysctrl2
Posts: 1048
Joined: Mon Feb 05, 2007 7:15 pm
Has thanked: 6 times
Contact:

Re: Error de Busqueda --- Solucionado

Post by sysctrl2 »

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

' Sin +- FWH es mejor "
Post Reply