SAP BDC学习

学习资料:
SAP ABAP BDC 的使用及代码详解

练习背景

用BDC连续创建多个物料

BDC录制

事务码:SHDB

进入事务SHDB,进行BDC录屏
在这里插入图片描述
然后会跳转到MM01事务码下,进行创建物料的操作,可以参考最前面的资料
最后创建完物料如下图,点击保存后返回
在这里插入图片描述
返回后创建新程序,新程序会有BDC练习的代码,需要改一下,可参考最前面的资料
在这里插入图片描述在这里插入图片描述

根据系统BDC代码修改调用

代码

*&---------------------------------------------------------------------*
*& REPORT YTEST_003
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT YTEST_BDC
       NO STANDARD PAGE HEADING LINE-SIZE 255.

 INCLUDE BDCRECX1_S.
* THE CALL TRANSACTION USING IS CALLED WITH AUTHORITY-CHECK!
* IF YOU HAVE OWN AUTH.-CHECKS YOU CAN USE INCLUDE BDCRECX1 INSTEAD.
*INCLUDE BDCRECX1_S.

*PARAMETERS: DATASET(132) LOWER CASE.
***    DO NOT CHANGE - THE GENERATED DATA SECTION - DO NOT CHANGE    ***
*
*   IF IT IS NESSESARY TO CHANGE THE DATA SECTION USE THE RULES:
*   1.) EACH DEFINITION OF A FIELD EXISTS OF TWO LINES
*   2.) THE FIRST LINE SHOWS EXACTLY THE COMMENT
*       '* DATA ELEMENT: ' FOLLOWED WITH THE DATA ELEMENT
*       WHICH DESCRIBES THE FIELD.
*       IF YOU DON'T HAVE A DATA ELEMENT USE THE
*       COMMENT WITHOUT A DATA ELEMENT NAME
*   3.) THE SECOND LINE SHOWS THE FIELDNAME OF THE
*       STRUCTURE, THE FIELDNAME MUST CONSIST OF
*       A FIELDNAME AND OPTIONAL THE CHARACTER '_' AND
*       THREE NUMBERS AND THE FIELD LENGTH IN BRACKETS
*   4.) EACH FIELD MUST BE TYPE C.
*
*** GENERATED DATA SECTION WITH SPECIFIC FORMATTING - DO NOT CHANGE  ***
*DATA: BEGIN OF RECORD,
** DATA ELEMENT: MBRSH
*        MBRSH_001(001),
** DATA ELEMENT: MTART
*        MTART_002(004),
** DATA ELEMENT: XFELD
*        KZSEL_01_003(001),
** DATA ELEMENT: MAKTX
*        MAKTX_004(040),
** DATA ELEMENT: MEINS
*        MEINS_005(003),
** DATA ELEMENT: MATKL
*        MATKL_006(009),
*      END OF RECORD.

*** END GENERATED DATA SECTION ***

START-OF-SELECTION.
  TYPES:BEGIN OF WA,
          MBRSH TYPE MARA-MBRSH, "行业领域
          MTART TYPE MARA-MTART, "物料类型
          MAKTX TYPE MAKT-MAKTX, "物料描述
          MEINS TYPE MARA-MEINS, "单位
          MATKL TYPE MARA-MATKL, "物料组
        END OF WA.

  DATA: ITAB    TYPE TABLE OF WA WITH HEADER LINE.

  DO 10 TIMES.
    ITAB-MBRSH = 'A'.
    ITAB-MTART = 'HALB'.
    ITAB-MAKTX = SY-INDEX."物料描述
    ITAB-MEINS = 'D'."单位
    ITAB-MATKL = '10.01.01'."物料组
    APPEND ITAB.
  ENDDO.

  LOOP AT ITAB.

*    READ DATASET DATASET INTO RECORD.
*    IF SY-SUBRC <> 0. EXIT. ENDIF.

    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-MBRSH'
                                  ITAB-MBRSH.
    PERFORM BDC_FIELD       USING 'RMMG1-MTART'
                                  ITAB-MTART.
    PERFORM BDC_DYNPRO      USING 'SAPLMGMM' '0070'.
    PERFORM BDC_FIELD       USING 'BDC_CURSOR'
                                  'MSICHTAUSW-DYTXT(01)'.
    PERFORM BDC_FIELD       USING 'BDC_OKCODE'
                                  '=ENTR'.
    PERFORM BDC_FIELD       USING 'MSICHTAUSW-KZSEL(01)'
                                  'X'.
    PERFORM BDC_DYNPRO      USING 'SAPLMGMM' '4004'.
    PERFORM BDC_FIELD       USING 'BDC_OKCODE'
                                  '/00'.
    PERFORM BDC_FIELD       USING 'MAKT-MAKTX'
                                  ITAB-MAKTX.
    PERFORM BDC_FIELD       USING 'BDC_CURSOR'
                                  'MARA-MATKL'.
    PERFORM BDC_FIELD       USING 'MARA-MEINS'
                                  ITAB-MEINS.
    PERFORM BDC_FIELD       USING 'MARA-MATKL'
                                  ITAB-MATKL.
    PERFORM BDC_DYNPRO      USING 'SAPLSPO1' '0300'.
    PERFORM BDC_FIELD       USING 'BDC_OKCODE'
                                  '=YES'.
    PERFORM BDC_TRANSACTION USING 'MM01'.

  ENDLOOP.

  PERFORM CLOSE_GROUP.

结果

在这里插入图片描述
在这里插入图片描述

不根据系统代码的BDC调用方式

这里的代码是根据SHDB创建的代码改的,不会有测试的选择屏幕。

代码

*&---------------------------------------------------------------------*
*& REPORT YTEST_003
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT YTEST_003 NO STANDARD PAGE HEADING LINE-SIZE 255.

