ABAP BDC程序DEMO

REPORT YYHD_CALL_BDC_TEST.


DATA:   BDCDATA LIKE BDCDATA    OCCURS WITH HEADER LINE.
DATA:   MESSTAB LIKE BDCMSGCOLL OCCURS WITH HEADER LINE.

*DATA CTUMODE LIKE CTU_PARAMS-DISMODE VALUE 'A'.  "调试模式(显示所有屏幕)
DATA CTUMODE LIKE CTU_PARAMS-DISMODE VALUE 'N'.  "执行模式(不显示屏幕)
DATA CUPDATE LIKE CTU_PARAMS-UPDMODE VALUE 'L'.  "更新模式

START-OF-SELECTION.

  PERFORM FRM_BDC_FB01.
*&---------------------------------------------------------------------*
*&      Form  FRM_BDC_FB01
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM FRM_BDC_FB01 .
  "第一屏幕
  PERFORM BDC_DYNPRO      USING 'SAPMF05A'     '0100'.          "屏幕
  PERFORM BDC_FIELD       USING 'BDC_CURSOR'   'RF05A-NEWKO'.   "光标位置
  PERFORM BDC_FIELD       USING 'BDC_OKCODE'   '/00'.           "功能码
  PERFORM BDC_FIELD       USING 'BKPF-BLDAT'   SY-DATUM.        "凭证日期
  PERFORM BDC_FIELD       USING 'BKPF-BLART'   'AB'.            "凭证类型
  PERFORM BDC_FIELD       USING 'BKPF-BUKRS'   '1001'.          "公司代码
  PERFORM BDC_FIELD       USING 'BKPF-BUDAT'   SY-DATUM.        "过账日期
  PERFORM BDC_FIELD       USING 'BKPF-WAERS'   'CNY'.           "货币码
  PERFORM BDC_FIELD       USING 'RF05A-NEWBS'  '40'.            "记账码
  PERFORM BDC_FIELD       USING 'RF05A-NEWKO'  '1001010000'.    "科目

  "第二屏幕
  PERFORM BDC_DYNPRO      USING 'SAPMF05A'     '0300'.          "屏幕
  PERFORM BDC_FIELD       USING 'BDC_CURSOR'   'BSEG-WRBTR'.    "光标位置
  PERFORM BDC_FIELD       USING 'BDC_OKCODE'   '/00'.           "功能码
  PERFORM BDC_FIELD       USING 'BSEG-WRBTR'   '100'.           "金额

  "第三屏幕
  PERFORM BDC_DYNPRO      USING 'SAPLKACB'     '0002'.          "屏幕
  PERFORM BDC_FIELD       USING 'BDC_CURSOR'   'COBL-PRCTR'.    "光标位置
  PERFORM BDC_FIELD       USING 'BDC_OKCODE'   '=ENTE'.         "功能码
  PERFORM BDC_FIELD       USING 'COBL-PRCTR'   '2001A00002'.    "利润中心

  "第四屏幕
  PERFORM BDC_DYNPRO      USING 'SAPMF05A'     '0330'.
  PERFORM BDC_FIELD       USING 'BDC_CURSOR'   'BSEG-RSTGR'.
  PERFORM BDC_FIELD       USING 'BDC_OKCODE'   '/00'.
  PERFORM BDC_FIELD       USING 'BSEG-RSTGR'   '001'.

  "第五屏幕
  PERFORM BDC_DYNPRO      USING 'SAPMF05A'     '0330'.
  PERFORM BDC_FIELD       USING 'BDC_CURSOR'   'RF05A-NEWKO'.
  PERFORM BDC_FIELD       USING 'BDC_OKCODE'   '/00'.
  PERFORM BDC_FIELD       USING 'BSEG-RSTGR'    '001'.
  PERFORM BDC_FIELD       USING 'RF05A-NEWBS'   '50'.
  PERFORM BDC_FIELD       USING 'RF05A-NEWKO'   '1001010000'.

  "第六屏幕
  PERFORM BDC_DYNPRO      USING 'SAPMF05A'     '0300'.
  PERFORM BDC_FIELD       USING 'BDC_CURSOR'   'BSEG-WRBTR'.
  PERFORM BDC_FIELD       USING 'BDC_OKCODE'   '/00'.
  PERFORM BDC_FIELD       USING 'BSEG-WRBTR'   '100'.

  "第七屏幕
  PERFORM BDC_DYNPRO      USING 'SAPLKACB'     '0002'.
  PERFORM BDC_FIELD       USING 'BDC_CURSOR'   'COBL-PRCTR'.
  PERFORM BDC_FIELD       USING 'BDC_OKCODE'   '=ENTE'.
  PERFORM BDC_FIELD       USING 'COBL-PRCTR'   '2001A00002'.    "利润中心

  "第八屏幕
  PERFORM BDC_DYNPRO      USING 'SAPMF05A'     '0330'.
  PERFORM BDC_FIELD       USING 'BDC_CURSOR'   'BSEG-RSTGR'.
  PERFORM BDC_FIELD       USING 'BDC_OKCODE'   '/00'.
  PERFORM BDC_FIELD       USING 'BSEG-RSTGR'   '001'.

  "第九屏幕
  PERFORM BDC_DYNPRO      USING 'SAPMF05A'     '0330'.
  PERFORM BDC_FIELD       USING 'BDC_CURSOR'   'BSEG-RSTGR'.
  PERFORM BDC_FIELD       USING 'BDC_OKCODE'   '=BU'.
  PERFORM BDC_FIELD       USING 'BSEG-RSTGR'   '001'.


  "调用FB01事务码
  CALL TRANSACTION 'FB01' USING BDCDATA
                          MODE  CTUMODE
                          UPDATE  CUPDATE
                          MESSAGES INTO MESSTAB
                            .
  "BDC消息解析
  DATA LT_RETURN TYPE TABLE OF BAPIRET2.
  CALL FUNCTION 'CONVERT_BDCMSGCOLL_TO_BAPIRET2'
    TABLES
      IMT_BDCMSGCOLL = MESSTAB
      EXT_RETURN     = LT_RETURN.
  "消息类型: S 成功 E 错误 W 警告 I 信息 A 中断
  LOOP AT LT_RETURN INTO DATA(LS_RETURN)
       WHERE TYPE 'E'
         OR  TYPE 'A'.
    EXIT.
  ENDLOOP.
  IF SY-SUBRC  0.
    MESSAGE '凭证创建失败' TYPE 'S'.
  ELSE.
    READ TABLE LT_RETURN INDEX ASSIGNING FIELD-SYMBOL(<LFC_RETURN>).
    WRITE <LFC_RETURN>-MESSAGE_V1.
  ENDIF.


  CLEAR BDCDATA.

ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  BDC_DYNPRO
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_0034   text
*      -->P_0035   text
*----------------------------------------------------------------------*
FORM BDC_DYNPRO  USING  PROGRAM DYNPRO.
  CLEAR BDCDATA.
  BDCDATA-PROGRAM  PROGRAM.
  BDCDATA-DYNPRO   DYNPRO.
  BDCDATA-DYNBEGIN 'X'.
  APPEND BDCDATA.
ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  BDC_FIELD
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_0234   text
*      -->P_0235   text
*----------------------------------------------------------------------*
FORM BDC_FIELD  USING   FNAM  FVAL.
  CLEAR BDCDATA.
  BDCDATA-FNAM = FNAM.
  BDCDATA-FVAL = FVAL.
  APPEND BDCDATA.
ENDFORM.

posted @ 2021-12-07 14:32  万有引力啊  阅读(396)  评论(0)    收藏  举报