您的位置:首页 > 其它

快速开发之BDC模板程序

2012-08-13 14:15 162 查看
[b]BDC的调试和创建参考用到的TCODE为SHDB,SM35;[/b]

以下为网上收索的一个的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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