*&---------------------------------------------------------------------*
*& Progarm : ZSD_UPDATE_FORECAST_BOM Author : Jimmy Wong
*& Created : 10 Jan 2013 App : SD
*& Title : Update Forecast Bom explosion number
*& Description : Update Forecast Bom explosion number
*&---------------------------------------------------------------------*
*& Version Author Date description
*& Jimmy 10 Jan 2013 the first version
* Lisa Wong add no withdraw to BAPI
*& the last update time 2013.03.11 18:00
*&---------------------------------------------------------------------*
report zsd_update_forecast_bom no standard page heading.
tables:pbed,pbim.
data:begin of itab occurs 0,
pbdnr like pbim-pbdnr,
matnr like pbim-matnr,
werks like pbim-werks,
bedae like pbim-bedae,
versb like pbim-versb,
vervs like pbim-vervs,
entlu like pbed-entlu,
prgbz like tprg-prgbz,
pdatu like pbed-pdatu,
meins like pbed-meins,
plnmg like pbed-plnmg,
pspel like pbim-pspel,
posid like prps-posid,
message(700) type c,
end of itab.
data: begin of itab_change occurs 0,
pbdnr like pbim-pbdnr,
matnr like pbim-matnr,
werks like pbim-werks,
bedae like pbim-bedae,
versb like pbim-versb,
vervs like pbim-vervs,
pspel like pbim-pspel,
message(700) type c,
end of itab_change.
data:it_change like itab_change occurs 0 with header line.
data: req_item like bapisitemr.
data: req_data like bapisshdin occurs 0 with header line.
data: it_return like bapireturn1 occurs 0 with header line.
data:begin of it_tprg occurs 20,
prgbz like tprg-prgbz,
prgrs like tprg-prgrs,
end of it_tprg.
data:lv_tabix like sy-tabix.
data:lv_year type i,
wa_year(4) type c.
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-010.
select-options: s_werks for pbim-werks.
select-options: s_pbdnr for pbim-pbdnr.
select-options: s_matnr for pbim-matnr.
select-options: s_versb for pbim-versb.
select-options: s_pdatu for pbed-pdatu .
parameters : p_sernr like snum-sernr default 'C2' obligatory.
parameters: p_test as checkbox default 'X'.
parameters: p_wbs as checkbox .
selection-screen end of block 1.
*initialization.
* s_pdatu-sign = 'I'.
* s_pdatu-option = 'BT'.
* s_pdatu-low = sy-datum.
* lv_year = sy-datum+0(4) + 1.
* wa_year = lv_year .
* concatenate wa_year '12' '31' into s_pdatu-high.
* append s_pdatu.
*&---------------------------------------------------------------------*
* start of process
*&---------------------------------------------------------------------*
start-of-selection.
perform get_data.
if itab_change[] is initial.
message i003(zmm).
exit.
endif.
if p_test is initial.
perform process_data.
endif.
perform display_data.
*&---------------------------------------------------------------------*
*& Form GET_DATA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
form get_data .
if p_wbs = 'X'.
select a~pbdnr a~werks a~versb a~matnr a~bedae a~vervs
b~entlu b~pdatu b~plnmg b~meins a~pspel
into corresponding fields of table itab
from pbim as a
inner join pbed as b on a~bdzei = b~bdzei
where a~matnr in s_matnr
and a~werks in s_werks
and a~bedae = 'VSFB'
and a~versb in s_versb
and a~pbdnr in s_pbdnr
and b~pdatu in s_pdatu .
else.
select a~pbdnr a~werks a~versb a~matnr a~bedae a~vervs
b~entlu b~pdatu b~plnmg b~meins a~pspel
into corresponding fields of table itab
from pbim as a
inner join pbed as b on a~bdzei = b~bdzei
where a~matnr in s_matnr
and a~werks in s_werks
and a~bedae = 'VSFB'
and a~versb in s_versb
and a~pbdnr in s_pbdnr
and b~pdatu in s_pdatu
and b~sernr ne p_sernr .
endif.
select prgbz prgrs
into corresponding fields of table it_tprg
from tprg
where spras = sy-langu.
sort it_tprg by prgrs prgbz .
loop at itab.
lv_tabix = sy-tabix.
move-corresponding itab to itab_change .
collect itab_change.
read table it_tprg with key prgrs = itab-entlu binary search.
if sy-subrc eq 0.
itab-prgbz = it_tprg-prgbz.
endif.
if itab-pspel is not initial.
call function 'CONVERSION_EXIT_ABPSP_OUTPUT'
exporting
input = itab-pspel
importing
output = itab-posid.
endif.
modify itab index lv_tabix transporting prgbz posid.
clear: itab_change,itab-posid,itab-prgbz.
endloop.
endform. " GET_DATA
*&---------------------------------------------------------------------*
*& Form PROCESS_DATA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
form process_data .
data:lv_total_line type i,
lv_line type p decimals 3,
lv_pspnr like prps-pspnr,
lv_pbdnr like pbim-pbdnr,
lv_versb like pbim-versb.
sort itab by pbdnr werks bedae versb matnr.
sort itab_change by pbdnr werks bedae versb matnr .
describe table itab_change lines lv_total_line.
loop at itab_change.
lv_line = sy-tabix / lv_total_line * 100.
call function 'SAPGUI_PROGRESS_INDICATOR'
exporting
percentage = lv_line
text = 'Updatting Data........'.
lv_tabix = sy-tabix.
loop at itab where pbdnr = itab_change-pbdnr
and werks = itab_change-werks
and bedae = itab_change-bedae
and versb = itab_change-versb
and matnr = itab_change-matnr .
req_data-date_type = itab-entlu.
req_data-req_date = itab-pdatu.
req_data-req_qty = itab-plnmg.
req_data-unit = itab-meins.
req_data-bomexpl = p_sernr.
append req_data.
endloop.
call function 'BAPI_REQUIREMENTS_CHANGE'
exporting
material = itab_change-matnr
plant = itab_change-werks
requirementstype = itab_change-bedae
version = itab_change-versb
vers_activ = itab_change-vervs
reqmtsplannumber = itab_change-pbdnr
no_withdr = 'X' "Add by Lisa Wong 03/11/2013
importing
requirement_item_out = req_item
tables
requirements_schedule_in = req_data
return = it_return.
read table it_return with key type = 'E'.
if sy-subrc eq 0.
loop at it_return where type = 'E'.
concatenate itab_change-message ' E: ' it_return-message into itab_change-message.
endloop.
modify itab_change index lv_tabix transporting message .
else.
call function 'BAPI_TRANSACTION_COMMIT'
exporting
wait = 'X'.
itab_change-message = 'Success.'.
modify itab_change index lv_tabix transporting message.
endif.
clear:req_data,it_return,it_return[],req_data[],req_item,itab_change-message.
endloop.
" update wbs
sort itab_change by pbdnr versb werks bedae matnr.
it_change[] = itab_change[].
loop at itab_change. "remarked by Oliver Lee 02/02/2013
if itab_change-message = 'Success.'.
* if lv_pbdnr ne itab_change-pbdnr or lv_versb ne itab_change-versb.
* clear:lv_pspnr.
* loop at it_change where pbdnr = itab_change-pbdnr
* and versb = itab_change-versb
* and werks = itab_change-werks
* and bedae = itab_change-bedae
* and pspel ne space.
* lv_pspnr = it_change-pspel.
* if lv_pspnr is not initial.
* exit.
* endif.
* endloop.
* endif.
* if lv_pspnr is not initial.
if itab_change-pspel is not initial. " Add by Oliver Lee 02/02/2013
update pbim set knttp = 'Q'
sobkz = 'Q'
kzvbr = 'P'
pspel = itab_change-pspel
kzbws = 'M'
where matnr = itab_change-matnr
and werks = itab_change-werks
and bedae = itab_change-bedae
and versb = itab_change-versb
and pbdnr = itab_change-pbdnr.
commit work and wait. "Add by Lisa Wong 03/11/2013
endif.
endif.
lv_pbdnr = itab_change-pbdnr.
lv_versb = itab_change-versb.
endloop.
sort itab_change by pbdnr werks bedae versb matnr .
loop at itab.
lv_tabix = sy-tabix.
read table itab_change with key pbdnr = itab-pbdnr
werks = itab-werks
bedae = itab-bedae
versb = itab-versb
matnr = itab-matnr binary search.
if sy-subrc eq 0.
itab-message = itab_change-message .
modify itab index lv_tabix transporting message .
endif.
endloop.
endform. " PROCESS_DATA
*&---------------------------------------------------------------------*
*& 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 'PBDNR' '' 'Requirement Plan' '12' '' '' '' ''.
alv_field 'WERKS' 'Plant' '' '' '' '' '' ''.
alv_field 'VERSB' 'Version' '' '6' '' '' '' ''.
alv_field 'MATNR' '' 'Material Number' '20' '' '' 'MARA' 'MATNR'.
alv_field 'VERVS' '' 'Active' '' '' '' '' ''.
alv_field 'PRGBZ' 'Period' '' '' '' '' '' ''.
alv_field 'PDATU' 'Deliv. Finish date' '' '10' '' '' '' ''.
alv_field 'PLNMG' 'Quantity' '' '' '' '' '' ''.
alv_field 'MEINS' 'Unit' '' '' '' '' '' ''.
alv_field 'POSID' '' 'WBS element' '' '' '' '' ''.
alv_field 'MESSAGE' 'Message' '' '30' '' '' '' ''.
call function 'REUSE_ALV_GRID_DISPLAY'
exporting
it_fieldcat = fc_hier[]
tables
t_outtab = itab[]
exceptions
program_error = 1
others = 2.
if sy-subrc ne 0.
" message i004(zmm)
endif.
endform. " DISPLAY_DATA
*& Progarm : ZSD_UPDATE_FORECAST_BOM Author : Jimmy Wong
*& Created : 10 Jan 2013 App : SD
*& Title : Update Forecast Bom explosion number
*& Description : Update Forecast Bom explosion number
*&---------------------------------------------------------------------*
*& Version Author Date description
*& Jimmy 10 Jan 2013 the first version
* Lisa Wong add no withdraw to BAPI
*& the last update time 2013.03.11 18:00
*&---------------------------------------------------------------------*
report zsd_update_forecast_bom no standard page heading.
tables:pbed,pbim.
data:begin of itab occurs 0,
pbdnr like pbim-pbdnr,
matnr like pbim-matnr,
werks like pbim-werks,
bedae like pbim-bedae,
versb like pbim-versb,
vervs like pbim-vervs,
entlu like pbed-entlu,
prgbz like tprg-prgbz,
pdatu like pbed-pdatu,
meins like pbed-meins,
plnmg like pbed-plnmg,
pspel like pbim-pspel,
posid like prps-posid,
message(700) type c,
end of itab.
data: begin of itab_change occurs 0,
pbdnr like pbim-pbdnr,
matnr like pbim-matnr,
werks like pbim-werks,
bedae like pbim-bedae,
versb like pbim-versb,
vervs like pbim-vervs,
pspel like pbim-pspel,
message(700) type c,
end of itab_change.
data:it_change like itab_change occurs 0 with header line.
data: req_item like bapisitemr.
data: req_data like bapisshdin occurs 0 with header line.
data: it_return like bapireturn1 occurs 0 with header line.
data:begin of it_tprg occurs 20,
prgbz like tprg-prgbz,
prgrs like tprg-prgrs,
end of it_tprg.
data:lv_tabix like sy-tabix.
data:lv_year type i,
wa_year(4) type c.
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-010.
select-options: s_werks for pbim-werks.
select-options: s_pbdnr for pbim-pbdnr.
select-options: s_matnr for pbim-matnr.
select-options: s_versb for pbim-versb.
select-options: s_pdatu for pbed-pdatu .
parameters : p_sernr like snum-sernr default 'C2' obligatory.
parameters: p_test as checkbox default 'X'.
parameters: p_wbs as checkbox .
selection-screen end of block 1.
*initialization.
* s_pdatu-sign = 'I'.
* s_pdatu-option = 'BT'.
* s_pdatu-low = sy-datum.
* lv_year = sy-datum+0(4) + 1.
* wa_year = lv_year .
* concatenate wa_year '12' '31' into s_pdatu-high.
* append s_pdatu.
*&---------------------------------------------------------------------*
* start of process
*&---------------------------------------------------------------------*
start-of-selection.
perform get_data.
if itab_change[] is initial.
message i003(zmm).
exit.
endif.
if p_test is initial.
perform process_data.
endif.
perform display_data.
*&---------------------------------------------------------------------*
*& Form GET_DATA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
form get_data .
if p_wbs = 'X'.
select a~pbdnr a~werks a~versb a~matnr a~bedae a~vervs
b~entlu b~pdatu b~plnmg b~meins a~pspel
into corresponding fields of table itab
from pbim as a
inner join pbed as b on a~bdzei = b~bdzei
where a~matnr in s_matnr
and a~werks in s_werks
and a~bedae = 'VSFB'
and a~versb in s_versb
and a~pbdnr in s_pbdnr
and b~pdatu in s_pdatu .
else.
select a~pbdnr a~werks a~versb a~matnr a~bedae a~vervs
b~entlu b~pdatu b~plnmg b~meins a~pspel
into corresponding fields of table itab
from pbim as a
inner join pbed as b on a~bdzei = b~bdzei
where a~matnr in s_matnr
and a~werks in s_werks
and a~bedae = 'VSFB'
and a~versb in s_versb
and a~pbdnr in s_pbdnr
and b~pdatu in s_pdatu
and b~sernr ne p_sernr .
endif.
select prgbz prgrs
into corresponding fields of table it_tprg
from tprg
where spras = sy-langu.
sort it_tprg by prgrs prgbz .
loop at itab.
lv_tabix = sy-tabix.
move-corresponding itab to itab_change .
collect itab_change.
read table it_tprg with key prgrs = itab-entlu binary search.
if sy-subrc eq 0.
itab-prgbz = it_tprg-prgbz.
endif.
if itab-pspel is not initial.
call function 'CONVERSION_EXIT_ABPSP_OUTPUT'
exporting
input = itab-pspel
importing
output = itab-posid.
endif.
modify itab index lv_tabix transporting prgbz posid.
clear: itab_change,itab-posid,itab-prgbz.
endloop.
endform. " GET_DATA
*&---------------------------------------------------------------------*
*& Form PROCESS_DATA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
form process_data .
data:lv_total_line type i,
lv_line type p decimals 3,
lv_pspnr like prps-pspnr,
lv_pbdnr like pbim-pbdnr,
lv_versb like pbim-versb.
sort itab by pbdnr werks bedae versb matnr.
sort itab_change by pbdnr werks bedae versb matnr .
describe table itab_change lines lv_total_line.
loop at itab_change.
lv_line = sy-tabix / lv_total_line * 100.
call function 'SAPGUI_PROGRESS_INDICATOR'
exporting
percentage = lv_line
text = 'Updatting Data........'.
lv_tabix = sy-tabix.
loop at itab where pbdnr = itab_change-pbdnr
and werks = itab_change-werks
and bedae = itab_change-bedae
and versb = itab_change-versb
and matnr = itab_change-matnr .
req_data-date_type = itab-entlu.
req_data-req_date = itab-pdatu.
req_data-req_qty = itab-plnmg.
req_data-unit = itab-meins.
req_data-bomexpl = p_sernr.
append req_data.
endloop.
call function 'BAPI_REQUIREMENTS_CHANGE'
exporting
material = itab_change-matnr
plant = itab_change-werks
requirementstype = itab_change-bedae
version = itab_change-versb
vers_activ = itab_change-vervs
reqmtsplannumber = itab_change-pbdnr
no_withdr = 'X' "Add by Lisa Wong 03/11/2013
importing
requirement_item_out = req_item
tables
requirements_schedule_in = req_data
return = it_return.
read table it_return with key type = 'E'.
if sy-subrc eq 0.
loop at it_return where type = 'E'.
concatenate itab_change-message ' E: ' it_return-message into itab_change-message.
endloop.
modify itab_change index lv_tabix transporting message .
else.
call function 'BAPI_TRANSACTION_COMMIT'
exporting
wait = 'X'.
itab_change-message = 'Success.'.
modify itab_change index lv_tabix transporting message.
endif.
clear:req_data,it_return,it_return[],req_data[],req_item,itab_change-message.
endloop.
" update wbs
sort itab_change by pbdnr versb werks bedae matnr.
it_change[] = itab_change[].
loop at itab_change. "remarked by Oliver Lee 02/02/2013
if itab_change-message = 'Success.'.
* if lv_pbdnr ne itab_change-pbdnr or lv_versb ne itab_change-versb.
* clear:lv_pspnr.
* loop at it_change where pbdnr = itab_change-pbdnr
* and versb = itab_change-versb
* and werks = itab_change-werks
* and bedae = itab_change-bedae
* and pspel ne space.
* lv_pspnr = it_change-pspel.
* if lv_pspnr is not initial.
* exit.
* endif.
* endloop.
* endif.
* if lv_pspnr is not initial.
if itab_change-pspel is not initial. " Add by Oliver Lee 02/02/2013
update pbim set knttp = 'Q'
sobkz = 'Q'
kzvbr = 'P'
pspel = itab_change-pspel
kzbws = 'M'
where matnr = itab_change-matnr
and werks = itab_change-werks
and bedae = itab_change-bedae
and versb = itab_change-versb
and pbdnr = itab_change-pbdnr.
commit work and wait. "Add by Lisa Wong 03/11/2013
endif.
endif.
lv_pbdnr = itab_change-pbdnr.
lv_versb = itab_change-versb.
endloop.
sort itab_change by pbdnr werks bedae versb matnr .
loop at itab.
lv_tabix = sy-tabix.
read table itab_change with key pbdnr = itab-pbdnr
werks = itab-werks
bedae = itab-bedae
versb = itab-versb
matnr = itab-matnr binary search.
if sy-subrc eq 0.
itab-message = itab_change-message .
modify itab index lv_tabix transporting message .
endif.
endloop.
endform. " PROCESS_DATA
*&---------------------------------------------------------------------*
*& 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 'PBDNR' '' 'Requirement Plan' '12' '' '' '' ''.
alv_field 'WERKS' 'Plant' '' '' '' '' '' ''.
alv_field 'VERSB' 'Version' '' '6' '' '' '' ''.
alv_field 'MATNR' '' 'Material Number' '20' '' '' 'MARA' 'MATNR'.
alv_field 'VERVS' '' 'Active' '' '' '' '' ''.
alv_field 'PRGBZ' 'Period' '' '' '' '' '' ''.
alv_field 'PDATU' 'Deliv. Finish date' '' '10' '' '' '' ''.
alv_field 'PLNMG' 'Quantity' '' '' '' '' '' ''.
alv_field 'MEINS' 'Unit' '' '' '' '' '' ''.
alv_field 'POSID' '' 'WBS element' '' '' '' '' ''.
alv_field 'MESSAGE' 'Message' '' '30' '' '' '' ''.
call function 'REUSE_ALV_GRID_DISPLAY'
exporting
it_fieldcat = fc_hier[]
tables
t_outtab = itab[]
exceptions
program_error = 1
others = 2.
if sy-subrc ne 0.
" message i004(zmm)
endif.
endform. " DISPLAY_DATA