ABAP有它自己独特的取数方法与逻辑, 和我们用SQL语句直接查询不同, 这个思维要转换过来! !
第一步: 到出作为筛选条件的数据放入内表:
SELECT vbeln
FROM vbfa
INTO TABLE gt_vbfa
WHERE vbtyp_n = 'J' .
第二步: 用FOR ALL ENTRIES IN 前要先判断是否为空
IF gt_vbfa IS NOT INITIAL .
SELECT matnr lfimg vrkme
FROM lips
INTO gt_lips
FOR ALL ENTRIES IN gt_vbfa
WHERE vbeln = gt_vbfa-vbeln
AND vbelv = gt_vbfa-vbelv
AND posnv = gt_vbfa-posnr .
ENDIF .
第三步: 使用内表里面的数据
LOOP AT gt_lips INTO gwa_lips
......
ENDLOOP .
备注:ABAP 还有很多规范及性能上的要求, 总之数据是SAP系统整个业务的核心, 不是简单的增,删, 改, 查!
希望这简单的回答能对你有所帮助!
LIPS是交货单 VBFA是销售凭证流
不知道你是什么逻辑 需要根据VBFA中是否有记录才取LIPS中交货单
你所说的VBFA 里面有才取LIPS 是可以用楼上所说的inner join的
join之后 如果VBFA不存在那行记录 join之后是没有数据的,但是可能出现重复行,可以删掉
另外,你也可以查询出来之后,然后判断是否存在VBFA中 不存在则删除
哎哎哎 就说这么些吧 搞不懂你究竟想写什么
在ABAP中,SQL语句有自己的特殊性,你的需求应该是联表查询吧,按照你的要求应该类似这样
select a~MATNR a~LFIMG VRKME into (ITAB-MATNR,ITAB-LFIMG )
from LIPS AS a
INNER JOIN VBFA AS b
ON a~连接字段1 = b~连接字段1 and a~连接字段2 = b~连接字段2…… (两个表的关联字段)
WHERE 条件
该语法应该可以解决你的问题
inner join 可以解决你的问题呀,inner join 和 FOR ALL ENTRIES IN在两表能连接的情况下是相同的。你的问题是不是就是
select f1 from A
inner Join B(AB连接的条件)
where (B中的字段 = J) and (A中的VBELN= xxx)。
如果不满足 B中的字段 = J,就筛选出去不要。就这样呗。
楼主的意思似乎是 itab1作为条件,查看vbfa的下一个活动是否是lips中的记录,有的话就去lips中查.
你想要的真假判断我也不知.
但给个思路:
用for all entries in itab1 从vbfa中得到满足条件的数据放入新的内表itab2
让后for all enti in itab2去查询lips的数据
个人认为这个应该能达到你的目的,而且效率应该还算不错.