Académique Documents
Professionnel Documents
Culture Documents
YCALENDARIO
DAY_ATTRIBUTES_GET
************************************************************************
* TITULO : Macros útiles funciones de fechas *
* DESCRIPCION : *
* AUTOR : Andrés Picazo FECHA: 06/07/05 *
* MACROS
* FECHA2SEMANA -> Convierte una fecha en semana
* PRIMER_DIA_SEMANA: Obtiene el primer dia de una semana
* PRIMER_DIA_SEMANA_FECHA: Obtiene el lunes de una fecha
* ULTIMO_DIA_SEMANA_FECHA: Obtiene el domingo de una fecha
* DIA_SEMANA: Obtiene el ordenal del día dentro de la semana
* CALCULA_DIA_SEMANA: Dada una fecha obtenemos el día X (de lunes a
* domingo) de esa semana
* ES_DIA_LABORABLE: Devuelve si es un día laborable en el calendario
* suponiendo que hemos informado previamente el calendario de
* fabrica en la variable v_fec_calid
* ES_DIA_LABORABLE_CALID: Devuelve si es un día laborable en el
* calendario que indicamos en el segundo parámetro
* PRIMER_DIA_LABORABLE_DESDE_FECHA: Si la fecha dada es laborable
* devuelve esa fecha, sino devuelve el primer día laborable a
* partir de esa fecha
* ANTERIOR_DIA_LABORABLE_DESDE_FECHA: Si la fecha dada es laborable
* devuelve esa fecha, sino devuelve el primer día laborable anterior
* a esa fecha
*
* MODIFICACIONES *
* ------------- *
* FECHA NOMBRE DESCRIPCION *
* -------------------------------------------------------------------- *
* dd.mm.yyyy username *
************************************************************************
* TABLAS
* - THOCD Dias festivos asociados a calendario de festivos
* - THOL Días festivos
* - TFACS Calendario de fábrica (Visualizar)
* - TFACD Definiciones de calendarios de fábrica
* Variables auxiliares
DATA: v_fec_week LIKE scal-week,
v_fec_calid LIKE scal-fcalid,
v_fec_ndia TYPE p,
i_DAY_ATTRIBUTES like CASDAYATTR occurs 1 with header line.
*&---------------------------------------------------------------------*
*& Macro FECHA2SEMANA
*&---------------------------------------------------------------------*
* Convierte una fecha en semana
*&---------------------------------------------------------------------*
DEFINE fecha2semana.
CALL FUNCTION 'DATE_GET_WEEK'
EXPORTING
date = &1
IMPORTING
week = &2
EXCEPTIONS
date_invalid = 1
others = 2.
END-OF-DEFINITION.
*&---------------------------------------------------------------------*
*& Macro PRIMER_DIA_SEMANA
*&---------------------------------------------------------------------*
* Obtiene el primer dia de una semana
*&---------------------------------------------------------------------*
DEFINE primer_dia_semana.
CALL FUNCTION 'WEEK_GET_FIRST_DAY'
EXPORTING
week = &1
IMPORTING
date = &2
EXCEPTIONS
week_invalid = 1
others = 2.
END-OF-DEFINITION.
*&---------------------------------------------------------------------*
*& Macro PRIMER_DIA_SEMANA_FECHA
*&---------------------------------------------------------------------*
* Obtiene el lunes de una fecha
*&---------------------------------------------------------------------*
DEFINE primer_dia_semana_fecha.
fecha2semana &1 v_fec_week.
primer_dia_semana v_fec_week &1.
END-OF-DEFINITION.
*&---------------------------------------------------------------------*
*& Macro ULTIMO_DIA_SEMANA_FECHA
*&---------------------------------------------------------------------*
* Obtiene el domingo de una fecha
*&---------------------------------------------------------------------*
DEFINE ultimo_dia_semana_fecha.
fecha2semana &1 v_fec_week.
primer_dia_semana v_fec_week &1.
ADD 6 TO &1.
END-OF-DEFINITION.
*&---------------------------------------------------------------------*
*& Macro DIA_SEMANA
*&---------------------------------------------------------------------*
* Obtiene el ordenal del día dentro de la semana
*&---------------------------------------------------------------------*
DEFINE dia_semana.
CALL FUNCTION 'DAY_IN_WEEK'
EXPORTING
datum = &1
IMPORTING
wotnr = &2.
END-OF-DEFINITION.
*&---------------------------------------------------------------------*
*& Macro CALCULA_DIA_SEMANA
*&---------------------------------------------------------------------*
* Dada una fecha obtenemos el día X (de lunes a
* domingo) de esa semana
*&---------------------------------------------------------------------*
DEFINE calcula_dia_semana.
dia_semana &1 v_fec_ndia.
IF v_fec_ndia <= &2.
&3 = fini + ( &2 - v_fec_ndia ).
ELSE.
&3 = fini + ( &2 + 7 - v_fec_ndia ).
ENDIF.
END-OF-DEFINITION.
*&---------------------------------------------------------------------*
*& Macro ES_DIA_LABORABLE
*&---------------------------------------------------------------------*
* Devuelve si es un día laborable en el calendario suponiendo
* que hemos informado previamente el calendario de fábrica
* en la variable v_fec_calid
*&---------------------------------------------------------------------*
DEFINE es_dia_laborable.
CALL FUNCTION 'DATE_CHECK_WORKINGDAY'
EXPORTING
date = &1
factory_calendar_id = v_fec_calid
message_type = 'I'
EXCEPTIONS
date_after_range = 1
date_before_range = 2
date_invalid = 3
date_no_workingday = 4
factory_calendar_not_found = 5
message_type_invalid = 6
others = 7.
END-OF-DEFINITION.
*&---------------------------------------------------------------------*
*& Macro ES_DIA_LABORABLE_CALID
*&---------------------------------------------------------------------*
* Devuelve si es un día laborable en el calendario que
* indicamos en el segundo parámetro
*&---------------------------------------------------------------------*
DEFINE es_dia_laborable_calid.
v_fec_calid = &2.
es_dia_laborable &1.
END-OF-DEFINITION.
*&---------------------------------------------------------------------*
*& Macro PRIMER_DIA_LABORABLE_DESDE_FECHA
*&---------------------------------------------------------------------*
* Si la fecha dada es laborable devuelve esa fecha,
* sino devuelve el primer día laborable a partir de esa fecha
*&---------------------------------------------------------------------*
DEFINE primer_dia_labor_desde_fecha.
CALL FUNCTION 'DATE_CONVERT_TO_FACTORYDATE'
EXPORTING
correct_option = '+'
date = &1
factory_calendar_id = &2
IMPORTING
date = &3
EXCEPTIONS
calendar_buffer_not_loadable = 1
correct_option_invalid = 2
date_after_range = 3
date_before_range = 4
date_invalid = 5
factory_calendar_not_found = 6
others = 7.
END-OF-DEFINITION.
*&---------------------------------------------------------------------*
*& Macro ANTERIOR_DIA_LABORABLE_DESDE_FECHA
*&---------------------------------------------------------------------*
* Si la fecha dada es laborable devuelve esa fecha,
* sino devuelve el primer día laborable anterior a esa fecha
*&---------------------------------------------------------------------*
DEFINE anterior_dia_labor_desde_fecha.
CALL FUNCTION 'DATE_CONVERT_TO_FACTORYDATE'
EXPORTING
correct_option = '-'
date = &1
factory_calendar_id = &2
IMPORTING
date = &3
EXCEPTIONS
calendar_buffer_not_loadable = 1
correct_option_invalid = 2
date_after_range = 3
date_before_range = 4
date_invalid = 5
factory_calendar_not_found = 6
others = 7.
END-OF-DEFINITION.
*&---------------------------------------------------------------------*
*& Macro ULTIMO_DIA_MES
*&---------------------------------------------------------------------*
* Devuelve el último día del mes
*&---------------------------------------------------------------------*
DEFINE ultimo_dia_mes.