Uma maneira simples para encontrarmos o ultimo dia útil do mês é utilizar duas FMs de manipulação de datas no SAP em conjunto:
IF sy-subrc <> 0.
v2 = v2 - 1. "Se o dia não for útil, subtrai 1 e verifica novamente
CONTINUE.
ELSE.
EXIT. "Se o dia foi útil, sai do loop
ENDIF.
ENDDO.
WRITE:/ 'O ultimo dia útil do mês é ', v2.
MM_LAST_DAY_OF_MONTHS : Vamos utilizar para pegar o ultimo dia do mês a partir de uma data.
DATE_CHECK_WORKINGDAY : Vamos utilizar para saber se aquele deteminado dia é útil ou não.
DATA: v1 TYPE sy-datum,
v2 TYPE sy-datum.
"Data do dia
v1 = sy-datum.
"Recuperar o último dia do mês a partir de uma Data
CALL FUNCTION 'MM_LAST_DAY_OF_MONTHS'
EXPORTING
day_in = v1
IMPORTING
LAST_DAY_OF_MONTH = v2
EXCEPTIONS
DAY_IN_NO_DATE = 1
OTHERS = 2
.
"Loop
DO.
"Verifica se a data é dia útil ou não
CALL FUNCTION 'DATE_CHECK_WORKINGDAY'
EXPORTING
date = v2 "Data
factory_calendar_id = 'B2' "Id de calendário da tabela TFACD
message_type = 'E' "Tipo de msg de saída S,E,I,W)
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
.
v2 TYPE sy-datum.
"Data do dia
v1 = sy-datum.
"Recuperar o último dia do mês a partir de uma Data
CALL FUNCTION 'MM_LAST_DAY_OF_MONTHS'
EXPORTING
day_in = v1
IMPORTING
LAST_DAY_OF_MONTH = v2
EXCEPTIONS
DAY_IN_NO_DATE = 1
OTHERS = 2
.
"Loop
DO.
"Verifica se a data é dia útil ou não
CALL FUNCTION 'DATE_CHECK_WORKINGDAY'
EXPORTING
date = v2 "Data
factory_calendar_id = 'B2' "Id de calendário da tabela TFACD
message_type = 'E' "Tipo de msg de saída S,E,I,W)
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
.
IF sy-subrc <> 0.
v2 = v2 - 1. "Se o dia não for útil, subtrai 1 e verifica novamente
CONTINUE.
ELSE.
EXIT. "Se o dia foi útil, sai do loop
ENDIF.
ENDDO.
WRITE:/ 'O ultimo dia útil do mês é ', v2.
Tags
Dicas abap