BDC应用

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

REPORT  zmmr030 .


DATA BEGIN  OF itab  OCCURS  0 ,
  lineno ( 5 TYPE  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 .
DATA row_count  TYPE  .
DATA : BEGIN  OF i_log ,
    lineno ( 5 TYPE  c ,
    matnr  LIKE eord -matnr ,
    werks  LIKE eord -werks ,
    message1 ( 100 TYPE  c .
         INCLUDE  STRUCTURE bdcmsgcoll .
DATA : END  OF i_log .
DATA :it_log  LIKE i_log  OCCURS  WITH  HEADER  LINE .
DATA it_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 .
PARAMETERS pc_file ( 80 ) .
SELECTION-SCREEN  END  OF  BLOCK b1 .

SELECTION-SCREEN  BEGIN  OF  BLOCK b2  WITH  FRAME  TITLE t2 .
PARAMETERS p_chk1  RADIOBUTTON  GROUP  1 . "InterCompany
PARAMETERS p_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
   DATA l_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 .

   DATA BEGIN  OF i_excel  OCCURS  0 .
           INCLUDE  STRUCTURE alsmex_tabline .
   DATA END  OF i_excel .
   DATA l_answer ( 1 TYPE  c .
   DATA l_column  TYPE  i .
   FIELD-SYMBOLS <fs> .
   DATA l_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 .
   DATA msg_1 ( 50 TYPE  VALUE  '当前上传' .
   DATA msg_2 ( 50 TYPE  VALUE  '行' .
   DATA msg_3 ( 50 TYPE  VALUE  ',共' .
   DATA msg_4 ( 4 TYPE  .
  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 .
   CLEAR it_bdc ,it_bdc[]  ,it_bdcmsg it_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 .
   DATA msg_1 ( 50 TYPE  VALUE  '当前上传' .
   DATA msg_2 ( 50 TYPE  VALUE  '行' .
   DATA msg_3 ( 50 TYPE  VALUE  ',共' .
   DATA msg_4 ( 4 TYPE  .
  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 .
   CLEAR it_bdc ,it_bdc[]  ,it_bdcmsg it_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 .
   DATA l_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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值