Monday, September 17, 2018

Get Packaging Material of a Product in EWM

Assumption: The relationship between the Product and its Packaging Specification is one-to-one.
Note: Multiple Pack. Spec. for a Product should be handled accordingly.

Report Code:

*&---------------------------------------------------------------------*
*& Report ZAG_GET_PMAT_PRODUCT
*&---------------------------------------------------------------------*
*& Developed by Arun Ganesh
*&---------------------------------------------------------------------*
REPORT zag_get_pmat_product.

*-> Selection Screen
PARAMETERS p_mat TYPE /scwm/de_matnr.

*-> Local Data Declarations
DATAls_content_query TYPE /scwm/s_ps_content_query,
      lt_ps_keys       
TYPE /scwm/tt_ps_header_key,
      lv_severity      
TYPE bapi_mtype,
      lt_return        
TYPE bapirettab,
      lv_matid_16      
TYPE /scwm/de_matid,
      lt_matid_tab     
TYPE /scmb/mdl_matid_tab,
      lt_object        
TYPE /scwm/tt_ps_object.

*-> Get Packaging Specifications of the Product
SELECT SINGLE matid "Secondary Index fetch
         
FROM /sapapo/matkey
         
INTO @DATA(lv_matid_22)
        
WHERE matnr @p_mat.
IF sy-subrc 0.
  
CALL FUNCTION '/SCMB/MDL_GUID_CONVERT'
    
EXPORTING
      iv_guid22 
lv_matid_22
    
IMPORTING
      ev_guid16 
lv_matid_16.
  
IF lv_matid_16 IS NOT INITIAL.

    
APPEND INITIAL LINE TO lt_matid_tab ASSIGNING FIELD-SYMBOL(<lfs_matid_tab>).
    <lfs_matid_tab>
-matid lv_matid_16.

    ls_content_query
-matid lt_matid_tab.

    
CALL FUNCTION '/SCWM/API_PACKSPEC_GETLIST'
      
EXPORTING
        is_content_query 
ls_content_query
      
IMPORTING
        et_ps_keys       
lt_ps_keys
        ev_severity      
lv_severity
        et_return        
lt_return.
    
IF NOT lv_severity CA wmegc_severity_eax AND
      lt_ps_keys 
IS NOT INITIAL.
      
CLEARlv_severity,
             lt_return
.

*-> Get Pack. Spec. details
      
CALL FUNCTION '/SCWM/API_PACKSPEC_READ'
        
EXPORTING
          it_ps_id    
lt_ps_keys
        
IMPORTING
          et_object   
lt_object
          ev_severity 
lv_severity
          et_return   
lt_return.
      
IF NOT lv_severity CA wmegc_severity_eax AND
         lt_object 
IS NOT INITIAL.
        
READ TABLE lt_object ASSIGNING FIELD-SYMBOL(<lfs_object>)
                             
INDEX 1.
        
IF sy-subrc 0.
          
READ TABLE <lfs_object>-levels ASSIGNING FIELD-SYMBOL(<lfs_level>)
                                         
INDEX 2"2nd level read
          
IF sy-subrc  0.
            
WRITE <lfs_level>-hu_mat.
          
ENDIF.
        
ENDIF.
      
ENDIF.
    
ENDIF.
  
ENDIF"lv_matid_16 NOT INITIAL
ENDIF"SELECT matid from /SAPAPO/MATKEY

Thursday, August 16, 2018

Report - Get Delivery and PO Details from Internal TU (EWM) - Type 2


*&---------------------------------------------------------------------*
*& Report ZAG_TU_DEL2
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT zag_tu_del2.

*-> Selection Screen
PARAMETERSp_itu  TYPE /scwm/de_tu_num OBLIGATORY.

*-> Local Data Declarations
TYPESBEGIN OF lty_dlv_po,
         docno 
TYPE /scdl/dl_docno_int,
         po    
TYPE /scdl/dl_refdocno,
       
END OF lty_dlv_po.

DATAls_tu_sr_act_num   TYPE /scwm/s_tu_sr_act_num,
      lt_tu_dlv_temp     
TYPE /scwm/tt_bo_tu_dlv_no_sort,
      ls_excl_fd_data    
TYPE /scwm/dlv_query_excl_fd_str,
      ls_excl_prd_data   
