*&---------------------------------------------------------------------*
*& Progarm : ZMMR007 Author : Jimmy Wong
*& Created : 07 Jan 2012 App : MM
*& Title : Update Project Price (QBEW)
*& Description : Update Project Price (QBEW)
*&---------------------------------------------------------------------*
*& Version Author Date description
*& Jimmy 07 Jan 2012 the first version
*& the last update time 2013.01.07 14:00
*&---------------------------------------------------------------------*
report zmmr007 no standard page heading.
tables:marc.
data:begin of it_record occurs 0,
order_t type c length 30,
matnr like qbew-matnr,
bwkey like qbew-bwkey,
sobkz like qbew-sobkz,
pspnr like qbew-pspnr,
vprsv like qbew-vprsv,
verpr like qbew-verpr,
stprs like qbew-stprs,
peinh like qbew-peinh,
vprsv_n like mbew-vprsv,
verpr_n like mbew-verpr,
stprs_n like mbew-stprs,
peinh_n like mbew-peinh,
posid like prps-posid,
tab type c length 10,
message type c length 700,
end of it_record.
data: it_err4 like it_record occurs 0 with header line.
data: itab like it_record occurs 0 with header line.
data:begin of it_matnr occurs 0,
matnr like qbew-matnr,
bwkey like qbew-bwkey,
end of it_matnr.
data:begin of it_mbew occurs 0,
matnr like qbew-matnr,
bwkey like qbew-bwkey,
vprsv like mbew-vprsv,
verpr like mbew-verpr,
stprs like mbew-stprs,
peinh like mbew-peinh,
end of it_mbew.
data: it_mbewh like it_mbew occurs 0 with header line.
data:begin of it_prps occurs 0,
pspnr like qbew-pspnr,
posid like prps-posid,
end of it_prps.
data: it_bdcmsg like bdcmsgcoll occurs 0 with header line,
bdcdata like bdcdata occurs 0 with header line,
it_return like bapiret2 occurs 0 with header line.
type-pools: slis.
data: fc_hier type slis_t_fieldcat_alv,
wa_hier type slis_fieldcat_alv .
data:lv_total_line type i,
lv_line type p decimals 3,
lv_tabix like sy-tabix,
lv_data like sy-datum,
lv_lfgja like mbewh-lfgja,
lv_lfmon like mbewh-lfmon .
*----------------------------------------------------------------------*
* Parameter & Select-Options *
*----------------------------------------------------------------------*
selection-screen begin of block 1 with frame title text-001.
parameters:p_budat like sy-datum default sy-datum obligatory,
p_bukrs type bukrs default '8000' obligatory,
s_bwkey like marc-werks default '8101' obligatory.
select-options:s_matnr for marc-matnr.
parameters: p_100 type i default 10 obligatory.
parameters: p_mode type ctu_mode default 'N' obligatory.
parameters: p_test as checkbox default 'X'.
selection-screen skip 1.
parameters: p_pre as checkbox .
parameters: p_date type pam_month .
selection-screen end of block 1.
initialization.
call function 'SEPA_MANDATE_ADD_MONTH_TO_DATE'
exporting
months = '-4'
olddate = sy-datum
importing
newdate = lv_data.
concatenate lv_data+0(4) lv_data+4(2) into p_date.
*&---------------------------------------------------------------------*
* start of process
*&---------------------------------------------------------------------*
start-of-selection.
lv_lfgja = p_date+0(4).
lv_lfmon = p_date+4(2).
perform get_data.
if it_record[] is initial.
message i003(zmm).
exit.
endif.
perform check_data.
perform process_data.
perform display_data.
*&---------------------------------------------------------------------*
*& Form GET_DATA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
form get_data .
select matnr bwkey sobkz pspnr vprsv verpr stprs peinh
into corresponding fields of table it_record
from qbew
where matnr in s_matnr
and bwkey = s_bwkey.
select distinct matnr bwkey
into corresponding fields of table it_matnr
from qbew
where matnr in s_matnr
and bwkey = s_bwkey.
if it_matnr[] is not initial.
select pspnr posid
into corresponding fields of table it_prps
from prps
for all entries in it_record
where pspnr = it_record-pspnr.
sort it_prps by pspnr.
if p_pre = 'X'.
select matnr bwkey vprsv verpr stprs peinh
into corresponding fields of table it_mbewh
from mbewh
for all entries in it_matnr
where matnr = it_matnr-matnr
and bwkey = it_matnr-bwkey
and lfgja = lv_lfgja
and lfmon = lv_lfmon.
sort it_mbewh by matnr bwkey.
select matnr bwkey vprsv verpr stprs peinh
into corresponding fields of table it_mbew
from mbew
for all entries in it_matnr
where matnr = it_matnr-matnr
and bwkey = it_matnr-bwkey.
else.
select matnr bwkey vprsv verpr stprs peinh
into corresponding fields of table it_mbew
from mbew
for all entries in it_matnr
where matnr = it_matnr-matnr
and bwkey = it_matnr-bwkey.
endif.
sort it_mbew by matnr bwkey.
endif.
endform. " GET_DATA
*&---------------------------------------------------------------------*
*& Form PROCESS_DATA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
form process_data .
data:lv_cur type i value 0,
lv_mod type i,
lv_fname(30) type c,
lv_temp(2) type c,
lv_len type i,
lv_dat(10) type c,
lv_inex type i value 0,
lv_price type c length 15,
lv_flag type c,
lv_total type i,
lv_record type i.
lv_mod = lines( it_record ) .
describe table it_record lines lv_total_line.
loop at it_err4.
lv_tabix = sy-tabix.
loop at it_record where order_t = it_err4-order_t.
lv_line = sy-tabix / lv_total_line * 100.
lv_record = lv_record + 1.
call function 'SAPGUI_PROGRESS_INDICATOR'
exporting
percentage = lv_line
text = 'Processing Data........'.
move-corresponding it_record to itab.
if p_pre = 'X'.
read table it_mbewh with key matnr = itab-matnr bwkey = itab-bwkey.
if sy-subrc eq 0.
itab-vprsv_n = it_mbewh-vprsv.
itab-verpr_n = it_mbewh-verpr.
itab-stprs_n = it_mbewh-stprs.
itab-peinh_n = it_mbewh-peinh.
itab-tab = 'MBEWH'.
else.
read table it_mbew with key matnr = itab-matnr bwkey = itab-bwkey.
if sy-subrc eq 0.
itab-vprsv_n = it_mbew-vprsv.
itab-verpr_n = it_mbew-verpr.
itab-stprs_n = it_mbew-stprs.
itab-peinh_n = it_mbew-peinh.
itab-tab = 'MBEW'.
else.
itab-message = 'MBEW Price NO Exists'.
lv_flag = 'X'.
endif.
endif.
else.
read table it_mbew with key matnr = itab-matnr bwkey = itab-bwkey.
if sy-subrc eq 0.
itab-vprsv_n = it_mbew-vprsv.
itab-verpr_n = it_mbew-verpr.
itab-stprs_n = it_mbew-stprs.
itab-peinh_n = it_mbew-peinh.
itab-tab = 'MBEW'.
else.
itab-message = 'MBEW Price NO Exists'.
lv_flag = 'X'.
endif.
endif.
read table it_prps with key pspnr = itab-pspnr binary search.
if sy-subrc eq 0.
itab-posid = it_prps-posid.
else.
concatenate itab-message 'PRPS WBS NO Exists' into itab-message.
lv_flag = 'X'.
endif.
if p_test is initial.
if lv_flag is initial.
lv_cur = lv_cur + 1.
lv_inex = lv_inex + 1.
lv_total = lv_total + 1.
if lv_inex = 1.
perform bdc_dynpro using 'SAPRCKM_MR21' '0201'.
perform bdc_field using 'BDC_CURSOR' 'MR21HEAD-WERKS'.
perform change_date_format using p_budat changing lv_dat.
perform bdc_field using 'MR21HEAD-BUDAT' lv_dat.
perform bdc_field using 'MR21HEAD-BUKRS' p_bukrs.
perform bdc_field using 'MR21HEAD-WERKS' s_bwkey.
perform bdc_dynpro using 'SAPRCKM_MR21' '0201'.
perform bdc_field using 'BDC_OKCODE' '=VAR'.
perform bdc_field using 'BDC_CURSOR' 'MR21HEAD-SCREEN_VARIANT'.
perform bdc_field using 'MR21HEAD-SCREEN_VARIANT' 'MR21_PSP_ELEMENT_BWKEY_0250'.
endif.
move lv_cur to lv_temp.
lv_len = strlen( lv_temp ).
if lv_len = 1.
concatenate '0' lv_temp into lv_temp.
endif.
perform bdc_dynpro using 'SAPRCKM_MR21' '0201'.
perform bdc_field using 'BDC_OKCODE' '=ENTR'.
perform bdc_field using 'MR21HEAD-SCREEN_VARIANT' 'MR21_LAGERMATERIAL_0250'.
concatenate 'CKI_MR21_0250-MATNR(' lv_temp ')' into lv_fname.
perform bdc_field using lv_fname it_record-matnr.
concatenate 'CKI_MR21_0250-NEWVALPR(' lv_temp ')' into lv_fname.
if itab-vprsv = 'V'.
lv_price = itab-verpr_n.
else.
lv_price = itab-stprs_n.
endif.
perform bdc_field using lv_fname lv_price .
concatenate 'CKI_MR21_0250-PSPNR(' lv_temp ')' into lv_fname.
perform bdc_field using lv_fname itab-posid .
lv_mod = lv_cur mod 9.
if lv_mod = 0.
clear:lv_cur.
* lv_cur = 1.
perform bdc_dynpro using 'SAPRCKM_MR21' '0201'.
perform bdc_field using 'BDC_OKCODE' '=DOWN'.
endif.
endif.
if lv_total = p_100 or ( lv_record = lv_total_line and lv_total < p_100 ).
perform bdc_dynpro using 'SAPRCKM_MR21' '0201'.
perform bdc_field using 'BDC_OKCODE' '=SAVE'.
call transaction 'MR21'
using bdcdata
mode p_mode "Background performance
update 'S' "local updata
messages into it_bdcmsg. "all message table
call function 'CONVERT_BDCMSGCOLL_TO_BAPIRET2'
tables
imt_bdcmsgcoll = it_bdcmsg
ext_return = it_return.
read table it_return with key type = 'E'.
if sy-subrc eq 0.
itab-message = it_return-message.
it_err4-message = it_return-message.
else.
read table it_return with key type = 'S' id = 'CKPRCH' number = '019'.
if sy-subrc eq 0.
itab-message = it_return-message_v1.
it_err4-message = it_return-message_v1.
else.
loop at it_return.
concatenate itab-message it_return-message into itab-message.
concatenate it_err4-message it_return-message into it_err4-message.
endloop.
endif.
endif.
modify it_err4 index lv_tabix transporting message.
clear: it_return,it_bdcmsg,it_bdcmsg[], bdcdata, bdcdata[],it_return[],lv_total,
lv_cur ,lv_mod ,lv_len,lv_inex.
endif.
endif.
append itab.
clear:itab,lv_flag,lv_price.
endloop.
clear:it_err4-message.
endloop.
loop at itab where message = space.
lv_tabix = sy-tabix.
read table it_err4 with key order_t = itab-order_t .
if sy-subrc eq 0.
itab-message = it_err4-message.
modify itab index lv_tabix transporting message.
endif.
endloop.
free: it_record,it_err4,it_matnr,it_mbew,it_prps,it_bdcmsg,bdcdata,it_return,it_mbewh.
endform. " PROCESS_DATA
*----------------------------------------------------------------------*
* Start new screen *
*----------------------------------------------------------------------*
form bdc_dynpro using program dynpro.
clear bdcdata.
bdcdata-program = program.
bdcdata-dynpro = dynpro.
bdcdata-dynbegin = 'X'.
append bdcdata.
endform. "BDC_DYNPRO
*----------------------------------------------------------------------*
* Insert field *
*----------------------------------------------------------------------*
form bdc_field using fnam fval.
clear bdcdata.
bdcdata-fnam = fnam.
bdcdata-fval = fval.
append bdcdata.
endform. "BDC_FIELD
*&---------------------------------------------------------------------*
*& Form CHANGE_DATE_FORMAT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_<GT_OUT>_DATUV text
* <--P_LV_DAT text
* <--P_PERFORM text
* <--P_BDC_FIELD text
* -->P_0208 text
* -->P_<GT_OUT>_DATUV text
*----------------------------------------------------------------------*
form change_date_format using pi_date changing pt_date.
call function 'CONVERT_DATE_TO_EXTERNAL'
exporting
date_internal = pi_date
importing
date_external = pt_date
exceptions
date_internal_is_invalid = 1
others = 2.
if sy-subrc <> 0.
message 'Date Format Error' type 'E'.
endif.
endform. " CHANGE_DATE_FORMAT
*&---------------------------------------------------------------------*
*& 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 'MATNR' 'Material' '' '18' 'L' '' 'MARA' 'MATNR'.
alv_field 'BWKEY' 'Plant' '' '5' 'L' '' '' ''.
alv_field 'POSID' 'WBS' '' '12' 'L' '' '' ''.
alv_field 'VPRSV' '' 'Price Control Indicator' '5' 'L' '' '' ''.
alv_field 'VERPR' '' 'Moving price' '10' 'R' '' '' ''.
alv_field 'STPRS' '' 'Standard price' '10' 'R' '' '' ''.
alv_field 'PEINH' '' 'Price Unit' '10' 'R' '' '' ''.
alv_field 'VPRSV_N' '' 'New Price Control Indicator' '5' 'L' '' '' ''.
alv_field 'VERPR_N' '' 'New Moving price' '10' 'R' '' '' ''.
alv_field 'STPRS_N' '' 'New Standard price' '10' 'R' '' '' ''.
alv_field 'PEINH_N' '' 'New Price Unit' '10' 'R' '' '' ''.
alv_field 'TAB' '' 'Ref table' '6' 'L' '' '' ''.
alv_field 'MESSAGE' '' 'Message' '20' 'L' '' '' ''.
sort itab by matnr bwkey.
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.
if sy-subrc ne 0.
write: sy-msgv1,sy-msgv2, sy-msgv3, sy-msgv4.
endif.
endform. " DISPLAY_DATA
*&---------------------------------------------------------------------*
*& Form CHECK_DATA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
form check_data .
data:lv_total type i,
lv_i type i,
lv_j type i,
lv_c type c length 20.
lv_i = 1.
lv_j = 1.
loop at it_record.
lv_tabix = sy-tabix.
lv_c = lv_j.
concatenate 'A' lv_c into it_record-order_t.
condense it_record-order_t no-gaps.
if lv_i = p_100 .
lv_i = 0.
lv_j = lv_j + 1.
endif.
lv_i = lv_i + 1.
it_err4-order_t = it_record-order_t.
collect it_err4.
clear it_err4.
modify it_record index lv_tabix transporting order_t.
endloop.
endform. " CHECK_DATA
*& Progarm : ZMMR007 Author : Jimmy Wong
*& Created : 07 Jan 2012 App : MM
*& Title : Update Project Price (QBEW)
*& Description : Update Project Price (QBEW)
*&---------------------------------------------------------------------*
*& Version Author Date description
*& Jimmy 07 Jan 2012 the first version
*& the last update time 2013.01.07 14:00
*&---------------------------------------------------------------------*
report zmmr007 no standard page heading.
tables:marc.
data:begin of it_record occurs 0,
order_t type c length 30,
matnr like qbew-matnr,
bwkey like qbew-bwkey,
sobkz like qbew-sobkz,
pspnr like qbew-pspnr,
vprsv like qbew-vprsv,
verpr like qbew-verpr,
stprs like qbew-stprs,
peinh like qbew-peinh,
vprsv_n like mbew-vprsv,
verpr_n like mbew-verpr,
stprs_n like mbew-stprs,
peinh_n like mbew-peinh,
posid like prps-posid,
tab type c length 10,
message type c length 700,
end of it_record.
data: it_err4 like it_record occurs 0 with header line.
data: itab like it_record occurs 0 with header line.
data:begin of it_matnr occurs 0,
matnr like qbew-matnr,
bwkey like qbew-bwkey,
end of it_matnr.
data:begin of it_mbew occurs 0,
matnr like qbew-matnr,
bwkey like qbew-bwkey,
vprsv like mbew-vprsv,
verpr like mbew-verpr,
stprs like mbew-stprs,
peinh like mbew-peinh,
end of it_mbew.
data: it_mbewh like it_mbew occurs 0 with header line.
data:begin of it_prps occurs 0,
pspnr like qbew-pspnr,
posid like prps-posid,
end of it_prps.
data: it_bdcmsg like bdcmsgcoll occurs 0 with header line,
bdcdata like bdcdata occurs 0 with header line,
it_return like bapiret2 occurs 0 with header line.
type-pools: slis.
data: fc_hier type slis_t_fieldcat_alv,
wa_hier type slis_fieldcat_alv .
data:lv_total_line type i,
lv_line type p decimals 3,
lv_tabix like sy-tabix,
lv_data like sy-datum,
lv_lfgja like mbewh-lfgja,
lv_lfmon like mbewh-lfmon .
*----------------------------------------------------------------------*
* Parameter & Select-Options *
*----------------------------------------------------------------------*
selection-screen begin of block 1 with frame title text-001.
parameters:p_budat like sy-datum default sy-datum obligatory,
p_bukrs type bukrs default '8000' obligatory,
s_bwkey like marc-werks default '8101' obligatory.
select-options:s_matnr for marc-matnr.
parameters: p_100 type i default 10 obligatory.
parameters: p_mode type ctu_mode default 'N' obligatory.
parameters: p_test as checkbox default 'X'.
selection-screen skip 1.
parameters: p_pre as checkbox .
parameters: p_date type pam_month .
selection-screen end of block 1.
initialization.
call function 'SEPA_MANDATE_ADD_MONTH_TO_DATE'
exporting
months = '-4'
olddate = sy-datum
importing
newdate = lv_data.
concatenate lv_data+0(4) lv_data+4(2) into p_date.
*&---------------------------------------------------------------------*
* start of process
*&---------------------------------------------------------------------*
start-of-selection.
lv_lfgja = p_date+0(4).
lv_lfmon = p_date+4(2).
perform get_data.
if it_record[] is initial.
message i003(zmm).
exit.
endif.
perform check_data.
perform process_data.
perform display_data.
*&---------------------------------------------------------------------*
*& Form GET_DATA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
form get_data .
select matnr bwkey sobkz pspnr vprsv verpr stprs peinh
into corresponding fields of table it_record
from qbew
where matnr in s_matnr
and bwkey = s_bwkey.
select distinct matnr bwkey
into corresponding fields of table it_matnr
from qbew
where matnr in s_matnr
and bwkey = s_bwkey.
if it_matnr[] is not initial.
select pspnr posid
into corresponding fields of table it_prps
from prps
for all entries in it_record
where pspnr = it_record-pspnr.
sort it_prps by pspnr.
if p_pre = 'X'.
select matnr bwkey vprsv verpr stprs peinh
into corresponding fields of table it_mbewh
from mbewh
for all entries in it_matnr
where matnr = it_matnr-matnr
and bwkey = it_matnr-bwkey
and lfgja = lv_lfgja
and lfmon = lv_lfmon.
sort it_mbewh by matnr bwkey.
select matnr bwkey vprsv verpr stprs peinh
into corresponding fields of table it_mbew
from mbew
for all entries in it_matnr
where matnr = it_matnr-matnr
and bwkey = it_matnr-bwkey.
else.
select matnr bwkey vprsv verpr stprs peinh
into corresponding fields of table it_mbew
from mbew
for all entries in it_matnr
where matnr = it_matnr-matnr
and bwkey = it_matnr-bwkey.
endif.
sort it_mbew by matnr bwkey.
endif.
endform. " GET_DATA
*&---------------------------------------------------------------------*
*& Form PROCESS_DATA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
form process_data .
data:lv_cur type i value 0,
lv_mod type i,
lv_fname(30) type c,
lv_temp(2) type c,
lv_len type i,
lv_dat(10) type c,
lv_inex type i value 0,
lv_price type c length 15,
lv_flag type c,
lv_total type i,
lv_record type i.
lv_mod = lines( it_record ) .
describe table it_record lines lv_total_line.
loop at it_err4.
lv_tabix = sy-tabix.
loop at it_record where order_t = it_err4-order_t.
lv_line = sy-tabix / lv_total_line * 100.
lv_record = lv_record + 1.
call function 'SAPGUI_PROGRESS_INDICATOR'
exporting
percentage = lv_line
text = 'Processing Data........'.
move-corresponding it_record to itab.
if p_pre = 'X'.
read table it_mbewh with key matnr = itab-matnr bwkey = itab-bwkey.
if sy-subrc eq 0.
itab-vprsv_n = it_mbewh-vprsv.
itab-verpr_n = it_mbewh-verpr.
itab-stprs_n = it_mbewh-stprs.
itab-peinh_n = it_mbewh-peinh.
itab-tab = 'MBEWH'.
else.
read table it_mbew with key matnr = itab-matnr bwkey = itab-bwkey.
if sy-subrc eq 0.
itab-vprsv_n = it_mbew-vprsv.
itab-verpr_n = it_mbew-verpr.
itab-stprs_n = it_mbew-stprs.
itab-peinh_n = it_mbew-peinh.
itab-tab = 'MBEW'.
else.
itab-message = 'MBEW Price NO Exists'.
lv_flag = 'X'.
endif.
endif.
else.
read table it_mbew with key matnr = itab-matnr bwkey = itab-bwkey.
if sy-subrc eq 0.
itab-vprsv_n = it_mbew-vprsv.
itab-verpr_n = it_mbew-verpr.
itab-stprs_n = it_mbew-stprs.
itab-peinh_n = it_mbew-peinh.
itab-tab = 'MBEW'.
else.
itab-message = 'MBEW Price NO Exists'.
lv_flag = 'X'.
endif.
endif.
read table it_prps with key pspnr = itab-pspnr binary search.
if sy-subrc eq 0.
itab-posid = it_prps-posid.
else.
concatenate itab-message 'PRPS WBS NO Exists' into itab-message.
lv_flag = 'X'.
endif.
if p_test is initial.
if lv_flag is initial.
lv_cur = lv_cur + 1.
lv_inex = lv_inex + 1.
lv_total = lv_total + 1.
if lv_inex = 1.
perform bdc_dynpro using 'SAPRCKM_MR21' '0201'.
perform bdc_field using 'BDC_CURSOR' 'MR21HEAD-WERKS'.
perform change_date_format using p_budat changing lv_dat.
perform bdc_field using 'MR21HEAD-BUDAT' lv_dat.
perform bdc_field using 'MR21HEAD-BUKRS' p_bukrs.
perform bdc_field using 'MR21HEAD-WERKS' s_bwkey.
perform bdc_dynpro using 'SAPRCKM_MR21' '0201'.
perform bdc_field using 'BDC_OKCODE' '=VAR'.
perform bdc_field using 'BDC_CURSOR' 'MR21HEAD-SCREEN_VARIANT'.
perform bdc_field using 'MR21HEAD-SCREEN_VARIANT' 'MR21_PSP_ELEMENT_BWKEY_0250'.
endif.
move lv_cur to lv_temp.
lv_len = strlen( lv_temp ).
if lv_len = 1.
concatenate '0' lv_temp into lv_temp.
endif.
perform bdc_dynpro using 'SAPRCKM_MR21' '0201'.
perform bdc_field using 'BDC_OKCODE' '=ENTR'.
perform bdc_field using 'MR21HEAD-SCREEN_VARIANT' 'MR21_LAGERMATERIAL_0250'.
concatenate 'CKI_MR21_0250-MATNR(' lv_temp ')' into lv_fname.
perform bdc_field using lv_fname it_record-matnr.
concatenate 'CKI_MR21_0250-NEWVALPR(' lv_temp ')' into lv_fname.
if itab-vprsv = 'V'.
lv_price = itab-verpr_n.
else.
lv_price = itab-stprs_n.
endif.
perform bdc_field using lv_fname lv_price .
concatenate 'CKI_MR21_0250-PSPNR(' lv_temp ')' into lv_fname.
perform bdc_field using lv_fname itab-posid .
lv_mod = lv_cur mod 9.
if lv_mod = 0.
clear:lv_cur.
* lv_cur = 1.
perform bdc_dynpro using 'SAPRCKM_MR21' '0201'.
perform bdc_field using 'BDC_OKCODE' '=DOWN'.
endif.
endif.
if lv_total = p_100 or ( lv_record = lv_total_line and lv_total < p_100 ).
perform bdc_dynpro using 'SAPRCKM_MR21' '0201'.
perform bdc_field using 'BDC_OKCODE' '=SAVE'.
call transaction 'MR21'
using bdcdata
mode p_mode "Background performance
update 'S' "local updata
messages into it_bdcmsg. "all message table
call function 'CONVERT_BDCMSGCOLL_TO_BAPIRET2'
tables
imt_bdcmsgcoll = it_bdcmsg
ext_return = it_return.
read table it_return with key type = 'E'.
if sy-subrc eq 0.
itab-message = it_return-message.
it_err4-message = it_return-message.
else.
read table it_return with key type = 'S' id = 'CKPRCH' number = '019'.
if sy-subrc eq 0.
itab-message = it_return-message_v1.
it_err4-message = it_return-message_v1.
else.
loop at it_return.
concatenate itab-message it_return-message into itab-message.
concatenate it_err4-message it_return-message into it_err4-message.
endloop.
endif.
endif.
modify it_err4 index lv_tabix transporting message.
clear: it_return,it_bdcmsg,it_bdcmsg[], bdcdata, bdcdata[],it_return[],lv_total,
lv_cur ,lv_mod ,lv_len,lv_inex.
endif.
endif.
append itab.
clear:itab,lv_flag,lv_price.
endloop.
clear:it_err4-message.
endloop.
loop at itab where message = space.
lv_tabix = sy-tabix.
read table it_err4 with key order_t = itab-order_t .
if sy-subrc eq 0.
itab-message = it_err4-message.
modify itab index lv_tabix transporting message.
endif.
endloop.
free: it_record,it_err4,it_matnr,it_mbew,it_prps,it_bdcmsg,bdcdata,it_return,it_mbewh.
endform. " PROCESS_DATA
*----------------------------------------------------------------------*
* Start new screen *
*----------------------------------------------------------------------*
form bdc_dynpro using program dynpro.
clear bdcdata.
bdcdata-program = program.
bdcdata-dynpro = dynpro.
bdcdata-dynbegin = 'X'.
append bdcdata.
endform. "BDC_DYNPRO
*----------------------------------------------------------------------*
* Insert field *
*----------------------------------------------------------------------*
form bdc_field using fnam fval.
clear bdcdata.
bdcdata-fnam = fnam.
bdcdata-fval = fval.
append bdcdata.
endform. "BDC_FIELD
*&---------------------------------------------------------------------*
*& Form CHANGE_DATE_FORMAT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_<GT_OUT>_DATUV text
* <--P_LV_DAT text
* <--P_PERFORM text
* <--P_BDC_FIELD text
* -->P_0208 text
* -->P_<GT_OUT>_DATUV text
*----------------------------------------------------------------------*
form change_date_format using pi_date changing pt_date.
call function 'CONVERT_DATE_TO_EXTERNAL'
exporting
date_internal = pi_date
importing
date_external = pt_date
exceptions
date_internal_is_invalid = 1
others = 2.
if sy-subrc <> 0.
message 'Date Format Error' type 'E'.
endif.
endform. " CHANGE_DATE_FORMAT
*&---------------------------------------------------------------------*
*& 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 'MATNR' 'Material' '' '18' 'L' '' 'MARA' 'MATNR'.
alv_field 'BWKEY' 'Plant' '' '5' 'L' '' '' ''.
alv_field 'POSID' 'WBS' '' '12' 'L' '' '' ''.
alv_field 'VPRSV' '' 'Price Control Indicator' '5' 'L' '' '' ''.
alv_field 'VERPR' '' 'Moving price' '10' 'R' '' '' ''.
alv_field 'STPRS' '' 'Standard price' '10' 'R' '' '' ''.
alv_field 'PEINH' '' 'Price Unit' '10' 'R' '' '' ''.
alv_field 'VPRSV_N' '' 'New Price Control Indicator' '5' 'L' '' '' ''.
alv_field 'VERPR_N' '' 'New Moving price' '10' 'R' '' '' ''.
alv_field 'STPRS_N' '' 'New Standard price' '10' 'R' '' '' ''.
alv_field 'PEINH_N' '' 'New Price Unit' '10' 'R' '' '' ''.
alv_field 'TAB' '' 'Ref table' '6' 'L' '' '' ''.
alv_field 'MESSAGE' '' 'Message' '20' 'L' '' '' ''.
sort itab by matnr bwkey.
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.
if sy-subrc ne 0.
write: sy-msgv1,sy-msgv2, sy-msgv3, sy-msgv4.
endif.
endform. " DISPLAY_DATA
*&---------------------------------------------------------------------*
*& Form CHECK_DATA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
form check_data .
data:lv_total type i,
lv_i type i,
lv_j type i,
lv_c type c length 20.
lv_i = 1.
lv_j = 1.
loop at it_record.
lv_tabix = sy-tabix.
lv_c = lv_j.
concatenate 'A' lv_c into it_record-order_t.
condense it_record-order_t no-gaps.
if lv_i = p_100 .
lv_i = 0.
lv_j = lv_j + 1.
endif.
lv_i = lv_i + 1.
it_err4-order_t = it_record-order_t.
collect it_err4.
clear it_err4.
modify it_record index lv_tabix transporting order_t.
endloop.
endform. " CHECK_DATA