*&---------------------------------------------------------------------*
*& Progarm : ZPPR020 Author : Jimmy Wong
*& Created : 31 Oct 2012 App : PP
*& Title : Consignment Report
*& Description : Consignment Report
*&---------------------------------------------------------------------*
*& Version Author Date description
*& Jimmy 31 Oct 2012 the first version
*& M1 Jimmy 29 Nov 2012 Add WA00 and WA01 Qty
*& M2 Jimmy 25 Dec 2012 Enhance
*& the last update time 2012.12.25 15:00
*&---------------------------------------------------------------------*
report zppr020 no standard page heading.
*&---------------------------------------------------------------------*
* database table
*&---------------------------------------------------------------------*
tables : mara,marc,mard,ausp.
*&---------------------------------------------------------------------*
* internal table & variables
*&---------------------------------------------------------------------*
data: begin of wa_itab occurs 0,
matnr like mara-matnr,
maktx like makt-maktx,
werks like mchb-werks,
charg like mcha-charg,
binno type c length 30,
cinsm like mchb-cinsm,
clabs like mchb-clabs,
tlqty like mchb-clabs,
waqty like mchb-clabs,
mark like sy-datum,
kdmat like knmt-kdmat,
lwedt like mch1-lwedt,
bdmng like resb-bdmng,
end of wa_itab.
data:it_itab like wa_itab occurs 0 with header line.
data:wa_itab1 like wa_itab occurs 0 with header line.
data:begin of it_makt occurs 0,
matnr like makt-matnr,
maktx like makt-maktx,
end of it_makt.
data:begin of it_knmt occurs 0,
matnr like knmt-matnr,
vkorg like knmt-vkorg,
kdmat like knmt-kdmat,
end of it_knmt.
data: begin of it_mchb occurs 0,
matnr like mara-matnr,
charg like mcha-charg,
werks like mchb-werks,
lgort like mchb-lgort,
waqty like mchb-clabs,
end of it_mchb.
data: begin of it_resb occurs 0,
matnr like mara-matnr,
werks like mchb-werks,
charg like mcha-charg,
bdmng like resb-bdmng,
enmng like resb-enmng,
clabm like ztcpc01-clabm,
rsnum like resb-rsnum,
rspos like resb-rspos,
aufnr like resb-aufnr,
txt04 like tj02t-txt04,
end of it_resb.
data: begin of it_matnr occurs 0,
matnr like mara-matnr,
werks like mchb-werks,
binno type c length 30,
fieldname(12) type c,
fielddesc(40) type c,
bdmng like resb-bdmng,
clabm like ztcpc01-clabm,
end of it_matnr.
data: it_field like it_matnr occurs 0 with header line.
data :it_ztcpc01 like ztcpc01 occurs 0 with header line.
data: lv_tabix like sy-tabix. .
data:lv_total_line type i,
lv_line type p decimals 3.
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.
type-pools: slis.
data: fc_hier type slis_t_fieldcat_alv,
wa_hier type slis_fieldcat_alv .
*----------------------------------------------------------------------*
* Parameter & Select-Options *
*----------------------------------------------------------------------*
selection-screen begin of block 1 with frame title text-001.
select-options : s_werks for marc-werks .
select-options : s_matnr for mara-matnr.
select-options : s_mtart for mara-mtart.
select-options : s_binno for ausp-atwrt lower case.
selection-screen end of block 1.
*&---------------------------------------------------------------------*
* start of process
*&---------------------------------------------------------------------*
start-of-selection.
if s_binno[] is not initial.
loop at s_binno.
translate s_binno-low to upper case.
translate s_binno-high to upper case.
modify s_binno.
endloop.
endif.
perform get_data.
if wa_itab[] is initial .
message 'No Record Found' type 'I'.
exit.
endif.
perform process_data.
perform create_structure.
perform create_dynamic_table.
perform process_data_table.
perform display_data.
end-of-selection.
*&---------------------------------------------------------------------*
*& Form GET_DATA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
form get_data .
select a~matnr a~werks a~charg a~clabs a~cinsm d~atwrt as binno c~lwedt
from mchb as a
inner join mara as b on a~matnr = b~matnr
inner join mch1 as c on a~matnr = c~matnr and a~charg = c~charg
inner join ausp as d on d~objek = c~cuobj_bm
inner join cabn as e on d~atinn = e~atinn
into corresponding fields of table wa_itab1
where a~matnr in s_matnr
and a~werks in s_werks
and b~mtart in s_mtart
and d~atwrt in s_binno
and e~atnam = 'ZREMARK_01'.
loop at wa_itab1.
move-corresponding wa_itab1 to wa_itab.
collect wa_itab.
clear:wa_itab.
endloop.
endform. " GET_DATA
*&---------------------------------------------------------------------*
*& Form PROCESS_DATA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
form process_data .
sort wa_itab by matnr werks charg.
" WA00 WA01 Qty
select matnr werks charg lgort clabs as waqty
into corresponding fields of table it_mchb
from mchb
for all entries in wa_itab
where matnr = wa_itab-matnr
and werks = wa_itab-werks
and charg = wa_itab-charg
and lgort in ('WA01', 'WA00').
" production order qty released
select a~matnr a~werks a~charg a~bdmng a~enmng a~rsnum a~rspos b~aufnr e~txt04
into corresponding fields of table it_resb
from resb as a inner join afko as b on a~rsnum = b~rsnum
inner join aufk as c on c~aufnr = b~aufnr
inner join jest as d on d~objnr = c~objnr
inner join tj02t as e on e~istat = d~stat and e~spras = sy-langu
for all entries in wa_itab
where a~matnr = wa_itab-matnr
and a~werks = wa_itab-werks
and a~charg = wa_itab-charg
and a~xloek = space
and a~bdmng > 0
and e~txt04 in ('REL' , 'CRTD' )
and d~inact = ''.
if it_resb[] is not initial.
"staged production order qty
select *
into corresponding fields of table it_ztcpc01
from ztcpc01
for all entries in it_resb
where aufnr = it_resb-aufnr
and matnr = it_resb-matnr
and werks = it_resb-werks
and charg = it_resb-charg.
sort it_ztcpc01 by aufnr matnr werks charg.
loop at it_resb .
read table it_ztcpc01 with key aufnr = it_resb-aufnr
matnr = it_resb-matnr
werks = it_resb-werks
charg = it_resb-charg.
if sy-subrc eq 0.
loop at it_ztcpc01 where aufnr = it_resb-aufnr and matnr = it_resb-matnr and werks = it_resb-werks and charg = it_resb-charg.
it_resb-clabm = it_resb-clabm + it_ztcpc01-clabm.
endloop.
endif.
if it_resb-txt04 = 'REL'.
move-corresponding it_resb to it_matnr.
it_matnr-fieldname = it_resb-aufnr.
it_matnr-fielddesc = it_resb-aufnr.
if it_matnr-bdmng > it_matnr-clabm . " release production order qty > staged qty
read table wa_itab with key matnr = it_resb-matnr
werks = it_resb-werks
charg = it_resb-charg.
if sy-subrc eq 0.
it_matnr-binno = wa_itab-binno.
it_field-fieldname = it_matnr-fieldname.
it_field-fielddesc = it_matnr-fielddesc.
collect it_matnr.
collect it_field.
endif.
endif.
clear:it_matnr,it_field.
endif.
modify it_resb transporting clabm.
endloop.
endif.
sort it_mchb by matnr werks charg.
sort it_resb by matnr werks charg.
describe table wa_itab lines lv_total_line.
loop at wa_itab.
lv_line = sy-tabix / lv_total_line * 100.
call function 'SAPGUI_PROGRESS_INDICATOR'
exporting
percentage = lv_line
text = 'Processing Data........'.
move-corresponding wa_itab to it_itab.
*M1 add
read table it_mchb with key matnr = it_itab-matnr
werks = it_itab-werks
charg = it_itab-charg.
if sy-subrc eq 0.
loop at it_mchb where matnr = it_itab-matnr
and werks = it_itab-werks
and charg = it_itab-charg.
it_itab-waqty = it_itab-waqty + it_mchb-waqty.
endloop.
endif.
*M1 End
read table it_resb with key matnr = it_itab-matnr
werks = it_itab-werks
charg = it_itab-charg.
if sy-subrc eq 0.
loop at it_resb where matnr = it_itab-matnr and werks = it_itab-werks and charg = it_itab-charg.
it_itab-bdmng = it_itab-bdmng + it_resb-bdmng - it_resb-clabm .
endloop.
endif.
it_itab-clabs = it_itab-clabs - it_itab-waqty . "M1 Add
it_itab-tlqty = it_itab-clabs + it_itab-cinsm.
clear it_itab-charg .
collect it_itab.
clear:it_itab.
endloop.
endform. " PROCESS_DATA
*&---------------------------------------------------------------------*
*& Form CREATE_STRUCTURE
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
form create_structure .
data:lv_i type i.
define create_stru.
wa_structure-fieldname = &1.
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 'WERKS' 'C' '4' '' '' .
create_stru 'MATNR' 'C' '20' '' '' .
create_stru 'MAKTX' 'C' '40' '' '' .
create_stru 'BINNO' 'C' '30' '' '' .
create_stru 'CINSM' 'P' '20' 'DEC' '3' .
create_stru 'CLABS' 'P' '20' 'DEC' '3' .
create_stru 'WAQTY' 'P' '20' 'DEC' '3' .
create_stru 'TLQTY' 'P' '20' 'DEC' '3' .
create_stru 'KDMAT' 'C' '20' '' '' .
create_stru 'LWEDT' 'D' '8' '' '' .
create_stru 'BDMNG' 'P' '20' 'DEC' '3' .
loop at it_field.
create_stru it_field-fieldname 'P' '20' 'DEC' '3' .
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_TABLE
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
form process_data_table .
data:wa_new_line type ref to data.
create data wa_new_line like line of <itab>.
assign wa_new_line->* to <w_itab>.
select matnr maktx
into corresponding fields of table it_makt
from makt
for all entries in it_itab
where matnr in s_matnr
and matnr = it_itab-matnr.
select matnr vkorg kdmat
into corresponding fields of table it_knmt
from knmt
for all entries in it_itab
where matnr in s_matnr
and matnr = it_itab-matnr.
sort it_makt by matnr.
sort it_knmt by matnr vkorg.
sort it_itab by werks matnr binno .
sort it_matnr by werks matnr binno fieldname.
loop at it_itab.
loop at it_structure into wa_structure.
assign component wa_structure-fieldname of structure <w_itab> to <wa_field>.
if wa_structure-fieldname ='WERKS' .
<wa_field> = it_itab-werks.
elseif wa_structure-fieldname ='MATNR' .
<wa_field> = it_itab-matnr.
elseif wa_structure-fieldname ='KDMAT' .
read table it_knmt with key matnr = it_itab-matnr vkorg = it_itab-werks binary search.
if sy-subrc eq 0.
<wa_field> = it_knmt-kdmat.
endif.
elseif wa_structure-fieldname ='MAKTX'.
read table it_makt with key matnr = it_itab-matnr binary search.
if sy-subrc eq 0.
<wa_field> = it_makt-maktx.
endif.
elseif wa_structure-fieldname ='BINNO'.
<wa_field> = it_itab-binno.
elseif wa_structure-fieldname ='CINSM'.
<wa_field> = it_itab-cinsm.
elseif wa_structure-fieldname ='CLABS' .
<wa_field> = it_itab-clabs.
elseif wa_structure-fieldname ='WAQTY' .
<wa_field> = it_itab-waqty.
elseif wa_structure-fieldname ='TLQTY' .
<wa_field> = it_itab-tlqty.
elseif wa_structure-fieldname ='LWEDT' .
<wa_field> = it_itab-lwedt.
elseif wa_structure-fieldname ='BDMNG' .
<wa_field> = it_itab-bdmng.
else.
read table it_matnr with key werks = it_itab-werks matnr = it_itab-matnr
binno = it_itab-binno fieldname = wa_structure-fieldname.
if sy-subrc eq 0.
<wa_field> = it_matnr-bdmng - it_matnr-clabm.
endif.
endif.
endloop.
append <w_itab> to <itab>.
clear:<wa_field>,<w_itab>.
endloop.
endform. " PROCESS_DATA_TABLE
*&---------------------------------------------------------------------*
*& Form DISPLAY_DATA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
form display_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 'WERKS' 'Plant' '' '5' 'L' '' '' ''.
alv_field 'MATNR' 'Material' '' '20' 'L' '' 'MARA' 'MATNR'.
alv_field 'MAKTX' '' 'Material Desc' '30' 'L' '' '' ''.
alv_field 'BINNO' 'Bin#' '' '10' 'L' '' '' ''.
alv_field 'CINSM' '' 'Qual. inspection' '15' 'R' 'X' '' ''.
alv_field 'CLABS' '' 'Unrestricted QTY' '15' 'R' 'X' '' ''.
alv_field 'WAQTY' '' 'WA01/WA00 QTY' '15' 'R' 'X' '' ''. "M1 Add
alv_field 'TLQTY' '' 'Total Qty' '15' 'R' 'X' '' ''.
alv_field 'KDMAT' 'Customer Material' '' '15' 'L' '' '' ''.
alv_field 'LWEDT' '' 'Receive date of first batch' '10' 'L' '' '' ''.
alv_field 'BDMNG' '' 'Total allocated QTY' '15' 'R' 'X' '' ''.
loop at it_field.
alv_field it_field-fieldname '' it_field-fielddesc '14' 'R' 'X' '' ''.
endloop.
free:wa_itab,it_itab,it_makt,it_knmt,it_mchb,it_resb,
it_matnr,it_ztcpc01,it_structure,wa_itab1,it_field.
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. " DISPLAY_DATA