各位好:
我想做两个内表连接,连接为第三个。即通过结算的发票清单 vbrp vbrk fplt vbkd(发票类型为ZCF2)找到预估的发票清单
vbrp vbrk fplt vbkd(发票类型为ZCF1),条件为二者的合同号(BSTKD_M)和汇率(KURRF)相同,然后两个内表找到对应
关系并连接起来。
第三个内表类型定义为:
第二步 定义内表用于存储和展示数据”
TYPES :begin of ty_table,
est_VBELN type vbrp-vbeln,"预估发票号
est_POSNR type vbrp-POSNR,"预估发票行项目
est_NETWR type vbrp-NETWR,"预估发票发票金额
est_FPLNR type vbrp-FPLNR,"预估发票计划行
est_FPLTR type vbrp-FPLTR,"预估发票计划行项目
est_VKORG type vbrk-VKORG,"预估发票公司代码
est_FKART type vbrk-FKART,"预估发票开票类型
est_WAERK type vbrk-WAERK,"预估发票凭证币种
est_FKDAT type vbrk-fkdat,"预估发票计划开票日期
est_FKSTO type vbrk-FKSTO,"预估发票是否被冲销
est_KURRF type fplt-KURRF,"预估发票system invoice id
est_BSTKD_M type vbkd-BSTKD_M,"预估发票上传合同号码
set_VBELN type vbrp-vbeln,"结算发票号
set_POSNR type vbrp-POSNR,"结算发票行项目
set_NETWR type vbrp-NETWR,"结算发票发票金额
set_FPLNR type vbrp-FPLNR,"结算发票计划行
set_FPLTR type vbrp-FPLTR,"结算发票计划行项目
set_VKORG type vbrk-VKORG,"结算发票公司代码
set_FKART type vbrk-FKART,"结算发票开票类型
set_WAERK type vbrk-WAERK,"结算发票凭证币种
set_FKDAT type vbrk-fkdat,"结算发票计划开票日期
set_FKSTO type vbrk-FKSTO,"结算发票是否被冲销
set_KURRF type fplt-KURRF,"结算发票system invoice id
set_BSTKD_M type vbkd-BSTKD_M,"结算发票上传合同号码
end of ty_table.
DATA: GT_TABLE TYPE STANDARD TABLE OF ty_table WITH HEADER LINE,
GS_TABLE TYPE ty_table.
第一个内部数据定义为:
"定义结算发票结构
types:begin of gt_table1 ,
set_VBELN type vbrp-vbeln,"结算发票号
set_POSNR type vbrp-POSNR,"结算发票行项目
set_NETWR type vbrp-NETWR,"结算发票发票金额
set_FPLNR type vbrp-FPLNR,"结算发票计划行
set_FPLTR type vbrp-FPLTR,"结算发票计划行项目
set_VKORG type vbrk-VKORG,"结算发票公司代码
set_FKART type vbrk-FKART,"结算发票开票类型
set_WAERK type vbrk-WAERK,"结算发票凭证币种
set_FKDAT type vbrk-fkdat,"结算发票计划开票日期
set_FKSTO type vbrk-FKSTO,"结算发票是否被冲销
set_KURRF type fplt-KURRF,"结算发票system invoice id
set_BSTKD_M type vbkd-BSTKD_M,"结算发票上传合同号码
end of gt_table1.
"定义结算发票内表以及工作区域
data set_gt_table type table of gt_table1 .
data sest_gt_table type gt_table1 .
第二个内部定义为:
"定义预估发票结构
types:begin of gt_table2 ,
est_VBELN type vbrp-vbeln,"预估发票号
est_POSNR type vbrp-POSNR,"预估发票行项目
est_NETWR type vbrp-NETWR,"预估发票发票金额
est_FPLNR type vbrp-FPLNR,"预估发票计划行
est_FPLTR type vbrp-FPLTR,"预估发票计划行项目
est_VKORG type vbrk-VKORG,"预估发票公司代码
est_FKART type vbrk-FKART,"预估发票开票类型
est_WAERK type vbrk-WAERK,"预估发票凭证币种
est_FKDAT type vbrk-fkdat,"预估发票计划开票日期
est_FKSTO type vbrk-FKSTO,"预估发票是否被冲销
est_KURRF type fplt-KURRF,"预估发票system invoice id
est_BSTKD_M type vbkd-BSTKD_M,"预估发票上传合同号码
end of gt_table2.
"定义预估发票内表以及工作区域
data est_gt_table type table of gt_table2.
data ests_gt_table type gt_table2.
取数逻辑为:
select
vbrp~vbeln
vbrp~POSNR
vbrp~NETWR
vbrp~FPLNR
vbrp~FPLTR
vbrk~VKORG
vbrk~FKART
vbrk~WAERK
vbrk~fkdat
vbrk~FKSTO
fplt~KURRF
vbkd~BSTKD_M
into table set_gt_table
from vbrp INNER JOIN vbrk
on vbrp~vbeln = vbrk~vbeln
INNER JOIN fplt
on vbrp~FPLNR = fplt~FPLNR AND vbrp~FPLTR = fplt~FPLTR
INNER JOIN vbkd
on fplt~fplnr = vbkd~fplnr
where fkart = 'ZCF2'.
select
vbrp~vbeln
vbrp~POSNR
vbrp~NETWR
vbrp~FPLNR
vbrp~FPLTR
vbrk~VKORG
vbrk~FKART
vbrk~WAERK
vbrk~fkdat
vbrk~FKSTO
fplt~KURRF
vbkd~BSTKD_M
into table est_gt_table
from vbrp INNER JOIN vbrk
on vbrp~vbeln = vbrk~vbeln
INNER JOIN fplt
on vbrp~FPLNR = fplt~FPLNR AND vbrp~FPLTR = fplt~FPLTR
INNER JOIN vbkd
on fplt~fplnr = vbkd~fplnr
where fkart = 'ZCF1'.
loop at set_gt_table into sest_gt_table.
move-corresponding sest_gt_table to gt_table.
read table est_gt_table into ests_gt_table with key est_KURRF = gt_table-est_KURRF
est_BSTKD_M = gt_table-est_BSTKD_M.
if sy-subrc = 0.
gt_table-est_VBELN = ests_gt_table-est_vbeln.
gt_table-est_POSNR = ests_gt_table-est_POSNR.
gt_table-est_NETWR = ests_gt_table-est_NETWR.
gt_table-est_FPLNR = ests_gt_table-est_FPLNR.
gt_table-est_FPLTR = ests_gt_table-est_FPLTR.
gt_table-est_VKORG = ests_gt_table-est_VKORG.
gt_table-est_FKART = ests_gt_table-est_FKART.
gt_table-est_WAERK = ests_gt_table-est_WAERK.
gt_table-est_fkdat = ests_gt_table-est_fkdat.
gt_table-est_FKSTO = ests_gt_table-est_FKSTO.
gt_table-est_KURRF = ests_gt_table-est_KURRF.
gt_table-est_BSTKD_M = ests_gt_table-est_BSTKD_M.
ENDIF.
append gt_table to gt_table[].
clear gt_table.
endloop.
ENDFORM.