FoxPro/Visual FoxPro - Ayuda con DO WHILE

 
Vista:

Ayuda con DO WHILE

Publicado por wily001 (4 intervenciones) el 07/11/2008 12:03:48
Lo que quiero hacer es; por cada año insertar 6 tributos, la cabecera graba sin problemas, pero solo me genera el primer tributo para el año.. en algun lugar esta mal el DO WHILE

IF vipadimento=0
WAIT windows 'Cuenta Catastral no puede ser liquidada. Faltan parametros'
thisform.Release()
RETURN
endif
**generador de id liquidaciones
=SQLEXEC(sgim, 'SELECT gen_id(liquidacion,0)+1 as idmax from rdb$database','mayor')
vNUMERO_LIQ = VAL(mayor.idmax)

vIDESTADO_LIQ = 1
vFECHA_LIQ = DATE()
vFECHA_VENCE_LIQ = DATE()

***Liquidacion
**selecciona tributos
=SQLEXEC(sgim,'SELECT IDTRIBUTO FROM TRIBUTO_S','tributo')
GO top
****** INSERCION DE LIQ
=SQLEXEC(sgim,"EXECUTE PROCEDURE LIQ_I(?vNUMERO_LIQ,?vFICHA_INM,?vIDESTADO_LIQ,?vFECHA_LIQ,?vFECHA_VENCE_LIQ)")
=SQLCOMMIT(sgim)
*!* ***select de cabecera
*!* =SQLEXEC(sgim,'SELECT * FROM LIQ_S','liquidacion')
*!* =SQLCOMMIT(sgim)

*!* DO WHILE .T.
do while vano_desde != vano_hasta
*!* APPEND
vano_desde = vano_desde + 1
vIDTRIBUTO = tributo.IDTRIBUTO
**********calculo de tributos

DO WHILE tributo.IDTRIBUTO <> EOF()&&tributo.IDTRIBUTO != 7
APPEND BLANK
IF vIDTRIBUTO = 1 then
vMONTO_TRIBUTO = (v_valor_fiscal*1/100)
ENDIF
IF vIDTRIBUTO = 2 then
vMONTO_TRIBUTO = 3000
ENDIF
IF vIDTRIBUTO = 3 then
vMONTO_TRIBUTO = 10000
ENDIF
IF vIDTRIBUTO = 4 then
vMONTO_TRIBUTO = 5000
ENDIF
IF vIDTRIBUTO = 5 then
vMONTO_TRIBUTO = 5000
ENDIF
IF vIDTRIBUTO = 6 then
vMONTO_TRIBUTO = 5000
ENDIF

vANOliq = vano_desde
=SQLEXEC(sgim,"EXECUTE PROCEDURE DET_LIQ_I(?vIDTRIBUTO,?vANOliq,?vNUMERO_LIQ,?vMONTO_TRIBUTO)")
=SQLCOMMIT(sgim)
enddo
SKIP
enddo
*!* ENDDO
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Ayuda con DO WHILE

Publicado por Plinio (7841 intervenciones) el 07/11/2008 14:16:57
Antes del DO WHILE agregas un SET STEP ON y asi ve viendo el movimiento del codigo y el valor de cada variable a ver si se cumplen las condiciones.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Mauricio
Val: 471
Plata
Ha mantenido su posición en FoxPro/Visual FoxPro (en relación al último mes)
Gráfica de FoxPro/Visual FoxPro

Ayuda con DO WHILE

Publicado por Mauricio (1541 intervenciones) el 07/11/2008 16:34:00
*Modifica tu programa de esta manera
DO WHILE tributo.IDTRIBUTO <> EOF
FOR I = 1 TO 7
vIDTRIBUTO = tributo.IDTRIBUTO
**********calculo de tributos
APPEND BLANK
IF vIDTRIBUTO = 1
vMONTO_TRIBUTO = (v_valor_fiscal*1/100)
ENDIF
*
IF vIDTRIBUTO = 2 then
vMONTO_TRIBUTO = 3000
ENDIF
*
IF vIDTRIBUTO = 3 then
vMONTO_TRIBUTO = 10000
ENDIF
*
IF vIDTRIBUTO = 4 then
vMONTO_TRIBUTO = 5000
ENDIF
*
IF vIDTRIBUTO = 5 then
vMONTO_TRIBUTO = 5000
ENDIF
*
IF vIDTRIBUTO = 6 then
vMONTO_TRIBUTO = 5000
ENDIF
*
vANOliq = vano_desde
* =SQLEXEC(sgim,"EXECUTE PROCEDURE DET_LIQ_I(?vIDTRIBUTO,?vANOliq,?vNUMERO_LIQ,?vMONTO_TRIBUTO)")
* =SQLCOMMIT(sgim)
ENDFOR
* SKIP
ENDDO
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Ayuda con DO WHILE

Publicado por wily001 (4 intervenciones) el 08/11/2008 12:17:02
Buenas..

Gracias, por las respuestas, lo he solucionado asi..

do while vano_desde != vano_hasta
*!* APPEND
vano_desde = vano_desde + 1
vIDTRIBUTO = tributo.IDTRIBUTO
**********calculo de tributos

DO WHILE vIDTRIBUTO != 6 &&tributo.IDTRIBUTO != 7
APPEND BLANK
IF vIDTRIBUTO = 1 then
vMONTO_TRIBUTO = (v_valor_fiscal*1/100)
ENDIF
vIDTRIBUTO = vIDTRIBUTO + 1
IF vIDTRIBUTO = 2 then
vMONTO_TRIBUTO = 3000
ENDIF
IF vIDTRIBUTO = 3 then
vMONTO_TRIBUTO = 10000
ENDIF
IF vIDTRIBUTO = 4 then
vMONTO_TRIBUTO = 5000
ENDIF
IF vIDTRIBUTO = 5 then
vMONTO_TRIBUTO = 5000
ENDIF
IF vIDTRIBUTO = 6 then
vMONTO_TRIBUTO = 5000
ENDIF

vANOliq = vano_desde
=SQLEXEC(sgim,"EXECUTE PROCEDURE DET_LIQ_I(?vIDTRIBUTO,?vANOliq,?vNUMERO_LIQ,?vMONTO_TRIBUTO)")
=SQLCOMMIT(sgim)
SKIP
enddo

No se si es el mejor metodo, pero inserta los datos necesarios..

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar