Obtener el último día del mes por código (ABAP)

Con una simple resta se puede obtener la última fecha del mes que deseemos, claro que también podemos aplicar algunas funciones que nos ayuden, depende de cada uno con cual contar, para este tutorial nos basaremos en solamente emplear una operación lógica.

Tenemos las siguientes variables:

DATA: LV_FECHA TYPE SY-DATUM,
      LV_MES TYPE BKPF-MONAT VALUE ’02’,
      LV_ANIO TYPE BKPF-GJAHR VALUE ‘2013’,
      LV_MES_AUX TYPE BKPF-MONAT.

En donde LV_MES y LV_ANIO hacen de mis valores que por lo general los tenemos como parámetros de entrada o que se obtienen de una fecha. El campo lv_mes_aux, será una variable de apoyo para el campo del mes.

Nuestro primer paso sera usar la variable de apoyo para pasarle el mes del que vamos a obtener el último día y luego a nuestra variable de apoyo le sumaremos 1, para que nos tome el mes siguiente. Pero hay que tener presente que para Diciembre (Mes 12) nuestro auxiliar automaticamente tomará el valor de 01 (Enero).

 IF LV_MES = 12.
   LV_MES_AUX = ’01’.
 ELSE.
   LV_MES_AUX = LV_MES.
   LV_MES_AUX = LV_MES_AUX + 1.
 ENDIF.

Luego con nuestra variable auxiliar que contiene el mes siguiente vamos a concatenar y armar la fecha del primer día de dicho mes. Para ello automaticamente a la posición de los días le colocamos en hardcode (valor fijo) 01.

 CONCATENATE LV_ANIO LV_MES_AUX ’01’ INTO LV_FECHA.

Listo ya tenemos nuestra fecha con el primer día de nuestro mes auxiliar  (con estructura del sistema AAAAMMDD donde A: año, M: mes, D: día), ahora procedemos a restarle 1.

 LV_FECHA = LV_FECHA – 1.

Con ello le decimos al sistema que le quite un día y el resultado será el último día del mes anterior, que justamente es el mes que queremos consultar. Ahora para nuestro ejemplo lo imprimimos

 WRITE:/ LV_FECHA.

Se prueba para el mes de Febrero del 2013 con el siguiente resultado:

08-Nov-2013 04-22-33 p-m-

¿Qué pasa si el año es bisiesto?

El sistema hace el calculo de manera automática, botando como resultado la fecha bisiesta.

Se prueba para el mes de Febrero del 2000 con el siguiente resultado:

08-Nov-2013 04-23-09 p-m-

Por último también se hace una prueba con Diciembre para ver que no se tenga problemas con el mes (si no se coloca la lógica de pasar al mes 01, se producira un error y el resultado será 00.00.0000) .

08-Nov-2013 04-28-18 p-m-

Se prueba para el mes de Diciembre del 2013 con el siguiente resultado:

08-Nov-2013 04-25-47 p-m-

Anuncios

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión /  Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión /  Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión /  Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión /  Cambiar )

Conectando a %s