传说中的SAP BDC 创建物料

*&---------------------------------------------------------------------*
*& Report  ZDZBDC_MM2
*&---------------------------------------------------------------------*

REPORT ZDZBDC_MM2 NO STANDARD PAGE HEADING.

DATADATASET(132TYPE C VALUE 'ZDZBDC_MM1',
      G_MESSAGE(100TYPE C,
      FILENAME TYPE STRING,
      G_REPID LIKE SY-REPID.

DATABEGIN OF BDCDATA OCCURS 0.
        INCLUDE STRUCTURE BDCDATA.
DATAEND OF BDCDATA.

DATABEGIN OF MSGTAB OCCURS 0.
        INCLUDE STRUCTURE BDCMSGCOLL.
DATAEND OF MSGTAB.

DATABEGIN OF MY_DATA,
        MATNR(018),    "物料号
        MTART(004),    "物料类型
        MAKTX(040),    "物料描述
        MATKL(009),    "物料组
      END OF MY_DATA.

DATA: IT_DATA LIKE MY_DATA OCCURS 0.

SELECTION-SCREENBEGIN OF BLOCK SCR1 WITH FRAME TITLE TEXT-001.

  PARAMETERS FN LIKE RLGRAP-FILENAME MEMORY ID MO1. "RLGRAP-FILENAME类型 为 CHAR 128

  PARAMETERS: P_UPDATE(1TYPE C DEFAULT 'S',  " "A" Asynchronous update. "S" Synchronous processing. "L" Local update. Other As for "A".
              P_MODE(1DEFAULT 'E'.           ""A" Processing with display of screens  "E" Display of screens only if an error occurs
                                               ""P" Processing without display of the screens.  "N" Processing without display of screens. Others Like "A".

SELECTION-SCREENEND OF BLOCK SCR1.

AT SELECTION-SCREEN ON VALUE-REQUEST FOR FN.

  DATA: I_RC         TYPE I,
        I_FILETABLE  TYPE FILETABLE.
  CALL METHOD CL_GUI_FRONTEND_SERVICES=>FILE_OPEN_DIALOG
    EXPORTING
      WINDOW_TITLE            = '选择数据文件'
      FILE_FILTER             = '文本文件 (*.txt)|*.TXT|全部文件 (*.*)|*.*|'
      MULTISELECTION          = SPACE
    CHANGING
      FILE_TABLE              = I_FILETABLE
      RC                      = I_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 AND I_RC = 1.
    READ TABLE I_FILETABLE INTO FN INDEX 1.
    FILENAME = FN.
  ENDIF.

INITIALIZATION.
G_REPID = SY-REPID.
START-OF-SELECTION.

CALL FUNCTION 'GUI_UPLOAD'
  EXPORTING
    FILENAME                          = FILENAME    "文件名 必须为 STRING 类型
    FILETYPE                          = 'ASC'
    HAS_FIELD_SEPARATOR               = 'X'         "可以去掉前面的加入TAB 分隔符,如果不去掉刚会出现#,并且会挤掉后面字段的二位
  TABLES
    DATA_TAB                          = IT_DATA.    "内表

LOOP AT IT_DATA INTO MY_DATA.

  PERFORM BDC_DYNPRO      USING 'SAPLMGMM' '0060'.

  PERFORM BDC_FIELD       USING 'BDC_CURSOR'
                                'RMMG1-MATNR'.

  PERFORM BDC_FIELD       USING 'BDC_OKCODE'
                                '=ENTR'.

  PERFORM BDC_FIELD       USING 'RMMG1-MATNR'
                                MY_DATA-MATNR. "物料号

  PERFORM BDC_FIELD       USING 'RMMG1-MBRSH'  "行业类型
                                'M'.

  PERFORM BDC_FIELD       USING 'RMMG1-MTART'
                                MY_DATA-MTART. "物料类型

  PERFORM BDC_DYNPRO      USING 'SAPLMGMM' '0070'.

  PERFORM BDC_FIELD       USING 'BDC_CURSOR'
                                'MSICHTAUSW-DYTXT(02)'.

  PERFORM BDC_FIELD       USING 'BDC_OKCODE'
                                '=ENTR'.

  PERFORM BDC_FIELD       USING 'MSICHTAUSW-KZSEL(01)' "此为选的基本视图一,选中的为X
                                'X'.

  PERFORM BDC_FIELD       USING 'MSICHTAUSW-KZSEL(02)' "此为选的基本视图二,选中的为X
                                'X'.

  PERFORM BDC_DYNPRO      USING 'SAPLMGMM' '4004'.

  PERFORM BDC_FIELD       USING 'BDC_OKCODE'
                                '=BU'.

  PERFORM BDC_FIELD       USING 'MAKT-MAKTX'      "物料描述
                                MY_DATA-MAKTX.

  PERFORM BDC_FIELD       USING 'BDC_CURSOR'
                                'MARA-MATKL'.

  PERFORM BDC_FIELD       USING 'MARA-MEINS'
                                'PCS'.            "计量单位

  PERFORM BDC_FIELD       USING 'MARA-MATKL'
                                MY_DATA-MATKL.    "物料组

  PERFORM BDC_FIELD       USING 'MARA-MTPOS_MARA' "普通项目类别组
                                ''.
  CALL TRANSACTION 'MM01' USING BDCDATA MODE P_MODE UPDATE P_UPDATE MESSAGES INTO MSGTAB.

  REFRESH: BDCDATA.       "此处不能用CLEAR: BDCDATA,但可以用 CLEAR: BDCDATA[].因为BDCDATA 是带表头的内表  BEGIN OF BDCDATA OCCURS 0.
ENDLOOP.

LOOP AT MSGTAB.                            "输出BDC的执行消息

    CALL FUNCTION 'MESSAGE_TEXT_BUILD'
      EXPORTING
        MSGID               = MSGTAB-MSGID "Message ID
        MSGNR               = MSGTAB-MSGNR
        MSGV1               = MSGTAB-MSGV1 "此为物料号
        MSGV2               = MSGTAB-MSGV2
        MSGV3               = MSGTAB-MSGV3
        MSGV4               = MSGTAB-MSGV4
      IMPORTING
        MESSAGE_TEXT_OUTPUT = G_MESSAGE.

    WRITE :/ MSGTAB-MSGTYP, G_MESSAGE.

  ENDLOOP.

FORM BDC_DYNPRO USING PROGRAM DYNPRO.
  CLEAR: BDCDATA.
  BDCDATA-PROGRAM  = PROGRAM.
  BDCDATA-DYNPRO   = DYNPRO.
  BDCDATA-DYNBEGIN = 'X'.
  APPEND BDCDATA.
ENDFORM.

FORM BDC_FIELD USING FNAM FVAL.
  CLEAR: BDCDATA.
  BDCDATA-FNAM  = FNAM.
  BDCDATA-FVAL   = FVAL.
  APPEND BDCDATA.
ENDFORM.

你可能感兴趣的:(upload,filter,SAP,dialog,Parameters,dataset)