首页 > Linux操作系统 > Linux操作系统 > 删除同一工厂的重复BOM.
*&---------------------------------------------------------------------*
*& Report ZBOM_DEL
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*
report zbom_del.
type-pools : slis.
types: slis_t_fieldcat_alv type slis_fieldcat_alv occurs 1.
data : g_events_t type slis_t_event,
g_fieldcat_t type slis_t_fieldcat_alv.
data : g_layout_s type slis_layout_alv.
data: l_msg type string.
data: l_fieldcat_s type slis_fieldcat_alv.
define __field_tab.
l_fieldcat_s-seltext_l = &1.
l_fieldcat_s-seltext_m = &1.
l_fieldcat_s-seltext_s = &1.
l_fieldcat_s-ddictxt = ' '.
end-of-definition.
tables:mast.
data: i_mast like table of mast with header line,
i_mast_show like table of mast with header line,
i_mast_del like table of mast with header line.
parameters: p_tag1 type c radiobutton group gr1,
p_tag type c radiobutton group gr1 default 'X'.
start-of-selection.
select matnr werks stlan
*STLAN STLNR STLAL
into corresponding fields of table i_mast
from mast
group by matnr werks stlan
having count( * ) > 1.
if i_mast[] is not initial.
select *
into corresponding fields of table i_mast_show
from mast
for all entries in i_mast
where matnr = i_mast-matnr and werks = i_mast-werks and stlan = i_mast-stlan.
else.
message '没有发现重复BOM' type 'E'.
return.
endif.
sort i_mast_show by matnr werks stlan stlal.
* LOOP AT i_mast_show.
*
* ENDLOOP.
if p_tag1 eq 'X'.
i_mast_del[] = i_mast_show[].
sort i_mast_del by matnr werks stlan ascending stlal descending.
delete adjacent duplicates from i_mast_del comparing matnr werks stlan.
loop at i_mast_del.
call function 'CSAP_MAT_BOM_DELETE'
exporting
material = i_mast_del-matnr
plant = i_mast_del-werks
bom_usage = i_mast_del-stlan
alternative = i_mast_del-stlal
* VALID_FROM = VALID_FROM
* CHANGE_NO = CHANGE_NO
* REVISION_LEVEL = REVISION_LEVEL
* FL_NO_CHANGE_DOC = ' '
* FL_COMMIT_AND_WAIT = ' '
* IMPORTING
* FL_WARNING = FL_WARNING
* EXCEPTIONS
* ERROR = 1
.
if sy-subrc ne 0.
call function 'BAPI_TRANSACTION_ROLLBACK'.
concatenate '物料:' i_mast_del-matnr '工厂:' i_mast_del-werks '用途:' i_mast_del-stlan '可选BOM:' i_mast_del-stlal
'失败!' into l_msg.
write:/ l_msg color col_negative .
skip.
else.
call function 'BAPI_TRANSACTION_COMMIT'
exporting
wait = 'X'.
concatenate '物料:' i_mast_del-matnr '工厂:' i_mast_del-werks '用途:' i_mast_del-stlan '可选BOM:' i_mast_del-stlal
'成功!' into l_msg.
write:/ l_msg color col_positive.
skip.
endif.
endloop.
endif.
perform. displaycatalog_merge using g_fieldcat_t[] 'I_MAST_SHOW'.
perform. alv_display tables i_mast_show[].
*--------------------------------------------------------------------
* FORM. ALV_DISPLAY
*--------------------------------------------------------------------
form. alv_display tables p_int_t.
call function 'REUSE_ALV_GRID_DISPLAY'
exporting
* I_BACKGROUND_ID = 'ALV_BACKGROUND'
i_callback_program = 'ZRFIAR0013' "G_REPID
* I_CALLBACK_PF_STATUS_SET = 'PF_STATUS_SET'
* I_CALLBACK_USER_COMMAND = 'USER_COMMAND'
is_layout = g_layout_s
it_fieldcat = g_fieldcat_t[]
i_save = 'A'
* IMPORTING
* E_EXIT_CAUSED_BY_CALLER = G_EXIT_CAUSED_BY_CALLER
* ES_EXIT_CAUSED_BY_USER = G_EXIT_CAUSED_BY_USER_S
tables
t_outtab = p_int_t
exceptions
program_error = 1
thers = 2.
endform. " ALV_DISPLAY
*&---------------------------------------------------------------------*
*& Form LAYOUT_INIT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_G_LAYOUT_S text
*----------------------------------------------------------------------*
form. layout_init using p_g_layout_s type slis_layout_alv.
** Build layout for list display
p_g_layout_s-detail_popup = 'X'.
p_g_layout_s-colwidth_optimize = 'X'.
endform. " LAYOUT_INIT
*--------------------------------------------------------------------
* FORM. DISPLAYCATALOG_MERGE *
*--------------------------------------------------------------------
form. displaycatalog_merge using p_g_fieldcat_t
type slis_t_fieldcat_alv
p_tabname.
call function 'REUSE_ALV_FIELDCATALOG_MERGE'
exporting
i_program_name = sy-repid"SY-REPID
* i_internal_tabname = p_tabname
i_structure_name = 'MAST'
i_client_never_display = 'X'
i_inclname = sy-repid "SY-REPID
i_bypassing_buffer = 'X'
i_buffer_active = 'X'
changing
ct_fieldcat = p_g_fieldcat_t.
endform. " FIELDCATALOG_MERGE
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/16993136/viewspace-1407701/ ,如需转载,请注明出处,否则将追究法律责任。