SAP VBKD表是一个略为奇怪的表。
如下图所示,我创建并保存了一个销售订单, 当我又修改了该订单并保存后, 订单中只有一条行项目, 可是系统却向VBKD表中写了两条,并且两条内容是完全相同的,仅仅是行项目号一个是10,一个是空。
不大清楚它的逻辑,这样理解不知道对不对,项目行“0000”(就是空)可以说是表头的数据的,是直接是从客户主数据带来,可以修改。修改后项目行还是“0000”。如果你是争对行项目来的话修改会在VBKD增加行项目POSNR行,如果是针对行来讲先找到行对应的数据(就是inner join的时候要是加入了posnr的条件,必须是行项目上面的修改后才有),如果没有就是找“0000”行项目的数据。
所以说我们需要取这个表里面的某些记录的时候(比如汇率啊,定价日期啊等等),最好取抬头层次的。
SELECT VBAK~BUKRS_VF AS BUKRS
VBAK~VKORG
VBPA~KUNNR
VBAP~VBELN
VBAP~POSNR
VBAK~WAERK
* VBAK~KUNNR
VBAP~KZWI1
VBKD~KURSK
FROM VBAP
INNER JOIN VBAK ON VBAK~VBELN = VBAP~VBELN
INNER JOIN VBUP ON VBUP~VBELN = VBAP~VBELN
AND VBUP~POSNR = VBAP~POSNR
INNER JOIN VBPA ON VBPA~VBELN = VBAP~VBELN
INNER JOIN VBKD ON VBKD~VBELN = VBAP~VBELN "很容易重行
INTO CORRESPONDING FIELDS OF TABLE GT_VBAK
WHERE VBAK~BUKRS_VF IN S_BUKRS
AND VBPA~KUNNR IN S_KUNNR
AND VBPA~PARVW = 'AG'
AND VBAK~VBTYP = 'C'
AND VBAK~ERDAT IN S_BUDAT
AND VBKD~POSNR = '0000'
AND VBUP~LFGSA = 'A'.
这样一写还是比较靠谱的,仅此备忘录,希望了解的朋友回复。