Enviado por difenbachia el día 11 de julio de 2008
Hola amigos, tengo una rutina en una aplicacion que es la que tiene que validar los datos ingresados. Estos son definidos por NUMEROBO
y los campos son lot,num1,num2,num3
todo es texto y los num son de dos cifras: 01 02 03 87 54 etc...
el campo lot son letras: pueden ser desde 1 hasta 9 letras
Tengo ademas dos bases dbf: GUARDABO Y FADABO
CADA UNA CON CAMPOS lotes,num1,num2,num3
LA RUTINA SERIA, UNA VEZ INGRESADOS LOS DATOS LA SIGUIENTE
es para controlar repeticiones teniendo en cuenta que en numeros por ejemplo: num1=01 num2=02 num3=01
si ingreso num1=02 num2=01 num3=01 eso es repetido...
primero reviso en GUARDABO y luego en FADABO
Comparo el campo lot con el mismo campo en la primer tabla, recorro los registros hasta que encuentro una repeticion es decir, si ingrese en NUMEROBO.lot AB y encuentro un registro que contiene alguna de esas letras continuo, de lo contrario busco en el siguiente registro.
Si continuo reviso los numeros, es decir num1 num2 y num3
Si hay repeticion salgo e informo que no se puede ingresar.
si no hay repeticion continuo con la segunda tabla FADABO y hago lo mismo, si hay repeticion informo y si no entonces si dejo ingresar el dato.
Ya puedo cargar e ingresar el dato, pero en la rutina de control de repeticiones me sale error. Yo hice esto, a ver si me pueden decir cual es el problema que tiene mi rutina o como hacerla mejor.
GRACIAS AL QUE PUEDA AYUDARME SE LO AGRADECERE MUCHO!!!!
PROCEDURE verirepe1
SELECT numerobo
IF RECCOUNT() > 0
GOTO TOP
proceso = 0
ON ERROR GOTO BOTTOM
SELECT 9
USE GUARDABO
GOTO TOP
IF RECCOUNT('GUARDABO') = 0
DO verirepe2
ENDIF
IF proceso = 1
RETURN
ENDIF
DO WHILE .NOT. EOF()
igual = 0
IF punto <> '1'
SKIP
LOOP
ENDIF
*IF LEN(ALLTRIM(lotes))<> LEN(ALLTRIM(lote))
*SKIP
*ENDIF
FOR L1 = 1 TO LEN(ALLTRIM(lote))
FOR L2 = 1 TO LEN(ALLTRIM(lotes))
IF SUBSTR(lote, L1, 1) = SUBSTR(loterias, L2, 1)
igual = igual + 1
ELSE
ENDIF
ENDFOR
ENDFOR
ENDIF
IF igual > 0
numin = 0
nba1 = GUARDABO.num1
nba2 = GUARDABO.num2
nba3 = GUARDABO.num3
IF numerobo.num1 = nba1
nba1 = '**'
numin = numin + 1
ENDIF
IF numerobo.num1 = nba2 .AND. numin = 0
nba2 = '**'
numin = numin + 1
ENDIF
IF numerobo.num1 = nba3 .AND. numin = 0
nba3 = '**'
numin = numin + 1
ENDIF
IF numin < 1
SKIP
LOOP
ENDIF
IF numerobo.num2 = nba1 .AND. numin = 1
nba1 = '**'
numin = numin + 1
ENDIF
IF numerobo.num2 = nba2 .AND. numin = 1
nba2 = '**'
numin = numin + 1
ENDIF
IF numerobo.num2 = nba3 .AND. numin = 1
nba3 = '**'
numin = numin + 1
ENDIF
IF numin < 2
SKIP
ENDIF
IF numerobo.num3 = nba1 .AND. numin = 2
nba1 = '**'
numin = numin + 1
ENDIF
IF numerobo.num3 = nba2 .AND. numin = 2
nba2 = '**'
numin = numin + 1
ENDIF
IF numerobo.num3 = nba3 .AND. numin = 2
nba3 = '**'
numin = numin + 1
ENDIF
IF numin = 3
WAIT WINDOW ' NO PUEDE CARGAR REPETIDAS.'
SELECT 9
USE
RETURN TO cargabo1
ENDIF
ELSE
SKIP
ENDIF
ENDDO
DO verirepe2
RETURN
*
PROCEDURE verirepe2
SELECT 9
USE
ON ERROR GOTO BOTTOM
SELECT 3
USE 'FADABO'
GOTO TOP
proceso = 1
IF RECCOUNT('FADABO') = 0
SELECT 3
USE
RETURN
ENDIF
DO WHILE .NOT. EOF()
igual = 0
IF punto <> '1'
SKIP
ENDIF
*IF LEN(ALLTRIM(lotes))<> LEN(ALLTRIM(lote))
*SKIP
*ENDIF
FOR L1 = 1 TO LEN(ALLTRIM(lote))
FOR L2 = 1 TO LEN(ALLTRIM(lotes))
IF SUBSTR(lote, L1, 1) = SUBSTR(lotes, L2, 1)
igual = igual + 1
ELSE
ENDIF
ENDFOR
ENDFOR
ENDIF
IF igual > 0
numin = 0
nba1 = FADABO.num1
nba2 = FADABO.num2
nba3 = FADABO.num3
IF numerobo.num1 = nba1
nba1 = '**'
numin = numin + 1
ENDIF
IF numerobo.num1 = nba2 .AND. numin = 0
nba2 = '**'
numin = numin + 1
ENDIF
IF numerobo.num1 = nba3 .AND. numin = 0
nba3 = '**'
numin = numin + 1
ENDIF
IF numin < 1
SKIP
ENDIF
IF numerobo.num2 = nba1 .AND. numin = 1
nba1 = '**'
numin = numin + 1
ENDIF
IF numerobo.num2 = nba2 .AND. numin = 1
nba2 = '**'
numin = numin + 1
ENDIF
IF numerobo.num2 = nba3 .AND. numin = 1
nba3 = '**'
numin = numin + 1
ENDIF
IF numin < 2
SKIP
ENDIF
IF numerobo.num3 = nba1 .AND. numin = 2
nba1 = '**'
numin = numin + 1
ENDIF
IF numerobo.num3 = nba2 .AND. numin = 2
nba2 = '**'
numin = numin + 1
ENDIF
IF numerobo.num3 = nba3 .AND. numin = 2
nba3 = '**'
numin = numin + 1
ENDIF
IF numin = 3
WAIT WINDOW ' NO PUEDE CARGAR REPETIDAS.'
SELECT 3
USE
RETURN TO cargabo1
ENDIF
ELSE
SKIP
ENDIF
ENDDO
SELECT 3
USE
RETURN
*