DATA: GT_BDCDATA LIKE BDCDATA OCCURS 0 WITH HEADER LINE.
DATA: GT_MESSTAB LIKE BDCMSGCOLL OCCURS 0 WITH HEADER LINE.
DATA: GV_CTUMODE LIKE CTU_PARAMS-DISMODE VALUE 'N'.

TYPES:BEGIN OF WA,
        MBRSH TYPE MARA-MBRSH, "行业领域
        MTART TYPE MARA-MTART, "物料类型
        MAKTX TYPE MAKT-MAKTX, "物料描述
        MEINS TYPE MARA-MEINS, "单位
        MATKL TYPE MARA-MATKL, "物料组
      END OF WA.

DATA: ITAB    TYPE TABLE OF WA WITH HEADER LINE.


START-OF-SELECTION.
  WRITE:/,'开始测试BDC创建物料'.
  DO 10 TIMES.
    ITAB-MBRSH = 'A'.
    ITAB-MTART = 'HALB'.
    ITAB-MAKTX = SY-INDEX."物料描述
    ITAB-MEINS = 'D'."单位
    ITAB-MATKL = '10.01.01'."物料组
    APPEND ITAB.
  ENDDO.

  DATA: LV_MESSAGE TYPE STRING,
        LV_ERROR   TYPE C,
        LS_MESSA   TYPE ZSRETURN1.
  DATA:LV_ERRMESS1 TYPE STRING,
       LV_SUCMESS1 TYPE STRING.

  LOOP AT ITAB.
    CLEAR: LV_MESSAGE,LV_ERROR,LS_MESSA,LV_ERRMESS1,LV_SUCMESS1,GT_BDCDATA,GT_BDCDATA[]
    .
    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-MBRSH'
                                  ITAB-MBRSH.
    PERFORM BDC_FIELD       USING 'RMMG1-MTART'
                                  ITAB-MTART.
    PERFORM BDC_DYNPRO      USING 'SAPLMGMM' '0070'.
    PERFORM BDC_FIELD       USING 'BDC_CURSOR'
                                  'MSICHTAUSW-DYTXT(01)'.
    PERFORM BDC_FIELD       USING 'BDC_OKCODE'
                                  '=ENTR'.
    PERFORM BDC_FIELD       USING 'MSICHTAUSW-KZSEL(01)'
                                  'X'.
    PERFORM BDC_DYNPRO      USING 'SAPLMGMM' '4004'.
    PERFORM BDC_FIELD       USING 'BDC_OKCODE'
                                  '/00'.
    PERFORM BDC_FIELD       USING 'MAKT-MAKTX'
                                  ITAB-MAKTX.
    PERFORM BDC_FIELD       USING 'BDC_CURSOR'
                                  'MARA-MATKL'.
    PERFORM BDC_FIELD       USING 'MARA-MEINS'
                                  ITAB-MEINS.
    PERFORM BDC_FIELD       USING 'MARA-MATKL'
                                  ITAB-MATKL.
    PERFORM BDC_DYNPRO      USING 'SAPLSPO1' '0300'.
    PERFORM BDC_FIELD       USING 'BDC_OKCODE'
                                  '=YES'.

    CALL TRANSACTION 'MM01' USING GT_BDCDATA
    MODE   GV_CTUMODE
    UPDATE 'L'
    MESSAGES INTO GT_MESSTAB.

    LOOP AT GT_MESSTAB INTO DATA(LS_MESSTAB) WHERE MSGTYP = 'E' OR MSGTYP =  'A'.
      LV_ERROR = 'X'.
      CLEAR:LV_MESSAGE.
      PERFORM FRM_CONCATE_MESSAGE(SAPLZFGPP_INPLAN) USING LS_MESSTAB LV_MESSAGE.

      LV_ERRMESS1 = LV_MESSAGE.
    ENDLOOP.

    IF LV_ERROR IS INITIAL.
      LOOP AT GT_MESSTAB INTO LS_MESSTAB WHERE MSGTYP = 'S'.

        CLEAR:LV_MESSAGE.
        PERFORM FRM_CONCATE_MESSAGE(SAPLZFGPP_INPLAN) USING LS_MESSTAB LV_MESSAGE.

        LV_SUCMESS1 = LV_MESSAGE.
      ENDLOOP.
    ENDIF.

    IF LV_ERRMESS1 IS NOT INITIAL.
      WRITE:/,LV_ERRMESS1.
    ELSEIF LV_SUCMESS1 IS NOT INITIAL.
      WRITE:/,LV_SUCMESS1.
    ENDIF.
  ENDLOOP.

  WRITE:/,'测试BDC结束'.
*&---------------------------------------------------------------------*
*&      Form  BDC_DYNPRO
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_1254   text
*      -->P_1255   text
*----------------------------------------------------------------------*
FORM BDC_DYNPRO USING PROGRAM DYNPRO.
  CLEAR GT_BDCDATA.
  GT_BDCDATA-PROGRAM  = PROGRAM.
  GT_BDCDATA-DYNPRO   = DYNPRO.
  GT_BDCDATA-DYNBEGIN = 'X'.
  APPEND GT_BDCDATA.
ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  BDC_DYNPRO
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_1254   text
*      -->P_1255   text
*----------------------------------------------------------------------*
FORM BDC_FIELD USING FNAM FVAL.
  CLEAR GT_BDCDATA.
  DATA:LV_FVAL TYPE CHAR20.

  GT_BDCDATA-FNAM = FNAM.
  GT_BDCDATA-FVAL = FVAL.

  APPEND GT_BDCDATA.
ENDFORM.

结果

在这里插入图片描述
去查底表可以发现物料已创建
在这里插入图片描述

  • 16
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值