‎2006 May 04 11:17 AM
Hi ,
Does any body used this BAPI for creation/Change of BOM.
IF yes can you please let me know how to use this.
Regards,
Sarika Kedia
‎2006 May 04 11:40 AM
Hi,
try this FM <b>CSAP_MAT_BOM_MAINTAIN</b>, it is not BAPI, but it is RFC enabled. it is used create/change the Material BOM. it is well documented. see the Documentation.
Regards
vijay
‎2006 May 04 11:45 AM
Hi Vijay ,
Do you have any sample code fro the same,
Thanks & Regards,
Sarika Kedia
‎2006 May 04 11:47 AM
Hi sarika,
Try this:
REPORT ZZ_PLM_DEMO_SETUP .
parameters: material like csap_mbom-matnr default 'XX-22700' obligatory.
parameters: plant like csap_mbom-werks default '1000'.
parameters: usage like csap_mbom-stlan default '1'.
parameters: alternat like csap_mbom-stlal default '01'.
data: l_stko like stko_api01.
data: lt_stpo like stpo_api03 occurs 0 with header line.
data: lt_doc_link like csdoc_link occurs 0 with header line.
data: lt_dmu_tmx like csdmu_tmx occurs 0 with header line.
data: l_component like stpo_api03-component.
data: l_length type i.
data: z_date like p0000-begda value '20000320'.
data: y_date(10).
"!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
exit."!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
"!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
check material <> 'T-22700'.
delete existing BOM
call function 'CSAP_MAT_BOM_DELETE'
exporting
material = material
plant = plant
bom_usage = usage
alternative = alternat
VALID_FROM =
CHANGE_NO =
REVISION_LEVEL =
FL_NO_CHANGE_DOC = ' '
fl_commit_and_wait = 'X'
IMPORTING
FL_WARNING =
exceptions
error = 1
others = 2.
if sy-subrc = 0.
write: / 'BOM deleted'.
endif.
l_length = strlen( material ) - 2.
concatenate material+0(l_length) '10' into l_component.
lt_stpo-id_item_no = '0001'.
lt_stpo-id_comp = l_component.
lt_stpo-item_no = '0001'.
lt_stpo-comp_qty = '1'.
lt_stpo-item_categ = 'L'.
lt_stpo-component = l_component.
lt_stpo-identifier = '1'.
append lt_stpo.
concatenate material+0(l_length) '20' into l_component.
lt_stpo-id_item_no = '0002'.
lt_stpo-id_comp = l_component.
lt_stpo-item_no = '0002'.
lt_stpo-comp_qty = '1'.
lt_stpo-item_categ = 'L'.
lt_stpo-component = l_component.
lt_stpo-identifier = '2'.
append lt_stpo.
concatenate material+0(l_length) '30' into l_component.
lt_stpo-id_item_no = '0003'.
lt_stpo-id_comp = l_component.
lt_stpo-item_no = '0003'.
lt_stpo-comp_qty = '1'.
lt_stpo-item_categ = 'L'.
lt_stpo-component = l_component.
lt_stpo-identifier = '3'.
append lt_stpo.
concatenate material+0(l_length) '40' into l_component.
lt_stpo-id_item_no = '0004'.
lt_stpo-id_comp = l_component.
lt_stpo-item_no = '0004'.
lt_stpo-comp_qty = '1'.
lt_stpo-item_categ = 'L'.
lt_stpo-component = l_component.
lt_stpo-identifier = '4'.
append lt_stpo.
lt_doc_link-identifier = '1'.
lt_doc_link-object_id = '2'.
lt_doc_link-dokar = 'DES'.
lt_doc_link-doknr = 'T-22710'.
lt_doc_link-doktl = '000'.
lt_doc_link-dokvr = '00'.
append lt_doc_link.
lt_doc_link-identifier = '2'.
lt_doc_link-object_id = '2'.
lt_doc_link-dokar = 'DES'.
lt_doc_link-doknr = 'T-22720'.
lt_doc_link-doktl = '000'.
lt_doc_link-dokvr = '00'.
append lt_doc_link.
lt_doc_link-identifier = '3'.
lt_doc_link-object_id = '2'.
lt_doc_link-dokar = 'DES'.
lt_doc_link-doknr = 'T-22730'.
lt_doc_link-doktl = '000'.
lt_doc_link-dokvr = '00'.
append lt_doc_link.
lt_doc_link-identifier = '4'.
lt_doc_link-object_id = '2'.
lt_doc_link-dokar = 'DES'.
lt_doc_link-doknr = 'T-22740'.
lt_doc_link-doktl = '000'.
lt_doc_link-dokvr = '00'.
append lt_doc_link.
transforms *
lt_dmu_tmx-identifier = '1'.
lt_dmu_tmx-object_id = '2'.
lt_dmu_tmx-locox = '0.0000000000000000E+00'.
lt_dmu_tmx-locoy = '0.0000000000000000E+00'.
lt_dmu_tmx-locoz = '0.0000000000000000E+00'.
lt_dmu_tmx-axis1x = '1.0000000000000000E+00'.
lt_dmu_tmx-axis1y = '0.0000000000000000E+00'.
lt_dmu_tmx-axis1z = '0.0000000000000000E+00'.
lt_dmu_tmx-axis2x = '0.0000000000000000E+00'.
lt_dmu_tmx-axis2y = '1.0000000000000000E+00'.
lt_dmu_tmx-axis2z = '0.0000000000000000E+00'.
lt_dmu_tmx-axis3x = '0.0000000000000000E+00'.
lt_dmu_tmx-axis3y = '0.0000000000000000E+00'.
lt_dmu_tmx-axis3z = '1.0000000000000000E+00'.
lt_dmu_tmx-scale = '1.0000000000000000E+00'.
append lt_dmu_tmx.
lt_dmu_tmx-identifier = '2'.
lt_dmu_tmx-object_id = '2'.
lt_dmu_tmx-locox = '0.0000000000000000E+00'.
lt_dmu_tmx-locoy = '0.0000000000000000E+00'.
lt_dmu_tmx-locoz = '0.0000000000000000E+00'.
lt_dmu_tmx-axis1x = '1.0000000000000000E+00'.
lt_dmu_tmx-axis1y = '0.0000000000000000E+00'.
lt_dmu_tmx-axis1z = '0.0000000000000000E+00'.
lt_dmu_tmx-axis2x = '0.0000000000000000E+00'.
lt_dmu_tmx-axis2y = '1.0000000000000000E+00'.
lt_dmu_tmx-axis2z = '0.0000000000000000E+00'.
lt_dmu_tmx-axis3x = '0.0000000000000000E+00'.
lt_dmu_tmx-axis3y = '0.0000000000000000E+00'.
lt_dmu_tmx-axis3z = '1.0000000000000000E+00'.
lt_dmu_tmx-scale = '1.0000000000000000E+00'.
append lt_dmu_tmx.
lt_dmu_tmx-identifier = '3'.
lt_dmu_tmx-object_id = '2'.
lt_dmu_tmx-locox = '0.0000000000000000E+00'.
lt_dmu_tmx-locoy = '0.0000000000000000E+00'.
lt_dmu_tmx-locoz = '-2.657000000000000E+01'.
lt_dmu_tmx-axis1x = '0.0000000000000000E+00'.
lt_dmu_tmx-axis1y = '-1.0000000000000000E+00'.
lt_dmu_tmx-axis1z = '0.0000000000000000E+00'.
lt_dmu_tmx-axis2x = '1.0000000000000000E+00'.
lt_dmu_tmx-axis2y = '0.0000000000000000E+00'.
lt_dmu_tmx-axis2z = '0.0000000000000000E+00'.
lt_dmu_tmx-axis3x = '0.0000000000000000E+00'.
lt_dmu_tmx-axis3y = '0.0000000000000000E+00'.
lt_dmu_tmx-axis3z = '1.0000000000000000E+00'.
lt_dmu_tmx-scale = '1.0000000000000000E+00'.
append lt_dmu_tmx.
lt_dmu_tmx-identifier = '4'.
lt_dmu_tmx-object_id = '2'.
lt_dmu_tmx-locox = '0.0000000000000000E+00'.
lt_dmu_tmx-locoy = '0.0000000000000000E+00'.
lt_dmu_tmx-locoz = '-3.750000000000000E+00'.
lt_dmu_tmx-axis1x = '0.0000000000000000E+00'.
lt_dmu_tmx-axis1y = '1.0000000000000000E+00'.
lt_dmu_tmx-axis1z = '0.0000000000000000E+00'.
lt_dmu_tmx-axis2x = '0.0000000000000000E+00'.
lt_dmu_tmx-axis2y = '0.0000000000000000E+00'.
lt_dmu_tmx-axis2z = '1.0000000000000000E+00'.
lt_dmu_tmx-axis3x = '1.0000000000000000E+00'.
lt_dmu_tmx-axis3y = '0.0000000000000000E+00'.
lt_dmu_tmx-axis3z = '0.0000000000000000E+00'.
lt_dmu_tmx-scale = '1.0000000000000000E+00'.
append lt_dmu_tmx.
write z_date to y_date mm/dd/yyyy.
call function 'CSAP_MAT_BOM_MAINTAIN'
exporting
material = material
plant = plant
bom_usage = usage
alternative = alternat
valid_from = y_date
CHANGE_NO =
REVISION_LEVEL =
i_stko = l_stko
FL_NO_CHANGE_DOC = ' '
fl_commit_and_wait = 'X'
fl_bom_create = 'X'
fl_new_item = ' '
fl_complete = ' '
IMPORTING
FL_WARNING =
O_STKO =
tables
t_stpo = lt_stpo
T_DEP_DATA =
T_DEP_DESCR =
T_DEP_ORDER =
T_DEP_SOURCE =
T_DEP_DOC =
t_doc_link = lt_doc_link
t_dmu_tmx = lt_dmu_tmx
exceptions
error = 1
others = 2.
if sy-subrc = 0.
write: / 'BOM successfully created'.
endif.
.
if sy-subrc <> 0.
write: / ' Error creating BOM'.
message id sy-msgid type sy-msgty number sy-msgno
with sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
endif.
Regards,
Ravi
‎2006 May 04 11:52 AM
Check this..
REPORT sy-repid NO STANDARD PAGE HEADING
LINE-SIZE 255
LINE-COUNT 65.
TABLES: mara,
marc,
mbew,
mast,
stpo,
t001w,
mvke,
t460a.
TYPE-POOLS slis .
CONSTANTS: id LIKE thead-tdid VALUE '0001',
object LIKE thead-tdobject VALUE 'MVKE',
call_mode_ale LIKE mmdcmode-call_mode VALUE 'ALE'.
* *--------------------------------*
*-* I N T E R N A L T A B L E S *------------------------------------
* *--------------------------------*
* Internal table description
Data: begin of t_mara occurs 0,
matnr like mara-matnr,
mtart like mara-mtart,
werks like marc-werks,
matkl like mara-matkl,
mtpos_mara like mara-mtpos_mara,
zzmtpos like marc-zzmtpos,
lvorm like mara-lvorm,
stlan like marc-stlan,
sobsk like marc-sobsk,
pstat like marc-pstat,
ncost type c,
stdpd like marc-stdpd,
beskz like marc-beskz,
sobsl like marc-sobsl,
schgt like marc-schgt,
created like marc-ncost,
ekalr like mbew-ekalr,
hkmat like mbew-hkmat,
hrkft like mbew-hrkft,
mvkemtpos like mvke-mtpos,
error(220) type c,
end of t_mara.
Data: begin of t_sobsl occurs 0,
sobsl like t460a-sobsl,
end of t_sobsl.
Data: begin of t_stpo occurs 0,
matnr like mast-matnr,
werks like mast-werks,
stlan like mast-stlan,
stlnr like stpo-stlnr,
idnrk like stpo-idnrk,
posnr like stpo-posnr,
aennr like stpo-aennr,
BULK(1) type c,
mmbulk like marc-schgt,
valid_from like STKO_API02-valid_from,
error(220) type c,
end of t_stpo.
Data: begin of t_plants occurs 0,
werks like marc-werks,
name1 like t001w-name1,
end of t_plants.
Data: t_temp_stpo like t_stpo occurs 0 with header line.
DATA: mara_ueb LIKE mara_ueb OCCURS 0 WITH HEADER LINE,
makt_ueb LIKE makt_ueb OCCURS 0 WITH HEADER LINE,
marc_ueb LIKE marc_ueb OCCURS 0 WITH HEADER LINE,
mard_ueb LIKE mard_ueb OCCURS 0 WITH HEADER LINE,
mbew_ueb LIKE mbew_ueb OCCURS 0 WITH HEADER LINE,
t_mfieldres LIKE mfieldres OCCURS 0,
d_mfieldres like mfieldres,
tranc LIKE mara_ueb-tranc VALUE '0000000001',
merrdat LIKE merrdat OCCURS 0 WITH HEADER LINE,
messg LIKE message,
wrk_length TYPE i,
ermsg(220) type c,
v_temp_tranc LIKE mara_ueb-tranc.
data: wrk_origin_group like mbew_ueb-hrkft.
DATA: tcode LIKE sy-tcode VALUE 'MM02'.
DATA: fieldcat TYPE slis_t_fieldcat_alv,
fieldcat_ln LIKE LINE OF fieldcat,
sortcat TYPE slis_t_sortinfo_alv,
sortcat_ln LIKE LINE OF sortcat,
eventcat TYPE slis_t_event,
eventcat_ln LIKE LINE OF eventcat,
col_pos TYPE i,
ls_line TYPE slis_listheader,
l_line TYPE slis_listheader-info,
wrk_ucomm TYPE slis_formname,
v_layout TYPE slis_layout_alv.
DATA: wultb LIKE stpov OCCURS 0 WITH HEADER LINE,
equicat LIKE cscequi OCCURS 0 WITH HEADER LINE,
kndcat LIKE cscknd OCCURS 0 WITH HEADER LINE,
matcat LIKE cscmat OCCURS 0 WITH HEADER LINE,
stdcat LIKE cscstd OCCURS 0 WITH HEADER LINE,
tplcat LIKE csctpl OCCURS 0 WITH HEADER LINE,
t_stpo_read like STPO_API02 occurs 0 with header line,
t_stpo_update like STPO_API03 occurs 0 with header line,
i_stko LIKE stko_api01,
T_STKO LIKE STKO_API02 OCCURS 0 WITH HEADER LINE,
wrk_date like CSAP_MBOM-DATUV.
data: t_wultb like wultb occurs 0 with header line.
*---------------------*
*-* V A R I A B L E S *-----------------------------------------------
* *---------------------*
DATA: WRK_COUNT TYPE I,
WRK_LINES TYPE I,
wrk_line type i,
wrk_message(50) type c,
validityflag like marc-lvorm,
ermsg_update(220) type c,
w_error(40) type c.
** Grid Controls.
DATA: gt_events TYPE slis_t_event,
gt_list_top_of_page TYPE slis_t_listheader,
g_top_of_page TYPE slis_formname VALUE 'TOP_OF_PAGE',
g_layout TYPE slis_layout_alv,
gt_fieldcat TYPE slis_t_fieldcat_alv,
g_fieldcat TYPE LINE OF slis_t_fieldcat_alv,
prog LIKE sy-repid,
l_mode VALUE 'E'.
DATA: g_grid_data TYPE zty_condition_find,
gt_keys TYPE zty_condition_find OCCURS 0,
gt_grid_data TYPE zty_condition_find OCCURS 0,
gt_bdc_tab TYPE bdcdata OCCURS 20 WITH HEADER LINE.
* *---------------------*
*-* C O N S T A N T S *-----------------------------------------------
* *---------------------*
* *--------------------------*
*-* F I E L D - S Y M B O L *------------------------------------------
* *--------------------------*
* *----------------------------------*
*-* S E L E C T I O N S C R E E N *---------------------------------
* *----------------------------------*
*
SELECTION-SCREEN BEGIN OF BLOCK PC WITH FRAME.
*
select-options: s_mtart for mara-mtart.
select-options: s_matkl for mara-matkl.
select-options: s_mtpos for mara-MTPOS_MARA.
select-options: s_zmtpos for marc-zzmtpos.
select-options: s_werks for marc-werks.
select-options: s_matnr for mara-matnr.
select-options: s_sobsl for marc-sobsl.
select-options: s_beskz for marc-beskz.
*select-options: s_ekalr for mbew-ekalr.
*select-options: s_hkmat for mbew-hkmat.
*select-options: s_hrkft for mbew-hrkft.
selection-screen skip 1.
parameters: p_test radiobutton group rad1 default 'X',
p_update radiobutton group rad1.
selection-screen skip 1.
parameters: p_succ as checkbox default 'X'.
selection-screen skip 1.
parameters: p_cost radiobutton group rad2 default 'X',
p_trim radiobutton group rad2,
p_crel radiobutton group rad2,
p_rp radiobutton group rad2.
selection-screen skip 1.
parameters: p_date like rc29l-datub default sy-datum.
SELECTION-SCREEN END OF BLOCK PC.
* ****************************************** *
**************** A T S E L E C T I O N - S C R E E N ****************
* ****************************************** *
*AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_IFILE.
* PERFORM FILE_SELECTION_BOX USING P_IFILE.
*if p_v1 = 'X'.
* if s_mtart[] is initial.
* MOVE 'Material Type' TO w_error.
* MESSAGE ID 'ZVC' TYPE 'E' NUMBER '000' WITH w_error.
* endif.
*endif.
*
* ************************************
***************** E V E N T P R O C E S S I N G *********************
* ************************************
******************
* INITIALIZATION
******************
INITIALIZATION.
PERFORM eventtab_build USING gt_events[].
prog = sy-repid.
***************
* TOP-OF-PAGE
***************
*
TOP-OF-PAGE.
****************
** END-OF-PAGE
****************
*end-of-page.
**********************
* START-OF-SELECTION
**********************
START-OF-SELECTIOn.
perform get_data.
if p_trim = 'X'.
perform check_costing_boms.
endif.
if p_update = 'X'.
perform update_materials.
endif.
if p_crel = 'X'. "Check boms for costing relevancy
perform check_costing_relevancy.
endif.
perform delete_entries.
********************
* END-OF-SELECTION
********************
*
END-OF-SELECTION.
PERFORM build_header_line.
PERFORM print_report.
**********************
** AT LINE-SELECTION *
**********************
*
* ***************************
********************* S U B R O U T I N E S **************************
* ***************************
*&---------------------------------------------------------------------*
*& Form EVENTTAB_BUILD
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_GT_EVENTS[] text
*----------------------------------------------------------------------*
FORM eventtab_build USING rt_events TYPE slis_t_event.
DATA: ls_event TYPE slis_alv_event.
* CALL FUNCTION 'REUSE_ALV_EVENTS_GET' " STC009
* EXPORTING
* i_list_type = 0
* IMPORTING
* et_events = rt_events.
*
* READ TABLE rt_events WITH KEY name = slis_ev_top_of_page
* INTO ls_event.
* IF sy-subrc = 0.
ls_event-name = slis_ev_top_of_page. " STC009
MOVE g_top_of_page TO ls_event-form.
APPEND ls_event TO rt_events.
* ENDIF.
ENDFORM. " EVENTTAB_BUILD
*&---------------------------------------------------------------------*
*& Form TOP_OF_PAGE
*&---------------------------------------------------------------------*
FORM top_of_page.
CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE'
EXPORTING
it_list_commentary = gt_list_top_of_page.
ENDFORM. " TOP_OF_PAGE
*&---------------------------------------------------------------------*
*& Form BUILD_HEADER_LINE
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM BUILD_HEADER_LINE.
REFRESH gt_list_top_of_page.
CLEAR ls_line.
ls_line-typ = 'H'.
ls_line-info = 'List Materials'.
APPEND ls_line TO gt_list_top_of_page.
*Blank Line
CLEAR ls_line.
ls_line-typ = 'S'.
APPEND ls_line TO gt_list_top_of_page.
*print select options information if not blank
*---------------------
* Batch
*---------------------
* CLEAR ls_line.
* ls_line-typ = 'S'.
*
*concatenate 'Batch:' p_batch into ls_line-info separated by space.
*append ls_line to gt_list_top_of_page.
*---------------------
* Component
*---------------------
* CLEAR ls_line.
* ls_line-typ = 'S'.
*
*
* DESCRIBE TABLE s_idnrk LINES wrk_line.
* IF wrk_line <> 0.
* LOOP AT s_idnrk.
* CLEAR ls_line.
* ls_line-typ = 'S'.
*
* CASE s_idnrk-option.
*
*
* WHEN 'EQ'.
* CONCATENATE 'Component:' s_idnrk-low INTO
* ls_line-info SEPARATED BY space.
*
* WHEN 'CP'.
* CONCATENATE 'Components Containing:' s_idnrk-low INTO
* ls_line-info SEPARATED BY space.
* WHEN OTHERS.
* CONCATENATE 'Component:' s_idnrk-low INTO
* ls_line-info SEPARATED BY space.
* ENDCASE.
* APPEND ls_line TO gt_list_top_of_page.
*
* ENDLOOP.
* ENDIF.
**
**---------------------
** Work Center
**---------------------
**
* CLEAR ls_line.
* ls_line-typ = 'S'.
*
* DESCRIBE TABLE s_arbpl LINES wrk_line.
* IF wrk_line <> 0.
* LOOP AT s_arbpl.
* CLEAR ls_line.
* ls_line-typ = 'S'.
*
* CASE s_arbpl-option.
*
*
* WHEN 'EQ'.
* CONCATENATE 'Work Center:' s_arbpl-low INTO
* ls_line-info SEPARATED BY space.
*
* WHEN 'CP'.
* CONCATENATE 'Work Center Containing:' s_arbpl-low INTO
* ls_line-info SEPARATED BY space.
* WHEN OTHERS.
* CONCATENATE 'Work Center:' s_arbpl-low INTO
* ls_line-info SEPARATED BY space.
* ENDCASE.
* APPEND ls_line TO gt_list_top_of_page.
*
* ENDLOOP.
* ENDIF.
ENDFORM. " BUILD_HEADER_LINE
*&---------------------------------------------------------------------*
*& Form PRINT_REPORT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
form print_report.
if not p_crel = 'X'.
describe table t_mara lines wrk_lines.
*
if wrk_lines > 0.
PERFORM build_fieldcat USING 'MARA'
'MATNR' 'X' space space space space space 0.
PERFORM build_fieldcat USING 'MARA'
'MTART' 'X' space space space space space 0.
PERFORM build_fieldcat USING 'MARC'
'WERKS' 'X' space space space space space 0.
PERFORM build_fieldcat USING 'MARA'
'MTPOS_MARA' 'X' space space space space space 0.
PERFORM build_fieldcat USING 'MARC'
'ZZMTPOS' 'X' space space space space space 0.
PERFORM build_fieldcat USING 'MARA'
'MATKL' 'X' space space space space space 0.
PERFORM build_fieldcat USING 'MARA'
'LVORM' 'X' space space space space space 0.
PERFORM build_fieldcat USING 'MARC'
'STLAN' 'X' space space space space space 0.
PERFORM build_fieldcat USING 'MARC'
'SOBSK' 'X' space space space space space 0.
PERFORM build_fieldcat USING 'MARC'
'PSTAT' 'X' space space space space space 0.
PERFORM build_fieldcat USING 'MARC'
'NCOST' 'X' space space space space space 0.
PERFORM build_fieldcat USING 'MARC'
'STDPD' 'X' space space space space space 0.
PERFORM build_fieldcat USING 'MARC'
'BESKZ' 'X' space space space space space 0.
PERFORM build_fieldcat USING 'MARC'
'SOBSL' 'X' space space space space space 0.
PERFORM build_fieldcat USING 'MARC'
'SCHGT' 'X' space space space space space 0.
PERFORM build_fieldcat USING ' '
'CREATED' 'X' space space space space 'Bom Created' 12.
PERFORM build_fieldcat USING 'MBEW'
'EKALR' 'X' space space space space space 0.
PERFORM build_fieldcat USING 'MBEW'
'HKMAT' 'X' space space space space space 0.
PERFORM build_fieldcat USING 'MBEW'
'HRKFT' 'X' space space space space space 0.
PERFORM build_fieldcat USING ' '
'MVKEMTPOS' 'X' space space space space 'Sales Org Item Category' 23.
PERFORM build_fieldcat USING ' '
'ERROR' 'X' space space space space 'MESSAGE' 40.
* Optimise Column width and Detail Popup
v_layout-colwidth_optimize = 'X'.
v_layout-detail_popup = 'X'.
*
*
*
* CALL FUNCTION 'REUSE_ALV_LIST_DISPLAY'
* EXPORTING
* it_fieldcat = fieldcat
* i_callback_program = prog
* i_callback_user_command = 'PROCESS_HOTSPOTS'
* TABLES
* t_outtab = t_materials.
CALL FUNCTION 'REUSE_ALV_BLOCK_LIST_INIT'
EXPORTING
i_callback_program = prog
i_callback_pf_status_set = wrk_ucomm
i_callback_user_command = 'PROCESS_HOTSPOTS'.
CALL FUNCTION 'REUSE_ALV_BLOCK_LIST_APPEND'
EXPORTING
it_fieldcat = fieldcat
it_events = gt_events[]
is_layout = v_layout
i_tabname = 'T_MARA'
TABLES
t_outtab = t_MARA
EXCEPTIONS
program_error = 1
maximum_of_appends_reached = 2
OTHERS = 3.
CALL FUNCTION 'REUSE_ALV_BLOCK_LIST_DISPLAY' " stc008
EXCEPTIONS
program_error = 1
OTHERS = 2
.
else.
move 'No Records Found' TO wrk_message.
MESSAGE ID 'ZVC' TYPE 'S' NUMBER '000' WITH wrk_message.
CLEAR wrk_message.
endif.
else. "cost relevancy report
describe table t_stpo lines wrk_lines.
*
if wrk_lines > 0.
PERFORM build_fieldcat USING 'MAST'
'MATNR' 'X' space space space space space 0.
PERFORM build_fieldcat USING 'MAST'
'WERKS' 'X' space space space space space 0.
PERFORM build_fieldcat USING 'MAST'
'STLAN' 'X' space space space space space 0.
PERFORM build_fieldcat USING 'STPO'
'STLNR' 'X' space space space space space 0.
PERFORM build_fieldcat USING 'STPO'
'IDNRK' 'X' space space space space space 0.
PERFORM build_fieldcat USING 'STPO'
'POSNR' 'X' space space space space space 0.
PERFORM build_fieldcat USING 'STPO'
'AENNR' 'X' space space space space space 0.
PERFORM build_fieldcat USING ' '
'BULK' 'X' space space space space 'Bulk Material' 15.
PERFORM build_fieldcat USING ' '
'MMBULK' 'X' space space space space 'Bulk Material Material Master' 30.
PERFORM build_fieldcat USING 'STKO_API02'
'VALID_FROM' 'X' space space space space space 0.
PERFORM build_fieldcat USING ' '
'ERROR' 'X' space space space space 'Message' 220.
* Optimise Column width and Detail Popup
v_layout-colwidth_optimize = 'X'.
v_layout-detail_popup = 'X'.
*
*
*
* CALL FUNCTION 'REUSE_ALV_LIST_DISPLAY'
* EXPORTING
* it_fieldcat = fieldcat
* i_callback_program = prog
* i_callback_user_command = 'PROCESS_HOTSPOTS'
* TABLES
* t_outtab = t_materials.
CALL FUNCTION 'REUSE_ALV_BLOCK_LIST_INIT'
EXPORTING
i_callback_program = prog
i_callback_pf_status_set = wrk_ucomm
i_callback_user_command = 'PROCESS_HOTSPOTS'.
CALL FUNCTION 'REUSE_ALV_BLOCK_LIST_APPEND'
EXPORTING
it_fieldcat = fieldcat
it_events = gt_events[]
is_layout = v_layout
i_tabname = 'T_STPO'
TABLES
t_outtab = T_STPO
EXCEPTIONS
program_error = 1
maximum_of_appends_reached = 2
OTHERS = 3.
CALL FUNCTION 'REUSE_ALV_BLOCK_LIST_DISPLAY' " stc008
EXCEPTIONS
program_error = 1
OTHERS = 2
.
else.
move 'No Records Found' TO wrk_message.
MESSAGE ID 'ZVC' TYPE 'S' NUMBER '000' WITH wrk_message.
CLEAR wrk_message.
endif.
endif.
endform. " PRINT_REPORT
*&---------------------------------------------------------------------*
*& Form BUILD_FIELDCAT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_2793 text
* -->P_2794 text
* -->P_2795 text
* -->P_SPACE text
* -->P_SPACE text
* -->P_SPACE text
* -->P_SPACE text
* -->P_2800 text
* -->P_0 text
*----------------------------------------------------------------------*
FORM
build_fieldcat USING tabname LIKE fieldcat_ln-ref_tabname
fieldname LIKE fieldcat_ln-fieldname
key LIKE fieldcat_ln-key
do_sum LIKE fieldcat_ln-do_sum
no_out LIKE fieldcat_ln-no_out
qfieldname LIKE fieldcat_ln-qfieldname
hotspot LIKE fieldcat_ln-hotspot
reptext_ddic LIKE fieldcat_ln-reptext_ddic
outputlen LIKE fieldcat_ln-outputlen.
ADD 1 TO col_pos.
fieldcat_ln-ref_tabname = tabname.
fieldcat_ln-fieldname = fieldname.
fieldcat_ln-key = key.
fieldcat_ln-do_sum = do_sum.
fieldcat_ln-col_pos = col_pos.
fieldcat_ln-no_out = no_out.
fieldcat_ln-qfieldname = qfieldname.
fieldcat_ln-hotspot = hotspot.
fieldcat_ln-reptext_ddic = reptext_ddic.
fieldcat_ln-outputlen = outputlen.
APPEND fieldcat_ln TO fieldcat.
ENDFORM. " BUILD_FIELDCAT
*&---------------------------------------------------------------------*
*& Form FILE_SELECTION_BOX
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_P_IFILE text
*----------------------------------------------------------------------*
FORM FILE_SELECTION_BOX USING FILENAME.
CALL FUNCTION 'WS_FILENAME_GET'
EXPORTING
def_filename = FILENAME
* def_path = ' '
mask = ',*.*,*.*.'
mode = 'O' " file open select box
title = 'Material Type Change File'
IMPORTING
filename = FILENAME
* RC =
EXCEPTIONS
inv_winsys = 1
no_batch = 2
selection_cancel = 3
selection_error = 4
others = 5.
IF SY-SUBRC <> 0.
MESSAGE ID 'ZVC' TYPE 'E' NUMBER '000' WITH 'UPLOAD FAILED'.
ENDIF.
ENDFORM. " FILE_SELECTION_BOX
*&---------------------------------------------------------------------*
*& Form PROCESS_HOTSPOTS
*&---------------------------------------------------------------------*
* Call correct transaction based on which hotspot was selected
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM process_hotspots USING ucomm ps_selfield TYPE slis_selfield.
if p_crel = 'X'.
READ TABLE t_stpo INTO t_stpo INDEX ps_selfield-tabindex.
CHECK sy-subrc = 0.
*
REFRESH gt_bdc_tab.
* CASE ps_selfield-fieldname.
IF t_stpo-matnr = ps_selfield-value. " stc008
* WHEN 'MATNR'. "material
CHECK NOT t_stpo-matnr IS INITIAL.
SET PARAMETER ID 'MAT' FIELD t_stpo-matnr.
set parameter id 'WRK' field t_stpo-werks.
set parameter id 'CSV' field t_stpo-stlan.
set parameter id 'AEN' field t_stpo-aennr.
CALL TRANSACTION 'CS02'.
* when 'VBELN'. "order
* check not t_orders-vbeln is initial.
* set parameter id 'AUN' field t_orders-vbeln.
* call transaction 'VA03' and skip first screen.
* when 'VBELNS'. "Steelcase purchase orders
* check not t_orders-vbelns is initial.
* call transaction 'ME23N'.
* ENDCASE.
endif.
endif.
endform. "process_hotspots
*&---------------------------------------------------------------------*
*& Form GET_DATA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM GET_DATA.
* Select mara~matnr mara~mtart marc~werks mara~matkl mara~mtpos_mara mara~lvorm marc~stlan marc~sobsk marc~zzlastmad marc~zzlastoe marc~pstat marc~ncost
* marc~zzmtpos marc~stdpd marc~beskz marc~sobsl marc~schgt into table t_mara from mara
* join marc on marc~matnr = mara~matnr
* where marc~matnr in s_matnr and
* mara~lvorm <> 'X' and
* mtart in s_mtart and
* matkl in s_matkl and
* MTPOS_MARA in s_mtpos and
* zzmtpos in s_zmtpos and
* marc~lvorm <> 'X' and
* marc~werks in s_werks and
* marc~sobsl in s_sobsl and
* ( marc~zzlastmad ge sy-datum or
* marc~zzlastmad = '00000000' ).
Select mara~matnr mara~mtart marc~werks mara~matkl mara~mtpos_mara marc~zzmtpos mara~lvorm marc~stlan marc~sobsk marc~pstat marc~ncost
marc~stdpd marc~beskz marc~sobsl marc~schgt into table t_mara from marc
inner join mara on marc~matnr = mara~matnr
where mara~matnr in s_matnr and
mara~lvorm <> 'X' and
mtart in s_mtart and
matkl in s_matkl and
MTPOS_MARA in s_mtpos and
zzmtpos in s_zmtpos and
marc~lvorm <> 'X' and
marc~werks in s_werks and
marc~sobsl in s_sobsl and
marc~beskz in s_beskz and
( marc~zzlastmad ge sy-datum or
marc~zzlastmad = '00000000' ) and
( marc~zzlastoe ge sy-datum or
marc~zzlastoe = '00000000').
* if not s_ekalr[] is initial or not s_hkmat[] is initial or not s_hrkft[] is initial.
*Delete materials in obsolete plants.
sort t_mara by werks.
Select werks name1 from t001w into table t_plants where name1 = 'OBSOLETE'.
loop at t_plants.
delete t_mara where werks = t_plants-werks.
endloop.
loop at t_mara.
* if p_nocost <> 'X'.
clear: mbew-ekalr,
mbew-hkmat,
mbew-hrkft.
if not t_mara-stdpd is initial.
move: t_mara-stdpd to t_mara-stdpd.
endif.
select single ekalr hkmat hrkft from mbew into (mbew-ekalr, mbew-hkmat, mbew-hrkft) where matnr = t_mara-matnr
and bwkey = t_mara-werks.
if sy-subrc = 0.
move: mbew-ekalr to t_mara-ekalr,
mbew-hkmat to t_mara-hkmat,
mbew-hrkft to t_mara-hrkft.
modify t_mara.
endif.
if t_mara-mtpos_mara is initial.
clear: mvke-mtpos.
select single mtpos from mvke into mvke-mtpos where matnr = t_mara-matnr and vkorg = '1000'.
if sy-subrc = 0.
move: mvke-mtpos to t_mara-mvkemtpos.
move: mvke-mtpos to t_mara-mtpos_mara.
modify t_mara.
endif.
endif.
endloop.
ENDFORM. " GET_DATA
*&---------------------------------------------------------------------*
*& Form update_materials
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM update_materials .
loop at t_mara.
if p_cost = 'X'.
refresh mara_ueb.
clear mara_ueb.
SELECT SINGLE * FROM mara INTO CORRESPONDING FIELDS OF mara_ueb
WHERE matnr = t_mara-matnr.
if sy-subrc = 0.
mara_ueb-tcode = tcode.
mara_ueb-tranc = tranc.
append mara_ueb.
v_temp_tranc = tranc.
*check if costing information needs to be updated if so update it.
if t_mara-pstat cs 'G'.
refresh: mbew_ueb.
clear: mbew_ueb.
select single * from mbew into corresponding fields of mbew_ueb
where matnr = t_mara-matnr and
bwkey = t_mara-werks.
if sy-subrc = 0.
*only want to set the material origin, Origin group and the qty with structure fields
*if product is a trim unit.
* if t_mara-matkl = 'T01' or t_mara-matkl = 'T04' or t_mara-matkl = 'T05'.
if t_mara-ekalr <> 'X'.
mbew_ueb-ekalr = 'X'.
endif.
if t_mara-hkmat <> 'X'.
mbew_ueb-hkmat = 'X'.
endif.
if t_mara-mtart = 'ZTRG' and t_mara-hrkft <> '0300'.
mbew_ueb-hrkft = '0300'.
endif.
if t_mara-mtart = 'FERT' and t_mara-hrkft <> '0200'.
mbew_ueb-hrkft = '0200'.
endif.
* endif.
mbew_ueb-tranc = v_temp_tranc.
* v_temp_tranc = v_temp_tranc + 1.
append mbew_ueb.
endif.
else.
move 'No Costing View created' to t_mara-error.
modify t_mara.
clear t_mara-error.
continue.
endif.
refresh: marc_ueb.
clear: marc_ueb.
select single * from marc into corresponding fields of marc_ueb
where matnr = t_mara-matnr and
werks = t_mara-werks.
*
if sy-subrc = 0.
if t_mara-schgt = 'X'.
clear marc_ueb-schgt.
d_mfieldres-tranc = tranc.
d_mfieldres-fname = 'MARC-SCHGT'.
append d_mfieldres to t_mfieldres.
endif.
if marc_ueb-ncost = 'X'.
CLEAR marc_ueb-ncost.
d_mfieldres-tranc = tranc.
d_mfieldres-fname = 'MARC-NCOST'.
append d_mfieldres to t_mfieldres.
endif.
marc_ueb-tranc = v_temp_tranc.
v_temp_tranc = v_temp_tranc + 1.
append marc_ueb.
endif.
CALL FUNCTION 'MATERIAL_MAINTAIN_DARK'
EXPORTING
p_kz_no_warn = 'N'
kz_prf = ' '
call_mode = call_mode_ale
TABLES
AMARA_UEB = mara_ueb
* AMAKT_UEB =
AMARC_UEB = marc_ueb
* AMARD_UEB =
* AMFHM_UEB =
* AMARM_UEB =
* AMEA1_UEB =
AMBEW_UEB = mbew_ueb
* ASTEU_UEB =
* ASTMM_UEB =
* AMLGN_UEB =
* AMLGT_UEB =
* AMPGD_UEB =
* AMPOP_UEB =
* AMVEG_UEB =
* AMVEU_UEB =
* AMVKE_UEB =
* ALTX1_UEB =
* AMPRW_UEB =
* AE1CUCFG_UEB =
* AE1CUINS_UEB =
* AE1CUVAL_UEB =
* AE1CUCOM_UEB =
amfieldres = t_mfieldres
amerrdat = merrdat
EXCEPTIONS
KSTATUS_EMPTY = 1
TKSTATUS_EMPTY = 2
T130M_ERROR = 3
INTERNAL_ERROR = 4
TOO_MANY_ERRORS = 5
UPDATE_ERROR = 6
OTHERS = 7
.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
*-If error, assemble error message. Error messages are returned
* in a table, so could have multiples. If an error encountered,
* then raise exception and exit.
LOOP AT merrdat WHERE msgty = 'E'.
CALL FUNCTION 'WRITE_MESSAGE'
EXPORTING
msgid = merrdat-msgid
msgno = merrdat-msgno
msgty = merrdat-msgty
msgv1 = merrdat-msgv1
msgv2 = merrdat-msgv2
msgv3 = merrdat-msgv3
msgv4 = merrdat-msgv4
msgv5 = ''
IMPORTING
messg = messg.
*search message text for material number if not found and error message
*less than 220 characters long then add it to the beginning of the
*message for message resolution. "<--STC012
CLEAR: wrk_length.
SEARCH messg-msgtx FOR merrdat-matnr. "<--STC012
IF sy-subrc <> 0. "not found "<--STC012
wrk_length = strlen( messg-msgtx ). "<--STC012
IF wrk_length < 202. "<--STC012
*Add the material number to the error message for error resolution
CONCATENATE merrdat-matnr messg-msgtx INTO ermsg SEPARATED BY
space.
ELSE. "<--STC012
ermsg = messg-msgtx.
ENDIF. "<--STC012
* ROLLBACK WORK.
ENDIF. "<--STC012
ENDLOOP.
if not ermsg is initial.
move ermsg to t_mara-error.
modify t_mara.
* rollback work.
refresh: merrdat.
clear merrdat.
clear t_mara-error.
clear ermsg.
else.
commit work.
move 'Updated successfully' to t_mara-error.
modify t_mara.
clear t_mara-error.
endif.
* endif.
endif.
*set the bom and the special procurement cost
elseif p_trim = 'X'.
check t_mara-sobsk is initial or
t_mara-stlan is initial.
*check if costing information needs to be updated if so update it.
if t_mara-pstat cs 'G'.
refresh: mara_ueb,
marc_ueb.
clear: mara_ueb,
marc_ueb.
SELECT SINGLE * FROM mara INTO CORRESPONDING FIELDS OF mara_ueb
WHERE matnr = t_mara-matnr.
if sy-subrc = 0.
mara_ueb-tcode = tcode.
mara_ueb-tranc = tranc.
append mara_ueb.
v_temp_tranc = tranc.
select single * from marc into corresponding fields of marc_ueb
where matnr = t_mara-matnr and
werks = t_mara-werks.
if sy-subrc = 0.
if t_mara-stlan is initial.
marc_ueb-stlan = '6'.
endif.
if t_mara-sobsk is initial.
marc_ueb-sobsk = 'ZC'.
endif.
marc_ueb-tranc = v_temp_tranc.
v_temp_tranc = v_temp_tranc + 1.
append marc_ueb.
CALL FUNCTION 'MATERIAL_MAINTAIN_DARK'
EXPORTING
p_kz_no_warn = 'N'
kz_prf = ' '
call_mode = call_mode_ale
TABLES
AMARA_UEB = mara_ueb
* AMAKT_UEB =
AMARC_UEB = marc_ueb
* AMARD_UEB =
* AMFHM_UEB =
* AMARM_UEB =
* AMEA1_UEB =
* AMBEW_UEB = mbew_ueb
* ASTEU_UEB =
* ASTMM_UEB =
* AMLGN_UEB =
* AMLGT_UEB =
* AMPGD_UEB =
* AMPOP_UEB =
* AMVEG_UEB =
* AMVEU_UEB =
* AMVKE_UEB =
* ALTX1_UEB =
* AMPRW_UEB =
* AE1CUCFG_UEB =
* AE1CUINS_UEB =
* AE1CUVAL_UEB =
* AE1CUCOM_UEB =
amfieldres = t_mfieldres
amerrdat = merrdat
EXCEPTIONS
KSTATUS_EMPTY = 1
TKSTATUS_EMPTY = 2
T130M_ERROR = 3
INTERNAL_ERROR = 4
TOO_MANY_ERRORS = 5
UPDATE_ERROR = 6
OTHERS = 7
.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
*-If error, assemble error message. Error messages are returned
* in a table, so could have multiples. If an error encountered,
* then raise exception and exit.
LOOP AT merrdat WHERE msgty = 'E'.
CALL FUNCTION 'WRITE_MESSAGE'
EXPORTING
msgid = merrdat-msgid
msgno = merrdat-msgno
msgty = merrdat-msgty
msgv1 = merrdat-msgv1
msgv2 = merrdat-msgv2
msgv3 = merrdat-msgv3
msgv4 = merrdat-msgv4
msgv5 = ''
IMPORTING
messg = messg.
*search message text for material number if not found and error message
*less than 220 characters long then add it to the beginning of the
*message for message resolution. "<--STC012
CLEAR: wrk_length.
SEARCH messg-msgtx FOR merrdat-matnr. "<--STC012
IF sy-subrc <> 0. "not found "<--STC012
wrk_length = strlen( messg-msgtx ). "<--STC012
IF wrk_length < 202. "<--STC012
*Add the material number to the error message for error resolution
CONCATENATE merrdat-matnr messg-msgtx INTO ermsg SEPARATED BY
space.
ELSE. "<--STC012
ermsg = messg-msgtx.
ENDIF. "<--STC012
* ROLLBACK WORK.
ENDIF. "<--STC012
ENDLOOP.
if not ermsg is initial.
move ermsg to t_mara-error.
modify t_mara.
refresh: merrdat.
clear merrdat.
clear t_mara-error.
clear ermsg.
else.
commit work.
move 'Updated successfully' to t_mara-error.
modify t_mara.
clear t_mara-error.
endif.
* endif.
endif.
endif.
else.
move 'No Costing View created' to t_mara-error.
modify t_mara.
clear t_mara-error.
continue.
endif.
endif.
endloop.
if p_succ = 'X'.
delete t_mara where error = 'Updated successfully'.
endif.
ENDFORM. " update_materials
*&---------------------------------------------------------------------*
*& Form check_costing_boms
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM check_costing_boms .
loop at t_mara where not stdpd is initial.
check t_mara-matkl = 'P04' or t_mara-matkl = 'P05' or t_mara-matkl = 'T05'.
check t_mara-mtpos_mara <> '002' and t_mara-mtpos_mara <> 'ZX02' and
t_mara-zzmtpos <> 'ZRMH'.
*if stock id or alias need to check configurable material to see if costing bom
*has been created check for configurable material and load to internal table for processing
*need to still check the variant to verify its settings are correct.
*only need to check if material is not high level product.
* if not t_mara-stdpd is initial and ( t_mara-matkl = 'P04' or t_mara-matkl = 'P05' ).
* move: t_mara-stdpd to t_mara-matnr.
select single stlan sobsk zzmtpos ncost stdpd beskz sobsl schgt from marc
into (marc-stlan, marc-sobsk, marc-zzmtpos, marc-ncost, marc-stdpd, marc-beskz, marc-sobsl, marc-schgt) where
matnr = t_mara-stdpd and werks = t_mara-werks.
if sy-subrc = 0.
select single mtart matkl mtpos_mara from mara into (mara-mtart, mara-matkl, mara-mtpos_mara) where matnr = t_mara-stdpd.
if sy-subrc = 0.
move: marc-stlan to t_mara-stlan,
marc-sobsk to t_mara-sobsk,
marc-zzmtpos to t_mara-zzmtpos,
marc-ncost to t_mara-ncost,
* marc-stdpd to t_mara-stdpd,
marc-beskz to t_mara-beskz,
marc-sobsl to t_mara-sobsl,
marc-schgt to t_mara-schgt,
mara-mtart to t_mara-mtart,
mara-matkl to t_mara-matkl,
mara-mtpos_mara to t_mara-mtpos_mara,
t_mara-stdpd to t_mara-matnr.
append t_mara.
endif.
endif.
endloop.
loop at t_mara.
check t_mara-mtpos_mara <> '002' and t_mara-mtpos_mara <> 'ZX02' and
t_mara-zzmtpos <> 'ZRMH'.
clear mast-matnr.
*if stock id it will not need a 6 bom, only the configurable material
*therefore load an X so that if the usage and special procurement have
*been set the record will be deleted as nothing else is required.
* if t_mara-matkl = 'P04' or t_mara-matkl = 'P05' or t_mara-matkl = 'T05'.
* move 'X' to t_mara-created.
* modify t_mara.
* continue.
* endif.
select single matnr from mast into mast-matnr where matnr = t_mara-matnr and werks = t_mara-werks and
stlan = '6'.
if sy-subrc = 0.
move 'X' to t_mara-created.
modify t_mara.
else.
move: 'No Costing Bom' to t_mara-error.
modify t_mara.
endif.
endloop.
ENDFORM. " check_costing_boms
*&---------------------------------------------------------------------*
*& Form delete_entries
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM delete_entries .
*retrieve all of the special procurement keys for remote or vended
select sobsl into table t_sobsl from t460a where wrk02 = '6500' or
wrk02 = '8800' or wrk02 ='8300'.
sort t_sobsl by sobsl.
delete adjacent duplicates from t_sobsl.
if p_cost = 'X'.
sort t_mara by matnr mtart werks.
loop at t_mara.
*sdp only need material origin, origin group and qty with structure checked.
case t_mara-matkl.
when 'SDP07' or 'SDP08'.
if ( t_mara-mtart = 'FERT' and t_mara-hrkft = '0200' ) or
( t_mara-mtart = 'ZTRG' and t_mara-hrkft = '0300' ) and
t_mara-ekalr = 'X' and
t_mara-schgt <> 'X'.
delete t_mara.
endif.
when 'P04'. "STOCK Id
if ( t_mara-mtart = 'ZTRG' and t_mara-hrkft = '0300' ) or
( t_mara-mtart = 'FERT' and t_mara-hrkft = '0200' ) and
t_mara-ekalr = 'X' and
t_mara-schgt <> 'X' and
t_mara-beskz = 'F' and
( t_mara-werks = '8800' or
t_mara-werks = '8300' or
t_mara-werks = '6500' ).
delete t_mara.
else.
if ( t_mara-mtart = 'ZTRG' and t_mara-hrkft = '0300' ) or
( t_mara-mtart = 'FERT' and t_mara-hrkft = '0200' ) and
t_mara-ekalr = 'X' and
t_mara-schgt <> 'X' and
( t_mara-werks <> '8800' or
t_mara-werks <> '8300' or
t_mara-werks <> '6500' ).
delete t_mara.
endif.
endif.
when others.
*check procurement type.
check t_mara-mtart = 'ZTRG' or t_mara-mtart = 'FERT'.
if ( t_mara-mtpos_mara = 'CONS' or
t_mara-mtpos_mara = 'DROP' or
t_mara-mtpos_mara = 'ZREM' ) and
( t_mara-zzmtpos is initial or t_mara-zzmtpos = 'CONS'
or t_mara-zzmtpos = 'DROP' or t_mara-zzmtpos = 'ZREM' ).
if t_mara-beskz = 'F' and
( ( t_mara-mtart = 'FERT' and t_mara-hrkft = '0200' ) or
( t_mara-mtart = 'ZTRG' and t_mara-hrkft = '0300' ) ) and
t_mara-ekalr = 'X' and
t_mara-schgt <> 'X' and
( t_mara-werks = '8800' or
t_mara-werks = '8300' or
t_mara-werks = '6500' ).
delete t_mara.
continue.
else.
if ( t_mara-mtart = 'FERT' and t_mara-hrkft = '0200' ) or
( t_mara-mtart = 'ZTRG' and t_mara-hrkft = '0300' ) and
t_mara-ekalr = 'X' and
t_mara-schgt <> 'X'.
delete t_mara.
continue.
endif.
endif.
endif.
* if ( t_mara-zzmtpos = 'CONS' or
* t_mara-zzmtpos = 'DROP' or
* t_mara-zzmtpos = 'ZREM' ) and
* t_mara-mtpos_mara = ' '.
* if t_mara-beskz = 'F' and
* ( ( t_mara-mtart = 'FERT' and t_mara-hrkft = '0200' ) or
* ( t_mara-mtart = 'ZTRG' and t_mara-hrkft = '0300' ) ) and
* t_mara-ekalr = 'X' and
* t_mara-schgt <> 'X' and
* ( t_mara-werks <> '8800' or
* t_mara-werks <> '8300' or
* t_mara-werks <> '6500' ).
* delete t_mara.
* continue.
* endif.
if ( t_mara-mtpos_mara = 'CONH' or
t_mara-mtpos_mara = 'DRPH' or
t_mara-mtpos_mara = 'ZRMH' ) and
t_mara-zzmtpos is initial.
if t_mara-beskz = 'E' and
( ( t_mara-mtart = 'FERT' and t_mara-hrkft = '0200' ) or
( t_mara-mtart = 'ZTRG' and t_mara-hrkft = '0300' ) ) and
t_mara-ekalr = 'X' and
t_mara-schgt <> 'X' and
( t_mara-werks = '8800' or
t_mara-werks = '8300' or
t_mara-werks = '6500' ).
delete t_mara.
continue.
else.
if ( t_mara-mtart = 'FERT' and t_mara-hrkft = '0200' ) or
( t_mara-mtart = 'ZTRG' and t_mara-hrkft = '0300' ) and
t_mara-ekalr = 'X' and
t_mara-schgt <> 'X'.
delete t_mara.
continue.
endif.
endif.
endif.
if t_mara-werks <> '8800' and
t_mara-werks <> '8300' and
t_mara-werks <> '6500' and
t_mara-sobsl is initial.
delete t_mara.
continue.
elseif not t_mara-sobsl is initial.
read table t_sobsl with key sobsl = t_mara-sobsl
binary search.
if sy-subrc <> 0.
delete t_mara.
continue.
endif.
endif.
*if fert and general item category = 0004 and item category override is
*blank and plant is <> 8300 then delete entry
if t_mara-matkl = 'S01'.
if t_mara-mtpos_mara = '0004' and t_mara-zzmtpos is initial and
t_mara-beskz = 'F'.
delete t_mara.
endif.
else.
if t_mara-mtpos_mara = '0004' and t_mara-zzmtpos is initial.
delete t_mara.
continue.
endif.
endif.
*if fert and item category = 0004
if t_mara-mtpos_mara ='0004' and t_mara-zzmtpos = 'ZREM'
and ( t_mara-werks = '6500' or
t_mara-werks = '8300' )
and t_mara-mtart = 'FERT'
and t_mara-hrkft = '0200'
and t_mara-ekalr = 'X'
and t_mara-schgt <> 'X'
and t_mara-beskz = 'F'.
delete t_mara.
continue.
endif.
*if fert and high level and
if t_mara-mtpos_mara ='0002' and t_mara-zzmtpos = 'ZRMH'
and ( t_mara-werks = '6500' or
t_mara-werks = '8300' )
and t_mara-mtart = 'FERT'
and t_mara-hrkft = '0200'
and t_mara-ekalr = 'X'
and t_mara-schgt <> 'X'
and t_mara-beskz = 'E'.
delete t_mara.
continue.
endif.
*if fert and high level and item category override is blank
if t_mara-mtpos_mara = '0002'
and t_mara-zzmtpos is initial
and t_mara-werks = '8800'
and t_mara-mtart = 'FERT'
and t_mara-hrkft = '0200'
and t_mara-ekalr = 'X'
and t_mara-schgt <> 'X'
and t_mara-beskz = 'E'.
delete t_mara.
continue.
endif.
if t_mara-zzmtpos is initial and
t_mara-mtpos_mara is initial and
t_mara-mvkemtpos is initial and
( t_mara-mtart = 'FERT' and t_mara-hrkft = '0200' ) or
( t_mara-mtart = 'ZTRG' and t_mara-hrkft = '0300' ) and
t_mara-ekalr = 'X' and
t_mara-schgt <> 'X' and
t_mara-beskz = 'F'.
delete t_mara.
continue.
endif.
endcase.
endloop.
sort t_mara by werks matnr.
elseif p_trim = 'X'.
loop at t_mara.
if t_mara-sobsk = 'ZC' and t_mara-stlan = '6' and t_mara-created = 'X'.
delete t_mara.
endif.
*do not need costing boms on high level product.
if t_mara-mtpos_mara = '0002' or t_mara-mtpos_mara = 'ZX02' or
t_mara-ZZMTPOS = 'ZRMH'.
delete t_mara.
endif.
endloop.
* elseif p_pur = 'X'.
*
* if not s_zmtpos[] is initial.
* delete t_mara where zzmtpos = 'ZRMH' and beskz = 'E'.
* endif.
*
* if not s_mtpos[] is initial.
*
* delete t_mara where mtpos_mara = 'ZRMH' and beskz = 'E'.
* endif.
endif.
ENDFORM. " delete_entries
*&---------------------------------------------------------------------*
*& Form check_costing_relevancy
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM check_costing_relevancy .
loop at t_mara.
clear t_stpo.
refresh t_stpo.
CALL FUNCTION 'CS_WHERE_USED_MAT'
EXPORTING
DATUB = p_date
DATUV = p_date
MATNR = t_mara-matnr
* POSTP = ' '
* RETCODE_ONLY = ' '
STLAN = '5'
WERKS = t_mara-werks
* MCLMT = ' '
* MNSTL = ' '
* MXSTL = ' '
* STLTP = ' '
* NEWSI = ' '
* IMPORTING
* TOPMAT =
TABLES
WULTB = wultb
EQUICAT = equicat
KNDCAT = kndcat
MATCAT = matcat
STDCAT = stdcat
TPLCAT = tplcat
* PRJCAT =
EXCEPTIONS
CALL_INVALID = 1
MATERIAL_NOT_FOUND = 2
NO_WHERE_USED_REC_FOUND = 3
NO_WHERE_USED_REC_SELECTED = 4
NO_WHERE_USED_REC_VALID = 5
OTHERS = 6.
if sy-subrc = 0.
delete wultb where datuv = '12319999'.
delete wultb where sanka = 'X'.
append lines of wultb to t_wultb.
refresh wultb.
endif.
endloop.
loop at t_wultb.
*check if bom material has been marked for deletion.
select single matnr from mara into mara-matnr where matnr = t_wultb-matnr
and lvorm <> 'X'.
check sy-subrc = 0.
select single zzlastoe zzlastmad from marc into (marc-zzlastoe, marc-zzlastmad) where matnr = t_wultb-matnr
and werks = t_wultb-werks
and lvorm <> 'X'.
check sy-subrc = 0.
CALL FUNCTION 'Z_CHECK_MATNR_OE_DATES'
EXPORTING
MATNR = t_wultb-matnr
WERKS = t_wultb-werks
VALIDFROM = p_date
* VALIDTO =
* DATE_RANGE =
IMPORTING
VALIDITYFLAG = validityflag
* TABLES
* IT_MARC =
.
if validityflag = 'X'.
*CHECK FOR BULK MATERIAL INDICATOR.
CLEAR T_STPO-BULK.
IF T_WULTB-SCHGT = 'X'.
MOVE 'X' TO T_STPO-BULK.
ENDIF.
*check for bulk indicator on the material master.
select single schgt from marc into marc-schgt where matnr = t_wultb-idnrk
and werks = t_wultb-werks and
lvorm <> 'X'.
if marc-schgt = 'X'.
move 'X' to t_stpo-mmbulk.
endif.
move: t_wultb-matnr to t_stpo-matnr,
t_wultb-werks to t_stpo-werks,
t_wultb-stlan to t_stpo-stlan,
t_wultb-stlnr to t_stpo-stlnr,
t_wultb-idnrk to t_stpo-idnrk,
t_wultb-posnr to t_stpo-posnr,
t_wultb-aennr to t_stpo-aennr.
append t_stpo.
endif.
endloop.
sort t_stpo by matnr werks stlan stlnr idnrk posnr aennr.
delete adjacent duplicates from t_stpo comparing matnr werks stlan stlnr idnrk posnr aennr.
if p_update = 'X' and p_crel = 'X'.
sort t_stpo by matnr.
loop at t_stpo.
CALL FUNCTION 'CSAP_MAT_BOM_READ'
EXPORTING
MATERIAL = t_stpo-matnr
PLANT = t_stpo-werks
BOM_USAGE = t_stpo-stlan
* ALTERNATIVE =
* VALID_FROM =
* VALID_TO =
CHANGE_NO = t_stpo-aennr
* REVISION_LEVEL =
* FL_DOC_LINKS =
* FL_DMU_TMX =
* IMPORTING
* FL_WARNING =
TABLES
T_STPO = t_stpo_read
T_STKO = T_STKO
* T_DEP_DATA =
* T_DEP_DESCR =
* T_DEP_ORDER =
* T_DEP_SOURCE =
* T_DEP_DOC =
* T_DOC_LINK =
* T_DMU_TMX =
* T_LTX_LINE =
* T_STPU =
EXCEPTIONS
ERROR = 1
OTHERS = 2
.
if sy-subrc = 0.
loop at t_stpo_read where COMPONENT = t_stpo-idnrk and
item_no = t_stpo-posnr and
change_no = t_stpo-aennr.
move-corresponding t_stpo_read to t_stpo_update.
move t_stpo_read-valid_from to t_stpo-valid_from.
modify t_stpo.
IF T_STPO_READ-VALID_FROM = '00/00/0000'.
CLEAR T_STPO_UPDATE-VALID_FROM.
ENDIF.
IF T_STPO_READ-VALID_TO = '00/00/0000'.
CLEAR T_STPO_UPDATE-VALID_TO.
ENDIF.
if t_stpo_update-BULK_MAT = 'X' and s_mtart CS 'ZTRG'.
move '!' to t_stpo_update-bulk_mat.
endif.
if t_stpo_read-Bulk_mat <> 'X'.
move 'X' to t_stpo_update-REL_COST.
endif.
append t_stpo_update.
clear t_stpo_update.
*-Initialize log
PERFORM begin_of_api USING 'CSAP_MAT_BOM_MAINTAIN'.
CALL FUNCTION 'CSAP_MAT_BOM_MAINTAIN'
EXPORTING
material = t_stpo-matnr
plant = t_stpo-werks
bom_usage = t_stpo-stlan
valid_from = t_stpo-VALID_FROM
change_no = t_stpo-aennr
i_stko = i_stko
fl_commit_and_wait = 'X'
TABLES
t_stpo = t_stpo_update
EXCEPTIONS
error = 1
OTHERS = 2.
if sy-subrc NE 0.
PERFORM api_log_to_return USING ermsg_update.
if not ermsg_update is initial.
move ermsg_update to t_stpo-error.
modify t_stpo.
endif.
else.
move 'Update successful' to t_stpo-error.
modify t_stpo.
endif.
REFRESH T_STPO_UPDATE.
endloop.
else.
PERFORM api_log_to_return USING ermsg_update.
if not ermsg_update is initial.
move ermsg_update to t_stpo-error.
modify t_stpo.
endif.
endif.
endloop.
endif.
ENDFORM. " check_costing_relevancy
*&---------------------------------------------------------------------*
*& Form api_log_to_return
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_ERMSG_UPDATE text
*----------------------------------------------------------------------*
FORM api_log_to_return USING p_msg.
DATA: obj LIKE balhdr-object VALUE 'CAPI'.
DATA: sub LIKE balhdr-subobject VALUE 'CAPI_LOG'.
DATA: BEGIN OF xbalhdr OCCURS 0.
INCLUDE STRUCTURE balhdr.
DATA: END OF xbalhdr.
DATA: BEGIN OF xbalhdrp OCCURS 0.
INCLUDE STRUCTURE balhdrp.
DATA: END OF xbalhdrp.
DATA: BEGIN OF xbalm OCCURS 0.
INCLUDE STRUCTURE balm.
DATA: END OF xbalm.
DATA: BEGIN OF xbalmp OCCURS 0.
INCLUDE STRUCTURE balmp.
DATA: END OF xbalmp.
DATA messg LIKE message.
CALL FUNCTION 'APPL_LOG_READ_INTERN'
EXPORTING
object = obj
subobject = sub
TABLES
header_data = xbalhdr
header_parameters = xbalhdrp
messages = xbalm
message_parameters = xbalmp.
DESCRIBE TABLE xbalhdr LINES sy-tmaxl.
READ TABLE xbalhdr INDEX sy-tmaxl.
SORT xbalm BY lognumber msgnumber.
LOOP AT xbalm
WHERE lognumber = xbalhdr-lognumber
AND msgty = 'E'.
ENDLOOP.
IF sy-subrc EQ 0.
CALL FUNCTION 'WRITE_MESSAGE'
EXPORTING
msgid = xbalm-msgid
msgno = xbalm-msgno
msgty = xbalm-msgty
msgv1 = xbalm-msgv1
msgv2 = xbalm-msgv2
msgv3 = xbalm-msgv3
msgv4 = xbalm-msgv4
msgv5 = ''
IMPORTING
messg = messg.
p_msg = messg-msgtx.
ENDIF.
ENDFORM. " API_LOG_TO_RETUR
*&---------------------------------------------------------------------*
*& Form begin_of_api
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_2892 text
*----------------------------------------------------------------------*
FORM begin_of_api USING api_name.
CALL FUNCTION 'CALO_INIT_API'.
*---- initialize log
CALL FUNCTION 'STAP_INIT_SINGLE_API'
EXPORTING
api_name = api_name.
ENDFORM. " begin_of_api