SAP ABAP - Create Characteristic With Excel File Upload



Excel Template



ABAP Code
------------------------------------------------------------------------------------------------------------

Main Program

*&---------------------------------------------------------------------*
*& Report ZCREATE_CHAR
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT ZCREATE_CHAR.

INCLUDE ZCREATE_CHAR1.
INCLUDE ZCREATE_CHAR2.
INCLUDE ZCREATE_CHAR3.

START-OF-SELECTION.
  call SCREEN 100.


Include ZCREATE_CHAR1

*&---------------------------------------------------------------------*
*& Include          ZCREATE_CHAR1
*&---------------------------------------------------------------------*
TYPES :
  BEGIN OF ZPRINT,
    ICONS      LIKE ICON-ID,
    CCELL      TYPE LVC_T_SCOL,
    CSTYL      TYPE LVC_T_STYL,
    CLINE      TYPE CHAR4,
    SNOTE      TYPE STRING,
    ATNAM      TYPE CHAR50,
    ATBEZ      TYPE CHAR30,
    ATUDF      TYPE CHAR18,
    CHARNUMBER TYPE CHAR2,
    DECPLACES  TYPE CHAR2,
    MEINS      TYPE CHAR5,
    MEINS_ISO  TYPE CHAR5.
TYPES :
END OF ZPRINT,

BEGIN OF T_RECORD,
*    Z      TYPE CHAR1,
  ATNAM      TYPE CHAR50,
  ATBEZ      TYPE CHAR30,
  ATUDF      TYPE CHAR18,
  CHARNUMBER TYPE CHAR2,
  DECPLACES  TYPE CHAR2,
  MEINS      TYPE CHAR5,
  MEINS_ISO  TYPE CHAR5,
END OF T_RECORD.

DATA:
  ITAB     LIKE ALSMEX_TABLINE OCCURS WITH HEADER LINE,
  IT_PRINT TYPE TABLE OF ZPRINT,
  WA_PRINT TYPE ZPRINT,
  VI_ITAB  TYPE I.

TYPES:
      ZRECRD                        TYPE T_RECORD.

DATAIT_RECRD TYPE TABLE OF ZRECRD,
      WA_RECRD TYPE ZRECRD.

DATAZZ_PID  TYPE CHAR80,
      VC_MSG  TYPE STRING,  "String for Message
      VC_STR  TYPE STRING,  "String for Popup
      VC_PPP  TYPE CHAR4,   "Popup ID
      VC_ANS  TYPE CHAR1,   "Answer
      VI_TDO  TYPE I,       "Timer
      VI_TCN  TYPE I,       "Timer Counter
      VI_TOT  TYPE I,       "Counter Load
      VI_CLD  TYPE I,       "Counter Load
      VI_ROW  TYPE I,       "Row in Excel for Upload
      VI_ERR  TYPE I,       "Error
      VI_LCK  TYPE I,       "Lock Table
      OK_CODE TYPE SY-UCOMM.

DATAVI_FCLEN TYPE I,
      VS_FCFLD TYPE STRING.

DATAOB_CUST  TYPE REF TO CL_GUI_CUSTOM_CONTAINER,
      OB_GRID  TYPE REF TO CL_GUI_ALV_GRID,
      OB_TIMER TYPE REF TO CL_GUI_TIMER.

DATAIT_COLOR TYPE TABLE OF LVC_S_SCOL,
      WA_COLOR TYPE LVC_S_SCOL.
DATAVI_COLOR              TYPE I.

DATAIS_VARNT LIKE DISVARIANT,
      IS_LYOUT TYPE LVC_S_LAYO,
      IS_PRINT TYPE LVC_S_PRNT.

DATAIT_EXCLD              TYPE UI_FUNCTIONS.      "----- For Toolbar Exclude ALV -----

DATAWA_STYLE              TYPE LVC_S_STYL.        "----- For Style ALV -----

DATAIT_FCATL TYPE LVC_T_FCAT,          "----- For Field Catalog 1 ALV -----
      WA_FCATL LIKE LINE OF IT_FCATL.

DATAIT_SORT TYPE LVC_T_SORT,
      WA_SORT LIKE LINE OF IT_SORT.

TYPES:
  BEGIN OF ZSTAB,
    FIELD TYPE CHAR10,
  END OF ZSTAB.

DATASTAB                    TYPE TABLE OF ZSTAB.


Include ZCREATE_CHAR2
*&---------------------------------------------------------------------*
*& Include          ZCREATE_CHAR2
*&---------------------------------------------------------------------*

SELECTION-SCREEN BEGIN OF SCREEN 101 AS SUBSCREEN.
PARAMETERS:
  FILENAME TYPE LOCALFILE,
  P_LINE   TYPE DEFAULT 2.
SELECTION-SCREEN END OF SCREEN 101 .

AT SELECTION-SCREEN ON VALUE-REQUEST FOR FILENAME.
  CALL FUNCTION 'KD_GET_FILENAME_ON_F4'
    EXPORTING
      STATIC    'X'
      MASK      '*.xls'
    CHANGING
      FILE_NAME FILENAME.

AT SELECTION-SCREEN OUTPUT.
*  GET PARAMETER ID 'ZMM01' FIELD ZZ_PID.
*  IF ZZ_PID IS INITIAL.
*    SET PARAMETER ID 'ZMM01' FIELD 'D:\SAP\Test Upload MM01.xlsx'.
*  ENDIF.

*&---------------------------------------------------------------------*
*& Module STATUS_0100 OUTPUT
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
MODULE STATUS_0100 OUTPUT.

  REFRESH STAB.
  IF IT_PRINT IS INITIAL.
    APPEND 'POST' TO STAB.
    APPEND 'SCLR' TO STAB.
  ELSE.
    APPEND 'READ' TO STAB.
  ENDIF.

  SET PF-STATUS 'PFSTATUS' EXCLUDING STAB.
  SET TITLEBAR  'TITLE'.

  PERFORM INITIAL_FORM.
ENDMODULE.
*&---------------------------------------------------------------------*
*&      Module  USER_COMMAND_0100  INPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE USER_COMMAND_0100 INPUT.
  CASE SY-UCOMM.
    WHEN 'BACK' OR 'EXIT' OR 'CNCL'.
      LEAVE PROGRAM.
    WHEN 'READ'.
      REFRESH IT_PRINT.
      PERFORM READ_UPLOD_XLS USING FILENAME '1' P_LINE '200' '32000'.
      PERFORM PARSG_TXT USING 1.
    WHEN 'SCLR'.
      REFRESH IT_PRINT.
    WHEN 'POST'.
      READ TABLE IT_PRINT WITH KEY ICONS '@0A@' TRANSPORTING NO FIELDS.
      IF SY-SUBRC 0.
        MESSAGE 'Please check your data' TYPE 'S' DISPLAY LIKE 'E'.
      ELSE.
        DATA :
          CHARACTDETAIL TYPE BAPICHARACTDETAIL,
          CHARACTDESCR  TYPE TABLE OF BAPICHARACTDESCR WITH HEADER LINE,
          ITRETURN      TYPE TABLE OF BAPIRET2,
          LSRETURN      TYPE BAPIRET2.

        CLEAR WA_PRINT.
        LOOP AT IT_PRINT INTO WA_PRINT.
          CLEAR CHARACTDETAIL.
          CHARACTDETAIL-CHARACT_NAME  WA_PRINT-ATNAM.
          CHARACTDETAIL-DATA_TYPE     WA_PRINT-ATUDF.
          CHARACTDETAIL-LENGTH        WA_PRINT-CHARNUMBER.
          CHARACTDETAIL-DECIMALS      WA_PRINT-DECPLACES.
          CHARACTDETAIL-CASE_SENSITIV 'X'.
          CHARACTDETAIL-STATUS        '1'.
          CHARACTDETAIL-ADDITIONAL_VALUES '1'.
          CHARACTDETAIL-UNIT_OF_MEASUREMENT WA_PRINT-MEINS.
          CHARACTDETAIL-UNIT_OF_MEASUREMENT_ISO WA_PRINT-MEINS_ISO.

          REFRESH CHARACTDESCR.
          CLEAR CHARACTDESCR.
          CHARACTDESCR-LANGUAGE_INT 'EN'.
          CHARACTDESCR-LANGUAGE_ISO 'EN'.
          CHARACTDESCR-DESCRIPTION  WA_PRINT-ATBEZ.
          APPEND CHARACTDESCR.

          CALL FUNCTION 'BAPI_CHARACT_CREATE'
            EXPORTING
              CHARACTDETAIL CHARACTDETAIL
            TABLES
              CHARACTDESCR  CHARACTDESCR[]
              RETURN        ITRETURN.

          CLEAR LSRETURN.
          READ TABLE ITRETURN INTO LSRETURN WITH KEY TYPE 'E'.
          IF SY-SUBRC 0.
            WA_PRINT-ICONS '@F1@'.
            WA_PRINT-SNOTE LSRETURN-MESSAGE.
            MODIFY IT_PRINT FROM WA_PRINT TRANSPORTING ICONS SNOTE WHERE ATNAM WA_PRINT-ATNAM.
          ELSE.

            WA_PRINT-ICONS '@5Y@'.
            WA_PRINT-SNOTE 'Characteristic created'.
            MODIFY IT_PRINT FROM WA_PRINT TRANSPORTING ICONS SNOTE WHERE ATNAM WA_PRINT-ATNAM.

            CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
              EXPORTING
                WAIT 'X'.
          ENDIF.

          CLEAR WA_PRINT.
        ENDLOOP.

      ENDIF.
  ENDCASE.
ENDMODULE.

FORM READ_UPLOD_XLS USING P_FILE P_BCOL TYPE P_BROW TYPE P_ECOL TYPE P_EROW TYPE I.
  CALL FUNCTION 'ALSM_EXCEL_TO_INTERNAL_TABLE'
    EXPORTING
      FILENAME                P_FILE
      I_BEGIN_COL             P_BCOL
      I_BEGIN_ROW             P_BROW
      I_END_COL               P_ECOL
      I_END_ROW               P_EROW
    TABLES
      INTERN                  ITAB[]
    EXCEPTIONS
      INCONSISTENT_PARAMETERS 1
      UPLOAD_OLE              2
      OTHERS                  3.

  IF SY-SUBRC <> 0.
    VC_MSG SY-SUBRC.
    CONDENSE VC_MSG.
    CONCATENATE 'Error' VC_MSG 'Problem Uploading Excel Spreadsheet' INTO VC_MSG SEPARATED BY ' '.
    MESSAGE VC_MSG TYPE 'S' DISPLAY LIKE 'E'.
  ENDIF.
ENDFORM.

FORM PARSG_TXT USING P_SET.
*  DATA ZMMC001 TYPE TABLE OF ZMMSC001_1 WITH HEADER LINE.
  DATA LV_INDEX TYPE I.
  FIELD-SYMBOLS <FS>.

  IF P_SET 0.

  ELSEIF P_SET 1.
    REFRESH IT_RECRD.
    SORT ITAB BY ROW COL.

    CLEAR WA_RECRD.
    LOOP AT ITAB.
      MOVE ITAB-COL TO LV_INDEX.
      ASSIGN COMPONENT LV_INDEX OF STRUCTURE WA_RECRD TO <FS>.
      MOVE ITAB-VALUE TO <FS>.
      AT END OF ROW.
        APPEND WA_RECRD TO IT_RECRD.

        CLEAR WA_PRINT.
        MOVE-CORRESPONDING WA_RECRD TO WA_PRINT.
        PERFORM F_VALIDATION.

        APPEND WA_PRINT TO IT_PRINT.
        CLEAR WA_RECRD.
      ENDAT.
    ENDLOOP.
  ENDIF.
ENDFORM.

FORM F_VALIDATION.
  REFRESH IT_COLOR.
  DATA WA_T006A TYPE T006A.
  DATA WA_CABN  TYPE CABN.

  PERFORM TO_TRAFC_SET    USING '@08@' 'ZZ' 1.

  "Check Existing Characteristic
  CLEAR WA_CABN.
  SELECT SINGLE FROM CABN INTO WA_CABN WHERE ATNAM WA_PRINT-ATNAM.
  IF WA_CABN IS NOT INITIAL.
    PERFORM TO_TRAFC_SET USING '@0A@' 'ABCDEFGKLPQSVXZ' 1.
    PERFORM ALV_COLOR_SET USING 'ATNAM' '6' '1' '1'.
    WA_PRINT-SNOTE 'Characteristic already exists'.
  ENDIF.
  "Check UOM
  CLEAR WA_T006A.
  SELECT SINGLE FROM T006A INTO WA_T006A
    WHERE MSEH3 WA_PRINT-MEINS AND SPRAS 'EN'.
  IF WA_T006A IS INITIAL.
    PERFORM TO_TRAFC_SET USING '@0A@' 'ABCDEFGKLPQSVXZ' 1.
    PERFORM ALV_COLOR_SET USING 'MEINS' '6' '1' '1'.
    PERFORM ALV_COLOR_SET USING 'MEINS_ISO' '6' '1' '1'.
  ENDIF.

ENDFORM.

FORM TO_TRAFC_SET USING P_ICN P_SET P_ALL.
  IF P_ALL AND WA_PRINT-ICONS <> '@02@' OR P_ALL 9.
    WA_PRINT-ICONS P_ICN.
  ENDIF.
ENDFORM.                    " TO_TRAFC_SET

Include ZCREATE_CHAR3
*&---------------------------------------------------------------------*
*& Include          ZCREATE_CHAR3
*&---------------------------------------------------------------------*
FORM initial_form.

  CHECK ok_code <> 'EXIT'.
  IF ob_cust IS INITIAL.
    CREATE OBJECT ob_cust
      EXPORTING
        container_name 'CONTAINER'.

    CREATE OBJECT ob_grid
      EXPORTING
        i_parent ob_cust.

*    create object g_event_receiver.
  ENDIF.

  PERFORM set_varnt.
  PERFORM set_lyout.
  PERFORM set_fieldcat.
  PERFORM set_excld CHANGING it_excld.
  PERFORM alv_displ_out.

*  set handler :
*    g_event_receiver->handle_double_click for OB_GRID.

  CALL METHOD ob_grid->refresh_table_display.
  CALL METHOD ob_grid->set_ready_for_input
    EXPORTING
      i_ready_for_input 1.
ENDFORM.

FORM set_fieldcat.
  REFRESH it_fcatl.
  PERFORM alv_field_cat "NOUT ICON NSUM DSUM EDIT
      USING :
            ' XX  ' 1  5   'ICONS'       ''          ''        ''  ''      'Status'               '',
            '   ' 2   30   'ATNAM'       ''          ''        ''  ''      'Characteristic'       'CHAR',
            '   ' 2   20   'ATBEZ'       ''          ''        ''  ''      'Description'          'CHAR',
            '   ' 2   20   'ATUDF'       ''          ''        ''  ''      'Data Type'            'CHAR',
            '   ' 2   20   'CHARNUMBER'  ''          ''        ''  ''      'Number of Char'       'NUMC',
            '   ' 2   20   'DECPLACES'   ''          ''        ''  ''      'Decimal Places'       'NUMC',
            '   ' 2   20   'MEINS'       ''          ''        ''  ''      'Unit of Measure'      'CHAR',
            '   ' 2   20   'MEINS_ISO'   ''          ''        ''  ''      'Unit of Measure ISO'  'CHAR',
            '   ' 999 30   'SNOTE'       ''          ''        ''  ''      'Notes'                ''.
ENDFORM.

FORM set_varnt .
  CLEAR is_varnt.
  is_varnt-report     sy-repid.
  is_varnt-username   sy-uname.
ENDFORM.

*----------------------------------------------------------------------*
FORM set_lyout .
  CLEAR is_lyout.
  is_lyout-zebra        'X'.
  is_lyout-cwidth_opt   'X'.
  is_lyout-no_rowins    'X'.
  is_lyout-stylefname   'CSTYL'.
  is_lyout-info_fname   'CLINE'.
  is_lyout-ctab_fname   'CCELL'.
ENDFORM.

FORM set_excld CHANGING pt_exclude TYPE ui_functions.
  DATA ls_exclude TYPE ui_func.
  ls_exclude cl_gui_alv_grid=>mc_fc_check.
  APPEND ls_exclude TO pt_exclude.
  ls_exclude cl_gui_alv_grid=>mc_fc_refresh.
  APPEND ls_exclude TO pt_exclude.
  ls_exclude cl_gui_alv_grid=>mc_fc_loc_cut.
  APPEND ls_exclude TO pt_exclude.
  ls_exclude cl_gui_alv_grid=>mc_fc_loc_copy.
  APPEND ls_exclude TO pt_exclude.
  ls_exclude cl_gui_alv_grid=>mc_fc_loc_paste.
  APPEND ls_exclude TO pt_exclude.
  ls_exclude cl_gui_alv_grid=>mc_fc_loc_paste_new_row.
  APPEND ls_exclude TO pt_exclude.
  ls_exclude cl_gui_alv_grid=>mc_fc_loc_undo.
  APPEND ls_exclude TO pt_exclude.
  ls_exclude cl_gui_alv_grid=>mc_mb_sum.
  APPEND ls_exclude TO pt_exclude.
  ls_exclude cl_gui_alv_grid=>mc_mb_subtot.
  APPEND ls_exclude TO pt_exclude.
  ls_exclude cl_gui_alv_grid=>mc_fc_print.
  APPEND ls_exclude TO pt_exclude.
  ls_exclude cl_gui_alv_grid=>mc_fc_graph.
  APPEND ls_exclude TO pt_exclude.
  ls_exclude cl_gui_alv_grid=>mc_fc_info.
  APPEND ls_exclude TO pt_exclude.
ENDFORM.

FORM alv_displ_out.
  CALL METHOD ob_grid->set_table_for_first_display
    EXPORTING
      is_variant                    is_varnt      "DISVARIANT
      i_save                        'A'           "CHAR1 - X:Global - U:User - A:All - Space:No
      i_default                     'X'           "CHAR1 - X:Allowed - Space:not
      is_layout                     is_lyout      "LVC_S_LAYO
      is_print                      is_print      "LVC_S_PRNT
      it_toolbar_excluding          it_excld      "UI_FUNCTIONS
    CHANGING
      it_outtab                     it_print
      it_fieldcatalog               it_fcatl      "LVC_T_FCAT
      it_sort                       it_sort       "LVC_T_SORT
    EXCEPTIONS
      invalid_parameter_combination 1
      program_error                 2
      too_many_lines                3
      OTHERS                        4.
ENDFORM.

FORM alv_color_set USING p_fld p_col p_int p_inv.
  IF it_color IS INITIAL.
    MOVE p_fld      TO wa_color-fname.
    MOVE p_col      TO wa_color-color-col.
    MOVE p_int      TO wa_color-color-int.
    MOVE p_inv      TO wa_color-color-inv.
    APPEND wa_color TO it_color.

    wa_print-ccell[] it_color[].
  ELSE.
    CLEARvi_colorwa_color.
    LOOP AT it_color INTO wa_color WHERE fname p_fld.
      vi_color vi_color + 1.
      MOVE p_fld      TO wa_color-fname.
      MOVE p_col      TO wa_color-color-col.
      MOVE p_int      TO wa_color-color-int.
      MOVE p_inv      TO wa_color-color-inv.
      MODIFY it_color FROM wa_color.
      EXIT.
      CLEAR wa_color.
    ENDLOOP.

    IF vi_color IS INITIAL.
      MOVE p_fld      TO wa_color-fname.
      MOVE p_col      TO wa_color-color-col.
      MOVE p_int      TO wa_color-color-int.
      MOVE p_inv      TO wa_color-color-inv.
      APPEND wa_color TO it_color.
    ENDIF.

    wa_print-ccell[] it_color[].
  ENDIF.
ENDFORM.

*----------------------------------------------------------------------*
FORM alv_field_cat USING p_fset p_cpos p_olen p_fild p_rtab p_rfld p_ftyp p_qcif p_text p_dtype.
  CLEAR wa_fcatl.

  wa_fcatl-icon             p_fset+1(1).

  IF p_olen > 2.
    wa_fcatl-outputlen      p_olen.       "06
  ENDIF.

  vs_fcfld p_fild.
  TRANSLATE vs_fcfld TO UPPER CASE.
  wa_fcatl-fieldname        vs_fcfld.     "07

  vs_fcfld p_rfld.
  TRANSLATE vs_fcfld TO UPPER CASE.
  wa_fcatl-ref_field        vs_fcfld.     "09

  vs_fcfld p_rtab.
  TRANSLATE vs_fcfld TO UPPER CASE.
  wa_fcatl-ref_table        vs_fcfld.     "08

  vs_fcfld p_qcif.
  TRANSLATE vs_fcfld TO UPPER CASE.

  vi_fclen strlenp_text ).
  IF vi_fclen > 10.
    wa_fcatl-scrtext_l      p_text.
  ELSE.
    wa_fcatl-scrtext_m      p_text.
    wa_fcatl-scrtext_s      p_text.
  ENDIF.

  wa_fcatl-datatype p_dtype.

  wa_fcatl-col_pos          p_cpos.

  APPEND wa_fcatl TO it_fcatl.
ENDFORM.

Screen Flow Logic



Screen Layout


1. Sub Screen
2. Container


Run Abap






Upload result






Comments

Popular posts from this blog

IT Asset Management Dengan PHP MySQL

PHP MySql CRUD Dengan Konsep MVC

Cara Sederhana Multi Insert Data Dengan PHP - MySQL