TYPE /scwm/dlv_query_excl_str,
      ls_read_options    
TYPE /scwm/dlv_query_contr_str,
      ls_fd_read_options 
TYPE /scwm/dlv_query_contr_fd_str,
      lt_dlv_po          
TYPE STANDARD TABLE OF lty_dlv_po.

FIELD-SYMBOLS<fs_excl> TYPE any.

CONSTANTS lc_refdoccat_po TYPE /scdl/dl_refdoccat VALUE 'PO'.

*-> Get Shipping and Receiving Activity
SELECT tu_sr_act_num
  
UP TO ROWS
  
FROM /scwm/tu_dlv
  
INTO @DATA(lv_tu_sr_act_num)
 
WHERE tu_num @p_itu.
ENDSELECT.
IF sy-subrc 0.
*-> Get Instance - Shipping & Receiving Business Object Manager
  
TRY.
      
CALL METHOD /scwm/cl_sr_bom=>get_instance
        RECEIVING
          ro_bom 
DATA(lo_sr_bom).
    
CATCH /scwm/cx_sr_error.
      
RETURN.
  
ENDTRY.

  
IF lo_sr_bom IS BOUND.
*-> Prepare Key
    ls_tu_sr_act_num
-tu_num        p_itu.
    ls_tu_sr_act_num
-tu_sr_act_num lv_tu_sr_act_num.

*-> Get Business Object of Transportation Unit
    
TRY.
        
CALL METHOD lo_sr_bom->get_bo_tu_by_key
          
EXPORTING
            is_tu_sr_act_num 
ls_tu_sr_act_num
          RECEIVING
            ro_bo_tu         
DATA(lo_bo_tu).
      
CATCH /scwm/cx_sr_error.
        
RETURN.
    
ENDTRY.

    
IF lo_bo_tu IS BOUND.
*-> Fill EXPORTING parameters
      
DATA(lo_structdescr) = CAST cl_abap_structdescrcl_abap_datadescr=>describe_by_datals_excl_fd_data ) ).
      
DATA(lv_components) = lineslo_structdescr->components ).

      
DO lv_components TIMES.
        
ASSIGN COMPONENT sy-index OF STRUCTURE ls_excl_fd_data TO <fs_excl>.
        <fs_excl> 
abap_true.
      
ENDDO.

      ls_excl_prd_data
-item_all abap_true.

      ls_fd_read_options
-data_retrieval_only abap_true.

*-> Get TU Delivery Data
      
TRY.
          
CALL METHOD lo_bo_tu->get_tu_dlv_data
            
EXPORTING
              is_excl_fd_data    
ls_excl_fd_data
              is_excl_prd_data   
ls_excl_prd_data
              is_fd_read_options 
ls_fd_read_options
              iv_no_txt_item     
abap_true
            
IMPORTING
              et_prd_hdr         
DATA(lt_prd_hdr).
        
CATCH /scwm/cx_sr_error.
          
RETURN.
      
ENDTRY.
      
IF lt_prd_hdr IS NOT INITIAL.
        
LOOP AT lt_prd_hdr ASSIGNING FIELD-SYMBOL(<lfs_prd_hdr>).
          
APPEND INITIAL LINE TO lt_dlv_po ASSIGNING FIELD-SYMBOL(<lfs_dlv_po>).
          <lfs_dlv_po>
-docno <lfs_prd_hdr>-docno.
          
READ TABLE <lfs_prd_hdr>-refdoc ASSIGNING FIELD-SYMBOL(<lfs_refdoc>)
                                          
WITH KEY refdoccat lc_refdoccat_po.
          
IF sy-subrc 0.
            <lfs_dlv_po>
-po    <lfs_refdoc>-refdocno.
          
ENDIF.
        
ENDLOOP.
      
ENDIF." lt_prd_hdr NOT INITIAL
    
ENDIF"lo_bo_tu BOUND
  
ENDIF"lo_sr_bom BOUND
ENDIF"SELECT /SCWM/TU_DLV

END-OF-SELECTION.
  
IF lt_dlv_po IS NOT INITIAL.
    
TRY.
        
CALL METHOD cl_salv_table=>factory
          
IMPORTING
            r_salv_table 
DATA(lo_salv_table)
          
CHANGING
            t_table      
lt_dlv_po.
        
IF lo_salv_table IS BOUND.
          
CALL METHOD lo_salv_table->display.
        
ENDIF.
      
CATCH cx_salv_msg.
    
ENDTRY.
  
ENDIF"lt_dlv_po NOT INITIAL

Report - Get Delivery and PO Details from Internal TU (EWM) - Type 1


We can also use the below program, or, to be more precise with the same business object, see next post.

*&---------------------------------------------------------------------*
*& Report ZAG_TU_DEL
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT zag_tu_del.

*-> Selection Screen
PARAMETERSp_whse TYPE /scwm/lgnum OBLIGATORY,
            p_itu  
TYPE /scwm/de_tu_num OBLIGATORY,
            p_pdi  
TYPE char1 RADIOBUTTON GROUP g1 DEFAULT 'X',
            p_pdo  
TYPE char1 RADIOBUTTON GROUP g1.

*-> Local Data Declarations
TYPESBEGIN OF lty_dlv_po,
         docno 
TYPE /scdl/dl_docno_int,
         po    
TYPE /scdl/dl_refdocno,
       
END OF lty_dlv_po.

DATAls_tu_sr_act_num TYPE /scwm/s_tu_sr_act_num,
      lt_tu_dlv_temp   
TYPE /scwm/tt_bo_tu_dlv_no_sort,
      lv_doccat        
TYPE /scdl/dl_doccat,
      lt_selection     
TYPE /scwm/dlv_selection_tab,
      ls_read_options  
TYPE /scwm/dlv_query_contr_str,
      ls_include_data  
TYPE /scwm/dlv_query_incl_str_prd,
      ls_exclude_data  
TYPE /scwm/dlv_query_excl_str,
      ls_t300_md       
TYPE /scwm/s_t300_md,
      lt_dlv_po        
TYPE STANDARD TABLE OF lty_dlv_po.

CONSTANTS lc_refdoccat_po TYPE /scdl/dl_refdoccat VALUE 'PO'.

*-> Selection Variable
IF p_pdi IS NOT INITIAL.
  lv_doccat 
wmegc_doccat_pdi.
ELSE.
  lv_doccat 
wmegc_doccat_pdo.
ENDIF.

*-> Get Shipping and Receiving Activity
SELECT tu_sr_act_num
  
UP TO ROWS
  
FROM /scwm/tu_dlv
  
INTO @DATA(lv_tu_sr_act_num)
 
WHERE tu_num @p_itu.
ENDSELECT.
IF sy-subrc 0.
*-> Get Instance - Shipping & Receiving Business Object Manager
  
TRY.
      
CALL METHOD /scwm/cl_sr_bom=>get_instance
        RECEIVING
          ro_bom 
DATA(lo_sr_bom).
    
CATCH /scwm/cx_sr_error.
      
RETURN.
  
ENDTRY.

  
IF lo_sr_bom IS BOUND.
*-> Prepare Key
    ls_tu_sr_act_num
-tu_num        p_itu.
    ls_tu_sr_act_num
-tu_sr_act_num lv_tu_sr_act_num.

*-> Get Business Object of Transportation Unit
    
TRY.
        
CALL METHOD lo_sr_bom->get_bo_tu_by_key
          
EXPORTING
            is_tu_sr_act_num 
ls_tu_sr_act_num
          RECEIVING
            ro_bo_tu         
DATA(lo_bo_tu).
      
CATCH /scwm/cx_sr_error.
        
RETURN.
    
ENDTRY.

    
IF lo_bo_tu IS BOUND.
*-> Get TU Data
      
TRY.
          
CALL METHOD lo_bo_tu->get_data
            
IMPORTING
              et_tu_dlv 
DATA(lt_tu_dlv).
        
CATCH /scwm/cx_sr_error.
          
RETURN.
      
ENDTRY.

      
IF lt_tu_dlv IS NOT INITIAL.
*-> Get Unique Deliveries
        lt_tu_dlv_temp 
lt_tu_dlv.
        
SORT lt_tu_dlv_temp BY docno.
        
DELETE ADJACENT DUPLICATES FROM lt_tu_dlv_temp
                              
COMPARING docno.
        
IF lt_tu_dlv_temp IS NOT INITIAL.
*-> Prepare EXPORTING parameters
*-> Get Supply Chain Unit GUID
          
