Sunteți pe pagina 1din 2

//****** 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;

S-ar putea să vă placă și