1 BDC知识介绍
BDC: batch data communication 主要用于把数据大量大批输入到SAP系统,这也就是我们说的录屏.
BDC是模拟屏幕操作(与按键精灵相似),记录相关屏幕出现顺序和处理过程,生产数据录入的格式文件,通过调整数据文件后,再运行BDC产生ABAP程序,最后可能生成的ABAP程序进行修改,得到最终的数据录入代码片断. 最后我将以MM02修改物料描述来进行实战.
2.SM35打开以下界面(要么SHDB)
3.新建记录
4.先输记录号,输入相应的程序事物代码,然后录屏
5.Example in the abap.
REPORT z_regex.
DATA: BDCDATA LIKE BDCDATA OCCURS 0 WITH HEADER LINE.
DATA: LV_MODE TYPE C VALUE 'N'.
DATA: MESSTAB LIKE BDCMSGCOLL OCCURS 0 WITH HEADER LINE.
DATA : LV_MATNR LIKE MARA-MATNR VALUE '301000018'.
DATA: LV_MAKTX LIKE MAKT-MAKTX VALUE 'TEST02220518'.
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'
LV_MATNR.
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(02)'
'X'.
PERFORM BDC_DYNPRO USING 'SAPLMGMM' '4004'.
PERFORM BDC_FIELD USING 'BDC_OKCODE'
'/00'.
PERFORM BDC_FIELD USING 'BDC_SUBSCR'
'SAPLMGMM '.
PERFORM BDC_FIELD USING 'BDC_SUBSCR'
'SAPLMGD1'.
PERFORM BDC_FIELD USING 'BDC_CURSOR'
'MAKT-MAKTX'.
PERFORM BDC_FIELD USING
'MAKT-MAKTX'
LV_MAKTX.
PERFORM BDC_FIELD USING 'BDC_SUBSCR'
'SAPLZGRP_MATERIAL' .
PERFORM BDC_FIELD USING 'BDC_SUBSCR'
'SAPLZGRP_MATERIAL_OTHERS'.
PERFORM BDC_FIELD USING 'BDC_SUBSCR'
'SAPLMGD1' .
PERFORM BDC_DYNPRO USING 'SAPLSPO1' '0300'.
PERFORM BDC_FIELD USING 'BDC_OKCODE'
'YES'.
CALL TRANSACTION 'MM02' USING BDCDATA
MODE LV_MODE
UPDATE 'S'
MESSAGES INTO MESSTAB. " 更新模式 f1可看
CLEAR: BDCDATA[].
FORM BDC_DYNPRO USING PROGRAM DYNPRO.
CLEAR BDCDATA.
BDCDATA-PROGRAM = PROGRAM.
BDCDATA-DYNPRO = DYNPRO.
BDCDATA-DYNBEGIN = 'X'.
APPEND BDCDATA.
ENDFORM. "BDC_DYNPRO
*----------------------------------------------------------------------*
* Insert field *
*----------------------------------------------------------------------*
FORM BDC_FIELD USING FNAM FVAL.
CLEAR BDCDATA.
BDCDATA-FNAM = FNAM.
BDCDATA-FVAL = FVAL.
APPEND BDCDATA.
ENDFORM. "BDC_FIEL
6 Summary
MODE 确定批输入的执行模式,有下面几个可选值:
执行模式MODE值(A、N):
MODE值 作用
A 显示所有输入屏幕,如果在 bdc_tab 中包含该屏幕的功能码,则会出现小窗口显示这个功能码。它也是默认值,如果指定不是下面的值,则都认为是 A。
E 只有在出现错误时才显示屏幕,用户可以修正数据,修正后程序可以继续处理。
N 不显示屏幕的静默模式。如果到达被调用事务的断点,则系统处理终止,并设置一些系统字段。sy-subrc 为 1001,sy-msgty 为 “S”、sy-msgid 为 “00”、sy-msgno 为 “344”、sy-msgv1 为 “SAPMSSY3”、sy-msgv2 为 “0131”。
P 不显示屏幕的调试模式。如果到达被调用事务的断点,则系统自动转到 ABAP 调试器,这种方式主要用于调试过程。
更新模式UPDATE值(S):
UPDATE值 描述 作用
A 异步更新 被调用程序的更新按照没有指定 COMMIT WORK 语句和 AND WAIT 附加的方式执行。也就是说,数据更新被放到更新队列里,由另一个专门的更新进程执行,主程序一旦提交数据就继续执行,而不管提交的更新是否执行完成。这种方式比较适合于用一个事务码大量更新指定数据,比如维护主数据等。
S 同步更新 被调用程序的更新按照指定了 COMMIT WORK 语句和 AND WAIT 附加的方式执行。也就是说,数据更新被放到更新队列里,由专门的更新进程执行,但是主程序会等到数据提交完成,返回结果信息后才继续执行。这种方式比较适合于数据一致性要求比较高,多个不同事务码的连续处理。
L 本地更新 被调用程序的更新按照执行 SET UPDATE TASK LOCAL 语句的方式执行。也就是说,数据更新在主程序所在的进程中完成,主程序必定等到被调用事务完成才继续执行。
READ TABLE messtab INTO lw_bdcdata WITH KEY msgtyp = 'E'.
MOVE-CORRESPONDING in_info TO out_info .
IF sy-subrc <> 0 .
COMMIT WORK AND WAIT.
READ TABLE in_eina INTO ls_et_eina INDEX 1.
IF NOT ls_et_eina-info_rec IS INITIAL.
DO 20 TIMES.
SELECT SINGLE infnr
FROM eine
INTO @DATA(lv_infnr)
WHERE infnr = @ls_et_eina-info_rec
AND ekorg = @in_info-ekorg
AND esokz = @in_info-esokz.
IF sy-subrc = 0.
EXIT.
ELSE.
WAIT UP TO '0.1' SECONDS.
ENDIF.
ENDDO.
ENDIF.
out_info-code = 'S' .
out_info-msg = '信息记录创建成功'.
ELSE.
out_info-code = 'E' .
out_info-msg = '信息记录创建失败'.
ENDIF.
KBETR要去空格