You are on page 1of 4

*&---------------------------------------------------------------------*

*& Report ZMM_MAT_DOC_CANCEL_PROGM
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT ZMM_MAT_DOC_CANCEL_PROGM.
TYPES: BEGIN OF TY_UPLOAD,
         MBLNR TYPE STRING,
         MJAHR TYPE STRING,
       END OF TY_UPLOAD.
DATA: WA_UPLOAD   TYPE TY_UPLOAD,
      IT_UPLOAD   TYPE TABLE OF TY_UPLOAD,
      LINE        TYPE I,
      COUNT       TYPE I,
      GD_PERCENT  TYPE I,
      LV_PROLE    TYPE STRING,
      IT_TYPE     TYPE TRUXS_T_TEXT_DATA,
      W_MSG(100),
      V_LINES     TYPE I,
      V_CONTC(30) TYPE C,
      BEGIN OF WA_ERROR,
        LNO      TYPE SY-TABIX,
        MSG(100) TYPE C,
*         MSG1(100) TYPE C,
      END OF WA_ERROR,
      BEGIN OF WA_RETFINAL,
        BILLNO  TYPE STRING,
        TYPE    TYPE BAPIRET1-TYPE,
        MESSAGE TYPE BAPIRET1-MESSAGE,
      END OF WA_RETFINAL,
      LV_MBLNR    TYPE BAPI2017_GM_HEAD_02-MAT_DOC,
      LV_MJAHR    TYPE BAPI2017_GM_HEAD_02-DOC_YEAR,
      WA_FINAL    TYPE BAPI2017_GM_HEAD_RET,
      IT_FINAL    TYPE TABLE OF BAPI2017_GM_HEAD_RET,
      IT_RETFINAL LIKE TABLE OF WA_RETFINAL,
      IT_RETURN   TYPE TABLE OF BAPIRET2,
      WA_RETURN   TYPE BAPIRET2,
      LV_MSG      TYPE STRING,
      IT_ERROR    LIKE TABLE OF WA_ERROR.

PARAMETERS:CAN_FILE LIKE RLGRAP-FILENAME,
           P_DATE   TYPE BAPI2017_GM_HEAD_02-PSTNG_DATE.

AT SELECTION-SCREEN ON VALUE-REQUEST FOR CAN_FILE.
  PERFORM BROWSE_FILE.

START-OF-SELECTION.
  PERFORM LOAD_FILE.
  DESCRIBE TABLE IT_UPLOAD LINES LINE.

  COUNT = 0.
  SORT IT_UPLOAD BY MBLNR.

  CLEAR WA_UPLOAD.
  LOOP AT IT_UPLOAD INTO WA_UPLOAD.
    COUNT = COUNT + 1.
    PERFORM PROGRESS_BAR USING 'Retrieving Data...'
    SY-TABIX LINE.
    WA_ERROR-LNO = SY-TABIX.
    LV_MBLNR = WA_UPLOAD-MBLNR.
    LV_MJAHR = WA_UPLOAD-MJAHR.

    CALL FUNCTION 'BAPI_GOODSMVT_CANCEL'
      EXPORTING
        MATERIALDOCUMENT    = LV_MBLNR
        MATDOCUMENTYEAR     = LV_MJAHR
        GOODSMVT_PSTNG_DATE = P_DATE
*       GOODSMVT_PR_UNAME   =
*       DOCUMENTHEADER_TEXT =
      IMPORTING
        GOODSMVT_HEADRET    = wa_FINAL
      TABLES
        RETURN              = IT_RETURN
*       GOODSMVT_MATDOCITEM =
      .

    IF SY-SUBRC = 0.
      CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
        EXPORTING
          WAIT = 'X'
*         IMPORTING
*         RETURN        =
        .
*      LOOP AT IT_FINAL INTO WA_FINAL.
        WA_RETFINAL-BILLNO  = WA_FINAL-MAT_DOC.
        WA_RETFINAL-TYPE    = 'I'.
        CONCATENATE LV_MBLNR ` ` LV_MJAHR ` canceled Sucessfully`  INTO  WA_RE
