快速开发之BDC模板程序

BDC的调试和创建参考用到的TCODE为SHDB,SM35;

以下为网上收索的一个的BDC程序事例,


*&—————————————————————————————–*

*& 程序名   REPORT  ZWLP_BDC                                                          *
*&—————————————————————————————–*
*& Author              :  WINSON
*& Create Date         :  2012-12-29                                                    *
*& Program Type        :   Enhancement
*& Logical DB          : 「未使用」                                                        *
*& Text Elements                                                                           *
*&   (Titles&Headers)  : 「未使用」                                                        *
*&   (Selection Texts) : 「使用」                                                          *
*&   (Text symbols)    : 「使用」                                                          *
*& GUI Status          : 「标准」                                                          *
*& Variants            : 「未使用」                                                        *
*& Message Class       :                                                                   *
*& Description         : 物料主数据批导入                                                      *
*& Modifications       :                                                                   *
*&   Date        Programmer  Description                                                   *
*&—————————————————————————————–*

REPORT  ZWLP_BDC.
TABLES:MARA.
*&*************************类型定义**************************************************
TYPES: BEGIN OF LINE,
         MAKTX LIKE MAKT-MAKTX,”物料描述
         MEINS LIKE MARA-MEINS,”单位
         MATKL LIKE MARA-MATKL,”物料组
       END OF LINE.
*************************************************************************************
*&——————— 程序中使用的 内表和工作区定义———————————-*

DATA BEGIN OF IT_BDC OCCURS 0.”IT_BDC是定义了内表,该内表就是存放BDC的操作步骤
        INCLUDE STRUCTURE BDCDATA.
DATA END OF IT_BDC.
DATA:   MESSTAB LIKE BDCMSGCOLL OCCURS 0 WITH HEADER LINE.”MESSTAB中保存的是执行完BDC系统的返回信息。
DATA:   WA_MESSTAB LIKE BDCMSGCOLL,
        LC_INFORECORD(10) TYPE C.
DATA:   LC_LINE TYPE I.
DATA: BEGIN OF WA_RE_VAL,
        ZZBID(18)   TYPE C,
        STATUS(10) TYPE C,
        TEXT(100)   TYPE C,
      END OF WA_RE_VAL.

 
DATA: WA_TAB TYPE LINE,
      IT_TAB TYPE TABLE OF LINE.”从外部EXCEL导入的数据存放的内表,内表字段数目要和EXCEL的列数目一样
**************************************************************************************

*———————-  全局变量     ————————————————*
**************************************************************************************

 

*&—————– ————————————————————————-*
*                             选择屏幕
*&——————————————————————————————*

SELECTION-SCREEN BEGIN OF BLOCK BLK1 WITH FRAME TITLE TEXT-001.
PARAMETERS: P_FILE LIKE RLGRAP-FILENAME OBLIGATORY.

SELECTION-SCREEN END OF BLOCK BLK1.

AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_FILE.
  CALL FUNCTION ‘WS_FILENAME_GET’                           “#EC *
    EXPORTING
      DEF_PATH         = P_FILE
      MASK             = ‘,*.xls,*.XLS.’
      MODE             = ‘0′
      TITLE            = TEXT-H01
    IMPORTING
      FILENAME         = P_FILE
    EXCEPTIONS
      INV_WINSYS       = 1
      NO_BATCH         = 2
      SELECTION_CANCEL = 3
      SELECTION_ERROR  = 4
      OTHERS           = 5.
  CHECK SY-SUBRC = 0 AND NOT P_FILE IS INITIAL.

*———————————————————————-*
*                  AT SELECTION-SCREEN
*———————————————————————-*
START-OF-SELECTION.
  PERFORM FRM_GETDAT_EXCEL .”把EXCEL里面的数据取出来放到内表IT_TAB里面
  PERFORM FRM_BDC_CALL.     “调用BDC子程序

END-OF-SELECTION.
*&———————————————————————*
*&      Form  FRM_BDC_CALL
*&———————————————————————*
*       循环的把EXCEL里面的数据放到系统里面
*———————————————————————-*
FORM FRM_BDC_CALL.

  LOOP AT IT_TAB INTO WA_TAB.

    PERFORM FRM_BDC_MM01.”MM01的具体BDC执行过程

  ENDLOOP.
ENDFORM.                    “FRM_BDC_CALL

*&———————————————————————*
*&      Form  FRM_GETDAT_EXCEL
*&———————————————————————*
*       把EXCEL里面的数据取出来放到内表IT_TAB里面
*———————————————————————-*
FORM FRM_GETDAT_EXCEL .
  FIELD-SYMBOLS: <F1>.
  DATA: L_I_XLSTMP TYPE ALSMEX_TABLINE OCCURS 0 WITH HEADER LINE.
  DATA: L_COL TYPE I.
  CLEAR L_I_XLSTMP.
  REFRESH L_I_XLSTMP.
  CALL FUNCTION ‘ALSM_EXCEL_TO_INTERNAL_TABLE’
    EXPORTING
      FILENAME                = P_FILE
      I_BEGIN_COL             = 1     “从哪一列开始
      I_BEGIN_ROW             = 2     “从哪一行开始
      I_END_COL               = 4    “从哪一列结束
      I_END_ROW               = 1000  “从哪一行结束
    TABLES
      INTERN                  = L_I_XLSTMP
    EXCEPTIONS
      INCONSISTENT_PARAMETERS = 1
      UPLOAD_OLE              = 2
      OTHERS                  = 3.
  IF SY-SUBRC <> 0 .
    MESSAGE ‘导入文件失败。’  TYPE ‘E’.
  ENDIF.
