Diferencia en meses entre dos fechas

Hola, estoy trabajndo en un reporte y necesito mostrar en una columna la diferencia en meses entre la fecha de un campo y la fecha actual.

Entre las formas que se me ocurren, podria ser mediante un campo calculado (aun no se como) ó recorriendo la tabla interna y calculando mediante una funcion.

Investigando un poco eh llegado a varias funciones, entre ellas FIMA_DAYS_AND_MONTHS_AND_YEARS, pero ustedes que forma de hacer esta diferencia recomiendan? Cual podria ser la BEST PRACTICE para llevar a cabo esto.

Saludos!!

Hola!

no soy programador pero lo que haría es (HOY - FECHA) / 30 y sacaría la parte entera del resultado

Un saludo!

Como bien dices, existen funciones que te lo calculan.

Sin duda utilizaría una de esas sin pensarlo. Mirate la documentación de todas porque hay varias.
Pero piensa que esas funciones ya llevan todos los chequeos necesarios para las casuisticas que se puedan dar. Siempre vas a tener mas control que si lo haces manualmente.

2 Me gusta

La verdad es que hay muchas funciones interesantes que, como bien dice el compañero ditek, ya gestionan todas las comprobaciones como por ejemplo años bisiestos…

En el siguiente enlace podrás encontrar en el apartado fechas varias muy resultonas :slight_smile:

h_tp://www.abap.es/SE37.htm

Saludos!

1 me gusta

Hola,

Te recomiendo esta:

HR_GET_TIME_BETWEEN_DATES

En BEG_DATE pones la fecha que tienes en el campo, y en END_DATE sy-datum, y tomas el valor de MONTHS.

Saludos!

Hola @sconoredhot, cuando trato de probar la funcion, me da error en el formato de las fechas. Que valores le pasaste?, ya intente 2016.01.01, 20160101, 01012016, 01/01/2016 pero me sigue marcando error.

Aprovechando para hacer la prueba en ABAP, tendria que probar con una variable tipo SY-DATUM o que sugieres?

DATA CADUC1 TYPE I.
DATA FECHA LIKE SY-DATUM VALUE ??.

CALL FUNCTION 'HR_GET_TIME_BETWEEN_DATES'
    EXPORTING
      MONTHS   = CADUC1
    IMPORTING
      BEG_DATE = FECHA
      END_DATE = SY-DATUM.

@LDSDev cualquiera de las ayudas que te han dado, funcionarian

@Mario_Castano, disculpa que haya modificado tu comentario pero es por esto:

Guia de uso

Hola @canuto, efectivamente cualquiera funciona, pero despues de terminar la academia, no pude practicar por mas de 2 años, estoy retomando esto y estoy con muchas dudas, el problema que tengo, es que no se ni que valor pasarle en la SE37 :pensive:.

Me disculpo, algo raro paso y no se que fue, regrese a mi primer intento con el formato dd.MM.AAAA y funciono!! :sweat_smile:

3 Me gusta

ah jajaj me parecia raro! me alegro que haya funcionado!

Tengo un nuevo problema, me esta marcando error en mi funcion CALL_FUNCTION_PARM_MISSING
Me podrian echar una mano, que estoy haciendo mal? :tired_face:

*  "TAMBIEN INTENTE ESTO
*  DATA FECHAA like P2001-BEGDA VALUE '20160101'.
*  DATA FECHAB like P2001-ENDDA VALUE '20161118'.

  DATA FECHAA(8) TYPE C VALUE '20160101'.
  DATA FECHAB(8) TYPE C VALUE '20161118'.
  DATA CADUC1 TYPE I.
  TRY.
      CALL FUNCTION 'HR_GET_TIME_BETWEEN_DATES'
        EXPORTING
          MONTHS   = CADUC1
        IMPORTING
          BEG_DATE = FECHAA
          END_DATE = FECHAB
  ENDTRY.


@LDSDev te recomiendo usar otra bapi dado que la que estas usando actualmente no esta liberada

Si de igual modo queres que te funcione prueba eso.

DATA dia TYPE datum VALUE ‘20161001’.
DATA: gv_dias_p TYPE p,
gv_meses_p TYPE p,
gv_anos_p TYPE p.

  CALL FUNCTION 'HR_GET_TIME_BETWEEN_DATES'
  EXPORTING
    beg_date       = dia
    end_date       = sy-datum
  IMPORTING
    days           = gv_dias_p
    months         = gv_meses_p
   " years          = gv_anos_p
  EXCEPTIONS
    invalid_period = 1
    OTHERS         = 2.
1 me gusta

Muchas gracias a todos por su apoyo. :grinning:

UPDATE:
La funcion HR_GET_TIME_BETWEEN_DATES no funciono, regresa valores que no son la diferencia en MESES (probablemente se use para otra cosa), la funcion que si me arrojo los datos que necesitaba fue la FIMA_DAYS_AND_MONTHS_AND_YEARS

DATA GV_CADUC_M TYPE I.
  DATA WA_IT_EXIST_MAT TYPE TY_EXIST_MAT.

  TRY.
      LOOP AT IT_EXIST_MAT INTO WA_IT_EXIST_MAT.

        CALL FUNCTION 'FIMA_DAYS_AND_MONTHS_AND_YEARS'
          EXPORTING
            I_DATE_FROM = SY-DATUM
            I_DATE_TO   = WA_IT_EXIST_MAT-VFDAT_1
          IMPORTING
            E_MONTHS    = GV_CADUC_M.

        WA_IT_EXIST_MAT-CADUC_M = GV_CADUC_M.
        MODIFY IT_EXIST_MAT INDEX SY-TABIX FROM WA_IT_EXIST_MAT TRANSPORTING CADUC_M.

        CLEAR GV_CADUC_M.
      ENDLOOP.
  ENDTRY.

Este tema se cerró automáticamente 7 días después del último post. No se permiten nuevas respuestas.