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.
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.
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
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.
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 .
Tengo un nuevo problema, me esta marcando error en mi funcion CALL_FUNCTION_PARM_MISSING
Me podrian echar una mano, que estoy haciendo mal?
* "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.
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.