//****** LGICA PARA EL CLCULO DE DAS SEGN CALENDARIO ******
// Recordar que tenemos las siguientes variables internas de finalizacin creadas
en la rutina CP_Interrupcion_Corriente : // CP_FFD_ANHO ; CP_FFD_MES ; CP_FFD_DIA ; CP_FFD_HORA ; CP_FFD_MIN ; CP_FFD_SEG // La modificacin de las fechas dependern de la frecuencia que se introduzca desde el Oasys al tag: CP_FREC_REP // Donde si CP_FREC_REP = 1 ; la frecuencia ser diaria. // Donde si CP_FREC_REP = 2 ; la frecuencia ser interdiaria. // Donde si CP_FREC_REP = 7 ; la frecuencia ser semanal. // Donde si CP_FREC_REP = 30 ; la frecuencia ser mensual. // Para ENERO, MARZO, MAYO, JULIO, AGOSTO, OCTUBRE, DICIEMBRE IF (CP_FIC_MES=1) OR (CP_FIC_MES=3) OR (CP_FIC_MES=5) OR (CP_FIC_MES=7) OR (CP_FIC_MES=8) OR (CP_FIC_MES=10) THEN IF CP_FIC_DIA + CP_FREC_REP>31 THEN CP_FIC_DIA:= CP_FIC_DIA + CP_FREC_REP - 31; CP_FIC_MES:= CP_FIC_MES + 1; ELSE CP_FIC_DIA:= CP_FIC_DIA + CP_FREC_REP; END_IF; END_IF; // Para ABRIL, JUNIO, SETIEMBRE, NOVIEMBRE IF (CP_FIC_MES=4) OR (CP_FIC_MES=6) OR (CP_FIC_MES=9) OR (CP_FIC_MES=11) THEN IF CP_FIC_DIA + CP_FREC_REP>30 THEN CP_FIC_DIA:= CP_FIC_DIA + CP_FREC_REP - 30; CP_FIC_MES:= CP_FIC_MES + 1; ELSE CP_FIC_DIA:= CP_FIC_DIA + CP_FREC_REP; END_IF; END_IF; // Para Febrero de 28 das; IF (CP_FIC_MES=2) AND ((RTU_DATE_TIME[0] MOD 4)>0) THEN IF CP_FIC_DIA + CP_FREC_REP>28 THEN CP_FIC_DIA:= CP_FIC_DIA + CP_FREC_REP - 28; CP_FIC_MES:= CP_FIC_MES + 1; ELSE CP_FIC_DIA:= CP_FIC_DIA + CP_FREC_REP; END_IF; END_IF; // Para Febrero de 29 das; IF (CP_FIC_MES=2) AND ((CP_FIC_ANHO MOD 4)=0) THEN
IF CP_FIC_DIA + CP_FREC_REP>29 THEN
CP_FIC_DIA:= CP_FIC_DIA + CP_FREC_REP - 29; CP_FIC_MES:= CP_FIC_MES + 1; ELSE CP_FIC_DIA:= CP_FIC_DIA + CP_FREC_REP; END_IF; END_IF; // Para DICIEMBRE IF (CP_FIC_MES=12)THEN IF CP_FIC_DIA + CP_FREC_REP>31 THEN CP_FIC_DIA:= CP_FIC_DIA + CP_FREC_REP - 31; CP_FIC_MES:= 1; CP_FIC_ANHO:= CP_FIC_ANHO + 1; ELSE CP_FIC_DIA:= CP_FIC_DIA + CP_FREC_REP; END_IF; END_IF;