Aquí el código, funciona pero muy lento
- Code: Select all Expand view
Fec_Fin=ctod('31/12/'+cAno)
Fec_Ini=ctod('01/01/'+cAno)
tMeses:={"Ene.","Feb.","Mar.","Abr.","May.","Jun.","Jul.","Ago.","Sep.","Oct.","Nov.","Dic."}
CursorWait()
oEMPL:=oServer:Query( "SELECT * FROM DATPER ORDER BY CODIGO")
Do While !oEMPL:Eof()
vDiasT=(oEMPL:FECHARET-Fec_Ini)+1
If vDiasT>365
vDiasT=365
Endif
If (vDiasT=365 .or. vDiasT>89) .and. Right(dtos(oEMPL:FECHARET),6)="010101"
cMESES:="Oct.Nov.Dic."
MESP1:=cAno+"10";MESP2:=cAno+"11";MESP3:=cAno+"12"
ElseIf vDiasT>89 .and. Right(dtos(oEMPL:FECHARET),6)!="010101"
MESP1:=cAno+StrZero(Month(oEMPL:FECHARET)-3,2);MESP2:=cAno+StrZero(Month(oEMPL:FECHARET)-2,2);MESP3:=cAno+StrZero(Month(oEMPL:FECHARET)-1,2)
cMeses:=tMeses[ Month(oEMPL:FECHARET)-3 ]+tMeses[ Month(oEMPL:FECHARET)-2 ]+tMeses[ Month(oEMPL:FECHARET)-1 ]
Endif
oPDET:=oServer:Query( "SELECT * FROM PLANIDET WHERE MESP ="+MESP1+" ORDER BY IDEMPL")
oPDET:Seek( oEMPL:IDEMPL,"IDEMPL" )
vMes1:=oPDET1:HBAS+oPDET1:BOANT+oPDET:MTOHEXTR+oPDET:MTOHRECN+oPDET:OTR_ING
oPDET:=oServer:Query( "SELECT * FROM PLANIDET WHERE MESP ="+MESP2+" ORDER BY IDEMPL")
oPDET:Seek( oEMPL:IDEMPL,"IDEMPL" )
vMes2:=oPDET:HBAS+oPDET:BOANT+oPDET:MTOHEXTR+oPDET:MTOHRECN+oPDET:OTR_ING
oPDET:=oServer:Query( "SELECT * FROM PLANIDET WHERE MESP ="+MESP3+" ORDER BY IDEMPL")
oPDET:Seek( oEMPL:IDEMPL,"IDEMPL" )
vMes3:=oPDET:HBAS+oPDET:BOANT+oPDET:MTOHEXTR+oPDET:MTOHRECN+oPDET:OTR_ING
/*Con DBF lo tengo así y es bien rápido.
PDET->( dBseek(MESP1+STR(EMPL->IDEMPL,4)) )
vMes1:=PDET->HBAS+PDET->BOANT+PDET->MTOHEXTR+PDET->MTOHRECN+PDET->OTR_ING
dBseek(MESP2+STR(EMPL->IDEMPL,4))
vMes2:=PDET->HBAS+PDET->BOANT+PDET->MTOHEXTR+PDET->MTOHRECN+PDET->OTR_ING
dBseek(MESP3+STR(EMPL->IDEMPL,4))
vMes3:=PDET->HBAS+PDET->BOANT+PDET->MTOHEXTR+PDET->MTOHRECN+PDET->OTR_ING
*/
If vMes1=0
vProm=(vMes2+vMes3)/2
Else
vProm=(vMes1+vMes2+vMes3)/3
Endi
Liq=(vProm/(365+X))*vDiasT
If vDiasT>89
AADD( aPrima,{ oEMPL:CODIGO,oEMPL:NOMBRE,vDiasT,DTOC(oEMPL:FECHAING),DTOC(oEMPL:FECHARET),cMeses,vMes1,vMes2,vMes3,vPROM,LIQ} )
Endif
oEMPL:Skip()
Enddo
Gracias por la ayuda
Saludos,
Adhemar