17 junho 2020

Encontrando Ultimo dia util do mês - Workingday

Uma maneira simples para encontrarmos o ultimo dia útil do mês é utilizar duas FMs de manipulação de datas no SAP em conjunto:

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.





DATAv1 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
            .

  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.