*&---------------------------------------------------------------------*
*& Progarm : ZPPR015 Author : Jimmy Wong
*& Created : 17 Oct 2012 App : PP
*& Title : BOM Matrix
*& Description : BOM Matrix
*&---------------------------------------------------------------------*
*& Version Author Date description
*& Jimmy 17 Oct 2012 the first version
*& M1 Jimmy 08 Jan 2013 add download a file
*& M2 Jimmy 24 Jan 2013 Addd logcial group priority
*& M3 Oliver 18 Feb 2013 Enhancement
*& M4 Jimmy add column "Change Component"
*& the last update time 2013.03.12 18:00
*&---------------------------------------------------------------------*
report zppr015 no standard page heading.
*&---------------------------------------------------------------------*
* database table
*&---------------------------------------------------------------------*
tables : mara,marc,prps,rlgrap.
*&---------------------------------------------------------------------*
* internal table & variables
*&---------------------------------------------------------------------*
data: begin of wa_itab occurs 0,
index type i,
m_matnr like mara-matnr,
zlgp like mara-matnr,
matnr like mara-matnr,
werks like marc-werks,
kdmat like knmt-kdmat, "Customer Material
maktx like makt-maktx,
mfrnr like mara-mfrnr, "Order No.
mfrpn like mara-mfrpn,
verpr like mbew-verpr, "net price
zpurp like mbew-verpr, "Latest PUR price
peinh like mbew-peinh,
plifz like marc-plifz, "Planned Deliv. Time
bstmi like marc-bstmi, "Minimum Lot Size
bstrf like marc-bstrf, "Rounding value
zzcw type p,"like zmmt_info_rec-zzcw, " CW
zzrw type p,"like zmmt_info_rec-zzrw, "RW
mnglg like ekpo-menge, "replaced by Oliver from mngko
clabs like mchb-clabs, "On Hand qty
menge like ekpo-menge, "On Order Qty
bdmng like resb-bdmng, "Reserved Qty
stqty like ekpo-menge, "Shortage qty QTY
lgort like ekpo-lgort,
meins like marav-meins,
alprf like stpo-alprf, "Priority
matkl like mara-matkl, " Material Group
aennr like zrun_change-aennr, "M4 add
end of wa_itab.
data: begin of it_mnglg occurs 0,
m_matnr like mara-matnr,
matnr like mara-matnr,
werks like marc-werks,
zlgp like mara-matnr,
mnglg like ekpo-menge,
end of it_mnglg.
data: begin of it_matnr occurs 0,
matkl like mara-matkl, " Material Group
matnr like mara-matnr,
werks like marc-werks,
zlgp like mara-matnr,
end of it_matnr.
data: it_sub_matnr like it_matnr occurs 0 with header line.
*data: wa_matnr like it_matnr occurs 0 with header line.
data: begin of wa_matnr occurs 0,
matnr like mara-matnr,
index type i,
end of wa_matnr.
field-symbols: <itab> type standard table,
<w_itab>,
<wa_field>.
data: it_structure type lvc_t_fcat,
wa_structure type lvc_s_fcat,
itab type ref to data.
data: begin of it_stpo occurs 0 .
include structure stpox.
data: end of it_stpo.
data: wa_stpo like it_stpo occurs 0 with header line.
data: begin of it_matcat occurs 0 .
include structure cscmat.
data: end of it_matcat.
data: lv_i type i.
type-pools: slis.
data: fc_hier type slis_t_fieldcat_alv,
wa_hier type slis_fieldcat_alv .
data: begin of ztab6 occurs 0,
werks like resb-werks,
lgort like resb-lgort,
charg like resb-charg,
matnr like resb-matnr,
bdmng like resb-bdmng,
bdmns like resb-bdmng,
erfme like resb-erfme,
erfmg like resb-erfmg,
end of ztab6.
data: begin of ztab occurs 0,
werks like ekpo-werks,
lgort like ekpo-lgort,
matnr like ekpo-matnr,
menge like ekpo-menge,
mengk like ekpo-menge,
end of ztab.
ranges: xbdart for resb-bdart.
data:begin of it_marc occurs 0,
matnr like mara-matnr,
werks like marc-werks,
plifz like marc-plifz, "Planned Deliv. Time
bstmi like marc-bstmi, "Minimum Lot Size
bstrf like marc-bstrf, "Rounding value
end of it_marc.
data:begin of it_mara occurs 0,
matnr like mara-matnr,
mfrnr like mara-mfrnr,
mfrpn like mara-mfrpn,
end of it_mara.
data:begin of it_mbew occurs 0,
matnr like mbew-matnr,
bwkey like mbew-bwkey ,
vprsv like mbew-vprsv,
verpr like mbew-verpr ,
stprs like mbew-stprs ,
peinh like mbew-peinh ,
end of it_mbew.
data:begin of it_info_rec occurs 0,
matnr like mara-matnr,
werks like resb-werks,
zzcw like zmmt_info_rec-zzcw,
zzrw like zmmt_info_rec-zzrw ,
end of it_info_rec.
data:begin of it_knmt occurs 0,
matnr like mara-matnr,
vkorg like knmt-vkorg,
kdmat like knmt-kdmat ,
end of it_knmt.
data:begin of it_mchb1 occurs 0,
matnr like mara-matnr,
werks like marc-werks,
lgort like mchb-lgort ,
charg like mchb-charg ,
clabs like mchb-clabs,
end of it_mchb1.
data:it_mchb like it_mchb1 occurs 0 with header line.
data:it_mdrs like mdrs occurs 0 with header line.
data:it_mdur like mdur occurs 0 with header line.
data:it_mdbs like mdbs occurs 0 with header line.
data:lv_type type c length 50.
types:lv_types type c length 50.
data: begin of it_down occurs 0,
line type c length 10000,
end of it_down .
data:lv_string type string.
data: gv_file like rlgrap-filename.
data:lv_matnr type c length 20.
* add by Oliver for latest PUR price
data : begin of t_a017_t occurs 0,
lifnr like a017-lifnr,
matnr like a017-matnr,
ekorg like a017-ekorg,
werks like a017-werks,
esokz like a017-esokz,
datbi like a017-datbi,
datab like a017-datab,
knumh like a017-knumh,
end of t_a017_t.
data : begin of t_a017 occurs 0,
lifnr like a017-lifnr,
matnr like a017-matnr,
ekorg like a017-ekorg,
werks like a017-werks,
esokz like a017-esokz,
datbi like a017-datbi,
datab like a017-datab,
knumh like a017-knumh,
end of t_a017.
data : begin of t_konp occurs 0,
lifnr like a017-lifnr,
matnr like a017-matnr,
ekorg like a017-ekorg,
werks like a017-werks,
kbetr like konp-kbetr, "AMount
kbphk like konp-kbetr, "HK Price
konwa like konp-konwa, "Cond. currency
kpein like konp-kpein, "Price unit
kmein like konp-kmein, "Unit of measure
knumh like konp-knumh,
kunnr like lfa1-kunnr,
autet like eord-autet,
atwrt like ausp-atwrt,
end of t_konp.
data: p_datuv like stko-datuv,
lv_equalto like eina-umrez,
k1_netpr like bapicurr-bapicurr,
k2_netpr like bapicurr-bapicurr,
k3_netpr like konp-kbetr,
k4_netpr like konp-kbetr.
*M4 add
data: begin of wa_aennr occurs 0,
aennr like zrun_change-aennr,
ncomponent like mara-matnr,
rcomponent like mara-matnr,
end of wa_aennr.
data:it_aennr like wa_aennr occurs 0 with header line.
*M4 end
*----------------------------------------------------------------------*
* Parameter & Select-Options *
*----------------------------------------------------------------------*
selection-screen begin of block 1 with frame title text-001.
parameters : s_werks like marc-werks default '8101' obligatory.
* select-options : s_werks for marc-werks default '8101' obligatory.
select-options : s_pspnr for prps-pspnr.
select-options : s_matnr for mara-matnr .
select-options : s_mtart for mara-mtart. "default 'ZVFG'.
parameters: p_cal as checkbox .
selection-screen end of block 1.
selection-screen begin of block 2 with frame title text-002. "M5 add
parameters: p_multi radiobutton group gp1 default 'X',
p_single radiobutton group gp1.
selection-screen end of block 2.
selection-screen begin of block 3 with frame title text-003.
parameters: p_txt as checkbox .
parameters: p_file like rlgrap-filename default '/usr/sap/tmp'.
parameters: p_test as checkbox .
selection-screen end of block 3.at selection-screen on value-request for p_file.
perform f4_filename using p_file .
*&---------------------------------------------------------------------*
* start of process
*&---------------------------------------------------------------------*
start-of-selection.
perform get_material.
perform get_data.
if it_sub_matnr[] is initial .
message 'No Record Found' type 'I'.
exit.
endif.
perform create_structure.
perform create_dynamic_table.
if p_txt = 'X'.
perform add_header.
endif.
perform process_data.
if p_txt = 'X'.
if p_test = 'X'.
perform download_local.
else.
perform download_server.
endif.
else.
perform dispaly_data.
endif.
end-of-selection.
*&---------------------------------------------------------------------*
*& Form GET_DATA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
form get_data .
data: lv_mehrs type c.
call function 'SAPGUI_PROGRESS_INDICATOR'
exporting
text = 'Getting Data........'.
if p_multi = 'X'. "M5 add
lv_mehrs = 'X'.
endif. loop at it_matnr.
call function 'CS_BOM_EXPL_MAT_V2'
exporting
capid = 'PP01'
datuv = sy-datum
emeng = 1000
mtnrv = it_matnr-matnr
mehrs = 'X'
mmory = 'X'
werks = it_matnr-werks
aumgb = 'X'
tables
stb = it_stpo
matcat = it_matcat
exceptions
material_not_found = 4
no_plant_data = 8
no_bom_found = 12
no_suitable_bom_found = 16
alt_not_found = 24
missing_authorization = 28
conversion_error = 36.
if sy-subrc eq 0 .
if it_stpo[] is not initial .
wa_stpo[] = it_stpo[].
delete adjacent duplicates from it_matcat comparing matnr index.
loop at it_stpo where mtart ne 'ZLGP'.
check it_stpo-postp = 'L'.
wa_itab-m_matnr = it_matnr-matnr.
wa_itab-index = it_stpo-index.
wa_itab-maktx = it_stpo-ojtxp.
wa_itab-werks = it_stpo-werks.
wa_itab-mnglg = it_stpo-mnglg / 1000. " replaced by Oliver from mngko
wa_itab-lgort = it_stpo-lgpro.
wa_itab-matnr = it_stpo-idnrk.
wa_itab-meins = it_stpo-meins.
wa_itab-alprf = it_stpo-alprf .
wa_itab-matkl = it_stpo-matmk.
wa_itab-aennr = it_stpo-aennr. "M4 add
read table it_matcat with key index = it_stpo-ttidx binary search.
if sy-subrc eq 0.
read table wa_stpo with key idnrk = it_matcat-matnr mtart = 'ZLGP'.
if sy-subrc eq 0.
it_sub_matnr-zlgp = it_matcat-matnr .
wa_itab-zlgp = it_matcat-matnr .
endif.
endif.
it_sub_matnr-matkl = it_stpo-matmk.
it_sub_matnr-matnr = it_stpo-idnrk.
it_sub_matnr-werks = it_stpo-werks.
collect it_sub_matnr.
clear:it_sub_matnr.
wa_matnr-matnr = it_matnr-matnr.
translate wa_matnr-matnr to upper case.
collect wa_matnr.
it_mnglg-m_matnr = wa_itab-m_matnr .
it_mnglg-matnr = wa_itab-matnr .
it_mnglg-werks = wa_itab-werks .
it_mnglg-zlgp = wa_itab-zlgp .
it_mnglg-mnglg = wa_itab-mnglg .
collect it_mnglg.
*M4 add
if it_stpo-aennr is not initial.
wa_aennr-aennr = it_stpo-aennr.
wa_aennr-ncomponent = it_stpo-idnrk.
collect wa_aennr.
endif.
*M4 End
append wa_itab.
clear: wa_itab.
endloop.
endif.
endif.
clear:it_stpo,it_stpo[],it_matcat,it_matcat[],wa_stpo,wa_stpo[].
endloop.
sort it_sub_matnr by matkl zlgp matnr werks .
sort wa_matnr by matnr.
sort wa_itab by matnr werks zlgp m_matnr.
sort it_mnglg by m_matnr matnr werks zlgp .
endform. " GET_DATA
*&---------------------------------------------------------------------*
*& Form GET_MATERIAL
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
form get_material .
clear:it_matnr,wa_itab,it_sub_matnr.
refresh:it_matnr,wa_itab,it_sub_matnr.
if s_pspnr is initial.
select a~matnr b~werks
into corresponding fields of table it_matnr
from mara as a inner join marc as b on a~matnr = b~matnr
where a~matnr in s_matnr
and b~werks = s_werks
and a~mtart in s_mtart.
else.
select a~matnr b~werks
into corresponding fields of table it_matnr
from mara as a inner join marc as b on a~matnr = b~matnr
inner join zmm_prodlot as c on a~matnr = c~matnr and b~werks = c~werks
where a~matnr in s_matnr
and b~werks = s_werks
and a~mtart in s_mtart
and c~ps_psp_pnr in s_pspnr.
endif.
endform. " GET_MATERIAL
*&---------------------------------------------------------------------*
*& Form CREATE_STRUCTURE
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
form create_structure .
data: lv_index type i.
define create_stru.
wa_structure-fieldname = &1.
* wa_structure-col_pos = &2.
wa_structure-inttype = &2.
wa_structure-intlen = &3.
wa_structure-datatype = &4.
wa_structure-decimals = &5.
append wa_structure to it_structure.
end-of-definition.
create_stru 'INDEX' 'I' '10' '' '' .
create_stru 'MATKL' 'C' '9' '' '' .
create_stru 'ZLGP' 'C' '20' '' '' .
create_stru 'MATNR' 'C' '20' '' '' .
create_stru 'RCOMPONENT' 'C' '255' '' '' . "M4 add
create_stru 'KDMAT' 'C' '20' '' '' .
create_stru 'MAKTX' 'C' '40' '' '' .
create_stru 'MFRNR' 'C' '10' '' '' .
create_stru 'MFRPN' 'C' '40' '' '' .
create_stru 'VERPR' 'P' '20' 'DEC' '2' .
create_stru 'ZPURP' 'P' '20' 'DEC' '2' . " add by Oliver
create_stru 'PEINH' 'P' '20' 'DEC' '' .
create_stru 'PLIFZ' 'P' '3' 'DEC' '' .
create_stru 'BSTMI' 'P' '20' 'DEC' '3' .
create_stru 'BSTRF' 'P' '20' 'DEC' '3' .
create_stru 'ZZCW' 'C' '3' '' '' .
create_stru 'ZZRW' 'C' '3' '' '' .
create_stru 'MEINS' 'C' '3' '' '' . " add by Oliver
create_stru 'CLABS' 'P' '20' 'DEC' '3' .
create_stru 'BDMNG' 'P' '20' 'DEC' '3' .
create_stru 'MENGE' 'P' '20' 'DEC' '3' .
create_stru 'STQTY' 'P' '20' 'DEC' '3' .
create_stru 'ALPRF' 'C' '2' '' '' . "'P' '20' 'DEC' '' .
lv_index = 1.
loop at wa_matnr.
create_stru wa_matnr-matnr 'P' '20' 'DEC' '3' .
wa_matnr-index = lv_index .
modify wa_matnr.
lv_index = lv_index + 1.
endloop.
endform. " CREATE_STRUCTURE
*&---------------------------------------------------------------------*
*& Form CREATE_DYNAMIC_TABLE
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
form create_dynamic_table .
call method cl_alv_table_create=>create_dynamic_table
exporting
it_fieldcatalog = it_structure
importing
ep_table = itab.
assign itab->* to <itab>.
endform. " CREATE_DYNAMIC_TABLE
*&---------------------------------------------------------------------*
*& Form PROCESS_DATA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
form process_data .
data:wa_new_line type ref to data,
lv_matnr like mara-matnr,
lv_clabs like mchb-clabs,
lv_bdmng like resb-bdmng,
lv_curindex type i,
lv_m_index type i,
lv_m_matnr like mara-matnr,
lv_first type c,
lv_rcomponent type c length 255. "M4 add
create data wa_new_line like line of <itab>.
assign wa_new_line->* to <w_itab>.
perform get_other_data.
if p_cal = 'X'.
perform get_purprice . " Add by Oliver
perform get_hand_qty.
perform get_reserved_qty .
perform get_order_qty .
endif.
call function 'SAPGUI_PROGRESS_INDICATOR'
exporting
text = 'Processing Data........'.
lv_i = 1.
loop at it_sub_matnr .
clear:lv_clabs,lv_bdmng,lv_rcomponent.
read table wa_itab with key matnr = it_sub_matnr-matnr werks = it_sub_matnr-werks zlgp = it_sub_matnr-zlgp.
read table it_marc with key matnr = wa_itab-matnr werks = wa_itab-werks binary search.
if sy-subrc eq 0.
wa_itab-plifz = it_marc-plifz.
wa_itab-bstmi = it_marc-bstmi.
wa_itab-bstrf = it_marc-bstrf.
endif.
read table it_mara with key matnr = wa_itab-matnr binary search.
if sy-subrc eq 0.
wa_itab-mfrnr = it_mara-mfrnr.
wa_itab-mfrpn = it_mara-mfrpn.
endif.
read table it_mbew with key matnr = wa_itab-matnr bwkey = wa_itab-werks binary search.
if sy-subrc eq 0.
wa_itab-peinh = it_mbew-peinh .
if it_mbew-vprsv = 'V'.
wa_itab-verpr = it_mbew-verpr .
else.
wa_itab-verpr = it_mbew-stprs .
endif.
else.
wa_itab-peinh = 0.
wa_itab-verpr = 0.
endif.
* Add by Oliver, purchasing price
read table t_konp with key matnr = wa_itab-matnr werks = wa_itab-werks. "binary search.
if sy-subrc eq 0.
wa_itab-zpurp = t_konp-kbetr.
endif.
read table it_info_rec with key matnr = wa_itab-matnr werks = wa_itab-werks binary search.
if sy-subrc eq 0.
wa_itab-zzcw = it_info_rec-zzcw.
wa_itab-zzrw = it_info_rec-zzrw .
endif.
"Customer Material
read table it_knmt with key matnr = wa_itab-matnr vkorg = wa_itab-werks binary search.
if sy-subrc eq 0.
wa_itab-kdmat = it_knmt-kdmat.
endif.
* fill dynamic table
assign component 'INDEX' of structure <w_itab> to <wa_field>.
<wa_field> = lv_i.
lv_type = <wa_field>.
perform get_string using lv_type changing lv_string.
assign component 'MATKL' of structure <w_itab> to <wa_field>.
<wa_field> = it_sub_matnr-matkl.
lv_type = <wa_field>.
perform get_string using lv_type changing lv_string.
assign component 'ZLGP' of structure <w_itab> to <wa_field>.
if p_txt = 'X'.
perform tranfer_material using it_sub_matnr-zlgp changing lv_matnr.
<wa_field> = lv_matnr.
else.
<wa_field> = it_sub_matnr-zlgp.
endif.
lv_type = <wa_field>.
perform get_string using lv_type changing lv_string.
assign component 'MATNR' of structure <w_itab> to <wa_field>.
if p_txt = 'X'.
perform tranfer_material using it_sub_matnr-matnr changing lv_matnr.
<wa_field> = lv_matnr.
else.
<wa_field> = it_sub_matnr-matnr.
endif.
lv_type = <wa_field>.
perform get_string using lv_type changing lv_string.
*M4 add
assign component 'RCOMPONENT' of structure <w_itab> to <wa_field>.
read table it_aennr with key aennr = wa_itab-aennr ncomponent = it_sub_matnr-matnr.
if sy-subrc eq 0.
loop at it_aennr where aennr = wa_itab-aennr and ncomponent = it_sub_matnr-matnr.
perform tranfer_material using it_aennr-rcomponent changing it_aennr-rcomponent.
if lv_rcomponent is INITIAL .
lv_rcomponent = it_aennr-rcomponent .
else.
CONCATENATE lv_rcomponent ',' it_aennr-rcomponent INTO lv_rcomponent.
endif.
endloop.
endif.
<wa_field> = lv_rcomponent.
lv_type = <wa_field>.
perform get_string using lv_type changing lv_string.
*M4 End
assign component 'KDMAT' of structure <w_itab> to <wa_field>.
<wa_field> = wa_itab-kdmat.
lv_type = <wa_field>.
perform get_string using lv_type changing lv_string.
assign component 'MAKTX' of structure <w_itab> to <wa_field>.
<wa_field> = wa_itab-maktx.
lv_type = <wa_field>.
perform get_string using lv_type changing lv_string.
assign component 'MFRNR' of structure <w_itab> to <wa_field>.
<wa_field> = wa_itab-mfrnr.
lv_type = <wa_field>.
perform get_string using lv_type changing lv_string.
assign component 'MFRPN' of structure <w_itab> to <wa_field>.
<wa_field> = wa_itab-mfrpn.
lv_type = <wa_field>.
perform get_string using lv_type changing lv_string.
assign component 'VERPR' of structure <w_itab> to <wa_field>.
<wa_field> = wa_itab-verpr.
lv_type = <wa_field>.
perform get_string using lv_type changing lv_string.
assign component 'ZPURP' of structure <w_itab> to <wa_field>. " Add by Oliver
<wa_field> = wa_itab-zpurp.
lv_type = <wa_field>.
perform get_string using lv_type changing lv_string.
assign component 'PEINH' of structure <w_itab> to <wa_field>.
<wa_field> = wa_itab-peinh.
lv_type = <wa_field>.
perform get_string using lv_type changing lv_string.
assign component 'PLIFZ' of structure <w_itab> to <wa_field>.
<wa_field> = wa_itab-plifz.
lv_type = <wa_field>.
perform get_string using lv_type changing lv_string.
assign component 'BSTMI' of structure <w_itab> to <wa_field>.
<wa_field> = wa_itab-bstmi.
lv_type = <wa_field>.
perform get_string using lv_type changing lv_string.
assign component 'BSTRF' of structure <w_itab> to <wa_field>.
<wa_field> = wa_itab-bstrf.
lv_type = <wa_field>.
perform get_string using lv_type changing lv_string.
assign component 'ZZCW' of structure <w_itab> to <wa_field>.
<wa_field> = wa_itab-zzcw.
lv_type = <wa_field>.
perform get_string using lv_type changing lv_string.
assign component 'ZZRW' of structure <w_itab> to <wa_field>.
<wa_field> = wa_itab-zzrw.
lv_type = <wa_field>.
perform get_string using lv_type changing lv_string.
assign component 'MEINS' of structure <w_itab> to <wa_field>.
<wa_field> = wa_itab-meins.
lv_type = <wa_field>.
perform get_string using lv_type changing lv_string.
assign component 'CLABS' of structure <w_itab> to <wa_field>.
" On hand qty = mmbe Unrestricted use
read table it_mchb with key matnr = wa_itab-matnr werks = wa_itab-werks binary search.
if sy-subrc eq 0.
lv_clabs = it_mchb-clabs.
endif.
<wa_field> = lv_clabs .
lv_type = <wa_field>.
perform get_string using lv_type changing lv_string.
assign component 'BDMNG' of structure <w_itab> to <wa_field>.
read table ztab6 with key matnr = it_sub_matnr-matnr werks = it_sub_matnr-werks.
if sy-subrc eq 0.
loop at ztab6 where matnr = it_sub_matnr-matnr and werks = it_sub_matnr-werks..
lv_bdmng = lv_bdmng + ztab6-bdmng.
endloop.
<wa_field> = lv_bdmng .
endif.
lv_type = <wa_field>.
perform get_string using lv_type changing lv_string.
assign component 'MENGE' of structure <w_itab> to <wa_field>.
read table ztab with key matnr = it_sub_matnr-matnr werks = it_sub_matnr-werks.
if sy-subrc eq 0.
loop at ztab where matnr = it_sub_matnr-matnr and werks = it_sub_matnr-werks..
<wa_field> = <wa_field> + ztab-menge.
endloop.
endif.
lv_type = <wa_field>.
perform get_string using lv_type changing lv_string.
assign component 'STQTY' of structure <w_itab> to <wa_field>.
if lv_bdmng > lv_clabs.
<wa_field> = lv_bdmng - lv_clabs.
endif.
lv_type = <wa_field>.
perform get_string using lv_type changing lv_string.
assign component 'ALPRF' of structure <w_itab> to <wa_field>.
if wa_itab-alprf is not initial.
<wa_field> = wa_itab-alprf.
endif.
lv_type = <wa_field>.
perform get_string using lv_type changing lv_string.
lv_curindex = 0 .
lv_first = 'Y' .
loop at wa_itab where matnr = it_sub_matnr-matnr and werks = it_sub_matnr-werks and
zlgp = it_sub_matnr-zlgp .
if lv_first <> 'Y' and wa_itab-m_matnr <> lv_m_matnr .
lv_type = <wa_field>.
if lv_type is not initial.
read table wa_matnr with key matnr = lv_m_matnr binary search.
lv_m_index = wa_matnr-index - lv_curindex - 1.
do lv_m_index times.
concatenate lv_string ' '
into lv_string separated by cl_abap_char_utilities=>horizontal_tab.
enddo.
concatenate lv_string lv_type
into lv_string separated by cl_abap_char_utilities=>horizontal_tab.
lv_curindex = wa_matnr-index .
endif.
endif.
assign component wa_itab-m_matnr of structure <w_itab> to <wa_field>.
<wa_field> = <wa_field> + wa_itab-mnglg.
lv_first = 'N' .
lv_m_matnr = wa_itab-m_matnr.
endloop.
* last one of current component
lv_type = <wa_field>.
if lv_type is not initial.
read table wa_matnr with key matnr = lv_m_matnr binary search.
lv_m_index = wa_matnr-index - lv_curindex - 1.
do lv_m_index times.
concatenate lv_string ' '
into lv_string separated by cl_abap_char_utilities=>horizontal_tab.
enddo.
concatenate lv_string lv_type
into lv_string separated by cl_abap_char_utilities=>horizontal_tab.
endif.
if p_txt = 'X' .
it_down-line = lv_string.
condense it_down .
append it_down .
endif.
append <w_itab> to <itab>.
clear:<wa_field>,<w_itab>,lv_string,it_down.
add 1 to lv_i.
*111
data : lv_text type string,
lv_index(10).
write lv_i to lv_index.
condense lv_index.
concatenate 'Current records' lv_index into lv_text separated by space.
call function 'SAPGUI_PROGRESS_INDICATOR'
exporting
text = lv_text.
endloop.
free:it_mchb1,it_mchb,wa_itab,it_matnr,it_sub_matnr,it_stpo,
ztab6,it_marc,it_mara,it_info_rec,it_knmt,it_mdrs,it_mdur,ztab,it_mdbs,it_mnglg.
endform. " PROCESS_DATA
*&---------------------------------------------------------------------*
*& Form DELETE_PRE_ZREO
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_ITAB_LIFNR text
* <--P_ITAB_LIFNR text
*----------------------------------------------------------------------*
form tranfer_material using p_old
changing p_new .
call function 'CONVERSION_EXIT_MATN1_OUTPUT'
exporting
input = p_old
importing
output = p_new.
endform. "tranfer_material
*&---------------------------------------------------------------------*
*& Form GET_RESERVED_QTY
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
form get_reserved_qty .
ranges: r_bdart for resb-bdart.
call function 'SAPGUI_PROGRESS_INDICATOR'
exporting
text = 'Getting reserved qty ........'.
refresh xbdart.
clear xbdart.
xbdart-sign = 'I'.
xbdart-option = 'EQ'.
xbdart-low = 'AR'.
append xbdart.
xbdart-low = 'MR'.
append xbdart.
select * into corresponding fields of table it_mdrs
from mdrs
for all entries in it_sub_matnr
where matnr = it_sub_matnr-matnr
and werks = it_sub_matnr-werks
and xloek = space
and kzear = space
and bdart in r_bdart
and bdart in xbdart.
loop at it_mdrs.
check it_mdrs-bdmng gt it_mdrs-enmng.
check it_mdrs-ndisp = space.
check it_mdrs-dumps ne 'X'.
check it_mdrs-txtps ne 'X'.
check it_mdrs-schgt ne 'X'.
check it_mdrs-vorab is initial.
clear ztab6.
ztab6-matnr = it_mdrs-matnr.
ztab6-werks = it_mdrs-werks.
ztab6-lgort = it_mdrs-lgort.
ztab6-charg = it_mdrs-charg.
* if not x_kzwso is initial.
* ztab6-erfme = mdrs-erfme.
* ztab6-erfmg = mdrs-erfmg.
* endif.
if it_mdrs-dbskz is initial.
if it_mdrs-shkzg ne 'S'.
ztab6-bdmng = it_mdrs-bdmng - it_mdrs-enmng.
else.
ztab6-bdmns = it_mdrs-bdmng - it_mdrs-enmng.
endif.
endif.
collect ztab6.
if it_mdrs-umlgo ne space.
if it_mdrs-umwrk = space or it_mdrs-umwrk = it_mdrs-werks.
clear ztab6.
ztab6-matnr = it_mdrs-matnr.
ztab6-werks = it_mdrs-werks.
ztab6-lgort = it_mdrs-umlgo.
if it_mdrs-shkzg ne 'S'.
ztab6-bdmns = it_mdrs-bdmng - it_mdrs-enmng.
else.
ztab6-bdmng = it_mdrs-bdmng - it_mdrs-enmng.
endif.
collect ztab6.
endif.
endif.
endloop.
select * into corresponding fields of table it_mdur
from mdur
for all entries in it_sub_matnr
where matnr = it_sub_matnr-matnr
and werks = it_sub_matnr-werks
and xloek = space
and kzear = space
and bdart in r_bdart
and bdart in xbdart.
loop at it_mdur.
check it_mdur-bdmng gt it_mdur-enmng.
clear ztab6.
ztab6-matnr = it_mdur-matnr.
ztab6-werks = it_mdur-umwrk.
* ZTAB6-LGORT = MDUR-LGORT.
ztab6-lgort = it_mdur-umlgo.
ztab6-charg = it_mdur-charg.
if it_mdur-shkzg ne 'S'.
ztab6-bdmns = it_mdur-bdmng - it_mdur-enmng.
else.
ztab6-bdmng = it_mdur-bdmng - it_mdur-enmng.
endif.
collect ztab6.
endloop.
sort ztab6 by matnr werks.
endform. " GET_RESERVED_QTY
*&---------------------------------------------------------------------*
*& Form GET_ORDER_QTY
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
form get_order_qty .
data: xref-mng01 like ekpo-menge,
xref-mng02 like ekpo-menge,
xref-flp01 like ekpo-menge.
call function 'SAPGUI_PROGRESS_INDICATOR'
exporting
text = 'Getting order qty ........'.
select * from mdbs
into corresponding fields of table it_mdbs
for all entries in it_sub_matnr
where matnr eq it_sub_matnr-matnr
and werks = it_sub_matnr-werks
and loekz eq space
and elikz eq space
and bstyp in ('F', 'L').
loop at it_mdbs.
if it_mdbs-wemng ge it_mdbs-menge.
continue.
endif.
if it_mdbs-wepos eq space or "Wareneigangsrelevant?
it_mdbs-elikz ne space. "Endlieferung?
continue.
endif.
if not it_mdbs-stapo is initial.
continue.
endif.
if it_mdbs-retpo = 'X'.
it_mdbs-menge = it_mdbs-menge * -1.
it_mdbs-wemng = it_mdbs-wemng * -1. "note136195
endif.
xref-mng01 = it_mdbs-menge.
xref-mng01 = xref-mng01 - it_mdbs-wemng.
*--> Prüfen ob bei Umlagerungsbestellung "n896701
* Endauslieferungskennzeichen EGLKZ gesetzt ist "n896701
* wenn ja, dann bestellte Menge 0 oder Transit "n896701
* nur wenn FB aus Transaktion MMBE gerufen wird "n896701
if it_mdbs-eglkz = 'X' . "n896701
if it_mdbs-wemng < it_mdbs-glmng. "n896701
*--> Dann entspricht Menge in Transit der "n896701
* bestellten Menge "n896701
xref-mng01 = it_mdbs-glmng - it_mdbs-wemng. "n896701
else. "n896701
continue. "n896701
endif. "n896701
endif. "n896701
read table wa_itab with key matnr = it_mdbs-matnr werks = it_mdbs-werks.
if sy-subrc eq 0.
if it_mdbs-meins = wa_itab-meins."x_meins.
xref-mng02 = xref-mng01.
else.
xref-flp01 = xref-mng01.
xref-flp01 = xref-flp01 * it_mdbs-umrez / it_mdbs-umren.
xref-mng02 = xref-flp01.
endif.
else.
xref-flp01 = xref-mng01.
xref-flp01 = xref-flp01 * it_mdbs-umrez / it_mdbs-umren.
xref-mng02 = xref-flp01.
endif.
*--> Bestellungen fuer Konsignation oder Normal.
clear ztab.
ztab-matnr = it_mdbs-matnr.
ztab-werks = it_mdbs-werks.
ztab-lgort = it_mdbs-lgort.
if it_mdbs-pstyp = '2'.
*--> Konsibestellbestand
ztab-mengk = xref-mng02.
else.
ztab-menge = xref-mng02.
endif.
*--> Ende Selectschleife
collect ztab.
clear:xref-flp01,xref-mng02,xref-mng01.
endloop.
sort ztab by matnr werks.
endform. " GET_ORDER_QTY
*&---------------------------------------------------------------------*
*& Form GET_HAND_QTY
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
form get_hand_qty .
call function 'SAPGUI_PROGRESS_INDICATOR'
exporting
text = 'Getting hand qty ........'.
select matnr werks lgort charg clabs
into corresponding fields of table it_mchb1
from mchb
for all entries in it_sub_matnr
where matnr = it_sub_matnr-matnr
and werks = it_sub_matnr-werks .
loop at it_mchb1.
it_mchb-matnr = it_mchb1-matnr.
it_mchb-werks = it_mchb1-werks.
it_mchb-clabs = it_mchb1-clabs.
collect it_mchb.
clear :it_mchb.
endloop.
sort it_mchb by matnr werks.
endform. " GET_HAND_QTY
*&---------------------------------------------------------------------*
*& Form GET_OTHER_DATA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
form get_other_data .
call function 'SAPGUI_PROGRESS_INDICATOR'
exporting
text = 'Getting Base Data........'.
select matnr werks plifz bstmi bstrf
into corresponding fields of table it_marc
from marc
for all entries in it_sub_matnr
where matnr = it_sub_matnr-matnr
and werks = it_sub_matnr-werks .
sort it_marc by matnr werks.
select matnr mfrnr mfrpn
into corresponding fields of table it_mara
from mara
for all entries in it_sub_matnr
where matnr = it_sub_matnr-matnr.
sort it_mara by matnr.
select matnr bwkey vprsv verpr stprs peinh
into corresponding fields of table it_mbew
from mbew
for all entries in it_sub_matnr
where matnr = it_sub_matnr-matnr
and bwkey = it_sub_matnr-werks .
sort it_mbew by matnr bwkey.
select matnr werks zzcw zzrw
into corresponding fields of table it_info_rec
from zmmt_info_rec
for all entries in it_sub_matnr
where matnr = it_sub_matnr-matnr
and werks = it_sub_matnr-werks .
sort it_info_rec by matnr werks.
select matnr vkorg kdmat
into corresponding fields of table it_knmt
from knmt
for all entries in it_sub_matnr
where vkorg = it_sub_matnr-werks
and vtweg = '10'
and matnr = it_sub_matnr-matnr.
sort it_knmt by matnr vkorg.
*M4 add
if wa_aennr[] is not initial.
sort wa_aennr by aennr ncomponent.
select aennr ncomponent rcomponent
into corresponding fields of table it_aennr
from zrun_change
for all entries in wa_aennr
where aennr = wa_aennr-aennr
and ncomponent = wa_aennr-ncomponent.
sort it_aennr by aennr ncomponent.
free: wa_aennr.
endif.
*M4 End
endform. " GET_OTHER_DATA
*&---------------------------------------------------------------------*
*& Form F4_FILENAME
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_P_FILE text
*----------------------------------------------------------------------*
form f4_filename using p_filename.
call function 'F4_FILENAME'
* EXPORTING
* PROGRAM_NAME = SYST-CPROG
* DYNPRO_NUMBER = SYST-DYNNR
* FIELD_NAME =
importing
file_name = p_filename.
endform. " F4_FILENAME
*&---------------------------------------------------------------------*
*& Form GET_STRING
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_LV_TYPE text
* <--P_LV_STRING text
*----------------------------------------------------------------------*
form get_string using p_type type lv_types
changing p_string.
shift p_type right deleting trailing space.
shift p_type left deleting leading space.
if p_string is initial.
p_string = p_type.
else.
concatenate p_string
p_type
into p_string separated by cl_abap_char_utilities=>horizontal_tab.
endif.
endform. " GET_STRING
*&---------------------------------------------------------------------*
*& Form DISPALY_DATA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
form dispaly_data .
define alv_field.
clear:wa_hier.
wa_hier-fieldname = &1.
wa_hier-seltext_m = &2.
wa_hier-seltext_l = &3.
wa_hier-outputlen = &4.
wa_hier-just = &5.
wa_hier-do_sum = &6.
wa_hier-ref_tabname = &7 .
wa_hier-ref_fieldname = &8 .
append wa_hier to fc_hier.
end-of-definition.
refresh: fc_hier.
alv_field 'INDEX' 'Item' '' '6' 'R' '' '' ''.
alv_field 'MATKL' '' 'Material Group' '6' 'L' '' '' ''.
alv_field 'ZLGP' '' 'Logical Group' '18' 'L' '' 'MARA' 'MATNR'.
alv_field 'MATNR' 'Material' '' '18' 'L' '' 'MARA' 'MATNR'.
alv_field 'RCOMPONENT' 'Change Component' '' '18' 'L' '' '' ''. "M4 Add
alv_field 'KDMAT' '' 'Customer Material' '15' 'L' '' '' ''.
alv_field 'MAKTX' '' 'Material Desc' '25' 'L' '' '' ''.
alv_field 'MFRPN' '' 'Mfr Part Number' '' 'L' '' '' ''.
alv_field 'MFRNR' '' 'Manufacturer' '' 'L' '' '' ''.
alv_field 'VERPR' 'Net Price' '' '' 'R' '' '' ''.
alv_field 'ZPURP' 'Latest PUR price' '' '' 'R' '' '' ''.
alv_field 'PEINH' 'Price Unit' '' '' 'R' '' '' ''.
alv_field 'PLIFZ' '' 'Planned Deliv. Time' '' 'L' '' '' ''.
alv_field 'BSTMI' '' 'Minimum Lot Size' '' 'R' '' '' ''.
alv_field 'BSTRF' '' 'Rounding value' '' 'R' '' '' ''.
alv_field 'ZZCW' 'Can Win' '' '' 'R' '' '' ''.
alv_field 'ZZRW' 'Res. Win' '' '' 'R' '' '' ''.
alv_field 'MEINS' 'U/M' '' '4' 'L' '' '' ''.
alv_field 'CLABS' '' 'On Hand Qty' '15' 'R' '' '' ''.
alv_field 'BDMNG' '' 'Reserved Qty' '15' 'R' '' '' ''.
alv_field 'MENGE' '' 'On Order Qty' '15' 'R' '' '' ''.
alv_field 'STQTY' '' 'Shortage Qty' '15' 'R' '' '' ''.
alv_field 'ALPRF' '' 'Priority' '6' 'R' '' '' ''.
loop at wa_matnr.
clear:lv_matnr.
perform tranfer_material using wa_matnr-matnr
changing lv_matnr.
alv_field wa_matnr-matnr '' lv_matnr '20' 'R' '' '' ''.
endloop.
free:wa_matnr.
call function 'REUSE_ALV_GRID_DISPLAY'
exporting
it_fieldcat = fc_hier[]
i_save = 'A'
i_callback_program = sy-repid
tables
t_outtab = <itab>
exceptions
program_error = 1
others = 2.
endform. " DISPALY_DATA
*&---------------------------------------------------------------------*
*& Form ADD_HEADER
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
form add_header .
perform get_string using 'Item' changing lv_string.
perform get_string using 'Material Group' changing lv_string.
perform get_string using 'Logical Group' changing lv_string.
perform get_string using 'Material' changing lv_string.
perform get_string using 'Change Component' changing lv_string. "M4 add
perform get_string using 'Customer Material' changing lv_string.
perform get_string using 'Material Desc' changing lv_string.
perform get_string using 'Mfr Part Number' changing lv_string.
perform get_string using 'Manufacturer' changing lv_string.
perform get_string using 'Net Price' changing lv_string.
perform get_string using 'Latest PUR Price' changing lv_string. " add by Oliver
perform get_string using 'Price Unit' changing lv_string.
perform get_string using 'Planned Deliv. Time' changing lv_string.
perform get_string using 'Minimum Lot Size' changing lv_string.
perform get_string using 'Rounding value' changing lv_string.
perform get_string using 'Can Win' changing lv_string.
perform get_string using 'Res. Win' changing lv_string.
perform get_string using 'U/M' changing lv_string. " Add by Oliver
perform get_string using 'On Hand Qty' changing lv_string.
perform get_string using 'Reserved Qty' changing lv_string.
perform get_string using 'On Order Qty' changing lv_string.
perform get_string using 'Shortage Qty' changing lv_string.
perform get_string using 'Priority' changing lv_string.
loop at wa_matnr.
clear:lv_type.
perform tranfer_material using wa_matnr-matnr
changing lv_type.
perform get_string using lv_type
changing lv_string.
endloop.
it_down-line = lv_string.
condense it_down .
append it_down .
clear:it_down ,lv_string.
endform. " ADD_HEADER
*&---------------------------------------------------------------------*
*& Form DOWNLOAD_DATA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*& Form DOWNLOAD_SERVER
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*& Form get_file
*&---------------------------------------------------------------------*
form get_file.
data: wa_key(30) type c.
data: lv_i type i.
data: lv_c(1) type c.
data: wa_date(8) type c.
data: wa_time like sy-uzeit.
data: lv_char type c.
wa_date = sy-datum.
wa_time = sy-uzeit.
concatenate 'ZPPR015' wa_date wa_time into wa_key.
concatenate wa_key '.txt' into wa_key.
lv_i = strlen( p_file ).
lv_i = lv_i - 1 .
if lv_i > 1.
lv_c = p_file+lv_i(1).
endif.
if p_test = 'X'.
lv_char = '\' .
else.
lv_char = '/' .
endif.
if lv_c eq lv_char.
concatenate p_file wa_key into gv_file.
else.
concatenate p_file lv_char wa_key into gv_file.
endif.
endform. " get_file
*&---------------------------------------------------------------------*
*& Form DOWNLOAD_LOCAL
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
form download_local .
data: lv_filename type string.
perform get_file.
lv_filename = gv_file.
call function 'GUI_DOWNLOAD'
exporting
filename = lv_filename
filetype = 'ASC'
write_field_separator = 'X'
tables
data_tab = it_down
exceptions
file_write_error = 1
no_batch = 2
gui_refuse_filetransfer = 3
invalid_type = 4
no_authority = 5
unknown_error = 6
header_not_allowed = 7
separator_not_allowed = 8
filesize_not_allowed = 9
header_too_long = 10
dp_error_create = 11
dp_error_send = 12
dp_error_write = 13
unknown_dp_error = 14
access_denied = 15
dp_out_of_memory = 16
disk_full = 17
dp_timeout = 18
file_not_found = 19
dataprovider_exception = 20
control_flush_error = 21
others = 22.
if sy-subrc <> 0.
message id sy-msgid type sy-msgty number sy-msgno
with sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
endif.
endform. " DOWNLOAD_LOCAL
*&---------------------------------------------------------------------*
*& Form DOWNLOAD_SERVER
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
form download_server .
perform get_file.
open dataset gv_file for output in text mode encoding default.
loop at it_down.
transfer it_down-line to gv_file.
endloop.
close dataset gv_file.
endform. " DOWNLOAD_SERVER
**&---------------------------------------------------------------------*
**& Form GET_PURPRICE
**&---------------------------------------------------------------------*
** Add by Oliver
**----------------------------------------------------------------------*
*form get_purprice .
*
* call function 'SAPGUI_PROGRESS_INDICATOR'
* exporting
* text = 'Getting purchasing price ........'.
*
* p_datuv = sy-datum.
*
* select * from a017
* into corresponding fields of table t_a017_t
* where ekorg = '8000'
* and kappl = 'M' and kschl = 'PB00' and esokz in ('0', '2')
* and datbi >= p_datuv and datab <= p_datuv.
*
* loop at it_sub_matnr.
* loop at t_a017_t where matnr = it_sub_matnr-matnr and werks = it_sub_matnr-werks.
* move-corresponding t_a017_t to t_a017.
* append t_a017.
* endloop.
* endloop.
*
* select distinct * from konp
* into corresponding fields of table t_konp
* for all entries in t_a017
* where knumh = t_a017-knumh and kopos = 01.
*
* loop at t_konp.
* read table t_a017 with key knumh = t_konp-knumh.
* if sy-subrc = 0.
* move-corresponding t_a017 to t_konp.
*
* select single eord~autet into t_konp-autet from eord
* where matnr = t_a017-matnr and werks = t_a017-werks
* and lifnr = t_a017-lifnr.
*
* select single ausp~atwrt into t_konp-atwrt from ausp
* where objek = t_a017-lifnr and atinn = '0000000111'
* and klart = '010' and atwrt = '05'.
*
* select single lfa1~kunnr into (t_konp-kunnr) from lfa1
* where lifnr = t_a017-lifnr.
*
* select single eina~umrez into lv_equalto from eina
* where matnr = t_a017-matnr and lifnr = t_a017-lifnr .
*
* if sy-subrc = 0 and lv_equalto <> 0 .
* T_KONP-KBETR = T_KONP-KBETR / lv_equalto.
* endif.
*
* K1_NETPR = T_KONP-KBETR.
* if T_KONP-KONWA <> 'HKD' and T_KONP-KONWA <> 'USD' and
* T_KONP-KONWA <> 'EUR' and T_KONP-KONWA <> 'CNY' and T_KONP-KONWA <> 'GBP'.
*
* call function 'BAPI_CURRENCY_CONV_TO_EXTERNAL'
* exporting
* CURRENCY = T_KONP-KONWA
* AMOUNT_INTERNAL = K1_NETPR
* importing
* AMOUNT_EXTERNAL = K2_NETPR.
*
* T_KONP-KBETR = K2_NETPR.
* endif.
*
*
* K4_NETPR = K1_NETPR.
* call function 'CONVERT_TO_LOCAL_CURRENCY'
* exporting
* DATE = P_DATUV
* FOREIGN_AMOUNT = K4_NETPR
* FOREIGN_CURRENCY = T_KONP-KONWA
* LOCAL_CURRENCY = 'HKD'
* TYPE_OF_RATE = 'M'
* importing
* LOCAL_AMOUNT = K3_NETPR
* exceptions
* NO_RATE_FOUND = 1
* others = 2.
* T_KONP-KBPHK = K3_NETPR.
*
* endif.
*
* modify t_konp.
*
* endloop.
*
** delete customer/spot buy price
* delete t_konp where kunnr <> ''.
* delete t_konp where atwrt <> ''.
*
* sort t_konp by werks matnr autet descending kbphk lifnr.
*endform. "get_purprice
**&---------------------------------------------------------------------*
**& Form GET_PURPRICE
**&---------------------------------------------------------------------*
** Enhance by Jimmy M4
**----------------------------------------------------------------------*
form get_purprice .
call function 'SAPGUI_PROGRESS_INDICATOR'
exporting
text = 'Getting purchasing price ........'.
data:begin of it_eord occurs 0,
matnr like eord-matnr,
werks like eord-matnr,
lifnr like eord-matnr,
autet like eord-autet,
end of it_eord.
data: wa_konp like t_konp occurs 0 with header line.
data:begin of it_lfa1 occurs 0,
lifnr like lfa1-lifnr,
kunnr like lfa1-kunnr,
end of it_lfa1.
data:begin of it_eina occurs 0,
matnr like eina-matnr,
lifnr like eina-lifnr,
umrez like eina-umrez,
end of it_eina.
p_datuv = sy-datum.
select * from a017
into corresponding fields of table t_a017
for all entries in it_sub_matnr
where kappl = 'M'
and kschl = 'PB00'
and matnr = it_sub_matnr-matnr
and ekorg = '8000'
and werks = it_sub_matnr-werks
and esokz in ('0', '2')
and datbi >= p_datuv
and datab <= p_datuv.
check t_a017[] is not initial.
select distinct *
from konp
into corresponding fields of table wa_konp
for all entries in t_a017
where knumh = t_a017-knumh
and kopos = 01.
sort t_a017 by knumh.
select matnr werks lifnr autet
into corresponding fields of table it_eord
from eord
for all entries in t_a017
where matnr = t_a017-matnr
and werks = t_a017-werks
and lifnr = t_a017-lifnr.
sort it_eord by matnr werks lifnr.
select lifnr kunnr
into corresponding fields of table it_lfa1
from lfa1
for all entries in t_a017
where lifnr = t_a017-lifnr.
sort it_lfa1 by lifnr.
select matnr lifnr umrez
into corresponding fields of table it_eina
from eina
for all entries in t_a017
where matnr = t_a017-matnr
and lifnr = t_a017-lifnr
and umrez ne 0 .
sort it_eina by matnr lifnr.
loop at wa_konp.
read table t_a017 with key knumh = wa_konp-knumh ."binary search.
if sy-subrc = 0.
move-corresponding t_a017 to wa_konp.
select single ausp~atwrt into wa_konp-atwrt from ausp
where objek = t_a017-lifnr and atinn = '0000000111'
and klart = '010' and atwrt = '05'.
if sy-subrc eq 0 and wa_konp-atwrt ne ''.
continue.
endif.
read table it_lfa1 with key lifnr = t_a017-lifnr .
if sy-subrc eq 0 .
if it_lfa1-kunnr ne ''.
continue.
endif.
endif.
read table it_eord with key matnr = t_a017-matnr werks = t_a017-werks lifnr = t_a017-lifnr .
if sy-subrc eq 0.
wa_konp-autet = it_eord-autet.
endif.
read table it_eina with key matnr = t_a017-matnr lifnr = t_a017-lifnr.
if sy-subrc = 0 .
wa_konp-kbetr = wa_konp-kbetr / it_eina-umrez.
endif.
k1_netpr = wa_konp-kbetr.
if wa_konp-konwa <> 'HKD' and wa_konp-konwa <> 'USD' and
wa_konp-konwa <> 'EUR' and wa_konp-konwa <> 'CNY' and wa_konp-konwa <> 'GBP'.
call function 'BAPI_CURRENCY_CONV_TO_EXTERNAL'
exporting
currency = wa_konp-konwa
amount_internal = k1_netpr
importing
amount_external = k2_netpr.
wa_konp-kbetr = k2_netpr.
endif.
k4_netpr = k1_netpr.
call function 'CONVERT_TO_LOCAL_CURRENCY'
exporting
date = p_datuv
foreign_amount = k4_netpr
foreign_currency = wa_konp-konwa
local_currency = 'HKD'
type_of_rate = 'M'
importing
local_amount = k3_netpr
exceptions
no_rate_found = 1
others = 2.
wa_konp-kbphk = k3_netpr.
move-corresponding wa_konp to t_konp.
append t_konp.
endif.
endloop.
* delete customer/spot buy price
* delete t_konp where kunnr <> ''.
* delete t_konp where atwrt <> ''.
sort t_konp by werks matnr autet descending kbphk lifnr.
endform. "get_purprice