Error en código de Visual Fox Pro al acumular registros

Hola Experto nuevamente tengo un inconveniente, el código anterior funciona muy bien, cuando ingreso la fecha del 01/04/08 al 30/04/08, pero cuando coloco esta fecha ejemplo 15/04/08 al 30/04/08 no muestra acumulados de algunos registros envío código debo tener alguna falla ayúdeme, Gracias de antemano
Nota: primero ingreso la fecha para el acumulado que es desde el WINIAC 01/01/08 al WFIN 30/04/08 con esto tengo acumulados y para totales la fecha que mencionaba lineas arriba del WINI 15/04/08 aL WFIN 30/04/08 es aquí donde en este margen de fecha que no muestra los datos.
winiac = thisform.text13.value
wini = thisform.text1.value
wfin = thisform.text2.value
thisform.grid1.recordsource = ''
thisform.grid1.value = ''
thisform.grid1.REFRESH
************************************* totales *******************************************
SELECT Conlima.pf_afil, Programas.pro_nombre,Conlima.pf_hospi, COUNT(Conlima.pf_sexo)as total ;
FROM analisis!programas INNER JOIN analisis!conlima ;
ON Programas.pf_afil = Conlima.pf_afil ;
where betw(dtoc(conlima.pf_fecha,1),dtoc(wini,1),dtoc(wfin,1)) ;
GROUP BY Conlima.pf_afil;
ORDER BY Conlima.pf_afil;
into cursor compara
**brow
select distin(pf_afil) as pro_codi, 0000000000 as total0, 0000000000 as acumu0 ;
from compara into table tabla
**brow
se le tabla
go top
scan
xprograma = alltrim(pro_codi)
sele compara
do while alltrim(pf_afil) = xprograma
do case
case pf_hospi = ' 0'
xhospi = ' 0'
xtotal0 = total
endcase
sele tabla
do case
case xhospi = ' 0'
replace total0 with xtotal0
Endcase
Se le compara
skip
endd
Se le tabla
ends
**brow
************************************* fin totales ********************************
************************************* acumulados ********************************
SELECT Conlima.pf_afil, Programas.pro_nombre,Conlima.pf_hospi, COUNT(Conlima.pf_sexo)as acumu ;
FROM analisis!programas INNER JOIN analisis!conlima ;
ON Programas.pf_afil = Conlima.pf_afil ;
where betw(dtoc(conlima.pf_fecha,1),dtoc(winiac,1),dtoc(wfin,1)) ;
GROUP BY Conlima.pf_afil;
ORDER BY Conlima.pf_afil;
into cursor compara
**brow
se le tabla
go top
scan
xprograma = alltrim(pro_codi)
sele compara
do while alltrim(pf_afil) = xprograma
do case
case pf_hospi = ' 0'
xhospi = ' 0'
xacumu0 = acumu
endcase
sele tabla
do case
case xhospi = ' 0'
repla acumu0 with xacumu0
Endcase
Se le compara
skip
endd
Se le tabla
ends
**brow
*!* ******************************* fin de acumulados
select iif(seek(pro_codi,'programas','pf_afil'),programas.pro_nombre,' '),*;
from tabla order by 2 into cursor final
selec programas.pro_nombre,*;
from final order by 1 into cursor xx
**brow
selec exp_1_b, total0, acumu0 ;
from xx order by 1 into cursor xxx
thisform.grid1.recordsource = 'xxx'
thisform.grid1.REFRESH

1 Respuesta

Respuesta
1
Me tome un poco de tiempo para responderte, te daré un solo código que debería solucionar todo el esquema, el motivo por lo que no te di esta respuesta la otra vez fue por que temía que afectase el rendimiento del sistema, pero ahora veo que usas funciones tales como Seek() en tus sql lo cual igualmente estarían afectando el rendimient final, en fin probé este código y creo que dará resultado. No tengo mucho tiempo de probar si los resultados son correctos, pero si hay un error me avisas. Este es el sql.
SELECT Conlima.pf_afil, Programas.pro_nombre, sum(iif(between(pf_fecha,wini,wfin),1,0)) as totalPeriodo, ;
sum(iif(between(pf_fecha,winiac,wfin),1,0)) as acumulado;
FROM analisis!programas,analisis!conlima ;
where Programas.pf_afil = Conlima.pf_afil;
and between(conlima.pf_fecha,winiac,wfin) ;
GROUP BY Conlima.pf_afil;
ORDER BY Conlima.pf_afil
into cursor tabla
Prueba el código y analizas los resultados y me avisas, no tuve mucho tiempo de mirar tu código, pero al tratar de ejecutarlo me dio errores tales como variable xhospi no found, entonces hice un código nuevo, si no quieres cambiar tu código lo que deberías ver también de analiazar la función dtoc(wfin, 1) que usaste para comparar el rango de fecha, con dtoc() enviando el segundo parámetro 1 el esta transformando la fecha optimizandolo para indices, creo que no es lo correcto, ves como yo he hecho tan solo los datos con sus valores in utilizar funciones aparte de between(), puedes hacer esos cambios a ver que resultados obtienes, en fin, eso depende del tiempo no.
Usted es lo máximo Sr. Davsoft la información lo muestra más rápida y optimizo mis códigos me pase mucho tiempo haciendo esto y usted sin conocer exactamente el procedimiento lo hizo en un momento mil gracias amigo y que Dios te bendiga

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas