- 浏览: 295093 次
- 性别:
- 来自: 深圳
文章分类
最新评论
-
Kisses99:
怎么锁了?readonly?
tomcat不能正常启动 -
zhangliixi:
老板果然还是要厉害点~~
tomcat不能正常启动
入门的文章这篇写的不错。
首先简单解释一下BDC(Batch Data Conversion):
在SAP系统里,由于某种原因,可能需要重复输入数据,(数据不同,但是操作是相同的,典型的情形就是切换系统的时候,旧系统的数据需要导入SAP),大致过程不外乎是这样: 输入一个t-code,
进入一个某个屏幕,然后输入一个值(有时还要加上一些附加的checkbox选项等),点执行或者确定按钮,
进入另一个屏幕,在某些字段输入值(也可能是标注checkbox选中或者不选中)或者修改这些字段里的值。
然后按“Eneter”……
最后按“SAVE”……,
一条记录完成了,继续下一条,如此循环。
上面所述的情形,如果让一个“人”来做的话,可能是真是受不了的。但是对于计算机来说,就很简单了。
SAP通过一个特殊的程序(T-code:SHDB)把用户的一次业务操作的所有过程记录下来。
从用户输入transaction code(事务代码),点下“Start Recording”开始,对于用户的来说是一次普通的业务操作,但是SAP却在记录:
1.光标放到哪个字段,(在程序中不用改变)
2.填入了什么值,(变量,循环中的Internal Table 某个字段)
3.点击了什么按钮(在程序中不用改变)
本次操作的作为一个“代表”,是一个“模板”,告诉SAP系统以怎样的方式来执行程序,也就是用计算机的语言来描述如果手工操作的话应该是怎样的一个过程。
用BDC技术编程时,有以下几个步骤:
1.把外部的数据源(Txt,Excel等)用读进internal table或者用do enddo循环。
2.在循环里,把用SHDB记录的步骤重复执行N次,(N = Dialog屏幕数量)这时实际上并没行完成数据的入,系统只是在“填表”,填一个叫做“BDCData”的Internal Table。
填完bdcdata以后,用call transaction ‘XXXX’ using bdc……这个命令来真正的commit动作或者call function 'BDC_Insert'在建立一个session。并把执行的结果返回给messtab这个Internal Table
现在假想一种情境,来做一个演示的BDC程序。
由于业务上的需要,某公司打算将某些物料的描述都在后面加上指定的文本Group X,所以需要修改已经存在的物料数据,用T-code:MM02,
外部数据是TXT文本,记录有N条,如下:
Material NO. Description
6000-00001 XXXXXXX(Group A)
2098-00001 fdfladsfladfl(Group B )
2059-00009 dfdsfreddfalfasfa(Group A)
2003-00003 iadfdafdf,adfasf(Group D)
……
……
下面是“录”操作的过程,在命令栏里输入T-code :SHDB,进入如下屏幕:
点New Recodring,出现如下屏幕:
其中Recording 的名字是任意给的。MM02是需要录的事务代码。
按下“Start Recording”,就会进入“Change Material”,这时,以下的操作对于用户来说是一次普通修改物料描述操作,尽管系统在记录所有的操作。
输入一个物料后,点击“Select View(s)”
假设我们只选“Basic Data 1”和“Basic Data 1”
然后点击绿色的小勾“Enter”
我们在该物料后面添加一个“Group A”,描述改为:
……
然后点“SAVE”,保存这次修改。
现在SAP回到了SHDB,
先点“SAVE”,保存Recording :Ztest,然后点”Back”,返回SHDB的第一屏。
选中“Ztest”,然后点击“Program”,由SAP自动生成一个程序。
在上面的对话框中输入程序的名字(注意SAP的命名规范,Y或者Z开头),确认输入
再输入一些程序的属性信息如下:
点击“Source Code”,指定“Develop Class”等后,就可以进入ABAP Editor,产生如下代码:
report ZBDCTEST
no standard page heading line-size 255.
include bdcrecx1.
parameters: dataset(132) lower case.
*** DO NOT CHANGE - the generated data section - DO NOT CHANGE ***
*
* If it is nessesary to change the data section use the rules:
* 1.) Each definition of a field exists of two lines
* 2.) The first line shows exactly the comment
* '* data element: ' followed with the data element
* which describes the field.
* If you don't have a data element use the
* comment without a data element name
* 3.) The second line shows the fieldname of the
* structure, the fieldname must consist of
* a fieldname and optional the character '_' and
* three numbers and the field length in brackets
* 4.) Each field must be type C.
*
*** Generated data section with specific formatting - DO NOT CHANGE ***
data: begin of record,
* data element: MATNR
MATNR_001(018),
* data element: XFELD
KZSEL_01_002(001),
* data element: XFELD
KZSEL_02_003(001),
* data element: MAKTX
MAKTX_004(040),
* data element: MEINS
MEINS_005(003),
* data element: MTPOS_MARA
MTPOS_MARA_006(004),
* data element: GEWEI
GEWEI_007(003),
end of record.
*** End generated data section ***
start-of-selection.
perform open_dataset using dataset.
perform open_group.
do.
read dataset dataset into record.
if sy-subrc <> 0. exit. endif.
perform bdc_dynpro using 'SAPLMGMM' '0060'.
perform bdc_field using 'BDC_CURSOR'
'RMMG1-MATNR'.
perform bdc_field using 'BDC_OKCODE'
'=AUSW'.
perform bdc_field using 'RMMG1-MATNR'
record-MATNR_001.
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)'
record-KZSEL_01_002.
perform bdc_field using 'MSICHTAUSW-KZSEL(02)'
record-KZSEL_02_003.
perform bdc_dynpro using 'SAPLMGMM' '4004'.
perform bdc_field using 'BDC_OKCODE'
'=BU'.
perform bdc_field using 'BDC_CURSOR'
'MAKT-MAKTX'.
perform bdc_field using 'MAKT-MAKTX'
record-MAKTX_004.
perform bdc_field using 'MARA-MEINS'
record-MEINS_005.
perform bdc_field using 'MARA-MTPOS_MARA'
record-MTPOS_MARA_006.
perform bdc_field using 'MARA-GEWEI'
record-GEWEI_007.
perform bdc_transaction using 'MM02'.
enddo.
perform close_group.
perform close_dataset using dataset.
上面的程序的主要逻辑为:
open dataset “读取外部数据源
do.“循环
perform 填充BDCDATA子程序
perform bdc_transcation
endo.
Close dataset.
注意上面的Include程序里有两个重要的form.
*-------------------------------------------------------------------*
* Start new screen *
*-------------------------------------------------------------------*
form bdc_dynpro using program dynpro.
clear bdcdata.
bdcdata-program = program.
bdcdata-dynpro = dynpro.
bdcdata-dynbegin = 'X'.
append bdcdata.
endform.
*-------------------------------------------------------------------*
* Insert field *
*-------------------------------------------------------------------*
form bdc_field using fnam fval.
if fval <> nodata.
clear bdcdata.
bdcdata-fnam = fnam.
bdcdata-fval = fval.
append bdcdata.
endif.
endform.
另外还有两个重要的internal table声明。bdcdata及messtab
* Batchinputdata of single transaction
data: bdcdata like bdcdata occurs 0 with header line.
* messages of call transaction
data: messtab like bdcmsgcoll occurs 0 with header line.
选取部分最关键(典型)的代码如下:
do.
read dataset dataset into record.“逐行读出txt文本中的记录,
请参:read dataset
if sy-subrc <> 0. exit. endif. “如出错就退出
以下执行子程序(粗斜体部分)
屏幕①
A、指定bdc_dynpro的实参,告知系统dialog程序名称:SAPLMGMM,及screen number:0060
perform bdc_dynpro using 'SAPLMGMM' '0060'.
B、指定bdc_field的实参,告知系统把光标放在哪个字段,这里是“RMMG1-MATNR,物料”
perform bdc_field using 'BDC_CURSOR'
'RMMG1-MATNR'.
C、告知系统ok_code是什么,也可以认为是去点哪个按钮,这里是左上角的“Select View(s)”
perform bdc_field using 'BDC_OKCODE'
'=AUSW'.
这里是通过read dataset 读取的外部的文件中的记录,record是一个用于临时保存数据的仅有一行的work area。程序在运行进,record-matnr_001应该是一个具体的物料代码。
perform bdc_field using 'RMMG1-MATNR'
record-MATNR_001.
屏幕②是类似的
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)'
record-KZSEL_01_002.
perform bdc_field using 'MSICHTAUSW-KZSEL(02)'
record-KZSEL_02_003.
③同样先指定程序名称及屏幕号,然后指定光标位置,值,OK_Code
perform bdc_dynpro using 'SAPLMGMM' '4004'.
perform bdc_field using 'BDC_OKCODE'
'=BU'.
perform bdc_field using 'BDC_CURSOR'
'MAKT-MAKTX'.
perform bdc_field using 'MAKT-MAKTX'
record-MAKTX_004.
perform bdc_field using 'MARA-MEINS'
record-MEINS_005.
perform bdc_field using 'MARA-MTPOS_MARA'
record-MTPOS_MARA_006.
perform bdc_field using 'MARA-GEWEI'
record-GEWEI_007.
以上的步骤实际上在一个叫做bdcdata的internal table中填入了一些关于调用哪个程序(包括屏幕号码),在哪些字段中,填入什么值,点击什么按钮等信息。
下面的一个步骤才真正的向系统写入数据
call function 'BDC_Insert',建立session,一般是后台运行,能给出Log信息
或
call transaction不建立session,直接执行。
执行后返回的消息保存在messtab中。
perform bdc_transaction using 'MM02'.
enddo.
perform close_group.
perform close_dataset using dataset.
再给一个简明的非SAP自动生成的程序如下(旧版SAP31I),这个程序略去了读取外部数据的程序,没有用循环,只是用Matnr从屏幕上接收用户输入的一个物料。
REPORT ZBDC1 .
TABLES:MARA.
DATA:BEGIN OF BDCDATA OCCURS 0.
INCLUDE STRUCTURE BDCDATA.
DATA:END OF BDCDATA.
PARAMETERS:MATNR LIKE MARA-MATNR.
PARAMETERS:P_MODE TYPE C DEFAULT 'N'.
START-OF-SelectION.
PERform PROCESS_CC02.
PERform PROCESS_CC03.
PERform PROCESS_CC04.
PERform PROCESS_CC05.
CALL TRANSACTION 'MM02' USING BDCDATA MODE P_MODE Update 'S'.
END-OF-SelectION.
form PROCESS_CC02.
PERform BDC_DYNPRO USING 'SAPLMGMM' '0060'.
PERform BDC_FIELD USING 'BDC_OKCODE' '/00'.
PERform BDC_FIELD USING 'RMMG1-MATNR' MATNR.
ENDform. "process_cc02
form PROCESS_CC03.
PERform BDC_DYNPRO USING 'SAPLMGMM' '0070'.
PERform BDC_FIELD USING 'BDC_OKCODE' 'ENTR'.
PERform BDC_FIELD USING 'MSICHTAUSW-KZSEL(11)' 'X'.
ENDform. "process_cc03
form PROCESS_CC04.
PERform BDC_DYNPRO USING 'SAPLMGMM' '0080'.
PERform BDC_FIELD USING 'BDC_OKCODE' 'ENTR'.
PERform BDC_FIELD USING 'RMMG1-WERKS' 'TH10'.
ENDform. "process_cc04
form PROCESS_CC05.
PERform BDC_DYNPRO USING 'SAPLMGMM' '3000'.
PERform BDC_FIELD USING 'BDC_OKCODE' 'BU'.
ENDform. "process_cc05
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.
总结一下:
对于一个BDC程序来说,
有两个固定的internal table 需要声明:bdcdata和messtab,名称可以变,但是声明时一定要
* Batchinputdata of single transaction
data: abc like bdcdata occurs 0 with header line.
* messages of call transaction
data: def like bdcmsgcoll occurs 0 with header line.
Like 后面的table type(这里是一个structure)是不能改变的。
有两个固定功能的form:bdc_dynapro和 bdc_field
名称同样是任意的,但是程序代码应该是相同的,
(强烈建议不要改动,因为会给自己添加麻烦)
另个还有一个Internal Table或者work area是用来放从外部读进来的数据的,结构应该和你的外部文件的有相关的字段结构。
一次读进全部的记录然后循环处理 loop at [internal table] …… process……endloop。
或者一条一条读进并处理,然后循环读下一条 do …… process…… enddo。
其中Process 分为两个部分:1.填充bdcdata表。
2.Call transaction or Call Function ‘BDC_Inser’返回消息放入Messtab.
另外有一个经验之谈:
1、录“操作”的时候,不要有“多余”的操作,(什么是多余的操作?自己思考吧)如果有,就重新录吧,不然这些操作也被记录下来,程序每次都要做一些不必要的动作。
2、尽量用鼠标去点击按钮,而不要只是敲“Enter”。
3、光标的位置一般也可以不指定,也就是perform bdc_field using ‘BDC_CURSOR’ ‘XXXX-XXXX’通常可以不用写。不过,据说有时候去了也会出问题,加上去就没了,这个我就不知道了。呵~
首先简单解释一下BDC(Batch Data Conversion):
在SAP系统里,由于某种原因,可能需要重复输入数据,(数据不同,但是操作是相同的,典型的情形就是切换系统的时候,旧系统的数据需要导入SAP),大致过程不外乎是这样: 输入一个t-code,
进入一个某个屏幕,然后输入一个值(有时还要加上一些附加的checkbox选项等),点执行或者确定按钮,
进入另一个屏幕,在某些字段输入值(也可能是标注checkbox选中或者不选中)或者修改这些字段里的值。
然后按“Eneter”……
最后按“SAVE”……,
一条记录完成了,继续下一条,如此循环。
上面所述的情形,如果让一个“人”来做的话,可能是真是受不了的。但是对于计算机来说,就很简单了。
SAP通过一个特殊的程序(T-code:SHDB)把用户的一次业务操作的所有过程记录下来。
从用户输入transaction code(事务代码),点下“Start Recording”开始,对于用户的来说是一次普通的业务操作,但是SAP却在记录:
1.光标放到哪个字段,(在程序中不用改变)
2.填入了什么值,(变量,循环中的Internal Table 某个字段)
3.点击了什么按钮(在程序中不用改变)
本次操作的作为一个“代表”,是一个“模板”,告诉SAP系统以怎样的方式来执行程序,也就是用计算机的语言来描述如果手工操作的话应该是怎样的一个过程。
用BDC技术编程时,有以下几个步骤:
1.把外部的数据源(Txt,Excel等)用读进internal table或者用do enddo循环。
2.在循环里,把用SHDB记录的步骤重复执行N次,(N = Dialog屏幕数量)这时实际上并没行完成数据的入,系统只是在“填表”,填一个叫做“BDCData”的Internal Table。
填完bdcdata以后,用call transaction ‘XXXX’ using bdc……这个命令来真正的commit动作或者call function 'BDC_Insert'在建立一个session。并把执行的结果返回给messtab这个Internal Table
现在假想一种情境,来做一个演示的BDC程序。
由于业务上的需要,某公司打算将某些物料的描述都在后面加上指定的文本Group X,所以需要修改已经存在的物料数据,用T-code:MM02,
外部数据是TXT文本,记录有N条,如下:
Material NO. Description
6000-00001 XXXXXXX(Group A)
2098-00001 fdfladsfladfl(Group B )
2059-00009 dfdsfreddfalfasfa(Group A)
2003-00003 iadfdafdf,adfasf(Group D)
……
……
下面是“录”操作的过程,在命令栏里输入T-code :SHDB,进入如下屏幕:
点New Recodring,出现如下屏幕:
其中Recording 的名字是任意给的。MM02是需要录的事务代码。
按下“Start Recording”,就会进入“Change Material”,这时,以下的操作对于用户来说是一次普通修改物料描述操作,尽管系统在记录所有的操作。
输入一个物料后,点击“Select View(s)”
假设我们只选“Basic Data 1”和“Basic Data 1”
然后点击绿色的小勾“Enter”
我们在该物料后面添加一个“Group A”,描述改为:
……
然后点“SAVE”,保存这次修改。
现在SAP回到了SHDB,
先点“SAVE”,保存Recording :Ztest,然后点”Back”,返回SHDB的第一屏。
选中“Ztest”,然后点击“Program”,由SAP自动生成一个程序。
在上面的对话框中输入程序的名字(注意SAP的命名规范,Y或者Z开头),确认输入
再输入一些程序的属性信息如下:
点击“Source Code”,指定“Develop Class”等后,就可以进入ABAP Editor,产生如下代码:
report ZBDCTEST
no standard page heading line-size 255.
include bdcrecx1.
parameters: dataset(132) lower case.
*** DO NOT CHANGE - the generated data section - DO NOT CHANGE ***
*
* If it is nessesary to change the data section use the rules:
* 1.) Each definition of a field exists of two lines
* 2.) The first line shows exactly the comment
* '* data element: ' followed with the data element
* which describes the field.
* If you don't have a data element use the
* comment without a data element name
* 3.) The second line shows the fieldname of the
* structure, the fieldname must consist of
* a fieldname and optional the character '_' and
* three numbers and the field length in brackets
* 4.) Each field must be type C.
*
*** Generated data section with specific formatting - DO NOT CHANGE ***
data: begin of record,
* data element: MATNR
MATNR_001(018),
* data element: XFELD
KZSEL_01_002(001),
* data element: XFELD
KZSEL_02_003(001),
* data element: MAKTX
MAKTX_004(040),
* data element: MEINS
MEINS_005(003),
* data element: MTPOS_MARA
MTPOS_MARA_006(004),
* data element: GEWEI
GEWEI_007(003),
end of record.
*** End generated data section ***
start-of-selection.
perform open_dataset using dataset.
perform open_group.
do.
read dataset dataset into record.
if sy-subrc <> 0. exit. endif.
perform bdc_dynpro using 'SAPLMGMM' '0060'.
perform bdc_field using 'BDC_CURSOR'
'RMMG1-MATNR'.
perform bdc_field using 'BDC_OKCODE'
'=AUSW'.
perform bdc_field using 'RMMG1-MATNR'
record-MATNR_001.
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)'
record-KZSEL_01_002.
perform bdc_field using 'MSICHTAUSW-KZSEL(02)'
record-KZSEL_02_003.
perform bdc_dynpro using 'SAPLMGMM' '4004'.
perform bdc_field using 'BDC_OKCODE'
'=BU'.
perform bdc_field using 'BDC_CURSOR'
'MAKT-MAKTX'.
perform bdc_field using 'MAKT-MAKTX'
record-MAKTX_004.
perform bdc_field using 'MARA-MEINS'
record-MEINS_005.
perform bdc_field using 'MARA-MTPOS_MARA'
record-MTPOS_MARA_006.
perform bdc_field using 'MARA-GEWEI'
record-GEWEI_007.
perform bdc_transaction using 'MM02'.
enddo.
perform close_group.
perform close_dataset using dataset.
上面的程序的主要逻辑为:
open dataset “读取外部数据源
do.“循环
perform 填充BDCDATA子程序
perform bdc_transcation
endo.
Close dataset.
注意上面的Include程序里有两个重要的form.
*-------------------------------------------------------------------*
* Start new screen *
*-------------------------------------------------------------------*
form bdc_dynpro using program dynpro.
clear bdcdata.
bdcdata-program = program.
bdcdata-dynpro = dynpro.
bdcdata-dynbegin = 'X'.
append bdcdata.
endform.
*-------------------------------------------------------------------*
* Insert field *
*-------------------------------------------------------------------*
form bdc_field using fnam fval.
if fval <> nodata.
clear bdcdata.
bdcdata-fnam = fnam.
bdcdata-fval = fval.
append bdcdata.
endif.
endform.
另外还有两个重要的internal table声明。bdcdata及messtab
* Batchinputdata of single transaction
data: bdcdata like bdcdata occurs 0 with header line.
* messages of call transaction
data: messtab like bdcmsgcoll occurs 0 with header line.
选取部分最关键(典型)的代码如下:
do.
read dataset dataset into record.“逐行读出txt文本中的记录,
请参:read dataset
if sy-subrc <> 0. exit. endif. “如出错就退出
以下执行子程序(粗斜体部分)
屏幕①
A、指定bdc_dynpro的实参,告知系统dialog程序名称:SAPLMGMM,及screen number:0060
perform bdc_dynpro using 'SAPLMGMM' '0060'.
B、指定bdc_field的实参,告知系统把光标放在哪个字段,这里是“RMMG1-MATNR,物料”
perform bdc_field using 'BDC_CURSOR'
'RMMG1-MATNR'.
C、告知系统ok_code是什么,也可以认为是去点哪个按钮,这里是左上角的“Select View(s)”
perform bdc_field using 'BDC_OKCODE'
'=AUSW'.
这里是通过read dataset 读取的外部的文件中的记录,record是一个用于临时保存数据的仅有一行的work area。程序在运行进,record-matnr_001应该是一个具体的物料代码。
perform bdc_field using 'RMMG1-MATNR'
record-MATNR_001.
屏幕②是类似的
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)'
record-KZSEL_01_002.
perform bdc_field using 'MSICHTAUSW-KZSEL(02)'
record-KZSEL_02_003.
③同样先指定程序名称及屏幕号,然后指定光标位置,值,OK_Code
perform bdc_dynpro using 'SAPLMGMM' '4004'.
perform bdc_field using 'BDC_OKCODE'
'=BU'.
perform bdc_field using 'BDC_CURSOR'
'MAKT-MAKTX'.
perform bdc_field using 'MAKT-MAKTX'
record-MAKTX_004.
perform bdc_field using 'MARA-MEINS'
record-MEINS_005.
perform bdc_field using 'MARA-MTPOS_MARA'
record-MTPOS_MARA_006.
perform bdc_field using 'MARA-GEWEI'
record-GEWEI_007.
以上的步骤实际上在一个叫做bdcdata的internal table中填入了一些关于调用哪个程序(包括屏幕号码),在哪些字段中,填入什么值,点击什么按钮等信息。
下面的一个步骤才真正的向系统写入数据
call function 'BDC_Insert',建立session,一般是后台运行,能给出Log信息
或
call transaction不建立session,直接执行。
执行后返回的消息保存在messtab中。
perform bdc_transaction using 'MM02'.
enddo.
perform close_group.
perform close_dataset using dataset.
再给一个简明的非SAP自动生成的程序如下(旧版SAP31I),这个程序略去了读取外部数据的程序,没有用循环,只是用Matnr从屏幕上接收用户输入的一个物料。
REPORT ZBDC1 .
TABLES:MARA.
DATA:BEGIN OF BDCDATA OCCURS 0.
INCLUDE STRUCTURE BDCDATA.
DATA:END OF BDCDATA.
PARAMETERS:MATNR LIKE MARA-MATNR.
PARAMETERS:P_MODE TYPE C DEFAULT 'N'.
START-OF-SelectION.
PERform PROCESS_CC02.
PERform PROCESS_CC03.
PERform PROCESS_CC04.
PERform PROCESS_CC05.
CALL TRANSACTION 'MM02' USING BDCDATA MODE P_MODE Update 'S'.
END-OF-SelectION.
form PROCESS_CC02.
PERform BDC_DYNPRO USING 'SAPLMGMM' '0060'.
PERform BDC_FIELD USING 'BDC_OKCODE' '/00'.
PERform BDC_FIELD USING 'RMMG1-MATNR' MATNR.
ENDform. "process_cc02
form PROCESS_CC03.
PERform BDC_DYNPRO USING 'SAPLMGMM' '0070'.
PERform BDC_FIELD USING 'BDC_OKCODE' 'ENTR'.
PERform BDC_FIELD USING 'MSICHTAUSW-KZSEL(11)' 'X'.
ENDform. "process_cc03
form PROCESS_CC04.
PERform BDC_DYNPRO USING 'SAPLMGMM' '0080'.
PERform BDC_FIELD USING 'BDC_OKCODE' 'ENTR'.
PERform BDC_FIELD USING 'RMMG1-WERKS' 'TH10'.
ENDform. "process_cc04
form PROCESS_CC05.
PERform BDC_DYNPRO USING 'SAPLMGMM' '3000'.
PERform BDC_FIELD USING 'BDC_OKCODE' 'BU'.
ENDform. "process_cc05
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.
总结一下:
对于一个BDC程序来说,
有两个固定的internal table 需要声明:bdcdata和messtab,名称可以变,但是声明时一定要
* Batchinputdata of single transaction
data: abc like bdcdata occurs 0 with header line.
* messages of call transaction
data: def like bdcmsgcoll occurs 0 with header line.
Like 后面的table type(这里是一个structure)是不能改变的。
有两个固定功能的form:bdc_dynapro和 bdc_field
名称同样是任意的,但是程序代码应该是相同的,
(强烈建议不要改动,因为会给自己添加麻烦)
另个还有一个Internal Table或者work area是用来放从外部读进来的数据的,结构应该和你的外部文件的有相关的字段结构。
一次读进全部的记录然后循环处理 loop at [internal table] …… process……endloop。
或者一条一条读进并处理,然后循环读下一条 do …… process…… enddo。
其中Process 分为两个部分:1.填充bdcdata表。
2.Call transaction or Call Function ‘BDC_Inser’返回消息放入Messtab.
另外有一个经验之谈:
1、录“操作”的时候,不要有“多余”的操作,(什么是多余的操作?自己思考吧)如果有,就重新录吧,不然这些操作也被记录下来,程序每次都要做一些不必要的动作。
2、尽量用鼠标去点击按钮,而不要只是敲“Enter”。
3、光标的位置一般也可以不指定,也就是perform bdc_field using ‘BDC_CURSOR’ ‘XXXX-XXXX’通常可以不用写。不过,据说有时候去了也会出问题,加上去就没了,这个我就不知道了。呵~
发表评论
-
程序方法添加SAP_ALL权限
2012-04-10 14:28 2009REPORT ZTEST_001. data zUSR04 ... -
Business Add-ins
2011-12-20 10:33 1281本文是BC425中BAPI部分的内容,闲来无事学习一下,顺便翻 ... -
维护成本控制凭证的编号范围报错:co area have different elements
2011-08-19 16:30 1382在做维护成本控制凭证的编号范围时,从0001控制范围cop ... -
初级成本要素和次级成本要素 .
2011-08-18 16:40 2840初级成本要素与次级成本要素。SAP除总帐的及时集成外,它的另一 ... -
SAP query传输以后需要重新生成程序
2011-07-26 10:53 5836最近有个需求,需 ... -
ABAP程序启动后台作业
2011-07-15 10:03 5063FORM frm_set_bgex . DATA: ... -
SAP菜单显示事务码
2011-07-11 16:34 2883SAP的菜单项上,默认不显示该菜单项的事务码,进行如下操作可显 ... -
程序查找Customer Exit
2011-04-11 10:27 1095REPORT ZEXIT_HELP no standard p ... -
inner join on, left join on, right join on区别(转)
2011-03-31 14:06 16441.理论 只要两个表的公共字段有匹配值,就将这两个表中的记录 ... -
For all entries使用中注意的问题
2011-03-30 21:54 12301.SELECT CARRID CONNI ... -
ABAP memory中的Export和Import
2011-03-30 17:02 3592REPORT z_barry_export_import . ... -
ABAP中的各种接口技术(转)
2011-03-30 12:19 2337下面总结一下ABAP中的各 ... -
导入现成的安装有SAP的虚拟机报错:Failed to lock the file解决方法
2011-03-23 10:52 2254虚拟机文件来源:windows server 200 ... -
sap 标准abap程序优化example
2011-03-22 11:11 1388用se38进入程序编辑器,然后在Environment-Exa ... -
BADI 入门
2011-03-21 22:17 1127badi入门的文章看了不少,感觉下面这一片讲的挺好的。 地址: ... -
根据事物码查找BADI(转)
2011-03-21 20:29 1446对于根据事务代码查找对应的BADI,网上介绍的方法很多,但总结 ... -
SAP IMG的概念
2011-03-05 11:14 2152SAP - IMG IMG是SAP后台配置的入口。 Imp ... -
abap debug中设置watchpoint
2011-03-02 23:12 5129拿一个实例来说:先将文件写入服务器,然后再从应用服务器上读取, ... -
abap screen parameters自动转化成大写
2011-02-22 13:32 1841当我们写下面这段代码时 PARAMETERS: name ty ... -
使用Call Transaction来实现BDC(转)
2011-02-22 10:54 2341data: ls_bdc like bdcdata, lt ...
相关推荐
这篇内容主要介绍了ABAP开发的两个核心概念:ABAP查询(ABAP Query)和批量输入(Batch Input),对于初学者来说是很好的入门知识。 首先,我们来看ABAP查询。ABAP查询是一种无需编码的报表创建工具,适合对编程不...
### ABAP入门必看资料.pdf 知识点详解 #### 一、基础知识 **1. 什么是ABAP?** - **定义与历史**: ABAP(Advanced Business Application Programming)是一种专为SAP系统的开发而设计的高级编程语言。起初,ABAP被...
ABAP开发对象: 表,程序,函数,类,Dialog,Smartform,BDC,增强,接口(IDOC,webservice,RFC等) 开发类(Development Class——Package) 存储所有SAP系统开发过程中的相关对象(—程序、表结构定义、系统数据...
#### 一、基础篇:ABAP入门必备 **1. 什么是ABAP?** ABAP(Advanced Business Application Programming)最初被设计用于创建简单的打印报表程序,随时间发展,已成为SAP AG所有产品背后的编程语言。ABAP/4不仅是...
《ABAP开发实例》不仅是一本入门指南,更是一份宝贵的实战手册,引导读者从理论到实践,逐步成长为资深的SAP开发者。 通过上述内容,我们可以看到ABAP不仅仅是SAP系统的技术基石,更是连接业务与技术的桥梁,为企业...
本教程是一份详细的ABAP实例教材,包含多个关键领域的深入讲解,如SMARTFORMS、BDC(Batch Data Communication)以及REPORT编写等。以下是各章节内容的详细解析: 第一章至第二章:基础入门 尽管这部分内容未直接列...
#### 一、基础篇:入门ABAP编程 1. **什么是ABAP?** - ABAP(Advanced Business Application Programming)是一种专门设计用于SAP系统的编程语言,主要用于开发和维护SAP应用程序。它最早用于创建简单的打印报表...
ABAP的加强篇涉及了如CATT(Computer Aided Test Tool)、BDC(Batch Data Communication)等高级主题,这些工具用于自动化测试和数据输入。SapScript和Smartform用于创建复杂的打印文档,SAP Query提供了自定义报告...
ABAP/4是其早期版本之一,本文档旨在提供一个中文的ABAP入门指南,涵盖基本的编程概念和技术。 ##### 1.1 顺序编码与处理块 在ABAP中,程序通常由多个处理块组成,每个处理块执行特定的任务。顺序编码意味着按照...
总之,《ABAP三月通》资料旨在为有志于从事SAP开发的读者提供一个全面的入门指南,不仅讲解了ABAP的基础知识,也深入探讨了高级技术和实战案例,为学习者快速掌握ABAP编程技能并应用于实际项目打下坚实的基础。
- **适用场景**:适合初级学习者入门ABAP开发。 - **技术要求**:后台数据库配置较低,使用的是Microsoft的MSDE(Microsoft Data Engine)。 #### 二、ABAP开发总体介绍 ABAP开发主要包括以下方面: 1. **报表...
综上所述,《实战SAP程序开发》旨在通过实例和直观的教学方法,将复杂的SAP ABAP编程技术简化,使得即便是没有相关经验的读者也能快速入门。书籍的出版是希望解决中文资料缺乏的问题,为SAP行业和对ABAP编程感兴趣的...