*-转换内表
  REFRESH: IT_TAB.
  CLEAR: IT_TAB.
  SORT L_I_XLSTMP BY ROW COL.
  LOOP AT L_I_XLSTMP.
    L_COL = L_I_XLSTMP-COL.
    ASSIGN COMPONENT L_COL OF STRUCTURE WA_TAB TO <F1>.
    <F1> = L_I_XLSTMP-VALUE.
    AT END OF ROW.
      APPEND WA_TAB TO IT_TAB.
      CLEAR WA_TAB.
    ENDAT.
  ENDLOOP.
ENDFORM.                    ” FRM_GETDAT_EXCEL

*&———————————————————————*
*&      Form  FRM_BDC_MM01
*&———————————————————————*
*       MM01的BDC
*———————————————————————-*
FORM FRM_BDC_MM01.
  DATA: L_MODE TYPE C VALUE ‘N’.”BDC执行的模式

  PERFORM BDC_DYNPRO      USING ‘SAPLMGMM’ ‘0060′.
  PERFORM BDC_FIELD       USING ‘BDC_CURSOR’
                                ‘RMMG1-MATNR’.
  PERFORM BDC_FIELD       USING ‘BDC_OKCODE’
                                ‘/00′.
  PERFORM BDC_FIELD       USING ‘RMMG1-MBRSH’
                                ‘M’.
  PERFORM BDC_FIELD       USING ‘RMMG1-MTART’
                                ‘ROH’.
  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’
                                ‘=BU’.
  PERFORM BDC_FIELD       USING ‘MAKT-MAKTX’
                                WA_TAB-MAKTX.
  PERFORM BDC_FIELD       USING ‘BDC_CURSOR’
                                ‘MARA-MATKL’.
  PERFORM BDC_FIELD       USING ‘MARA-MEINS’
                                WA_TAB-MEINS.
  PERFORM BDC_FIELD       USING ‘MARA-MATKL’
                                WA_TAB-MATKL.
  CALL TRANSACTION ‘MM01′ USING IT_BDC MODE L_MODE UPDATE ‘S’ MESSAGES INTO MESSTAB.
  IF SY-SUBRC = 0.
    COMMIT WORK.
*读信息记录编号
    READ TABLE MESSTAB INTO WA_MESSTAB WITH KEY MSGTYP = ‘S’.
    MESSAGE ID     WA_MESSTAB-MSGID
           TYPE   ‘S’
           NUMBER WA_MESSTAB-MSGNR
          INTO   WA_RE_VAL-TEXT
           WITH   WA_MESSTAB-MSGV1
                  WA_MESSTAB-MSGV2
                  WA_MESSTAB-MSGV3
                  WA_MESSTAB-MSGV4.
    WRITE:/ WA_RE_VAL-TEXT.
  ELSE.
*执行失败,写失败原因
    ROLLBACK WORK.
    READ TABLE MESSTAB INTO WA_MESSTAB WITH KEY MSGTYP = ‘E’.
    MESSAGE ID     WA_MESSTAB-MSGID
            TYPE   ‘E’
            NUMBER WA_MESSTAB-MSGNR
          INTO   WA_RE_VAL-TEXT
            WITH   WA_MESSTAB-MSGV1
                   WA_MESSTAB-MSGV2
                   WA_MESSTAB-MSGV3
                   WA_MESSTAB-MSGV4.
    WRITE:/ WA_RE_VAL-TEXT.
  ENDIF.

  REFRESH MESSTAB.
  CLEAR: WA_MESSTAB,WA_RE_VAL,IT_BDC,IT_BDC[].
ENDFORM.                    “FRM_BDC_ME11
*&———————————————————————*
*&      Form  BDC_DYNPRO
*&———————————————————————*
*       填写程序与屏幕
*———————————————————————-*
*     –>  PR_PROGRAM     程序
*     –>  PR_DYNPRO      屏幕
*———————————————————————-*
FORM BDC_DYNPRO USING PR_PROGRAM PR_DYNPRO.
  CLEAR IT_BDC.
  IT_BDC-PROGRAM  = PR_PROGRAM.
  IT_BDC-DYNPRO   = PR_DYNPRO.
  IT_BDC-DYNBEGIN = ‘X’.
  APPEND IT_BDC.
ENDFORM.                               ” BDC_DYNPRO
*&———————————————————————*
*&      Form  BDC_FIELD
*&———————————————————————*
*       填写字段与值
*———————————————————————-*
*     –>  PR_FNAM     字段
*     –>  PR_FVAL     值
*———————————————————————-*
FORM BDC_FIELD USING PR_FNAM PR_FVAL.
  CLEAR IT_BDC.
  IT_BDC-FNAM = PR_FNAM.
  IT_BDC-FVAL = PR_FVAL.
  APPEND IT_BDC.
ENDFORM.                    “FRM_BDC_FIELD


原文地址:http://scnblogs.techweb.com.cn/winson/archives/146.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

trassion

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

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

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

打赏作者

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

抵扣说明:

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

余额充值