传说中的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.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

SAP爱好者

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值