CALL FUNCTION '/SCWM/T300_MD_READ_SINGLE'
            
EXPORTING
              iv_lgnum   
p_whse
            
IMPORTING
              es_t300_md 
ls_t300_md
            
EXCEPTIONS
              not_found  
1
              
OTHERS     2.
          
IF sy-subrc 0.
            
APPEND INITIAL LINE TO lt_selection ASSIGNING FIELD-SYMBOL(<lfs_selection>).
            <lfs_selection>
-fieldname /scdl/if_dl_logfname_c=>sc_locationid_wh_h.
            <lfs_selection>
-option    wmegc_option_eq.
            <lfs_selection>
-sign      wmegc_sign_inclusive.
            <lfs_selection>
-low       ls_t300_md-scuguid.

            
LOOP AT lt_tu_dlv_temp ASSIGNING FIELD-SYMBOL(<lfs_tu_dlv>).
              
APPEND INITIAL LINE TO lt_selection ASSIGNING <lfs_selection>.
              <lfs_selection>
-fieldname /scdl/if_dl_logfname_c=>sc_docno_h.
              <lfs_selection>
-option    wmegc_option_eq.
              <lfs_selection>
-sign      wmegc_sign_inclusive.
              <lfs_selection>
-low       <lfs_tu_dlv>-docno.
            
ENDLOOP.

            ls_read_options
-data_retrival_only      abap_true.
            ls_read_options
-mix_in_object_instances abap_true.

            ls_exclude_data
-head_all abap_true.

*-> Get Delivery Details
*-> Get Instance - Obj. Man. Delivery PRD Objects
            
CALL METHOD /scwm/cl_dlv_management_prd=>get_instance
              RECEIVING
                eo_instance 
DATA(lo_dlv_man_prd).
            
IF lo_dlv_man_prd IS BOUND.
*-> Query
              
TRY.
                  
CALL METHOD lo_dlv_man_prd->query
                    
EXPORTING
                      it_selection    
lt_selection
                      iv_doccat       
lv_doccat
                      is_read_options 
ls_read_options
                      is_exclude_data 
ls_exclude_data
                      is_include_data 
ls_include_data
                    
IMPORTING
                      et_items        
DATA(lt_items).
                  
IF lt_items IS NOT INITIAL.
                    
LOOP AT lt_tu_dlv_temp ASSIGNING <lfs_tu_dlv>.
                      
APPEND INITIAL LINE TO lt_dlv_po ASSIGNING FIELD-SYMBOL(<lfs_dlv_po>).
                      <lfs_dlv_po>
-docno <lfs_tu_dlv>-docno.
                      
READ TABLE lt_items ASSIGNING FIELD-SYMBOL(<lfs_item>)
                                          
WITH KEY docno <lfs_tu_dlv>-docno.
                      
IF sy-subrc 0.
                        
READ TABLE <lfs_item>-refdoc ASSIGNING FIELD-SYMBOL(<lfs_refdoc>)
                                                     
WITH KEY refdoccat lc_refdoccat_po.
                        
IF sy-subrc 0.
                          <lfs_dlv_po>
-po <lfs_refdoc>-refdocno.
                        
ENDIF.
                      
ENDIF.
                    
ENDLOOP.
                  
ENDIF"lt_items NOT INITIAL
                
CATCH /scdl/cx_delivery.
                  
RETURN.
              
ENDTRY.
            
ENDIF.
          
ENDIF.
        
ENDIF" FM - /SCWM/T300_MD_READ_SINGLE
      
ENDIF"lt_tu_dlv NOT INITIAL
    
ENDIF"lo_bo_tu BOUND
  
ENDIF"lo_sr_bom BOUND
ENDIF"SELECT /SCWM/TU_DLV

END-OF-SELECTION.
  
IF lt_dlv_po IS NOT INITIAL.
    
TRY.
        
CALL METHOD cl_salv_table=>factory
          
IMPORTING
            r_salv_table 
DATA(lo_salv_table)
          
CHANGING
            t_table      
lt_dlv_po.
        
IF lo_salv_table IS BOUND.
          
CALL METHOD lo_salv_table->display.
        
ENDIF.
      
CATCH cx_salv_msg.
    
ENDTRY.
  
ENDIF"lt_dlv_po NOT INITIAL