You are on page 1of 4

FUNCTION /lclcdp/z_n_mm_get_mat_stores.

*"---------------------------------------------------------------------*"*"Local Interface: *" IMPORTING *" VALUE(PI_STORE_SRCH_CRITERIA) TYPE /LCLCDP/ZSTORE_SRCH_CRITERIA *" VALUE(PI_MAT_EAN) TYPE WSAM_MAT_EAN *" TABLES *" PT_SEARCH_RESULT TYPE /LCLCDP/ZSTORE_SRCH_RESULT_T *" PT_ON_HAND_QTY TYPE /LCLCDP/ZMAT_ON_HAND_QTY_T OPTIONAL *" PT_RETURN TYPE WSRS_T_RETURN OPTIONAL *"---------------------------------------------------------------------* Local data declarations DATA : lt_store_srch_result TYPE /lclcdp/zstore_srch_result_t, ls_on_hand_qty TYPE /lclcdp/zmat_on_hand_qty, lt_marc TYPE ty_marc_t, ls_return TYPE wsrs_return, ls_mean TYPE mean, ls_mara TYPE mara, lv_lines TYPE i, lv_article TYPE matnr. * Data declarations to get Realtime Inventory DATA : ls_controlm TYPE imil_control_main_sty, ls_controlc TYPE imil_control_commitment_sty, ls_matnr_batch TYPE imil_matnr_batch_sty, lt_matnr_batch TYPE imil_matnr_batch_tty, lt_basic_level2 TYPE imil_basic_stock_level2_tty, lt_basic_level3 TYPE imil_basic_stock_level3_tty, lt_plant_sloc TYPE imil_plant_sloc_tty, lt_plant TYPE imil_plant_stock_tty, lt_reservation TYPE imil_reservation_stock_tty, lt_commitment TYPE imil_commitment_stock_tty, ls_req_stock_types TYPE wsil_rfc_req_stock_types, ls_stock TYPE wsil_rfc_stock, ls_plant_sloc TYPE imil_plant_sloc_sty, lt_return TYPE imil_return_message_tty. * Field Symbol declarations FIELD-SYMBOLS : <fs_marc> TYPE ty_marc, <fs_store_srch_res> TYPE /lclcdp/zstore_srch_result. * Validate article and EAN/UPC IF pi_mat_ean-material IS INITIAL. IF NOT pi_mat_ean-ean_upc IS INITIAL . CALL METHOD cl_wsrs_tools_logistics=>check_ean_exist EXPORTING iv_ean = pi_mat_ean-ean_upc IMPORTING es_mean = ls_mean. IF NOT ls_mean IS INITIAL. lv_article = ls_mean-matnr. ELSE. CALL METHOD cl_wsrs_tools_logistics=>check_material_exist EXPORTING iv_matnr = pi_mat_ean-ean_upc IMPORTING es_mara = ls_mara es_return = ls_return.

IF ls_return-type = 'E' OR ls_return-type = 'A'. APPEND ls_return TO pt_return. RETURN. ELSE. lv_article = ls_mara-matnr. ENDIF. ENDIF. ENDIF. ELSE. CALL METHOD cl_wsrs_tools_logistics=>check_material_exist EXPORTING iv_matnr = pi_mat_ean-material IMPORTING es_mara = ls_mara es_return = ls_return. IF ls_return-type = 'E' OR ls_return-type = 'A'. APPEND ls_return TO pt_return. RETURN. ELSE. lv_article = ls_mara-matnr. ENDIF. ENDIF. * Get the stores for the given search criteria IF NOT pi_store_srch_criteria IS INITIAL. CALL METHOD /lclcdp/zcl_mm_store_search=>store_search EXPORTING is_search_criteria = pi_store_srch_criteria IMPORTING et_search_result = lt_store_srch_result. IF NOT lt_store_srch_result[] IS INITIAL. MESSAGE e008 INTO ls_return-message. CALL FUNCTION 'WSRS_MSG_EXCEPTION_CATCH' CHANGING px_return = ls_return. APPEND ls_return TO pt_return. RETURN. ENDIF. ENDIF. ****************************** SELECT SINGLE * FROM mara INTO ls_mara WHERE matnr = lv_article. * Get the Stores for the material IF lt_store_srch_result IS INITIAL. SELECT matnr "Article Number werks "Site lvorm "Flag Article for Deletion at Site Level ekgrp "Purchasing Group bstmi "Minimum Lot Size bstma "Maximum Lot Size bstfe "Fixed lot size

bstrf "Rounding value for purchase order qty mabst "Maximum stock level basmg "Base quantity FROM marc INTO TABLE lt_marc WHERE matnr = lv_article AND lvorm = space. ELSE. SELECT matnr "Article Number werks "Site lvorm "Flag Article for Deletion at Site Level ekgrp "Purchasing Group bstmi "Minimum Lot Size bstma "Maximum Lot Size bstfe "Fixed lot size bstrf "Rounding value for purchase order qty mabst "Maximum stock level basmg "Base quantity FROM marc INTO TABLE lt_marc FOR ALL ENTRIES IN lt_store_srch_result WHERE matnr = lv_article AND werks = lt_store_srch_result-store_number AND lvorm = space. ENDIF. IF sy-subrc NE 0. CLEAR : ls_return. MESSAGE e007 INTO ls_return-message WITH lv_article. CALL FUNCTION 'WSRS_MSG_EXCEPTION_CATCH' CHANGING px_return = ls_return. APPEND ls_return TO pt_return. RETURN. ENDIF. * Sort the internal tables SORT lt_store_srch_result BY store_number. * Populate the final return tables LOOP AT lt_marc ASSIGNING <fs_marc>. READ TABLE lt_store_srch_result ASSIGNING <fs_store_srch_res> WITH KEY store_number = <fs_marc>-werks BINARY SEARCH. IF sy-subrc EQ 0. * Populate the Store details into the final table APPEND <fs_store_srch_res> TO pt_search_result. ls_req_stock_types-unrestricted_stck = 'X'. CLEAR : ls_stock. CALL METHOD /lclcdp/zcl_mm_articlelookup=>get_inventory_lookup EXPORTING iv_plant = <fs_marc>-werks iv_material = <fs_marc>-matnr is_req_stock_types = ls_req_stock_types is_mara = ls_mara IMPORTING es_stock = ls_stock.

ls_on_hand_qty-article = <fs_marc>-matnr. ls_on_hand_qty-werks = <fs_marc>-werks. ls_on_hand_qty-unrestricted_stck = ls_stock-unrestricted_stck. ls_on_hand_qty-base_uom = ls_stock-base_uom. APPEND ls_on_hand_qty TO pt_on_hand_qty. ENDIF. ENDLOOP. * Discard the excess data if the search results more than 50 lines lv_lines = LINES( pt_search_result ). * Delete the entries if result exceeds the max lines IF lv_lines > /lclcdp/zcl_utilities=>c_max_lines. lv_lines = lv_lines + 1. DELETE pt_search_result FROM lv_lines. MESSAGE i006 INTO ls_return-message WITH /lclcdp/zcl_utilities=>c_max_lines. CALL FUNCTION 'WSRS_MSG_EXCEPTION_CATCH' CHANGING px_return = ls_return. APPEND ls_return TO pt_return. ENDIF.

You might also like