Updating Delivery Completion Indicator through Mass Uplaod

 

New mass upload program has to be developed to allow users to perform on/off toggling of Delivery Complete Indicator on PO line item through Mass Upload  using BAPI_PO_CHANGE.


*&---------------------------------------------------------------------*
*& Report ZVB_DCI
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT ZVB_DCI.

TYPESBEGIN OF ty_file,
         ebeln(10TYPE c,
         ebelp(5)  TYPE c,
         elikz(1)  TYPE c,
       END OF ty_file.

TYPESBEGIN OF ty_final,
         ebeln(10)     TYPE c,
         ebelp(5)      TYPE c,
         elikz(1)      TYPE c,
         remarks(1000TYPE c,
         uname         TYPE sy-uname,
         date          TYPE sy-datum,
         status_icon   TYPE char4,
       END OF ty_final.

DATAgt_file TYPE STANDARD TABLE OF ty_file,
      gw_file TYPE ty_file.
DATA:it_final TYPE TABLE OF ty_final,
     iw_final TYPE ty_final.

DATAit_listheader TYPE slis_t_listheader,
      wa_listheader TYPE slis_listheader.

DATAiv_dummy  TYPE ekko-ebeln,
      iv_dummy1 TYPE ekpo-ebelp.

FIELD-SYMBOLS <gt_data> TYPE STANDARD TABLE .

PARAMETERS p_file TYPE ibipparms-path OBLIGATORY,
               p_ncol TYPE OBLIGATORY DEFAULT 3.
PARAMETERS p_test AS CHECKBOX DEFAULT ''.

** AT SELECTION-SCREEN ON VALUE-REQUEST FOR
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_file.
 CALL FUNCTION 'F4_FILENAME'
    EXPORTING
      field_name 'P_FILE'
    IMPORTING
      file_name  p_file.


 START-OF-SELECTION .

  PERFORM read_file .
  PERFORM process_file.

  PERFORM call_bapi_po_change.

  PERFORM call_reuse_alv_display.

FORM get_file .
  DATAlv_rc TYPE i.
  DATAlt_file_table TYPE filetable,
        ls_file_table TYPE file_table.
  DATA:lv_window_title TYPE string.
  lv_window_title TEXT-021.

  CALL METHOD cl_gui_frontend_services=>file_open_dialog
    EXPORTING
      window_title lv_window_title
    CHANGING
      file_table   lt_file_table
      rc           lv_rc.
  IF sy-subrc 0.
    READ TABLE lt_file_table INTO ls_file_table INDEX 1.
    p_file ls_file_table-filename.
  ENDIF.
ENDFORM.

*&---------------------------------------------------------------------*
*& Form read_file
*&---------------------------------------------------------------------*
FORM read_file .
 DATA lv_filename      TYPE string,
         lt_records       TYPE solix_tab,
         lv_headerxstring TYPE xstring,
         lv_filelength    TYPE i.

  lv_filename p_file.

  CALL FUNCTION 'GUI_UPLOAD'
    EXPORTING
      filename                lv_filename
      filetype                'BIN'
    IMPORTING
      filelength              lv_filelength
      header                  lv_headerxstring
    TABLES
      data_tab                lt_records
    EXCEPTIONS
      file_open_error         1
      file_read_error         2
      no_batch                3
      gui_refuse_filetransfer 4
      invalid_type            5
      no_authority            6
      unknown_error           7
      bad_data_format         8
      header_not_allowed      9
      separator_not_allowed   10
      header_too_long         11
      unknown_dp_error        12
      access_denied           13
      dp_out_of_memory        14
      disk_full               15
      dp_timeout              16
      OTHERS                  17.

  "convert binary data to xstring
  "if you are using cl_fdt_xl_spreadsheet in odata then skips this step
  "as excel file will already be in xstring
  CALL FUNCTION 'SCMS_BINARY_TO_XSTRING'
    EXPORTING
      input_length lv_filelength
    IMPORTING
      buffer       lv_headerxstring
    TABLES
      binary_tab   lt_records
    EXCEPTIONS
      failed       1
      OTHERS       2.

  IF sy-subrc <> 0.
    "Implement suitable error handling here
  ENDIF.

  DATA lo_excel_ref TYPE REF TO cl_fdt_xl_spreadsheet .

  TRY .
      lo_excel_ref NEW cl_fdt_xl_spreadsheet(
                              document_name lv_filename
                              xdocument     lv_headerxstring .
    CATCH cx_fdt_excel_core.
      "Implement suitable error handling here
  ENDTRY .

  "Get List of Worksheets
  lo_excel_ref->if_fdt_doc_spreadsheet~get_worksheet_names(
    IMPORTING
      worksheet_names DATA(lt_worksheets).

  IF NOT lt_worksheets IS INITIAL.
    READ TABLE lt_worksheets INTO DATA(lv_woksheetnameINDEX 1.

    DATA(lo_data_reflo_excel_ref->if_fdt_doc_spreadsheet~get_itab_from_worksheet(
                                             lv_woksheetname ).
    "now you have excel work sheet data in dyanmic internal table
    ASSIGN lo_data_ref->TO <gt_data>.
  ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form process_file
*&---------------------------------------------------------------------*
FORM process_file .
DATA lv_numberofcolumns   TYPE i,
         lv_date_string       TYPE string,
         lv_target_date_field TYPE datum.


  FIELD-SYMBOLS <ls_data>  TYPE any,
                  <lv_field> TYPE any,
                  <lv_field1> TYPE any.

  "you could find out number of columns dynamically from table <gt_data>
  lv_numberofcolumns p_ncol .

  LOOP AT <gt_data> ASSIGNING <ls_data> FROM .

    "processing columns
    DO lv_numberofcolumns TIMES.
      ASSIGN COMPONENT sy-index OF STRUCTURE <ls_data> TO <lv_field> .
      ASSIGN COMPONENT SY-INDEX OF STRUCTURE GW_FILE TO <lv_field1>.
      IF <lv_field> IS ASSIGNED AND <lv_field1> IS ASSIGNED.
        <lv_field1> <lv_field>.
      ENDIF.
      UNASSIGN<lv_field1><lv_field>.
    ENDDO .
    APPEND GW_FILE TO GT_FILE.
    CLEAR GW_FILE.
  ENDLOOP .
ENDFORM.
*&---------------------------------------------------------------------*
*& Form call_bapi_po_change
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM call_bapi_po_change .
  DATAl_ponumber  LIKE bapimepoheader-po_number,
        i_po_items  TYPE TABLE OF bapimepoitem WITH HEADER LINE,
        iw_items    TYPE bapimepoitem,
        i_po_itemsx TYPE TABLE OF bapimepoitemx WITH HEADER LINE,
        iw_itemsx   TYPE bapimepoitemx,
        i_return    TYPE TABLE OF bapiret2 WITH HEADER LINE,
        iw_return   TYPE bapiret2.

  CLEARi_po_itemsi_po_items[],
       i_po_itemsxi_po_itemsx[],
       i_returni_return[].

  DATA:iv_error TYPE c.
  FIELD-SYMBOLS:<fs> TYPE any.

  LOOP AT gt_file INTO gw_file.
    CLEAR:iv_dummy,iv_dummy1.
    SELECT SINGLE ebeln
      FROM ekko
      INTO iv_dummy
      WHERE ebeln gw_file-ebeln.
    IF sy-subrc NE 0.
      iw_final-remarks 'po does not exist'.
      iw_final-status_icon icon_red_light.
      iv_error 'X'.
    ELSE.
        SELECT SINGLE ebelp
          FROM ekpo
          INTO iv_dummy1
          WHERE ebeln gw_file-ebeln AND ebelp gw_file-ebelp.
        IF sy-subrc NE 0.
          iw_final-remarks 'po item not matching'.
          iw_final-status_icon icon_red_light.
          iv_error 'X'.
        ELSE.
          IF gw_file-elikz IS INITIAL.
            iw_final-remarks 'no change'.
            iw_final-status_icon icon_yellow_light.
            iv_error 'X'.
          ENDIF.
        ENDIF.
      ENDIF.
    IF iv_error 'X'.
      iw_final-ebeln gw_file-ebeln.
      iw_final-ebelp gw_file-ebelp.
      iw_final-elikz gw_file-elikz.
      iw_final-uname sy-uname.
      iw_final-date sy-datum.
      APPEND iw_final TO it_final.
    ELSE.

      l_ponumber gw_file-ebeln.

      iw_items-po_item gw_file-ebelp.
      IF gw_file-elikz 'Y'.
        iw_items-no_more_gr 'X'.
      ELSE.
        iw_items-no_more_gr ' '.
      ENDIF.
      APPEND iw_items TO i_po_items.
      iw_itemsx-po_item iw_items-po_item.
      iw_itemsx-po_itemx 'X'.       "Item holds changes
      iw_itemsx-no_more_gr 'X'.     "Delivery complete indicator
      APPEND iw_itemsx TO i_po_itemsx.

      CALL FUNCTION 'BAPI_PO_CHANGE'
        EXPORTING
          purchaseorder l_ponumber
          testrun       p_test
        TABLES
          poitem        i_po_items
          poitemx       i_po_itemsx
          return        i_return.

      READ TABLE i_return WITH KEY type 'E'.
      IF sy-subrc EQ 0.
        iw_final-status_icon icon_red_light.
        LOOP AT i_return INTO iw_return WHERE type 'E'.
          IF iw_final-remarks IS INITIAL.
            iw_final-remarks iw_return-message.
          ELSE.
            CONCATENATE iw_final-remarks iw_return-message INTO iw_return-message SEPARATED BY ','.
          ENDIF.
        ENDLOOP.
      ELSE.
      LOOP AT i_return INTO iw_return WHERE type 'E'.
        IF iw_final-remarks IS INITIAL.
          iw_final-remarks iw_return-message.
        ELSE.
          CONCATENATE iw_final-remarks iw_return-message INTO iw_final-remarks SEPARATED BY ','.
        ENDIF.
      ENDLOOP.
        CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
          EXPORTING
            wait 'X'.

        iw_final-REMARKS 'Success'.
        iw_final-status_icon icon_green_light.
      ENDIF.

      iw_final-ebeln gw_file-ebeln.
      iw_final-ebelp gw_file-ebelp.
      iw_final-elikz gw_file-elikz.
      iw_final-uname sy-uname.
      iw_final-date sy-datum.
      APPEND iw_final TO it_final.
      REFRESHi_return,i_po_items,i_po_itemsx.
      CLEAR:iw_final,l_ponumber.
    ENDIF.
  ENDLOOP.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form CALL_REUSE_ALV_DISPLAY
*&---------------------------------------------------------------------*
FORM call_reuse_alv_display .
  DATA:it_fcat TYPE  slis_t_fieldcat_alv,
       is_fcat TYPE slis_fieldcat_alv.


  REFRESH:it_fcat.
  CLEAR:is_fcat.
  is_fcat-fieldname 'EBELN'.
  is_fcat-seltext_m 'PO Number'.
  is_fcat-outputlen '10'.
  APPEND is_fcat TO it_fcat.

  CLEAR:is_fcat.
  is_fcat-fieldname 'EBELP'.
  is_fcat-seltext_m 'PO Item'.
  is_fcat-outputlen '10'.
  APPEND is_fcat TO it_fcat.

  CLEAR:is_fcat.
  is_fcat-fieldname 'ELIKZ'.
  is_fcat-seltext_m 'Del Comp Ind'.
  is_fcat-outputlen '15'.
  APPEND is_fcat TO it_fcat.

  CLEAR:is_fcat.
  is_fcat-fieldname 'STATUS_ICON'.
  is_fcat-seltext_m 'Status'.
  is_fcat-outputlen '10'.
  is_fcat-icon 'X'.
  APPEND is_fcat TO it_fcat.

  CLEAR:is_fcat.
  is_fcat-fieldname 'REMARKS'.
  is_fcat-seltext_m 'Remarks'.
  is_fcat-outputlen '50'.
  APPEND is_fcat TO it_fcat.

  CLEAR:is_fcat.
  is_fcat-fieldname 'UNAME'.
  is_fcat-seltext_m 'Updated By'.
  is_fcat-outputlen '10'.
  APPEND is_fcat TO it_fcat.

  CLEAR:is_fcat.
  is_fcat-fieldname 'Date'.
  is_fcat-seltext_m 'Updated on'.
  is_fcat-outputlen '10'.
  APPEND is_fcat TO it_fcat.

*  PERFORM top_of_page.

  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
    EXPORTING
      i_callback_program       sy-repid
      i_callback_top_of_page   'TOP_OF_PAGE'
      it_fieldcat              it_fcat
    TABLES
      t_outtab                 it_final.
ENDFORM.
FORM top_of_page.
  REFRESH:it_listheader.
  CLEAR wa_listheader.
  IF p_test 'X'.
*  Type H is used to display headers i.e. big font
    wa_listheader-typ  'H'.
    wa_listheader-info 'TEST RUN (Changes are not reflected)'.
  ELSE.
    wa_listheader-typ  'H'.
    wa_listheader-info 'Actual run'.
  ENDIF.
  APPEND wa_listheader TO it_listheader.
  CLEAR wa_listheader.

  CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE'
    EXPORTING
      it_list_commentary it_listheader.

ENDFORM.


Input:


Output:

Comments

Popular posts from this blog

CDS Views: Table Functions with Example

Passing Dynamic Variables to SO10 TEXT

Adobe Form/PDF Form Introduction