版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_31228779/article/details/78434732
目的对于同一物料下,需要获取相应供应商的最新采购价格和汇总采购数量
但有时会出现同一物料会从多个供应商去采购 ,所以会有多个供应商的最新价格
此时 考虑对于同一物料号的具有多个供应商时 将最新采购价格用" / “分开 作为一个最新价格展示
select
ekko~ebeln
ekpo~ebelp
ekpo~matnr
ekko~lifnr
ekko~aedat
ekpo~netpr
ekpo~menge
into corresponding fields of table lt_ebeln
from ( ( ekpo
inner join ztprice on ekpo~matnr = ztprice~matnr )
inner join ekes on ekpo~ebeln = ekes~ebeln
and ekpo~ebelp = ekes~ebelp )
inner join ekko on ekpo~ebeln = ekko~ebeln
where ztprice~matnr in s_matnr
and ekes~erdat in s_podate
and ekpo~loekz <> 'L'
and ekpo~retpo <> 'X'
and ( ekko~pro_status = 'G' or ekko~pro_status = 'H' or ekko~pro_status = 'I' or ekko~pro_status = 'J' or ekko~pro_status = 'K' ).
sort lt_ebeln by ebeln ebelp.
delete adjacent duplicates from lt_ebeln.
loop at lt_ebeln into lw_ebeln.
move-corresponding lw_ebeln to lw_ebeln_nm.
append lw_ebeln_nm to lt_ebeln_nm.
endloop.
* lt_ebeln_pr = lt_ebeln.
*根据日期降序取得最近日期的采购 再根据供应商排序
*这样可以获取不同供应商之间的所有采购价
sort lt_ebeln_nm by matnr lifnr aedat descending.
*排除同一物料号下 相同供应商的数据 以此取得 同一个物料号所对应不同供应商所对应最新日期的价格 LT_EBELN_PR2
lt_ebeln_pr2 = lt_ebeln_nm.
delete adjacent duplicates from lt_ebeln_pr2 comparing matnr lifnr.
*根据排除相同的供应商后的数据 再根据日期进行降序处理 得到不同供应商中找到最近最新日期的采购价格
sort lt_ebeln_pr2 by matnr aedat descending.
删除存在相同物料号的数据 根据该条数据作为主数据 去取存在多物料号对应不同供应商时的最新采购价格 放在主数据PO价里用‘/’拆分
lt_ebeln_pr3 = lt_ebeln_pr2.
delete adjacent duplicates from lt_ebeln_pr3 comparing matnr.
clear:lw_ebeln_pr2,lw_ebeln_pr3,lv_index2.
loop at lt_ebeln_pr3 into lw_ebeln_pr3.
* lv_index = sy-tabix.
* CLEAR sy-tabix.
loop at lt_ebeln_pr2 into lw_ebeln_pr2 where matnr = lw_ebeln_pr3-matnr.
lv_index2 = lv_index2 + 1.
if lv_index2 <> 1.
lv_str2 = lw_ebeln_pr2-netpr.
condense lv_str2 no-gaps.
concatenate lv_str1 '/' lv_str2 into lv_string.
condense lv_string no-gaps.
lv_str1 = lv_string.
elseif lv_index2 = 1..
lv_str1 = lw_ebeln_pr2-netpr.
condense lv_str1 no-gaps.
lv_string = lv_str1.
endif.
endloop.
clear lv_index2.
lw_ebeln_pr3-netpr = lv_string.
modify lt_ebeln_pr3 from lw_ebeln_pr3.
endloop.
clear: lw_ebeln_pr3,lw_tab.
sort lt_ebeln_pr3 by matnr.
loop at gt_tab into lw_tab.
read table lt_ebeln_pr3 into lw_ebeln_pr3 with key matnr = lw_tab-matnr binary search.
if sy-subrc = 0.
lw_tab-netpr = lw_ebeln_pr3-netpr.
lw_tab-startdate = s_podate-low.
lw_tab-enddate = s_podate-high.
modify gt_tab from lw_tab.
endif.
endloop.
clear: lw_ebeln_pr2,lw_tab,lv_menge.
loop at gt_tab into lw_tab.
loop at lt_ebeln_nm into lw_ebeln_nm where matnr = lw_tab-matnr.
lv_menge = lv_menge + lw_ebeln_nm-menge.
endloop.
lw_tab-menge = lv_menge.
clear lv_menge.
modify gt_tab from lw_tab.
endloop.