Ciclos Do While Visual Fox Pro 9

Buenas..
Quiero insertar unos detalles por cada año, me explico.. Suponiendo que es el año 1.993, debería de haber 4 detalles más para ese año..
1.993 1 1 500
1.993 1 2 600
1.993 1 3 700
1.993 1 4 800
Los años se me inserta hasta el año actual pero no me realiza los 4 detalles por año..
Aquí dejo en código.
p { margin-bottom: 0.21cm; }a:link { }
*********************************************************************************************************
    vardesde = vano_desde
    do while vano_desde != vano_hasta
            append blank
                vano_desde = vano_desde + 1
                do while vidtributo != 8
                append blank
                **********calculo de tributos
                    do case
                        case objeto_imp.idtributo = 1
                             vidtributo = 1
                              vmonto_tributo = (v_valor_fiscal*1/100)
                        case objeto_imp.idtributo = 3
                               vidtributo = 3
                                vmonto_tributo = objeto_imp.monto
                        case objeto_imp.idtributo = 6
                               vidtributo = 6
                                vmonto_tributo = objeto_imp.monto
                        case objeto_imp.idtributo = 8
                               vidtributo = 8
                                vmonto_tributo = objeto_imp.monto
                    endcase    
                vanoliq = vano_desde
            r2=sqlexec(sgim,"execute procedure det_liq_inmuebles_i(?vanoliq,?vnumero_liq,?vficha_inm,?vidobjeto,?vidtributo,?vmonto_tributo)")
                                if r2 < 1
                                            =aerror(errores)
                                            for i = 1 to 7
                                                if i = 2
                                                    messagebox(errores)
                                                endif
                                            endfor
                                            =sqlrollback(sgim)
                                            return
                                        else
                                            messagebox('registro guardado', 0+64,'ok', 50)
                                            =sqlcommit(sgim)
                                        Endif
                        skip
                    enddo
    enddo
Saludos

1 respuesta

Respuesta
1
Bueno creo que te hiciste un gran relajo ahí y creo que es mucho más fácil si quieres indicame bien como o que quieres entonces te ayudare de mejor forma
Bueno..
Lo que quiero haces res repetir los años desde, hasta:
vdesde: 1993
vhasta: 2010
Esa seria la primera repetición..
La segunda es obteniendo los datos de la base de datos, tabla tributos..
Insertar por cada año 4 registros obtenidos de tributos..
do case
                        case objeto_imp.idtributo = 1
                             vidtributo = 1
                              vmonto_tributo = (v_valor_fiscal*1/100)
                        case objeto_imp.idtributo = 3
                               vidtributo = 3
                                vmonto_tributo = objeto_imp.monto
                        case objeto_imp.idtributo = 6
                               vidtributo = 6
                                vmonto_tributo = objeto_imp.monto
                        case objeto_imp.idtributo = 8
                               vidtributo = 8
                                vmonto_tributo = objeto_imp.monto
                    Endcase
vidtributo = valor numerorico, debido a que no todos los registros de tributos serán insertados y pregunta por ello el numero e ir insertando los que sean positivos..
Saludos
Bueno primero para hacer el ciclo de 1993 hasta 2010 , yo lo aria asi
for i = 1993 to year(date())
     select campo1, campo2 from tabla where year(campo_fecha) = i into cursor temporal
* Después agregas los datos !
Endfor
Saludos, espero que te sirva, de lo contrario comenta nuevamente o agrégame a mi mail para que te ayude mejor [email protected]
Buenas..
Gracias por la respuesta, lo he puesto como lo has indicado..
    *******************************************detalles**************************************************************
    **seleccion del tribito de la liquidacion
    =SQLEXEC(sgim,'select * from TRIBUTOS_SE(?vidobjeto)','tributos')
    GO top
    FOR i = vano_desde TO YEAR(DATE())
            MESSAGEBOX('principio',0+64,'OK',50)
                    vidtributo = tributos.IDTRIBUTO
                        *****calculando los tributos
                        IF vidtributo  = 1 then
                            vMONTO_TRIBUTO = tributos.MONTO
                        ENDIF
                            IF vidtributo  = 3 then
                                vMONTO_TRIBUTO = tributos.MONTO
                            ENDIF
                                IF vidtributo  = 6 then
                                    vMONTO_TRIBUTO = tributos.MONTO
                                ENDIF
                                    IF vidtributo  = 8 then
                                        vMONTO_TRIBUTO = tributos.MONTO
                                    ENDIF
                    r2=SQLEXEC(sgim,"EXECUTE PROCEDURE DET_LIQ_INMUEBLES_I(?vano_desde,?vNUMERO_LIQ,?vficha_inm,?vidobjeto,?vidtributo,?vMONTO_TRIBUTO)")
                                         IF r2 < 1
                                            =AERROR(errores)
                                            FOR i = 1 TO 7
                                                IF i = 2
                                                    MESSAGEBOX(errores)
                                                ENDIF
                                            ENDFOR
                                            =SQLROLLBACK(sgim)
                                            RETURN
                                        ELSE
                                            MESSAGEBOX('Registro Guardado',0+64,'OK',50)
                                            =SQLCOMMIT(sgim)
                                        *    vano_desde,vNUMERO_LIQ,vficha_inm,vidobjeto,vidtributo,vMONTO_TRIBUTO       
                                        ENDIF
        MESSAGEBOX('final', 0+64,'OK', 50)
        vano_desde = vano_desde + 1
    ENDFOR
Me insertan todos los años pero solo un tributo y como veras necesito en este caso insertar 4 tributos por cada año..
Seria más o menos así
1993 tributo1 500
1993 tributo2 200
1993 tributo3 300
en este momento lo que hace es..
1993 tributo1 500
1994 tributo1 500
1995 tributo1 500
Lo quieria poner así
1993 tributo1 500
1993 tributo2 200
1993 tributo3 300
1994 tributo1 500
1994 tributo2 200
1994 tributo3 300
1995 tributo1 500
1995 tributo2 200
1995 tributo3 300
Saludos.. y gracias
Bueno entonces solo necesitas hacer un for dentro pero sino tas segura (o) como agrégame [email protected]

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas