Fetch data from excel and Move Material Stock from Restricted to Unrestricted in ABAP

REPORT zr_mm_material_so_release.

 

** Global Declarations

    INCLUDE zi_mm_material_so_release_top.

** Selection screen

    INCLUDE zi_mm_material_so_release_sel.

** subroutines

    INCLUDE zi_mm_material_so_release_form.

** Initialization

INITIALIZATION.

  PERFORM init_selscr_icons.

  PERFORM clear_variables.

** AT SELECTION SCREEN

AT SELECTION-SCREEN.

  CASE sscrfields-ucomm.

    WHEN 'FC01'.

      PERFORM prepare_template.

      PERFORM download_template.

  ENDCASE.

** AT SELECTION-SCREEN ON VALUE-REQUEST FOR

AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_file.

* Selecting the file

  PERFORM get_file.


START-OF-SELECTION.

  PERFORM read_file .

  PERFORM process_file.

  PERFORM call_bapi_mat_change.

  PERFORM call_reuse_alv_grid_display.

 

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

*& Include   ZI_MM_MATERIAL_SO_RELEASE_TOP

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

TYPE-POOLS:slis, truxs, icon.

TABLES:sscrfields.

SELECTION-SCREEN FUNCTION KEY 1.

FIELD-SYMBOLS : <g_t_data> TYPE STANDARD TABLE .

TYPES: BEGIN OF l_s_file,

              material      TYPE matnr18, "Material number

              stg_loc       TYPE lgort_d, "Storage location

             plant         TYPE werks_d, " Plant

             mov_type      TYPE bwart, " Movement type

             mov_code      TYPE bapi2017_gm_code, " Movement code

             sale_order    TYPE kdauf, " Sale order number

             sale_ord_item TYPE kdpos, " Sale order item

             entry_quan    TYPE erfmg, " Entry quantity

           END OF l_s_file.

TYPES: BEGIN OF l_s_final,

             material     TYPE matnr18, "Material number

             status       TYPE char4,         "Status

             remarks(200) TYPE c,             "Remarks

             uname        TYPE sy-uname,      "Updated By

             udate        TYPE sy-datum,     "Updated On

             utime        TYPE sy-uzeit,      "Updated At

           END OF l_s_final.

DATA: g_t_file  TYPE STANDARD TABLE OF l_s_file,

              g_r_file  TYPE l_s_file,

              g_t_final TYPE TABLE OF l_s_final,

              g_r_final TYPE  l_s_final.

DATA : g_functxt TYPE smp_dyntxt.

DATA:g_t_fcat   TYPE  slis_t_fieldcat_alv,

         g_r_fcat   TYPE slis_fieldcat_alv,

         g_r_layout TYPE slis_layout_alv,

         g_t_listheader TYPE slis_t_listheader,

         g_r_listheader TYPE slis_listheader..

 

DATA:g_t_template  TYPE TABLE OF l_s_file,

         g_t_itab_cols TYPE abap_component_tab.

 

DATA : g_o_excel_structure      TYPE REF TO data,

       g_o_source_table_descr   TYPE REF TO cl_abap_tabledescr,

       g_o_table_row_descriptor TYPE REF TO cl_abap_structdescr,

       g_f_content              TYPE xstring,

       g_t_binary_tab           TYPE TABLE OF sdokcntasc,

       g_f_length               TYPE i,

       g_f_filename1            TYPE string,

       g_f_path                 TYPE string,

       g_f_fullpath             TYPE string.

DATA:g_r_mov_header TYPE bapi2017_gm_head_01,

     g_f_mov_code   TYPE char2,"bapi2017_gm_code,

     g_r_mov_item   TYPE bapi2017_gm_item_create,

     g_t_mov_item   TYPE TABLE OF bapi2017_gm_item_create,

     g_t_return     TYPE TABLE OF bapiret2,

     g_r_return     TYPE  bapiret2.

 

CONSTANTS: g_c_x TYPE c VALUE 'X',

           g_c_e TYPE c VALUE 'E'.


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

*& Include          ZI_MM_MATERIAL_SO_RELEASE_SEL

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

PARAMETERS: p_file TYPE ibipparms-path.


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

*& Include          ZI_MM_MATERIAL_SO_RELEASE_FORM

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

 

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

*& Form init_selscr_icons

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


FORM init_selscr_icons .

  g_functxt-icon_id     = icon_xxl.

  g_functxt-icon_text   = TEXT-001.

  sscrfields-functxt_01 = g_functxt.

ENDFORM.

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

*& Form clear_variables

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

FORM clear_variables .

  CLEAR:g_r_file,g_r_final,g_r_return,g_r_mov_item,g_r_mov_header,g_f_mov_code,g_r_fcat,g_r_layout.

  REFRESH:g_t_file,g_t_final,g_t_return,g_t_mov_item,g_t_fcat.

ENDFORM.

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

*& Form prepare_template

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


FORM prepare_template .

  GET REFERENCE OF g_t_template INTO g_o_excel_structure.

  DATA(g_o_itab_services)   = cl_salv_itab_services=>create_for_table_ref( g_o_excel_structure ).

  g_o_source_table_descr   ?= cl_abap_tabledescr=>describe_by_data_ref( g_o_excel_structure  ).

  g_o_table_row_descriptor ?= g_o_source_table_descr->get_table_line_type( ).


  DATA(g_o_tool_xls) = cl_salv_export_tool_ats_xls=>create_for_excel(

                            EXPORTING r_data =  g_o_excel_structure  ) .

  DATA : l_f_matnr     TYPE string,

             l_f_lgort     TYPE string,

             l_f_werks     TYPE string,

             l_f_bwart     TYPE string,

             g_f_mov_code  TYPE string,

             l_f_sale_ord  TYPE string,

             l_f_sale_item TYPE string,

             l_f_quantity  TYPE string.

  l_f_MATNR     = TEXT-002. " Material number

  l_f_LGORT     = TEXT-003. " Storage location

  l_f_WERKS     =  TEXT-004. " Plant

  l_f_bwart     = TEXT-005. " Movement Type

  g_f_mov_code  = TEXT-006. " Movement code

  l_f_sale_ord  = TEXT-007.  " Sale order

  l_f_sale_item = TEXT-008.  " Sale item

  l_f_quantity  = TEXT-009.  " Quantity.

  DATA(g_o_config) = g_o_tool_xls->configuration( ).

  g_o_config->add_column(

      EXPORTING

        header_text          =  l_f_MATNR " Material number

        field_name           =  'MATERIAL'

        display_type         =   if_salv_bs_model_column=>uie_text_view ).

 

  g_o_config->add_column(

      EXPORTING

        header_text          =  l_f_LGORT "Storage location

        field_name           =  'STG_LOC'

        display_type         =   if_salv_bs_model_column=>uie_text_view ).

 

  g_o_config->add_column(

      EXPORTING

        header_text          =  l_f_WERKS " Plant

        field_name           =  'PLANT'

        display_type         =   if_salv_bs_model_column=>uie_text_view ).

  g_o_config->add_column(

      EXPORTING

        header_text          =  l_f_bwart" Movement Type

        field_name           =  'MOV_TYPE'

        display_type         =   if_salv_bs_model_column=>uie_text_view ).

  g_o_config->add_column(

      EXPORTING

        header_text          =  g_f_mov_code " MOVEMENT CODE

        field_name           =  'MOV_CODE'

        display_type         =   if_salv_bs_model_column=>uie_text_view ).

  g_o_config->add_column(

      EXPORTING

        header_text          =  l_f_sale_ord " SALE ORDER

        field_name           =  'SALE_ORDER'

        display_type         =   if_salv_bs_model_column=>uie_text_view ).

  g_o_config->add_column(

      EXPORTING

        header_text          =  l_f_sale_ITEM " SALE ITEM

        field_name           =  'SALE_ORD_ITEM'

        display_type         =   if_salv_bs_model_column=>uie_text_view ).

  g_o_config->add_column(

      EXPORTING

        header_text          =  l_f_quantity "QUANTITY

        field_name           =  'ENTRY_QUAN'

        display_type         =   if_salv_bs_model_column=>uie_text_view ).


  TRY.

      g_o_tool_xls->read_result(  IMPORTING content  = g_f_content  ).

    CATCH cx_root.

  ENDTRY.

  CALL FUNCTION 'SCMS_XSTRING_TO_BINARY'

    EXPORTING

      buffer        = g_f_content

    IMPORTING

      output_length = g_f_length

    TABLES

      binary_tab    = g_t_binary_tab.

ENDFORM.

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

*& Form download_template

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

FORM download_template .

  DATA : lf_window_title TYPE string.

              lf_window_title = TEXT-010.

  CALL METHOD cl_gui_frontend_services=>file_save_dialog

    EXPORTING

      window_title      = lf_window_title "'Select file path'

      default_extension = cl_gui_frontend_services=>filetype_excel

      default_file_name = g_f_filename1

    CHANGING

      filename          = g_f_filename1

      path              = g_f_path

      fullpath          = g_f_fullpath.


  IF g_f_fullpath IS NOT INITIAL.

    CALL FUNCTION 'GUI_DOWNLOAD'

      EXPORTING

        bin_filesize            = g_f_length

        filename                = g_f_fullpath

        filetype                = 'BIN'

      TABLES

        data_tab                = g_t_binary_tab

      EXCEPTIONS

        file_write_error        = 1

        no_batch                = 2

        gui_refuse_filetransfer = 3

        invalid_type            = 4

        no_authority            = 5

        unknown_error           = 6

        header_not_allowed      = 7

        separator_not_allowed   = 8

        filesize_not_allowed    = 9

        header_too_long         = 10

        dp_error_create         = 11

        dp_error_send           = 12

        dp_error_write          = 13

        unknown_dp_error        = 14

        access_denied           = 15

        dp_out_of_memory        = 16

        disk_full               = 17

        dp_timeout              = 18

        file_not_found          = 19

        dataprovider_exception  = 20

        control_flush_error     = 21

        OTHERS                  = 22.

    IF sy-subrc <> 0.

    ELSE.

      CALL METHOD cl_gui_frontend_services=>execute

        EXPORTING

          document               = g_f_fullpath

        EXCEPTIONS

          cntl_error             = 1

          error_no_gui           = 2

          bad_parameter          = 3

          file_not_found         = 4

          path_not_found         = 5

          file_extension_unknown = 6

          error_execute_failed   = 7

          synchronous_failed     = 8

          not_supported_by_gui   = 9

          OTHERS                 = 10.

      IF sy-subrc <> 0.

      ENDIF.

    ENDIF.

  ENDIF.

ENDFORM.

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

*& Form get_file

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

FORM get_file .

  DATA: lf_rc           TYPE i,

            lt_file_table   TYPE filetable,

            ls_file_table   TYPE file_table,

            lf_window_title TYPE string.

            lf_window_title = TEXT-011.

 

  CALL METHOD cl_gui_frontend_services=>file_open_dialog

    EXPORTING

      window_title            = lf_window_title

    CHANGING

      file_table              = lt_file_table

      rc                      = lf_rc

    EXCEPTIONS

      file_open_dialog_failed = 1

      cntl_error              = 2

      error_no_gui            = 3

      not_supported_by_gui    = 4

      OTHERS                  = 5.

 

  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 : l_f_filename      TYPE string,

                 l_t_records       TYPE solix_tab,

                 l_f_headerxstring TYPE xstring,

                 l_f_filelength    TYPE i.

  l_f_filename = p_file.

  CALL FUNCTION 'GUI_UPLOAD'

    EXPORTING

      filename                = l_f_filename

      filetype                = 'BIN'

    IMPORTING

      filelength              = l_f_filelength

      header                  = l_f_headerxstring

    TABLES

      data_tab                = l_t_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.

  IF sy-subrc <> 0 .

    MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno

    WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.

  ENDIF.

*  convert binary data to xstring

  CALL FUNCTION 'SCMS_BINARY_TO_XSTRING'

    EXPORTING

      input_length = l_f_filelength

    IMPORTING

      buffer       = l_f_headerxstring

    TABLES

      binary_tab   = l_t_records

    EXCEPTIONS

      failed       = 1

      OTHERS       = 2.

  IF sy-subrc <> 0 .

    MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno

    WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.

  ENDIF.

  DATA : lo_excel_ref TYPE REF TO cl_fdt_xl_spreadsheet .

  TRY .

      lo_excel_ref = NEW cl_fdt_xl_spreadsheet(

                              document_name = l_f_filename

                              xdocument     = l_f_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(l_t_worksheets) ).

 

  IF NOT l_t_worksheets IS INITIAL.

    READ TABLE l_t_worksheets INTO DATA(lf_woksheetname) INDEX 1.

 

    DATA(lo_data_ref) = lo_excel_ref->if_fdt_doc_spreadsheet~get_itab_from_worksheet(

                                             lf_woksheetname ).

    "now you have excel work sheet data in dyanmic internal table

    ASSIGN lo_data_ref->* TO <g_t_data>.

  ENDIF.

ENDFORM.

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

*& Form process_file

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

FORM process_file .

  DATA : l_f_numberofcolumns TYPE i.

  FIELD-SYMBOLS : <l_r_data>   TYPE any,

                                      <l_f_field>  TYPE any,

                                      <l_f_field1> TYPE any.

  l_f_numberofcolumns = 8.

  LOOP AT <g_t_data> ASSIGNING <l_r_data> FROM 2 .

 

    "processing columns

    DO l_f_numberofcolumns TIMES.

      ASSIGN COMPONENT sy-index OF STRUCTURE <l_r_data> TO <l_f_field> .

      ASSIGN COMPONENT sy-index OF STRUCTURE g_r_file TO <l_f_field1>.

      IF <l_f_field> IS ASSIGNED AND <l_f_field1> IS ASSIGNED.

        <l_f_field1> = <l_f_field>.

      ENDIF.

      UNASSIGN: <l_f_field1>, <l_f_field>.

    ENDDO .

    APPEND g_r_file TO g_t_file.

    CLEAR g_r_file.

  ENDLOOP .

ENDFORM.

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

*& Form call_bapi_mat_change

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

FORM call_bapi_mat_change .

  DATA: l_f_m_code(2) TYPE c.

  LOOP AT g_t_file INTO g_r_file.

    CLEAR: g_r_mov_header, g_f_mov_code,g_r_mov_item.

    REFRESH: g_t_mov_item.

    g_r_mov_header-pstng_date = sy-datum.

    g_r_mov_header-doc_date   = sy-datum.

    l_f_m_code                = g_r_file-mov_code.

    g_f_mov_code              = |{ l_f_m_code ALPHA = IN }|.

    g_r_mov_item-material     = g_r_file-material.

    g_r_mov_item-plant        = g_r_file-plant.

    g_r_mov_item-stge_loc     = g_r_file-stg_loc.

    g_r_mov_item-move_type    = g_r_file-mov_type.

    g_r_mov_item-sales_ord    = g_r_file-sale_order.

    g_r_mov_item-s_ord_item   = g_r_file-sale_ord_item.

    g_r_mov_item-entry_qnt    = g_r_file-entry_quan.

    APPEND g_r_mov_item TO g_t_mov_item.

    CALL FUNCTION 'BAPI_GOODSMVT_CREATE'

      EXPORTING

        goodsmvt_header = g_r_mov_header

        goodsmvt_code   = g_f_mov_code

      TABLES

        goodsmvt_item   = g_t_mov_item

        return          = g_t_return.

    READ TABLE g_t_return INTO DATA(l_f_check) WITH KEY type = g_c_e.

    IF sy-subrc EQ 0 AND l_f_check IS NOT INITIAL.

      g_r_final-status = icon_red_light.

      LOOP AT g_t_return INTO g_r_return WHERE type = g_c_e.

        IF g_r_final-remarks IS INITIAL.

          g_r_final-remarks = g_r_return-message.

        ELSE.

          CONCATENATE g_r_final-remarks g_r_return-message

                       INTO g_r_final-remarks SEPARATED BY ','.

        ENDIF.

      ENDLOOP.

    ELSE.

      CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'

        EXPORTING

          wait = 'X'.

      g_r_final-remarks = TEXT-012.

      g_r_final-status = icon_green_light.

    ENDIF.

    g_r_final-material = g_r_file-material.

    g_r_final-uname    = sy-uname.

    g_r_final-udate    = sy-datum.

    g_r_final-utime    = sy-uzeit.

    APPEND g_r_final TO g_t_final.

    clear: g_r_final.

  ENDLOOP.

