Code: Alles auswählen.
types:begin of lts_data,
monat type char2,
anzahl type i,
end of lts_data.
data: lt_data type sorted table of lts_data with unique key monat,
ls_data like line of lt_data.
lv_current_date = begda.
ls_data-anzahl = 1.
While lv_current_date <= endda.
if lv_current_date ist ein Werktag. " FuBa DATE_CONVERT_TO_FACTORYDATE - exportparameter WORKINGDAY_INDICATOR
ls_data-monat = lv_current_date+4(2).
collect ls_data into table lt_data.
endif.
add 1 to lv_current_date.
Endwhile.
Code: Alles auswählen.
*&---------------------------------------------------------------------*
*& Report ZTEST4
*&---------------------------------------------------------------------*
REPORT ZTEST4.
DATA: MONATSLETZTER TYPE D,
TAGE_IM_ERSTEN_MONAT TYPE I,
TAGE_IM_ZWEITEN_MONAT TYPE I.
PARAMETERS: BEGDA TYPE D,
ENDDA TYPE D.
*** START-OF-SELECTION ***
START-OF-SELECTION.
CALL FUNCTION 'RP_LAST_DAY_OF_MONTHS'
EXPORTING DAY_IN = BEGDA
IMPORTING LAST_DAY_OF_MONTH = MONATSLETZTER.
TAGE_IM_ERSTEN_MONAT = MONATSLETZTER - BEGDA + 1.
TAGE_IM_ZWEITEN_MONAT = ENDDA+6(2).
WRITE: TAGE_IM_ERSTEN_MONAT, TAGE_IM_ZWEITEN_MONAT.
Code: Alles auswählen.
data: begda type sy-datum.
data: endda type sy-datum.
data: tage type i.
begda = '20170130'.
endda = '20170205'.
tage = endda - begda.
Und wenn es um Feiertage und solche Sachen geht, wäre der Fabrikkalender zu nutzen
für den es eine Reihe von Fuba's gibt.
write: / tage.
Zwar einfach, aber falsch:mfromg hat geschrieben:Es bliebe da natürlich auch noch die Möglichkeit, es einfach so zu machen.
begda = '20170130'.
endda = '20170205'.
tage = endda - begda.
write: / tage.[/code]
SaskuAc hat geschrieben: Nun muss ich herausfinden, wie viele Tage davon in dem jeweiligen Monat liegen.
Folgende Benutzer bedankten sich beim Autor Unit605 für den Beitrag:
DeathAndPain
Code: Alles auswählen.
DATA: monatsletzter TYPE d,
tage_im_ersten_monat TYPE i,
tage_im_zweiten_monat TYPE i,
lv_continue TYPE flag VALUE abap_true,
li_fdat TYPE STANDARD TABLE OF rke_dat.
PARAMETERS: begda TYPE d,
endda TYPE d.
*** START-OF-SELECTION ***
START-OF-SELECTION.
WHILE lv_continue = abap_true.
* Get the last date of current month
CALL FUNCTION 'RP_LAST_DAY_OF_MONTHS'
EXPORTING
day_in = begda
IMPORTING
last_day_of_month = monatsletzter.
* If the End date is less than Last date of current month
IF endda LE monatsletzter.
* Assign the End date to monatsletzter
monatsletzter = endda.
* Need to come out of Loop
CLEAR lv_continue.
ENDIF.
* Get table with all working days in space of time
CALL FUNCTION 'RKE_SELECT_FACTDAYS_FOR_PERIOD'
EXPORTING
i_datab = begda
i_datbi = monatsletzter
i_factid = 'US' " This is for USA. You might need to change
TABLES
eth_dats = li_fdat
EXCEPTIONS
date_conversion_error = 1
OTHERS = 2.
* Write Year Month and Number of Working Days
WRITE:/ begda(6), lines( li_fdat ).
CLEAR monatsletzter.
* Get the next month and year.
CALL FUNCTION 'RP_CALC_DATE_IN_INTERVAL'
EXPORTING
date = begda
days = '00'
months = '01'
signum = '+'
years = '00'
IMPORTING
calc_date = monatsletzter.
* Force the first day of next month
monatsletzter+6(02) = '01'.
* Assign it to Begin date
begda = monatsletzter.
CLEAR monatsletzter.
ENDWHILE.
Folgende Benutzer bedankten sich beim Autor black_adept für den Beitrag:
sapyard