*&---------------------------------------------------------------------*
*& Progarm : ZSDR007 Author : Jimmy Wong
*& Created : 17 OCT 2012 App : SD
*& Title : Change SO Material
*& Description : Change SO Material
*&---------------------------------------------------------------------*
*& Version Author Date description
*& Jimmy 17 Sep 2012 the first version
*& the last update time 2012.11.22 17:00
*&---------------------------------------------------------------------*
report zsdr007 no standard page heading.
tables:vbak.
data:begin of itab occurs 0,
vbeln like vbap-vbeln,
posnr like vbap-posnr,
matnr like vbap-matnr,
arktx like vbap-arktx,
maktx like makt-maktx,
vkorg like vbak-vkorg,
vtweg like vbak-vtweg,
kunnr like vbak-kunnr,
kdmat like vbap-kdmat,
kdmat_n like vbap-kdmat,
message type c length 700,
end of itab.
data:it_change like itab occurs 0 with header line.
data:lv_tabix like sy-tabix.
data: i_header like bapisdh1,
i_headerx like bapisdh1x ,
i_item like bapisditm occurs 0 with header line,
i_itemx like bapisditmx occurs 0 with header line,
it_return like bapiret2 occurs 0 with header line.
data:begin of it_knmt occurs 0,
vkorg like vbak-vkorg,
vtweg like vbak-vtweg,
kunnr like vbak-kunnr,
matnr like vbap-matnr,
kdmat like vbap-kdmat,
end of it_knmt.
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_vbeln for vbak-vbeln. "default '01*'. "custmer p/n"
parameters: p_test as checkbox default 'X'.
selection-screen begin of line.
parameters: p_so radiobutton group g1 user-command u1 default 'X'.
selection-screen position 1.
selection-screen comment 3(5) com1.
selection-screen position 8.
parameters: p_desc radiobutton group g2 default 'X'.
selection-screen comment 10(20) com2.
parameters: p_cust radiobutton group g2 .
selection-screen comment 34(20) com3.
parameters: p_all radiobutton group g2 .
selection-screen comment 58(20) com4.
selection-screen end of line.
parameters: p_dn radiobutton group g1 .
selection-screen end of block 1.
initialization.
s_vbeln-sign = 'I'.
s_vbeln-option = 'CP'.
s_vbeln-low = '01*'.
append s_vbeln.
at selection-screen output.
com1 = 'SO'.
com2 = 'Change Material Desc'.
com3 = 'Change Cust Material'.
com4 = 'Change All'.
*&---------------------------------------------------------------------*
* start of process
*&---------------------------------------------------------------------*
start-of-selection.
perform get_data.
if itab[] is initial.
message 'No Data Found' type 'I'.
exit.
endif.
if p_test ne 'X'.
if p_so = 'X'.
perform process_data.
else.
perform process_dn_data.
endif.
endif.
sort itab by vbeln posnr.
perform dispaly_data.
*&---------------------------------------------------------------------*
*& Form GET_DATA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
form get_data .
if p_so = 'X'.
select a~vbeln a~posnr a~matnr a~arktx b~maktx
c~vkorg c~vtweg c~kunnr a~kdmat
into corresponding fields of table itab
from vbap as a
left join makt as b on a~matnr = b~matnr
inner join vbak as c on a~vbeln = c~vbeln
where a~vbeln in s_vbeln.
if itab[] is not initial.
select vkorg vtweg kunnr matnr kdmat
into corresponding fields of table it_knmt
from knmt
for all entries in itab
where vkorg = itab-vkorg
and vtweg = itab-vtweg
and matnr = itab-matnr
and kunnr = itab-kunnr
and kdmat ne ''.
sort it_knmt by vkorg vtweg kunnr matnr.
endif.
loop at itab.
lv_tabix = sy-tabix.
if p_all = 'X'.
if ( itab-arktx ne itab-maktx and itab-maktx is not initial ).
read table it_knmt with key vkorg = itab-vkorg
vtweg = itab-vtweg
kunnr = itab-kunnr
matnr = itab-matnr.
if sy-subrc eq 0.
itab-kdmat_n = it_knmt-kdmat.
endif.
modify itab index lv_tabix.
move-corresponding itab to it_change.
append it_change.
clear: it_change.
else.
read table it_knmt with key vkorg = itab-vkorg
vtweg = itab-vtweg
kunnr = itab-kunnr
matnr = itab-matnr.
if sy-subrc eq 0.
itab-kdmat_n = it_knmt-kdmat.
if itab-kdmat_n ne itab-kdmat.
modify itab index lv_tabix.
move-corresponding itab to it_change.
append it_change.
clear: it_change.
else.
delete itab index lv_tabix.
endif.
else.
if itab-maktx is initial.
itab-message = 'MM03 Material Desc No exists.'.
modify itab index lv_tabix.
else.
delete itab index lv_tabix.
endif.
endif.
endif.
elseif p_desc = 'X'.
if ( itab-arktx ne itab-maktx and itab-maktx is not initial ).
move-corresponding itab to it_change.
append it_change.
clear: it_change.
else.
if itab-maktx is initial.
itab-message = 'MM03 Material Desc No exists.'.
modify itab index lv_tabix.
else.
delete itab index lv_tabix.
endif.
endif.
else.
read table it_knmt with key vkorg = itab-vkorg
vtweg = itab-vtweg
kunnr = itab-kunnr
matnr = itab-matnr.
if sy-subrc eq 0.
itab-kdmat_n = it_knmt-kdmat.
if itab-kdmat_n ne itab-kdmat.
modify itab index lv_tabix.
move-corresponding itab to it_change.
append it_change.
clear: it_change.
else.
delete itab index lv_tabix.
endif.
else.
delete itab index lv_tabix.
endif.
endif.
endloop.
else.
select a~vbeln a~posnr a~matnr a~arktx b~maktx
into corresponding fields of table itab
from lips as a
left join makt as b on a~matnr = b~matnr
where a~vbeln in s_vbeln.
loop at itab.
lv_tabix = sy-tabix.
if itab-arktx ne itab-maktx and itab-maktx is not initial.
move-corresponding itab to it_change.
append it_change.
clear: it_change.
else.
if itab-maktx is initial.
itab-message = 'MM03 Material Desc No exists.'.
modify itab index lv_tabix.
else.
delete itab index lv_tabix.
endif.
endif.
endloop.
endif.
endform. " GET_DATA
*&---------------------------------------------------------------------*
*& Form PROCESS_DATA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
form process_data .
data:lv_message type c length 700.
sort it_change by vbeln posnr .
loop at it_change.
i_itemx-updateflag = 'U'.
i_item-itm_number = it_change-posnr. "item no
i_itemx-itm_number = it_change-posnr. "item no
if p_all = 'X' or p_desc = 'X'.
i_item-short_text = it_change-maktx. "material desc
i_itemx-short_text = 'X'.
endif.
if p_all = 'X' or p_cust = 'X'.
if it_change-kdmat ne it_change-kdmat_n and it_change-kdmat_n is not initial.
i_item-cust_mat35 = it_change-kdmat_n. "Customer material
i_itemx-cust_mat35 = 'X'.
endif.
endif.
append i_itemx.
append i_item.
at end of vbeln .
i_headerx-updateflag = 'U'. "Update flag
call function 'BAPI_SALESORDER_CHANGE'
exporting
salesdocument = it_change-vbeln
* ORDER_HEADER_IN =
order_header_inx = i_headerx
tables
return = it_return
order_item_in = i_item
order_item_inx = i_itemx.
read table it_return with key type = 'E'.
if sy-subrc eq 0.
loop at it_return where type = 'E'.
shift it_return-message right deleting trailing space.
shift it_return-message left deleting leading space.
concatenate lv_message ' E: ' it_return-message into lv_message.
endloop.
else.
call function 'BAPI_TRANSACTION_COMMIT'
exporting
wait = 'X'.
lv_message = 'Change Success.'.
endif.
loop at itab where vbeln = it_change-vbeln.
lv_tabix = sy-tabix.
itab-message = lv_message.
modify itab index lv_tabix.
endloop.
clear: lv_message,i_headerx ,it_return ,it_return[],i_item[],i_item ,i_itemx,i_itemx[].
endat.
endloop.
endform. " PROCESS_DATA
*&---------------------------------------------------------------------*
*& Form DISPALY_DATA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
form dispaly_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.
wa_hier-ref_tabname = &6 .
wa_hier-ref_fieldname = &7 .
append wa_hier to fc_hier.
end-of-definition.
if p_so = 'X'.
alv_field '1' 'VBELN' '' 'SO No.' '12' 'VBAP' 'VBELN'.
alv_field '2' 'POSNR' '' 'SO No Item' '' '' ''.
alv_field '3' 'MATNR' '' 'Material' '18' 'MARA' 'MATNR'.
if p_cust = 'X'.
alv_field '4' 'KDMAT' '' 'VA03 Cust Material' '20' '' ''.
alv_field '5' 'KDMAT_N' '' 'New Cust Materialc' '20' '' ''.
alv_field '6' 'MESSAGE' 'Message' '' '30' '' ''.
elseif p_desc = 'X'.
alv_field '4' 'ARKTX' '' 'VA03 Material Desc' '20' '' ''.
alv_field '5' 'MAKTX' '' 'MM03 Material Desc' '20' '' ''.
alv_field '6' 'MESSAGE' 'Message' '' '30' '' ''.
else.
alv_field '4' 'ARKTX' '' 'VA03 Material Desc' '20' '' ''.
alv_field '5' 'MAKTX' '' 'MM03 Material Desc' '20' '' ''.
alv_field '6' 'KDMAT' '' 'VA03 Cust Material' '20' '' ''.
alv_field '7' 'KDMAT_N' '' 'New Cust Materialc' '20' '' ''.
alv_field '8' 'MESSAGE' 'Message' '' '30' '' ''.
endif.
else.
alv_field '1' 'VBELN' '' 'DN No.' '12' 'VBAP' 'VBELN'..
alv_field '2' 'POSNR' '' 'SDN No Item' '' '' ''.
alv_field '3' 'MATNR' '' 'Material' '18' 'MARA' 'MATNR'.
alv_field '4' 'ARKTX' '' 'VL03N Material Desc' '20' '' ''.
alv_field '5' 'MAKTX' '' 'MM03 Material Desc' '20' '' ''.
alv_field '6' 'MESSAGE' 'Message' '' '30' '' ''.
endif.
call function 'REUSE_ALV_GRID_DISPLAY'
exporting
it_fieldcat = fc_hier[]
i_save = 'A'
tables
t_outtab = itab
exceptions
program_error = 1
others = 2.
if sy-subrc ne 0.
" message i004(zmm)
endif.
endform. " DISPALY_DATA
*&---------------------------------------------------------------------*
*& Form PROCESS_DN_DATA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
form process_dn_data .
loop at itab.
lv_tabix = sy-tabix.
check itab-message is initial.
update lips set arktx = itab-maktx
where vbeln = itab-vbeln
and posnr = itab-posnr.
itab-message = 'Change Success.'.
modify itab index lv_tabix.
endloop.
endform. " PROCESS_DN_DATA
*& Progarm : ZSDR007 Author : Jimmy Wong
*& Created : 17 OCT 2012 App : SD
*& Title : Change SO Material
*& Description : Change SO Material
*&---------------------------------------------------------------------*
*& Version Author Date description
*& Jimmy 17 Sep 2012 the first version
*& the last update time 2012.11.22 17:00
*&---------------------------------------------------------------------*
report zsdr007 no standard page heading.
tables:vbak.
data:begin of itab occurs 0,
vbeln like vbap-vbeln,
posnr like vbap-posnr,
matnr like vbap-matnr,
arktx like vbap-arktx,
maktx like makt-maktx,
vkorg like vbak-vkorg,
vtweg like vbak-vtweg,
kunnr like vbak-kunnr,
kdmat like vbap-kdmat,
kdmat_n like vbap-kdmat,
message type c length 700,
end of itab.
data:it_change like itab occurs 0 with header line.
data:lv_tabix like sy-tabix.
data: i_header like bapisdh1,
i_headerx like bapisdh1x ,
i_item like bapisditm occurs 0 with header line,
i_itemx like bapisditmx occurs 0 with header line,
it_return like bapiret2 occurs 0 with header line.
data:begin of it_knmt occurs 0,
vkorg like vbak-vkorg,
vtweg like vbak-vtweg,
kunnr like vbak-kunnr,
matnr like vbap-matnr,
kdmat like vbap-kdmat,
end of it_knmt.
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_vbeln for vbak-vbeln. "default '01*'. "custmer p/n"
parameters: p_test as checkbox default 'X'.
selection-screen begin of line.
parameters: p_so radiobutton group g1 user-command u1 default 'X'.
selection-screen position 1.
selection-screen comment 3(5) com1.
selection-screen position 8.
parameters: p_desc radiobutton group g2 default 'X'.
selection-screen comment 10(20) com2.
parameters: p_cust radiobutton group g2 .
selection-screen comment 34(20) com3.
parameters: p_all radiobutton group g2 .
selection-screen comment 58(20) com4.
selection-screen end of line.
parameters: p_dn radiobutton group g1 .
selection-screen end of block 1.
initialization.
s_vbeln-sign = 'I'.
s_vbeln-option = 'CP'.
s_vbeln-low = '01*'.
append s_vbeln.
at selection-screen output.
com1 = 'SO'.
com2 = 'Change Material Desc'.
com3 = 'Change Cust Material'.
com4 = 'Change All'.
*&---------------------------------------------------------------------*
* start of process
*&---------------------------------------------------------------------*
start-of-selection.
perform get_data.
if itab[] is initial.
message 'No Data Found' type 'I'.
exit.
endif.
if p_test ne 'X'.
if p_so = 'X'.
perform process_data.
else.
perform process_dn_data.
endif.
endif.
sort itab by vbeln posnr.
perform dispaly_data.
*&---------------------------------------------------------------------*
*& Form GET_DATA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
form get_data .
if p_so = 'X'.
select a~vbeln a~posnr a~matnr a~arktx b~maktx
c~vkorg c~vtweg c~kunnr a~kdmat
into corresponding fields of table itab
from vbap as a
left join makt as b on a~matnr = b~matnr
inner join vbak as c on a~vbeln = c~vbeln
where a~vbeln in s_vbeln.
if itab[] is not initial.
select vkorg vtweg kunnr matnr kdmat
into corresponding fields of table it_knmt
from knmt
for all entries in itab
where vkorg = itab-vkorg
and vtweg = itab-vtweg
and matnr = itab-matnr
and kunnr = itab-kunnr
and kdmat ne ''.
sort it_knmt by vkorg vtweg kunnr matnr.
endif.
loop at itab.
lv_tabix = sy-tabix.
if p_all = 'X'.
if ( itab-arktx ne itab-maktx and itab-maktx is not initial ).
read table it_knmt with key vkorg = itab-vkorg
vtweg = itab-vtweg
kunnr = itab-kunnr
matnr = itab-matnr.
if sy-subrc eq 0.
itab-kdmat_n = it_knmt-kdmat.
endif.
modify itab index lv_tabix.
move-corresponding itab to it_change.
append it_change.
clear: it_change.
else.
read table it_knmt with key vkorg = itab-vkorg
vtweg = itab-vtweg
kunnr = itab-kunnr
matnr = itab-matnr.
if sy-subrc eq 0.
itab-kdmat_n = it_knmt-kdmat.
if itab-kdmat_n ne itab-kdmat.
modify itab index lv_tabix.
move-corresponding itab to it_change.
append it_change.
clear: it_change.
else.
delete itab index lv_tabix.
endif.
else.
if itab-maktx is initial.
itab-message = 'MM03 Material Desc No exists.'.
modify itab index lv_tabix.
else.
delete itab index lv_tabix.
endif.
endif.
endif.
elseif p_desc = 'X'.
if ( itab-arktx ne itab-maktx and itab-maktx is not initial ).
move-corresponding itab to it_change.
append it_change.
clear: it_change.
else.
if itab-maktx is initial.
itab-message = 'MM03 Material Desc No exists.'.
modify itab index lv_tabix.
else.
delete itab index lv_tabix.
endif.
endif.
else.
read table it_knmt with key vkorg = itab-vkorg
vtweg = itab-vtweg
kunnr = itab-kunnr
matnr = itab-matnr.
if sy-subrc eq 0.
itab-kdmat_n = it_knmt-kdmat.
if itab-kdmat_n ne itab-kdmat.
modify itab index lv_tabix.
move-corresponding itab to it_change.
append it_change.
clear: it_change.
else.
delete itab index lv_tabix.
endif.
else.
delete itab index lv_tabix.
endif.
endif.
endloop.
else.
select a~vbeln a~posnr a~matnr a~arktx b~maktx
into corresponding fields of table itab
from lips as a
left join makt as b on a~matnr = b~matnr
where a~vbeln in s_vbeln.
loop at itab.
lv_tabix = sy-tabix.
if itab-arktx ne itab-maktx and itab-maktx is not initial.
move-corresponding itab to it_change.
append it_change.
clear: it_change.
else.
if itab-maktx is initial.
itab-message = 'MM03 Material Desc No exists.'.
modify itab index lv_tabix.
else.
delete itab index lv_tabix.
endif.
endif.
endloop.
endif.
endform. " GET_DATA
*&---------------------------------------------------------------------*
*& Form PROCESS_DATA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
form process_data .
data:lv_message type c length 700.
sort it_change by vbeln posnr .
loop at it_change.
i_itemx-updateflag = 'U'.
i_item-itm_number = it_change-posnr. "item no
i_itemx-itm_number = it_change-posnr. "item no
if p_all = 'X' or p_desc = 'X'.
i_item-short_text = it_change-maktx. "material desc
i_itemx-short_text = 'X'.
endif.
if p_all = 'X' or p_cust = 'X'.
if it_change-kdmat ne it_change-kdmat_n and it_change-kdmat_n is not initial.
i_item-cust_mat35 = it_change-kdmat_n. "Customer material
i_itemx-cust_mat35 = 'X'.
endif.
endif.
append i_itemx.
append i_item.
at end of vbeln .
i_headerx-updateflag = 'U'. "Update flag
call function 'BAPI_SALESORDER_CHANGE'
exporting
salesdocument = it_change-vbeln
* ORDER_HEADER_IN =
order_header_inx = i_headerx
tables
return = it_return
order_item_in = i_item
order_item_inx = i_itemx.
read table it_return with key type = 'E'.
if sy-subrc eq 0.
loop at it_return where type = 'E'.
shift it_return-message right deleting trailing space.
shift it_return-message left deleting leading space.
concatenate lv_message ' E: ' it_return-message into lv_message.
endloop.
else.
call function 'BAPI_TRANSACTION_COMMIT'
exporting
wait = 'X'.
lv_message = 'Change Success.'.
endif.
loop at itab where vbeln = it_change-vbeln.
lv_tabix = sy-tabix.
itab-message = lv_message.
modify itab index lv_tabix.
endloop.
clear: lv_message,i_headerx ,it_return ,it_return[],i_item[],i_item ,i_itemx,i_itemx[].
endat.
endloop.
endform. " PROCESS_DATA
*&---------------------------------------------------------------------*
*& Form DISPALY_DATA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
form dispaly_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.
wa_hier-ref_tabname = &6 .
wa_hier-ref_fieldname = &7 .
append wa_hier to fc_hier.
end-of-definition.
if p_so = 'X'.
alv_field '1' 'VBELN' '' 'SO No.' '12' 'VBAP' 'VBELN'.
alv_field '2' 'POSNR' '' 'SO No Item' '' '' ''.
alv_field '3' 'MATNR' '' 'Material' '18' 'MARA' 'MATNR'.
if p_cust = 'X'.
alv_field '4' 'KDMAT' '' 'VA03 Cust Material' '20' '' ''.
alv_field '5' 'KDMAT_N' '' 'New Cust Materialc' '20' '' ''.
alv_field '6' 'MESSAGE' 'Message' '' '30' '' ''.
elseif p_desc = 'X'.
alv_field '4' 'ARKTX' '' 'VA03 Material Desc' '20' '' ''.
alv_field '5' 'MAKTX' '' 'MM03 Material Desc' '20' '' ''.
alv_field '6' 'MESSAGE' 'Message' '' '30' '' ''.
else.
alv_field '4' 'ARKTX' '' 'VA03 Material Desc' '20' '' ''.
alv_field '5' 'MAKTX' '' 'MM03 Material Desc' '20' '' ''.
alv_field '6' 'KDMAT' '' 'VA03 Cust Material' '20' '' ''.
alv_field '7' 'KDMAT_N' '' 'New Cust Materialc' '20' '' ''.
alv_field '8' 'MESSAGE' 'Message' '' '30' '' ''.
endif.
else.
alv_field '1' 'VBELN' '' 'DN No.' '12' 'VBAP' 'VBELN'..
alv_field '2' 'POSNR' '' 'SDN No Item' '' '' ''.
alv_field '3' 'MATNR' '' 'Material' '18' 'MARA' 'MATNR'.
alv_field '4' 'ARKTX' '' 'VL03N Material Desc' '20' '' ''.
alv_field '5' 'MAKTX' '' 'MM03 Material Desc' '20' '' ''.
alv_field '6' 'MESSAGE' 'Message' '' '30' '' ''.
endif.
call function 'REUSE_ALV_GRID_DISPLAY'
exporting
it_fieldcat = fc_hier[]
i_save = 'A'
tables
t_outtab = itab
exceptions
program_error = 1
others = 2.
if sy-subrc ne 0.
" message i004(zmm)
endif.
endform. " DISPALY_DATA
*&---------------------------------------------------------------------*
*& Form PROCESS_DN_DATA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
form process_dn_data .
loop at itab.
lv_tabix = sy-tabix.
check itab-message is initial.
update lips set arktx = itab-maktx
where vbeln = itab-vbeln
and posnr = itab-posnr.
itab-message = 'Change Success.'.
modify itab index lv_tabix.
endloop.
endform. " PROCESS_DN_DATA