Condición

Hola experto necesito revisar en toda mi tabla el código del cliente, cuando lo encuentre, en la condición del la primera coincidencia lo reemplazare con "N" y el resto con "C", pero no esta resultandome con esta linea de códigos que tengo... A todos le pone "C"
select tabla1
scan
set order to codigo
seek codigo
if found()
replace all condicion with "N"
else
replace all condicion with "C"
Endif
Endscan

1 Respuesta

Respuesta
1
Bueno revisando tu código te digo que es una ensalada de todo un poco. Pero creo que te entendí.
Vos quieres que en una lista de clientes ordenados por código, ¿qué en el primer registro se ponga "N" en condición y en los siguientes registro del mismo cliente se ponga "C"?
Bueno, si es así, sería algo como esto:
select tabla1
set order to codigo
replace condicion with "C" for codigo=mCodigo
if seek(mCodigo)
      replace condicion with "N"
Endif
El scan en tu código no va y por otro lado, cuando buscas, tienes que buscar un dato distinto a "codigo" porque código se llama el campo y si el lenguaje no puede diferenciar entre una variable llamada "codigo" o el campo de la tabla actual llamado igual, siempre va a elegir el campo de la tabla.
Por eso, yo uso m.código o mCodigo. Si es una variable que viene de un scatter por ejemplo, para referenciarla usa m.código siempre (con m.)
Espero haya entendido tu pregunta y mi respuesta haya sido de utilidad. Un abrazo.
Endif
Hola gracias por responder es exactamente como usted entendió pero el problema que a todas las condiciones sigue colocando "C" por ejemplo tengo un cliente 12345 que ingreso 10 veces en el año su primer ingreso debería de capturarlo con "N" y los otros 9 con "C"
Te explico paso a paso el código para que lo veas y lo adaptes si es necesario:
* Aca nos aseguramos que mCodigo sea 12345
mCodigo=12345
select tabla1
set order to codigo
replace condicion with "C" for codigo=mCodigo
* Hasta aquí le puso a los 10 registro "C" en condicion
if seek(mCodigo)              && Busca el primer registro donde aparece mCodigo (12345)
      replace condicion with "N" && Lo reemplaza por "N"
Endif
Fíjate si el indice esta bien y lo que esté pasando no sea que no encuentra el registro. Podrías poner así en el código:
if seek(mCodigo)
     replace condicion with "N"
     wait "reemplazo la condicion por N" window
else
     wait "no encontró el codigo" window
endif
Así podes ver si lo que pasa es que no lo encuentra.
Gracias probé y esta bien si lo encuentra y también lo cambia, te comento que código viene hacer el código del cliente es el que busco para colocar la condiciones, pero mCodigo como debería de usarlo no entendí bien, ademas mencionas que codigo=mCodigo y antes del selec tabla1 coloque mCodigo = código pero no lo encuentra esta bien de esta manera.
selec tabla1
 set order to codigo
 if seek(codigo)
     replace condicion with "N" for codigo="205986"
      wait "reemplazo la condicion por N" window
 else
      wait "no encontró el codigo" window
 endif
No, yo no digo que mCodigo=código.. sino justamente lo contrario
Si yo busco código adentro del seek siempre lo va a encontrar porque estoy haciendo referencia al campo de la tabla y no a la variable de memoria.
Por eso, el valor que quiero buscar, lo pongo primero en una variable y luego trabajo con esa variable.
Bueno. Me alegro que funcione.
Un abrazo
espere porfa probe si el indice estaba bien y si funciona, pero cuando corro estas lineas solo sigue colocando "C" a todos los registros
select tabla1
set order to codigo
replace condicion with "C" for codigo=codigo 
if seek(codigo)
      replace condicion with "N"  
        wait "reemplazo la condicion por N" window
 else
      wait "no encontró el codigo" window
endif
es que no va codigo=codigo. Por favor, hacelo como te lo pase yo, sin ninguna modificación
Es for codigo=mCodigo

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas