BDC應用

*&---------------------------------------------------------------------*
*& Report  ZMMR030
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*

REPORT  zmmr030.


DATABEGIN OF itab OCCURS 0,
  lineno(5TYPE c,
  matnr LIKE eord-matnr,
  werks LIKE eord-werks,
  vdatu LIKE eord-vdatu,
  bdatu LIKE eord-bdatu,
  lifnr LIKE eord-lifnr,
  ekorg LIKE eord-ekorg,
  feskz LIKE rm06w-feskz,
  autet LIKE eord-autet,
  reswk LIKE eord-reswk,
  END OF itab.
DATArow_count TYPE .
DATA:BEGIN OF i_log,
    lineno(5TYPE c,
    matnr LIKE eord-matnr,
    werks LIKE eord-werks,
    message1(100TYPE c.
        INCLUDE STRUCTURE bdcmsgcoll.
DATA:END OF i_log.
DATA:it_log LIKE i_log OCCURS WITH HEADER LINE.
DATAit_bdc LIKE bdcdata OCCURS WITH HEADER LINE,
          it_bdcmsg LIKE bdcmsgcoll OCCURS WITH HEADER LINE.

CONSTANTS:
  c_begin_row TYPE VALUE 1,       "Beginning row of excel file
  c_begin_col TYPE VALUE 1,       "Beginning column of excel file
  c_end_row   TYPE VALUE 9999,    "Ending row of excel file
  c_end_col   TYPE VALUE 10.      "Ending column of excel file

SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE t1.
PARAMETERSpc_file(80).
SELECTION-SCREEN END OF BLOCK b1.

SELECTION-SCREEN BEGIN OF BLOCK b2 WITH FRAME TITLE t2.
PARAMETERSp_chk1 RADIOBUTTON GROUP 1."InterCompany
PARAMETERSp_chk2 DEFAULT 'X' RADIOBUTTON GROUP 1."External
SELECTION-SCREEN END OF BLOCK b2.

INITIALIZATION.
  t1  =  '選擇文件'.
  t2  =  '選擇類型'.

AT SELECTION-SCREEN ON VALUE-REQUEST FOR pc_file.
  PERFORM sub_find USING pc_file.

START-OF-SELECTION.
  PERFORM uploaddata.   "從PC中上傳文件到內表中
  DESCRIBE TABLE itab LINES row_count.
  IF p_chk2 'X'.
    LOOP AT itab.
      PERFORM get_bdc_external USING itab-lineno itab-matnr itab-werks itab-lifnr itab-vdatu itab-bdatu itab-ekorg itab-feskz itab-autet.
    ENDLOOP.
  ENDIF.
  IF p_chk1 'X'.
    LOOP AT itab.
      PERFORM get_bdc_intercompany USING itab-lineno itab-matnr itab-werks itab-lifnr itab-vdatu itab-bdatu itab-ekorg itab-feskz itab-autet itab-reswk.
    ENDLOOP.
  ENDIF.
  IF  sy-subrc 0.
    PERFORM showlog.
  ELSE.
    MESSAGE 'FALSE' TYPE 'I'.
  ENDIF.


*&---------------------------------------------------------------------*
*&      Form  sub_find
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->PC_FILE    text
*----------------------------------------------------------------------*
FORM sub_find USING pc_file.
* Data for open dialog
  DATAl_filetab   TYPE filetable,
        l_rc        TYPE i.
  CLEAR l_filetab.
  REFRESH l_filetab.
* Open dialog
  CALL METHOD cl_gui_frontend_services=>file_open_dialog
    EXPORTING
*     WINDOW_TITLE         = 'SAP Custom - Open File'
*     DEFAULT_EXTENSION    =
      default_filename     '*.xls'
*     FILE_FILTER          = '*.xls'
      initial_directory    'D:\'
      multiselection       ''
    CHANGING
      file_table           l_filetab
      rc                   l_rc
    EXCEPTIONS
      cntl_error           1
      error_no_gui         2
      not_supported_by_gui 3
      OTHERS               4.
* Get file path
  CHECK l_rc EQ 1.
  READ TABLE l_filetab INDEX INTO pc_file.
ENDFORM.                    "sub_find


*&---------------------------------------------------------------------*
*&      2.RFORM uploaddata.   "從PC中上傳文件到內表中
*&---------------------------------------------------------------------*
FORM uploaddata.

  DATABEGIN OF i_excel OCCURS 0.
          INCLUDE STRUCTURE alsmex_tabline.
  DATAEND OF i_excel.
  DATAl_answer(1TYPE c.
  DATAl_column TYPE i.
  FIELD-SYMBOLS<fs>.
  DATAl_pathname LIKE rlgrap-filename.

  MOVE pc_file TO l_pathname.
  CALL FUNCTION 'ALSM_EXCEL_TO_INTERNAL_TABLE'
    EXPORTING
      filename                l_pathname
      i_begin_col             c_begin_col
      i_begin_row             c_begin_row
      i_end_col               c_end_col
      i_end_row               c_end_row
    TABLES
      intern                  i_excel
    EXCEPTIONS
      inconsistent_parameters 1
      upload_ole              2
      OTHERS                  3.
  IF sy-subrc <> 0.
    MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
          WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
  ELSE.
    IF i_excel[] IS INITIAL.
      CALL FUNCTION 'POPUP_TO_CONFIRM_WITH_MESSAGE'
        EXPORTING
*         DEFAULTOPTION  = 'Y'
          diagnosetext1  'No data in excel'
*         DIAGNOSETEXT2  = ' '
*         DIAGNOSETEXT3  = ' '
          textline1      'No data in excel'
*         TEXTLINE2      = ' '
          titel          'Confirm'
*         START_COLUMN   = 25
*         START_ROW      = 6
*         CANCEL_DISPLAY = 'X'
        IMPORTING
          answer         l_answer.
    ELSE.
      DELETE i_excel WHERE row '0001'.
      SORT i_excel BY row col.
      LOOP AT i_excel.
        MOVE i_excel-col TO l_column.
        ASSIGN COMPONENT l_column OF STRUCTURE itab TO <fs>.
        MOVE i_excel-value TO <fs>.
        AT END OF row.
          APPEND itab.
          CLEAR itab.
        ENDAT.
      ENDLOOP.
    ENDIF.
  ENDIF.
ENDFORM.                    "uploaddata
*&---------------------------------------------------------------------*
*&      Form  get_bdc_external
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM get_bdc_external USING lineno matnr werks lifnr vdatu bdatu ekorg feskz autet.
  DATAmsg_1(50TYPE VALUE '當前上傳'.
  DATAmsg_2(50TYPE VALUE '行'.
  DATAmsg_3(50TYPE VALUE ',共'.
  DATAmsg_4(4TYPE .
  msg_4 row_count.
  CONCATENATE msg_1 lineno INTO msg_1.
  CONCATENATE msg_1 msg_2 INTO msg_1.
  CONCATENATE msg_1 msg_3 INTO msg_1.
  CONCATENATE msg_1 msg_4 INTO msg_1.
  CONCATENATE msg_1 msg_2 INTO msg_1.
    CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'
    EXPORTING
      text msg_1.
  PERFORM bdc_dynpro      USING 'SAPLMEOR' '0200'.
  PERFORM bdc_field       USING 'BDC_CURSOR' 'EORD-MATNR'.
  PERFORM bdc_field       USING 'BDC_OKCODE' '/00'.
  PERFORM bdc_field       USING 'EORD-MATNR' matnr."物料號
  PERFORM bdc_field       USING 'EORD-WERKS' werks."工廠
  PERFORM bdc_dynpro      USING 'SAPLMEOR' '0205'.
  PERFORM bdc_field       USING 'BDC_CURSOR' 'EORD-AUTET(01)'.
  PERFORM bdc_field       USING 'BDC_OKCODE' '/00'.
  PERFORM bdc_field       USING 'EORD-VDATU(01)' vdatu.
  PERFORM bdc_field       USING 'EORD-BDATU(01)' bdatu.
  PERFORM bdc_field       USING 'EORD-LIFNR(01)'  lifnr."供應商代號
  PERFORM bdc_field       USING 'EORD-EKORG(01)'  ekorg."採購組織
  PERFORM bdc_field       USING 'RM06W-FESKZ(01)'  feskz."定貨源
  PERFORM bdc_field       USING 'EORD-AUTET(01)'  autet."mrp
  PERFORM bdc_dynpro      USING 'SAPLMEOR' '0205'.
  PERFORM bdc_field       USING 'BDC_CURSOR'  'EORD-AUTET(01)'.
  PERFORM bdc_field       USING 'BDC_OKCODE' '=BU'.
  CALL TRANSACTION 'ME01' USING it_bdc
                             MODE 'N'"A前臺顯示、N後臺運行
                             UPDATE 'S'
                             MESSAGES INTO it_bdcmsg.
  it_log-matnr matnr.
  it_log-werks werks.
  it_log-lineno lineno.
  LOOP AT it_bdcmsg.
    MESSAGE ID it_bdcmsg-msgid
            TYPE it_bdcmsg-msgtyp
            NUMBER it_bdcmsg-msgnr
    WITH  it_bdcmsg-msgv1  it_bdcmsg-msgv2  it_bdcmsg-msgv3  it_bdcmsg-msgv4
    INTO   it_log-message1.
    it_log-msgtyp it_bdcmsg-msgtyp.
    it_log-dynumb it_bdcmsg-dynumb.
    it_log-tcode it_bdcmsg-tcode.
    it_log-msgnr it_bdcmsg-msgnr.
    it_log-msgid it_bdcmsg-msgid.
    APPEND it_log.
  ENDLOOP.
  CLEARit_bdc,it_bdc[] ,it_bdcmsgit_bdcmsg[].
ENDFORM.                    "get_bdc_external

*&---------------------------------------------------------------------*
*&      Form  get_bdc_intercompany
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM get_bdc_intercompany USING lineno matnr werks lifnr vdatu bdatu ekorg feskz autet reswk.
  DATAmsg_1(50TYPE VALUE '當前上傳'.
  DATAmsg_2(50TYPE VALUE '行'.
  DATAmsg_3(50TYPE VALUE ',共'.
  DATAmsg_4(4TYPE .
  msg_4 row_count .
  CONCATENATE msg_1 lineno INTO msg_1.
  CONCATENATE msg_1 msg_2 INTO msg_1.
  CONCATENATE msg_1 msg_3 INTO msg_1.
  CONCATENATE msg_1 msg_4 INTO msg_1.
  CONCATENATE msg_1 msg_2 INTO msg_1.
  CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'
    EXPORTING
      text msg_1.
  PERFORM bdc_dynpro      USING 'SAPLMEOR' '0200'.
  PERFORM bdc_field       USING 'BDC_CURSOR' 'EORD-MATNR'.
  PERFORM bdc_field       USING 'BDC_OKCODE' '/00'.
  PERFORM bdc_field       USING 'EORD-MATNR' matnr."物料號
  PERFORM bdc_field       USING 'EORD-WERKS' werks."工廠
  PERFORM bdc_dynpro      USING 'SAPLMEOR' '0205'.
  PERFORM bdc_field       USING 'BDC_CURSOR' 'EORD-AUTET(01)'.
  PERFORM bdc_field       USING 'BDC_OKCODE' '/00'.
  PERFORM bdc_field       USING 'EORD-VDATU(01)' vdatu.
  PERFORM bdc_field       USING 'EORD-BDATU(01)' bdatu.
  PERFORM bdc_field       USING 'EORD-LIFNR(01)' lifnr."供應商代號
  PERFORM bdc_field       USING 'EORD-EKORG(01)' ekorg."採購組織
  PERFORM bdc_field       USING 'EORD-RESWK(01)'  reswk."工廠
  PERFORM bdc_field       USING 'RM06W-FESKZ(01)'  feskz."定貨源
  PERFORM bdc_field       USING 'EORD-AUTET(01)'  autet."mrp
  PERFORM bdc_dynpro      USING 'SAPLMEOR' '0205'.
  PERFORM bdc_field       USING 'BDC_CURSOR'  'EORD-AUTET(01)'.
  PERFORM bdc_field       USING 'BDC_OKCODE' '=BU'.
  CALL TRANSACTION 'ME01' USING it_bdc
                             MODE 'N'"A前臺顯示、N後臺運行
                             UPDATE 'S'
                             MESSAGES INTO it_bdcmsg.
  it_log-matnr matnr.
  it_log-werks werks.
  it_log-lineno lineno.
  LOOP AT it_bdcmsg.
    MESSAGE ID it_bdcmsg-msgid
            TYPE it_bdcmsg-msgtyp
            NUMBER it_bdcmsg-msgnr
    WITH  it_bdcmsg-msgv1  it_bdcmsg-msgv2  it_bdcmsg-msgv3  it_bdcmsg-msgv4
    INTO   it_log-message1.
    it_log-msgtyp it_bdcmsg-msgtyp.
    it_log-dynumb it_bdcmsg-dynumb.
    it_log-tcode it_bdcmsg-tcode.
    it_log-msgnr it_bdcmsg-msgnr.
    it_log-msgid it_bdcmsg-msgid.
  ENDLOOP.
  APPEND it_log.
  CLEARit_bdc,it_bdc[] ,it_bdcmsgit_bdcmsg[].
ENDFORM.                    "get_bdc_intercompany

*&---------------------------------------------------------------------*
*&      Form  BDC_DYNPRO
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->PROGRAM    text
*      -->DYNPRO     text
*----------------------------------------------------------------------*
FORM bdc_dynpro USING program dynpro.
  CLEAR it_bdc.
  it_bdc-program  program.
  it_bdc-dynpro   dynpro.
  it_bdc-dynbegin 'X'.
  APPEND it_bdc.
ENDFORM.                    "BDC_DYNPRO

*----------------------------------------------------------------------*
*        Insert field                                                  *
*----------------------------------------------------------------------*
FORM bdc_field USING fnam fval.
  "IF FVAL <> NODATA.
  CLEAR it_bdc.
  it_bdc-fnam fnam.
  it_bdc-fval fval.
  APPEND it_bdc.
  "ENDIF.
ENDFORM.                    "bdc_field
*&---------------------------------------------------------------------*
*&      Form  showlog
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM showlog.
  DATA:alv_fieldcat TYPE slis_t_fieldcat_alv.
  DATA:wa_alv_fieldcat TYPE LINE OF slis_t_fieldcat_alv.
  DATA:alv_layout TYPE  slis_layout_alv.
  DATAl_cellcolor TYPE slis_specialcol_alv .
  alv_layout-colwidth_optimize 'X'."自動列寬

*  ALV_LAYOUT-NO_MIN_LINESIZE   = ''.
* ALV_LAYOUT-BOX_FIELDNAME = 'SET'.
  "  alv_layout-info_fieldname = 'LINECOLOR'."設置行顏色
  " alv_layout-coltab_fieldname = 'COLTAB'."設置單元格顏色

  CLEAR wa_alv_fieldcat.
  REFRESH alv_fieldcat.
  CLEAR wa_alv_fieldcat.
  wa_alv_fieldcat-fieldname 'TCODE'.
  wa_alv_fieldcat-seltext_m 'T-CODE'.
  APPEND wa_alv_fieldcat TO alv_fieldcat.

  CLEAR wa_alv_fieldcat.
  wa_alv_fieldcat-fieldname 'LINENO'.
  wa_alv_fieldcat-seltext_m '行號'.
  wa_alv_fieldcat-no_zero 'X'.
  APPEND wa_alv_fieldcat TO alv_fieldcat.

  CLEAR wa_alv_fieldcat.
  wa_alv_fieldcat-fieldname 'MATNR'.
  wa_alv_fieldcat-seltext_m '物料號'.
  wa_alv_fieldcat-no_zero 'X'.
  APPEND wa_alv_fieldcat TO alv_fieldcat.

  CLEAR wa_alv_fieldcat.
  wa_alv_fieldcat-fieldname 'WERKS'.
  wa_alv_fieldcat-seltext_m '工廠'.
  wa_alv_fieldcat-no_zero 'X'.
  APPEND wa_alv_fieldcat TO alv_fieldcat.

  CLEAR wa_alv_fieldcat.
  wa_alv_fieldcat-fieldname 'MSGTYP'.
  wa_alv_fieldcat-seltext_m 'MSGTYP'.
  wa_alv_fieldcat-no_zero 'X'.
  APPEND wa_alv_fieldcat TO alv_fieldcat.

  CLEAR wa_alv_fieldcat.
  wa_alv_fieldcat-fieldname 'DYNUMB'.
  wa_alv_fieldcat-seltext_m 'DYNUMB'.
  wa_alv_fieldcat-no_zero 'X'.
  APPEND wa_alv_fieldcat TO alv_fieldcat.

  CLEAR wa_alv_fieldcat.
  wa_alv_fieldcat-fieldname 'MSGNR'.
  wa_alv_fieldcat-seltext_m 'MSGNR'.
  APPEND wa_alv_fieldcat TO alv_fieldcat.

  CLEAR wa_alv_fieldcat.
  wa_alv_fieldcat-fieldname 'MSGID'.
  wa_alv_fieldcat-seltext_m 'MESGID'.
  APPEND wa_alv_fieldcat TO alv_fieldcat.

  CLEAR wa_alv_fieldcat.
  wa_alv_fieldcat-fieldname 'MESSAGE1'.
  wa_alv_fieldcat-seltext_m '信息內容'.
  APPEND wa_alv_fieldcat TO alv_fieldcat.

  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
    EXPORTING
      i_callback_program sy-repid
      is_layout          alv_layout
      it_fieldcat        alv_fieldcat
      i_grid_title       '運行日誌'"標題
                                 "  IT_EVENT_EXIT          = GIT_EVENT_EXIT                         "重要
                                "  I_CALLBACK_USER_COMMAND           = 'FRM_UCOMM'             "調用用戶點擊事件
                                " I_CALLBACK_PF_STATUS_SET = 'SET_PF'  "設置打印按鈕
    TABLES
      t_outtab           it_log[]
    EXCEPTIONS
      program_error      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.
ENDFORM.                    "showlog
發佈了189 篇原創文章 · 獲贊 27 · 訪問量 111萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章