以下是利用BDC功能创建物料的源代码
*&---------------------------------------------------------------------* *& Report ZDZBDC_MM2 *&---------------------------------------------------------------------* REPORT ZDZBDC_MM2 NO STANDARD PAGE HEADING. DATA: DATASET( 132) TYPE C VALUE 'ZDZBDC_MM1', G_MESSAGE( 100) TYPE C, FILENAME TYPE STRING, G_REPID LIKE SY-REPID. DATA: BEGIN OF BDCDATA OCCURS 0. INCLUDE STRUCTURE BDCDATA. DATA: END OF BDCDATA. DATA: BEGIN OF MSGTAB OCCURS 0. INCLUDE STRUCTURE BDCMSGCOLL. DATA: END OF MSGTAB. DATA: BEGIN OF MY_DATA, MATNR( 018), "物料号 MTART( 004), "物料类型 MAKTX( 040), "物料描述 MATKL( 009), "物料组 END OF MY_DATA. DATA: IT_DATA LIKE MY_DATA OCCURS 0. SELECTION- SCREEN: BEGIN OF BLOCK SCR1 WITH FRAME TITLE TEXT- 001. PARAMETERS FN LIKE RLGRAP-FILENAME MEMORY ID MO1. "RLGRAP-FILENAME类型 为 CHAR 128 PARAMETERS: P_UPDATE( 1) TYPE C DEFAULT 'S', " "A" Asynchronous update. "S" Synchronous processing. "L" Local update. Other As for "A". P_MODE( 1) DEFAULT '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- SCREEN: END 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.