10/08/2012 8000 8101 10000071000R002 21.77
10/08/2012 8000 8101 10000322000R000 22.77
*&---------------------------------------------------------------------*
*& Progarm : ZMMR004 Author : Jimmy Wong
*& Created : 08 Oct 2012 App : MM
*& Title : Change Material
*& Description : Change Material
*&---------------------------------------------------------------------*
*& Version Author Date description
*& Jimmy 08 Oct 2012 the first version
*& the last update time 2012.10.08 14:00
*&---------------------------------------------------------------------*
report zmmr004 no standard page heading.
*&---------------------------------------------------------------------*
* database table
*&---------------------------------------------------------------------*
tables : rlgrap."T148,t001w,t001l,mara,t006.
*&---------------------------------------------------------------------*
* internal table & variables
*&---------------------------------------------------------------------*
data:begin of it_record occurs 0,
order type i,
order_t type c length 30,
budat like mlhd-bldat,
budat_001(010),
bukrs like mlit-bukrs,
bwkey like mlit-bwkey,
matnr like mlit-matnr,
matnr_c type c length 20,
newvalpr type valpr,
newvalpr_01_007(015),
message type c length 700,
end of it_record.
types:lv_type type c length 50.
data:begin of itab occurs 0,
budat_001 type lv_type,
bukrs type lv_type,
bwkey type lv_type,
matnr_c type lv_type,
newvalpr_01_007 type lv_type,
end of itab.
data:begin of it_tab occurs 0.
include structure itab.
data: message(700) type c,
end of it_tab.
data: it_err like it_record occurs 0 with header line.
data: it_err2 like it_record occurs 0 with header line.
data: it_err3 like it_record occurs 0 with header line.
data: it_err4 like it_record occurs 0 with header line.
data: it_err5 like it_record occurs 0 with header line.
data: it_bdcmsg like bdcmsgcoll occurs 0 with header line,
bdcdata like bdcdata occurs 0 with header line,
lv_mode type ctu_mode value 'N'.
constants:c_chk_num like pa0001-ename value '0123456789.,'.
constants:c_chk_date like pa0001-ename value '0123456789/'.
data: msg type string.
data: lv_tabix like sy-tabix,
lv_flag type c.
data: fc_hier type slis_t_fieldcat_alv,
wa_hier type slis_fieldcat_alv .
data: begin of it_down occurs 0,
line(1000) type c,
end of it_down .
data: begin of i_file occurs 0,
line(1000) type c,
end of i_file.
data: gv_file like rlgrap-filename.
*----------------------------------------------------------------------*
* Parameter & Select-Options *
*----------------------------------------------------------------------*
selection-screen begin of block 1 with frame title text-001.
parameters filename type rlgrap-filename obligatory.
parameters: pr_error like rlgrap-filename obligatory default '/usr/sap/tmp'.
PARAMETERS: p_100 type i DEFAULT 100.
selection-screen end of block 1.
*----------------------------------------------------------------------*
* Initialize *
*----------------------------------------------------------------------*
initialization.
*----------------------------------------------------------------------*
* AT SELECTION-SCREEN
*----------------------------------------------------------------------*
at selection-screen on value-request for filename.
perform f4_filename using filename.
at selection-screen on value-request for pr_error.
perform f4_filename using pr_error.
*&---------------------------------------------------------------------*
* start of process
*&---------------------------------------------------------------------*
start-of-selection.
perform up_select.
end-of-selection.
*&---------------------------------------------------------------------*
*& Form UP_SELECT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
form up_select .
data:lv_total type i,
lv_i type i,
lv_j type i,
lv_c type c length 20.
refresh: it_record ,it_err2,it_err,it_err4.
clear:it_record,it_err2,it_err,it_err4.
perform get_data.
perform get_it_record2.
perform check_it_record.
lv_i = 1.
lv_j = 1.
loop at it_record.
if not it_record-message = ' OK.'.
move-corresponding it_record to it_err2.
append it_err2.
clear it_err2.
else.
move-corresponding it_record to it_err.
lv_c = lv_j.
concatenate 'A' lv_c into it_err-order_t.
condense it_err-order_t no-gaps.
if lv_i = p_100 .
lv_i = 0.
lv_j = lv_j + 1.
endif.
lv_i = lv_i + 1.
append it_err.
it_err4-budat = it_record-budat.
it_err4-bukrs = it_record-bukrs.
it_err4-bwkey = it_record-bwkey.
it_err4-order_t = it_err-order_t.
collect it_err4.
clear it_err4.
clear it_err.
endif.
endloop.
loop at it_err4.
clear:it_err5 ,it_err5[],it_bdcmsg,it_bdcmsg[], bdcdata, bdcdata[],it_err4-message.
lv_tabix = sy-tabix.
loop at it_err into it_err5
where budat = it_err4-budat
and bukrs = it_err4-bukrs
and bwkey = it_err4-bwkey
and order_t = it_err4-order_t.
append it_err5.
endloop.
check not it_err5[] is initial.
perform process_data.
read table it_bdcmsg with key msgtyp = 'S'.
if sy-subrc eq 0.
concatenate it_err4-message it_bdcmsg-msgv1 ' is Posted' into it_err4-message.
else.
read table it_bdcmsg with key msgtyp = 'I'.
if sy-subrc eq 0.
it_err4-message = 'No Price Data Change'.
else.
it_err4-message = it_bdcmsg-msgv1.
endif.
endif.
modify it_err4 index lv_tabix.
endloop.
clear it_err3.
refresh it_err3.
loop at it_err4.
loop at it_err where budat = it_err4-budat
and bukrs = it_err4-bukrs
and bwkey = it_err4-bwkey
and order_t = it_err4-order_t.
move-corresponding it_err to it_err3.
it_err3-message = it_err4-message.
append it_err3.
clear it_err3.
endloop.
endloop.
append lines of it_err2 to it_err3.
sort it_err3 by matnr ascending.
check not it_err3[] is initial.
perform down_file .
perform download_server.
* perform write_data.
endform. " UP_SELECT
*&---------------------------------------------------------------------*
*& Form GET_IT_RECORD2
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
form get_it_record2 .
data:lv_order type i.
check not itab[] is initial.
lv_order = 1.
loop at itab.
move-corresponding itab to it_record.
perform change_char_to_data using it_record-budat_001
changing it_record-budat.
it_record-matnr = it_record-matnr_c.
replace '-' with '' into it_record-matnr.
replace '-' with '' into it_record-matnr.
replace '-' with '' into it_record-matnr.
condense it_record-matnr no-gaps.
*
* perform process_num using it_record-newvalpr_01_007
* changing it_record-newvalpr .
it_record-newvalpr = it_record-newvalpr_01_007.
it_record-order = lv_order.
append it_record.
lv_order = lv_order + 1.
clear : it_record.
endloop.
endform. " GET_IT_RECORD2
*&---------------------------------------------------------------------*
*& Form CHANGE_CHAR_TO_DATA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_LV_DATE text
* <--P_IT_RECORD_VDATU text
*----------------------------------------------------------------------*
form change_char_to_data using p_char
changing p_date.
check p_char is not initial.
if p_char cn c_chk_date.
p_date = '00000000'.
else.
call function 'OIU_ME_CHAR_TO_DATE'
exporting
i_char = p_char
importing
e_date = p_date
exceptions
error_found = 4.
if sy-subrc ne 0.
p_date = '00000000'.
"p_date = sy-datum.
endif.
endif.
"p_date = '20121031' .
endform. "CHANGE_CHAR_TO_DATA
*&---------------------------------------------------------------------*
*& Form PROCESS_NUM
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_LT_GT_DATA_VALUE text
* <--P_IT_RECORD_KPEIN text
*----------------------------------------------------------------------*
form process_num using p_value
changing p_change.
data :lv_value type c length 30 .
if p_value cn c_chk_num.
p_change = -1.
else.
lv_value = p_value.
call function 'C14DG_CHAR_NUMBER_CONVERSION'
exporting
i_string = lv_value
importing
e_dec = p_change.
endif.
endform. " PROCESS_NUM
*&---------------------------------------------------------------------*
*& Form CHECK_IT_RECORD
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
form check_it_record .
data: lv_flag2 like lv_flag,
lv_bukrs like t001-bukrs,
lv_werks like t001w-werks,
lv_matnr like mara-matnr.
clear: lv_flag,lv_flag2 .
loop at it_record.
lv_tabix = sy-tabix.
clear:lv_flag2,it_record-message.
" Posting date
if it_record-budat = '00000000'.
lv_flag = 'X'.
lv_flag2 = 'X'.
concatenate it_record-message ' Posting Date Format MM/dd/yyyy.'
into it_record-message.
modify it_record index lv_tabix.
endif.
" Company Code
select single bukrs into lv_bukrs
from t001
where bukrs = it_record-bukrs.
if sy-subrc <> 0.
lv_flag = 'X'.
lv_flag2 = 'X'.
concatenate it_record-message ' Company Code Not Exists.'
into it_record-message.
modify it_record index lv_tabix.
endif.
"plant
select single werks into lv_werks
from t001w
where werks = it_record-bwkey.
if sy-subrc <> 0.
lv_flag = 'X'.
lv_flag2 = 'X'.
concatenate it_record-message ' Plant Not Exists.'
into it_record-message.
modify it_record index lv_tabix.
endif.
"Material Number
select single matnr into lv_matnr
from mara
where matnr = it_record-matnr.
if sy-subrc <> 0.
lv_flag = 'X'.
lv_flag2 = 'X'.
concatenate it_record-message ' Material Number Not Exists.'
into it_record-message.
modify it_record index lv_tabix.
endif.
"Price
* if it_record-newvalpr = 0. "
* lv_flag = 'X'.
* lv_flag2 = 'X'.
* concatenate it_record-message
* ' New Price = 0 is error.' into it_record-message.
* modify it_record index lv_tabix.
* elseif it_record-newvalpr < 0.
* lv_flag = 'X'.
* lv_flag2 = 'X'.
* concatenate it_record-message
* ' New Price is negative or New Price not is number.'
* into it_record-message.
* modify it_record index lv_tabix.
* endif.
" Plant && Material
select single matnr into lv_matnr
from mbew
where matnr = it_record-matnr
and bwkey = it_record-bwkey.
if sy-subrc <> 0.
lv_flag = 'X'.
lv_flag2 = 'X'.
concatenate it_record-message ' ' it_record-bwkey ' not Maintained for material ' it_record-matnr
into it_record-message.
modify it_record index lv_tabix.
endif.
if lv_flag2 <> 'X'.
it_record-message = ' OK.'.
modify it_record index lv_tabix.
endif.
endloop.
endform. " CHECK_IT_RECORD
*&---------------------------------------------------------------------*
*& 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_inex type i value 0.
lv_mod = lines( it_err5 ) .
loop at it_err5.
lv_cur = lv_cur + 1.
lv_inex = lv_inex + 1.
if lv_inex = 1.
perform bdc_dynpro using 'SAPRCKM_MR21' '0201'.
perform bdc_field using 'BDC_CURSOR' 'MR21HEAD-WERKS'.
perform bdc_field using 'MR21HEAD-BUDAT' it_err5-budat_001.
perform bdc_field using 'MR21HEAD-BUKRS' it_err5-bukrs.
perform bdc_field using 'MR21HEAD-WERKS' it_err5-bwkey.
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_err5-matnr.
concatenate 'CKI_MR21_0250-NEWVALPR(' lv_temp ')' into lv_fname.
perform bdc_field using lv_fname it_err5-newvalpr_01_007.
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.
endloop.
perform bdc_dynpro using 'SAPRCKM_MR21' '0201'.
perform bdc_field using 'BDC_OKCODE' '=SAVE'.
call transaction 'MR21'
using bdcdata
mode lv_mode "Background performance
update 'S' "local updata
messages into it_bdcmsg. "all message table
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 WRITE_DATA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
form write_data .
refresh fc_hier.
define alv_field.
clear:wa_hier.
wa_hier-col_pos = &1.
wa_hier-fieldname = &2.
wa_hier-seltext_m = &3.
wa_hier-seltext_l = &4.
wa_hier-outputlen = &5.
append wa_hier to fc_hier.
end-of-definition.
alv_field '1' 'BUDAT' '' 'Posting Date' '15'.
alv_field '2' 'BUKRS' 'Company Code' '' '15'.
alv_field '3' 'BWKEY' 'Plant' '' '10'.
alv_field '4' 'MATNR_C' '' 'Material Number' '20'.
alv_field '5' 'NEWVALPR' 'New Price' '' '12'.
alv_field '6' 'MESSAGE' 'Message' '' '50'.
call function 'REUSE_ALV_GRID_DISPLAY'
exporting
it_fieldcat = fc_hier[]
tables
t_outtab = it_err3[]
exceptions
program_error = 1
others = 2.
if sy-subrc ne 0.
" message i004(zmm)
endif.
endform. " WRITE_DATA
*&---------------------------------------------------------------------*
*& Form F4_FILENAME
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_FILENAME 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_DATA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
form get_data .
clear:i_file,i_file[].
open dataset filename for input in text mode encoding default.
if sy-subrc = 0.
do.
read dataset filename into i_file.
if sy-subrc ne 0.
exit.
endif.
append i_file.
enddo.
close dataset filename.
else.
clear : msg.
concatenate 'Upload Filename ' filename ' Is Error!' into msg.
message msg type 'I'.
exit.
endif.
if not i_file[] is initial.
loop at i_file.
split i_file-line at cl_abap_char_utilities=>horizontal_tab
into itab-budat_001 itab-bukrs
itab-bwkey itab-matnr_c itab-newvalpr_01_007.
append itab.
clear:itab.
endloop.
endif.
endform. " GET_DATA
*&---------------------------------------------------------------------*
*& Form DOWN_FILE
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
form down_file .
clear:it_down,it_down[].
concatenate
'Posting Date'
'Company Code'
'Plant'
'Material Number'
'New Price'
'Message'
into it_down separated by cl_abap_char_utilities=>horizontal_tab.
append it_down.
loop at it_err3.
move-corresponding it_err3 to it_tab.
concatenate it_tab-budat_001 it_tab-bukrs
it_tab-bwkey it_tab-matnr_c it_tab-newvalpr_01_007
it_tab-message
into it_down separated by cl_abap_char_utilities=>horizontal_tab.
condense it_down .
append it_down .
endloop.
endform. " DOWN_FILE
*&---------------------------------------------------------------------*
*& 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_FILE
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
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 'MR21' wa_date wa_time into wa_key.
concatenate wa_key '.txt' into wa_key.
lv_i = strlen( pr_error ).
lv_i = lv_i - 1 .
if lv_i > 1.
lv_c = pr_error+lv_i(1).
endif.
* if p_test = 'X'.
* lv_char = '\' .
* else.
lv_char = '/' .
* endif.
if lv_c eq lv_char.
concatenate pr_error wa_key into gv_file.
else.
concatenate pr_error lv_char wa_key into gv_file.
endif.
endform. " GET_FILE