SAP ABAP-11.批导
11 批导
11.1 简单批导SHDB
目的要修改以下4列
11.1.1 录屏
维护物料描述、物料组
MS登记编号
保存生成操作记录,共4部分
11.1.2 保存生成源代码
源代码一共分2个部分
结构定义部分
循环调用部分
11.1.3 根据事物记录器写代码
第一行记录事务代码的行可以省略
BDC_SUBSCR 的行可以省略不填
未修改的值(MARA-MEINS = PC MARA-GEWEI = KG)也可省略不填,就奔着要修改的4列去
report ZLGZTEST08_BDC
no standard page heading line-size 255.
*1 第一步,定义对象
TYPE-POOLS: TRUXS.
TYPES: BEGIN OF TY_DATAS,
MATNR TYPE CHAR50, "料号
MAKTX TYPE CHAR50, "物料描述
MATKL TYPE CHAR50, "物料组
MSBOOKPARTNO TYPE CHAR50, "MS登记号
END OF TY_DATAS.
"定义EXCEL的数据存储对象
DATA: GT_DATA TYPE TABLE OF TY_DATAS,
WA_DATA TYPE TY_DATAS.
"BDC的数据对象
DATA: GT_BDCDATA TYPE TABLE OF BDCDATA WITH HEADER LINE.
*2 第二步,定义文件选择参数,并选择文件
PARAMETERS : P_FILE TYPE RLGRAP-FILENAME.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_FILE.
PERFORM FRM_GET_FILENAME.
*3 第三步,获取文件数据
START-OF-SELECTION.
PERFORM FRM_GET_DATA.
END-OF-SELECTION.
*4 第四步,调用BDC录入数据
* " 调用方法一 By Transaction
PERFORM FRM_EXEC_TRANSACTION.
" 调用方法二 By Session(把多个Transaction放到一个Session一起执行)
"PERFORM FRM_EXEC_SESSION.
**------------------------------------------FROM------------------------------------------**
"第二步中,调用文件的标准程序
FORM FRM_GET_FILENAME .
"调用文件的标准程序
DATA: LV_RC TYPE I.
DATA: LT_FILE_TABLE TYPE FILETABLE.
CALL METHOD CL_GUI_FRONTEND_SERVICES=>FILE_OPEN_DIALOG
EXPORTING
WINDOW_TITLE = '打开文件'
CHANGING
FILE_TABLE = LT_FILE_TABLE
RC = LV_RC.
IF SY-SUBRC = 0.
READ TABLE LT_FILE_TABLE INTO DATA(WA_FILE_TABLE) INDEX 1.
P_FILE = WA_FILE_TABLE-FILENAME.
ENDIF.
ENDFORM.
"第三步中,获取文件数据的标准程序
FORM FRM_GET_DATA .
DATA: LT_RAW TYPE TRUXS_T_TEXT_DATA.
CALL FUNCTION 'TEXT_CONVERT_XLS_TO_SAP'
EXPORTING
* I_FIELD_SEPERATOR =
I_LINE_HEADER = 'X'
I_TAB_RAW_DATA = LT_RAW
I_FILENAME = P_FILE
TABLES
I_TAB_CONVERTED_DATA = GT_DATA
EXCEPTIONS
CONVERSION_FAILED = 1
OTHERS = 2.
IF SY-SUBRC <> 0.
* Implement suitable error handling here
ENDIF.
ENDFORM.
FORM FRM_CONVERT_DATA USING P_WA_DATA.
* BDC_SUBSCR的项没有意义,可不填
CLEAR: GT_BDCDATA,GT_BDCDATA[].
PERFORM FRM_SCREEN_LINE USING 'SAPLMGMM' '0060'.
PERFORM FRM_FIELD_LINE USING 'BDC_CURSOR' 'RMMG1-MATNR'.
PERFORM FRM_FIELD_LINE USING 'BDC_OKCODE' '=ENTR'.
PERFORM FRM_FIELD_LINE USING 'RMMG1-MATNR' WA_DATA-MATNR.
PERFORM FRM_SCREEN_LINE USING 'SAPLMGMM' '0070'.
PERFORM FRM_FIELD_LINE USING 'BDC_CURSOR' 'MSICHTAUSW-DYTXT(01)'.
PERFORM FRM_FIELD_LINE USING 'BDC_OKCODE' '=ENTR'.
PERFORM FRM_FIELD_LINE USING 'MSICHTAUSW-KZSEL(01)' 'X'.
PERFORM FRM_FIELD_LINE USING 'MSICHTAUSW-KZSEL(02)' 'X'.
PERFORM FRM_SCREEN_LINE USING 'SAPLMGMM' '4004'.
PERFORM FRM_FIELD_LINE USING 'BDC_OKCODE' 'SP02'.
PERFORM FRM_FIELD_LINE USING 'MAKT-MAKTX' WA_DATA-MAKTX.
PERFORM FRM_FIELD_LINE USING 'BDC_CURSOR' 'MARA-MATKL'.
PERFORM FRM_FIELD_LINE USING 'MARA-MATKL' WA_DATA-MATKL.
PERFORM FRM_SCREEN_LINE USING 'SAPLMGMM' '4004'.
PERFORM FRM_FIELD_LINE USING 'BDC_OKCODE' '=BU'.
PERFORM FRM_FIELD_LINE USING 'BDC_CURSOR' 'MARA-MSBOOKPARTNO'.
PERFORM FRM_FIELD_LINE USING 'MARA-MSBOOKPARTNO' WA_DATA-MSBOOKPARTNO.
ENDFORM.
FORM FRM_SCREEN_LINE USING VALUE(P_VALUE1)
VALUE(P_VALUE2).
CLEAR: GT_BDCDATA.
GT_BDCDATA-PROGRAM = P_VALUE1.
GT_BDCDATA-DYNPRO = P_VALUE2.
GT_BDCDATA-DYNBEGIN = 'X'.
APPEND GT_BDCDATA.
ENDFORM.
FORM FRM_FIELD_LINE USING VALUE(P_VALUE11)
VALUE(P_VALUE12).
CLEAR: GT_BDCDATA.
GT_BDCDATA-FNAM = P_VALUE11.
GT_BDCDATA-FVAL = P_VALUE12.
APPEND GT_BDCDATA.
ENDFORM.
"4 第四步,调用的FORM每读入一行,就执行一次
FORM FRM_EXEC_TRANSACTION.
"定义消息的展示方式