ENDFORM.

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

*& Form call_reuse_alv_grid_display

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


FORM call_reuse_alv_grid_display .

  g_r_layout-zebra             = g_c_x.

  g_r_layout-colwidth_optimize = g_c_x.

 

  REFRESH:g_t_fcat.

  CLEAR:g_r_fcat.

  g_r_fcat-col_pos   = 1.

  g_r_fcat-fieldname = TEXT-014.

  g_r_fcat-seltext_l = TEXT-015.

  g_r_fcat-key       = g_c_x.

  APPEND g_r_fcat TO g_t_fcat.

 

  CLEAR:g_r_fcat.

  g_r_fcat-col_pos   = 2.

  g_r_fcat-fieldname = TEXT-016.

  g_r_fcat-seltext_l = TEXT-017.

*  g_r_fcat-key       = g_c_x.

  APPEND g_r_fcat TO g_t_fcat.

 

  CLEAR:g_r_fcat.

  g_r_fcat-col_pos   = 3.

  g_r_fcat-fieldname = TEXT-018.

  g_r_fcat-seltext_l = TEXT-019.

  APPEND g_r_fcat TO g_t_fcat.

 

  CLEAR:g_r_fcat.

  g_r_fcat-col_pos   = 4.

  g_r_fcat-fieldname = TEXT-020.

  g_r_fcat-seltext_l = TEXT-021.

  g_r_fcat-icon = g_c_x.

  APPEND g_r_fcat TO g_t_fcat.

 

  CLEAR:g_r_fcat.

  g_r_fcat-col_pos   = 5.

  g_r_fcat-fieldname = TEXT-022.

  g_r_fcat-seltext_l = TEXT-023.

  APPEND g_r_fcat TO g_t_fcat.

 

  CLEAR:g_r_fcat.

  g_r_fcat-col_pos   = 6.

  g_r_fcat-fieldname = TEXT-024.

  g_r_fcat-seltext_l = TEXT-025.

  APPEND g_r_fcat TO g_t_fcat.

 

  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'

    EXPORTING

      i_callback_program     = sy-repid

      i_callback_top_of_page = 'TOP_OF_PAGE'

      is_layout              = g_r_layout

      it_fieldcat            = g_t_fcat

    TABLES

      t_outtab               = g_t_final.

ENDFORM.

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

*& Form TOP_OF_PAGE

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

FORM top_of_page .

  CLEAR:g_t_listheader.

  g_r_listheader-typ  = 'H'.

  g_r_listheader-info = TEXT-013.

  APPEND g_r_listheader TO g_t_listheader.

  CLEAR g_r_listheader.

 

  CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE'

    EXPORTING

      it_list_commentary = g_t_listheader.

ENDFORM.


File


Input

Output


********************************Thank You*****************************

Comments

Popular posts from this blog

New syntax for append- VALUE (new syntax 7.4+) in ABAP

Read statement new syntax in ABAP. (7.4+).

Concatenation new syntax( 7.4+ ).