TFINAL-MESSAGE.
        APPEND WA_RETFINAL TO IT_RETFINAL.
        CLEAR: WA_FINAL, WA_RETFINAL.
*      ENDLOOP.

      LOOP AT  IT_RETURN INTO WA_RETURN .
        WA_RETFINAL-BILLNO  = WA_RETURN-MESSAGE_V1.
        WA_RETFINAL-TYPE    = WA_RETURN-TYPE.
        WA_RETFINAL-MESSAGE = WA_RETURN-MESSAGE.
        APPEND WA_RETFINAL TO IT_RETFINAL.
        CLEAR: WA_RETURN, WA_RETFINAL.
      ENDLOOP.
    ENDIF.
    CLEAR: LV_MBLNR, LV_MJAHR, IT_FINAL, IT_RETURN, WA_UPLOAD.
  ENDLOOP.

  LOOP AT IT_RETFINAL INTO WA_RETFINAL.
    CASE WA_RETFINAL-TYPE.
      WHEN 'I'.
        WRITE: WA_RETFINAL-BILLNO, WA_RETFINAL-MESSAGE COLOR 5 .
      WHEN 'E'.
        WRITE: WA_RETFINAL-BILLNO, WA_RETFINAL-MESSAGE COLOR 6 .
      WHEN 'S'.
        WRITE: WA_RETFINAL-BILLNO, WA_RETFINAL-MESSAGE COLOR 5 .
      WHEN OTHERS.
    ENDCASE.

  ENDLOOP.

*&---------------------------------------------------------------------*
*&      Form  BROWSE_FILE
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM BROWSE_FILE .

  CALL FUNCTION 'F4_FILENAME'
    EXPORTING
      PROGRAM_NAME  = SYST-CPROG
      DYNPRO_NUMBER = SYST-DYNNR
      FIELD_NAME    = ' '
    IMPORTING
      FILE_NAME     = CAN_FILE.

ENDFORM.                    "BROWSE_FILE
*&---------------------------------------------------------------------*
*&      Form  LOAD_FILE
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM LOAD_FILE .
  CALL FUNCTION 'TEXT_CONVERT_XLS_TO_SAP'
    EXPORTING
*     I_FIELD_SEPERATOR    =
*     I_LINE_HEADER        = 'X'
      I_TAB_RAW_DATA       = IT_TYPE
      I_FILENAME           = CAN_FILE
    TABLES
      I_TAB_CONVERTED_DATA = IT_UPLOAD[]
    EXCEPTIONS
      CONVERSION_FAILED    = 1
      OTHERS               = 2.
  IF SY-SUBRC NE  0.
    MESSAGE ID SY-MSGID
            TYPE SY-MSGTY
            NUMBER SY-MSGNO
            WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
  ENDIF.
ENDFORM.                    "LOAD_FILE

*&———————————————————————*
*&      Form  PROGRESS_BAR
*&———————————————————————*

FORM PROGRESS_BAR  USING    P_VALUE
                            P_TABIX
                            P_NLINES.

  DATA: W_TEXT(40),
        W_PERCENTAGE      TYPE P,
        W_PERCENT_CHAR(3).

  W_PERCENTAGE    = ( P_TABIX / P_NLINES ) * 100.
  W_PERCENT_CHAR  = W_PERCENTAGE.

  SHIFT W_PERCENT_CHAR LEFT DELETING LEADING ' '.
  CONCATENATE P_VALUE W_PERCENT_CHAR '% Complete'(002) INTO W_TEXT.

*This check needs to be in, otherwise when looping around big tables
*SAP will re-display indicator too many times causing report to run
*very slow. (No ned to re-display same percentage anyways)

  IF W_PERCENTAGE GT GD_PERCENT
      OR P_TABIX  EQ 1.
    CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'
      EXPORTING
        PERCENTAGE = W_PERCENTAGE
        TEXT       = W_TEXT.

    GD_PERCENT = W_PERCENTAGE.
  ENDIF.
ENDFORM.                    " PROGRESS_BAR

You might also like