Fuente CL
/*‚============================================================== */
/* Sistema : */
/* Origen : Software Local */
/*‚-------------------------------------------------------------- */
/* Programa : DIASEMCL */
/* Autor : Cesar F. Toro Rios. */
/* Fecha : */
/* Objetivo : CALCULA QUE DIA DE LA SEMANA FUE - SIN ARCHIV. */
/* RANGO DE FECHAS ENTRE 1700/01/01 Y 2200/12/31. */
/*‚============================================================== */
PGM PARM(&FECAAMMDD)
DCL VAR(&FECAAMMDD) TYPE(*CHAR) LEN(8)
DCL VAR(&DIASEMANA) TYPE(*CHAR) LEN(10) +
VALUE(' ')
DCL VAR(&NUMTRABAJO) TYPE(*CHAR) LEN(10)
RTVJOBA JOB(&NUMTRABAJO)
/*‚-------------------------------------------------------------- */
/*š RESCATA DIA DE LA SEMANA EJ ; "LUNES" "VIERNES" */
/*‚-------------------------------------------------------------- */
CALL PGM(DIASEM) PARM(&FECAAMMDD &DIASEMANA)
SNDBRKMSG MSG('De Fecha ' *CAT &FECAAMMDD *CAT ' Dia +
de la semana calculado --> ' *CAT +
&DIASEMANA) TOMSGQ(&NUMTRABAJO) MSGTYPE(*INQ)
FIN:
ENDPGM
Código Fuente RPG
*ˆ-------------------------------------------------------------€*
*‚SISTEMA : RUTINAS GENERALES €*
*‚ORIGEN : SOFTWARE LOCAL €*
*ˆ-------------------------------------------------------------€*
š * PROGRAMA : DIASEM *
* DESCRIPCION :ˆCalcular que día de la semana fue en el Rango *
* ˆ de Fechas Desde 1700/01/01 y 2200/12/31. *
*‚AUTOR : Cesar Toro Rios FECHA: NOV/2010 €*
*‚MILENIUM : NO USA ARCHIVOS EXTERNOS PARA EL CALCULO.. €*
*ˆ-------------------------------------------------------------€*
E TDIA 1 7 10 TABLA DIA SEMANA
E FMES 1 12 1 0 FACTOR DE MES
I DS
I 1 8 P$FECH
I 1 40P$ANO
I 5 60P$MES
I 7 80P$DIA
I DS
I 1 40W$ANO
I 1 20W$SIGL
I 3 40W$ANNO
I DS
I 1 83W$NUME
I 1 50W$ENTE
I 6 80W$DECI
I*****************************************************
C P$ANO IFGE 1700
C P$ANO ANDLE2299
C EXSR CALFEC
C ENDIF
C SETON LR
‚**---------------------------------------------------------------*
š** CALFEC : Calcula Fecha
‚**---------------------------------------------------------------*
C CALFEC BEGSR
*ˆ
*ˆpaso 1 ; CALCULA FACTOR DEL SIGLO ;
C Z-ADD*ZERO $SIGLO 50
*
C P$ANO IFGE 2200
C Z-ADD-4 $SIGLO
C ELSE
C P$ANO IFLE 2199
C P$ANO ANDGE2100
C Z-ADD-2 $SIGLO
C ELSE
C P$ANO IFLE 2099
C P$ANO ANDGE2000
C Z-ADD*ZEROS $SIGLO
C ELSE
C P$ANO IFLE 1999
C P$ANO ANDGE1900
C Z-ADD1 $SIGLO
C ELSE
C P$ANO IFLE 1899
C P$ANO ANDGE1800
C Z-ADD3 $SIGLO
C ELSE
C P$ANO IFLT 1799
C Z-ADD5 $SIGLO
C ENDIF
C ENDIF
C ENDIF
C ENDIF
C ENDIF
C ENDIF
*ˆ
*ˆPaso 2 ; CALCULA FACTOR DEL A#O ;
C Z-ADDP$ANO W$ANO
C Z-ADDW$ANNO $ANNO
C W$ANNO DIV 4 W$NUME
C ADD W$ENTE $ANNO 70
*ˆ
*ˆPaso 3 ; CALCULA FACTOR DEL BISIESTO ;
*ˆ si el a¦o es bisiesto, y el mes es enero o febrero el
*ˆ coeficiente será $BISIE = -1. En cualquier otro caso C = 0.
C Z-ADD*ZERO $BISIE
*ˆ
C P$ANO DIV 4 W$NUME
C W$DECI IFEQ *ZERO
C P$MES IFEQ 01
C P$MES OREQ 02
C Z-ADD-1 $BISIE 50
C ENDIF
C ENDIF
*ˆ
*ˆPaso 4 ; CALCULA FACTOR DEL MES ; POSICION TABLA MES(MES)
š** Ene Feb Mar Abr May Jun Jul Ago Sep Oct Nov Dic.
š** 6 2 2 5 0 3 5 1 4 6 2 4
C Z-ADDFMES,P$MES$MES 50
*ˆ
*ˆPaso 5 ; CALCULA FACTOR DEL DIA ; = A DIA PARAMETRO.
C Z-ADDP$DIA $DIA 50
*ˆ
*ˆPaso 6 ;
*ˆ Tomamos todos los coeficientes calculados y los sumamos.
C Z-ADD*ZEROS RESU1 80
C ADD $SIGLO RESU1
C ADD $ANNO RESU1
C ADD $BISIE RESU1
C ADD $MES RESU1
C ADD $DIA RESU1
*ˆPaso 7 ;
*ˆ Después calculamos el resto módulo 7 del número que
*ˆ obtenemos. Eso lo podemos hacer restando 7 al resultado
*ˆ tantas veces como sea necesario hasta obtener un número
*ˆ entre 0 y 6 que llamaremos RESU1.
C RESU1 DOWGT7
C SUB 7 RESU1
C ENDDO
*ˆPaso 8 ;
*ˆ Resultado: La asignación de números a cada día de la semana
*ˆ es la siguiente Matriz dependiendo del valor de RESU1.
š** Lunes Martes Miércoles Jueves Viernes Sábado Domingo
š** 1 2 3 4 5 6 0
C RESU1 IFGT *ZERO
C RESU1 ANDLT7
C MOVELTDIA,RESU1PDIA
C ELSE
C MOVELTDIA,7 PDIA
C ENDIF
C*
C ENDSR
‚**---------------------------------------------------------------*
š** INICIO
‚**---------------------------------------------------------------*
C* INZSR : Inicialización
C* -----
CSR *INZSR BEGSR
C *ENTRY PLIST
C PARM PFECHA 8 AAAAMMDD
C PARM PDIA 10
C MOVELPFECHA P$FECH
C MOVEL'INVALIDO'PDIA
CSR ENDSR
**
LUNES
MARTES
MIERCOLES
JUEVES
VIERNES
SABADO
DOMINGO
**
6
2
2
5
0
3
5
1
4
6
2
4
Comentarios sobre la versión: 1.0 (0)
No hay comentarios