先说简单的
LOOP中的AT NEW 与 AT END OF
AT NEW F : 如果字段F 及F 的左侧全部字段的数据,与上一行数据不一致,则执行代码。
AT END OF F: 如果字段F 及F 的左侧全部字段的数据,与下一行数据不一致,则执行代码。
值得注意的是使用AT NEW或者AT END OF后,LOOP INTO的工作区中的F字段后面会全部变成 * 。
举例:
在执行AT NEW F.之前的工作区是有数据。
我们看AT NEW F在实际代码中的使用。
然后我们看执行完AT NEW以后的工作区中的数据,会发现matnr后面字段的数据全部消失了。
第二: CDS
define view ZCDS_SD_GET_DO
as select from likp
left outer join kna1 on likp.kunag = kna1.kunnr
left outer join vbfa on likp.vbeln = vbfa.vbeln and vbfa.vbtyp_v = 'C'
left outer join vbak on vbak.vbeln = vbfa.vbelv
left outer join vbap on vbak.vbeln = vbap.vbeln
left outer join vbkd on vbkd.vbeln = vbfa.vbelv
left outer join lips on likp.vbeln = lips.vbeln and lips.posnr = vbfa.posnn and lips.vbeln = vbfa.vbeln
left outer join makt on lips.matnr = makt.matnr
{
key likp.vbeln,
likp.lfdat,
likp.kunag,
kna1.name1,
likp.zpay,
vbap.netwr,
vbap.mwsbp,
vbfa.vbelv,
vbfa.vbtyp_v,
vbak.cmwae,
vbkd.kursk,
lips.posnr,
lips.matnr,
makt.maktx,
lips.ormng,
lips.vrkme,
vbfa.posnv,
vbfa.posnn,
vbap.netpr,
vbap.kpein,
/*vbak.waerk,*/
vbap.kwmeng,
makt.spras
}
where likp.cmgst = ''
or likp.cmgst = 'B'
or likp.cmgst = 'C'
and likp.zpay = 'X'
and likp.vkorg = '1010'
or likp.vkorg = '1011'
or likp.vkorg = '1090'
or likp.vkorg = '1091'