Friday, 14 April 2017

Cross plant BOM Explosion


FUNCTION zdtb_mbom_crs_plant.
*"----------------------------------------------------------------------
*"*"Local Interface:
*"  IMPORTING
*"     REFERENCE(GT_BOM) TYPE  ZZTY_T_BOM
*"     REFERENCE(GV_STLAL) TYPE  STLAL
*"     REFERENCE(GV_STLAN) TYPE  STLAN
*"  EXPORTING
*"     REFERENCE(GT_FINAL_STB) TYPE  ROIJ_STPOX_T
*"     REFERENCE(GT_FINAL_MATCAT) TYPE  ZZTY_T_CSCMAT
*"----------------------------------------------------------------------
  
IF gt_bom IS NOT INITIAL.

    
SELECT werks
             sobsl
             beskz
             sobes
             wrk02
        
FROM t460a INTO TABLE gt_t460a
        
WHERE sobsl LIKE '4%'
        
AND  sobes EQ 7.
    
IF sy-subrc EQ 0.
      
SORT gt_t460a BY werks sobsl  sobes.
    
ENDIF.

  
ENDIF.
  
LOOP AT gt_bom INTO ls_bom.
    
IF ls_bom-matnr IS NOT INITIAL.

      
PERFORM f_bom_comp USING ls_bom
                               gt_t460a
                               gv_stlal
                               gv_stlan
                      
CHANGING gt_stb
                               gt_matcat
                               gt_final_stb
                               gt_final_matcat
.
      
CLEARls_bom.
    
ENDIF.
  
ENDLOOP.
  
SORT gt_final_stb    BY stufe
                    ttidx
.
  
SORT gt_final_matcat BY matnr
                    
index.

ENDFUNCTION.

*----------------------------------------------------------------------*
***INCLUDE LZDTB_MBOM_PLANTF01 .
*----------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*&      Form  F_BOM_COMP
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_GS_MARC  text
*      -->P_PT_T460A  text
*      <--P_GT_STB  text
*      <--P_GT_MATCAT  text
*      <--P_GT_FINAL  text
*----------------------------------------------------------------------*
FORM f_bom_comp  USING    ps_marc   TYPE zzty_bom
                          pt_t460a  
TYPE gty_t_t460a
                          pv_stlal 
TYPE stlal
                          pv_stlan 
TYPE stlan
                 
CHANGING pt_stb    TYPE roij_stpox_t
                          pt_matcat 
TYPE zzty_t_cscmat
                          pt_final_stb    
TYPE roij_stpox_t
                          pt_final_matcat  
TYPE zzty_t_cscmat.
*BOM componets
  
PERFORM f_get_bom_stb USING ps_marc
                              pv_stlal
                              pv_stlan
                     
CHANGING pt_stb
                              pt_matcat
                              pt_final_stb
                              pt_final_matcat
.
*BOM explosion for diffrent plants
  
PERFORM f_get_bom_dp USING  ps_marc
                              pt_t460a
                              pt_stb
                              pt_matcat
                              pv_stlal
                              pv_stlan
                    
CHANGING  pt_final_stb
                              pt_final_matcat
.

ENDFORM.                    " F_BOM_COMP
*&---------------------------------------------------------------------*
*&      Form  f_get_bom_stb
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->PI_MARC          text
*      -->PI_STLAL         text
*      -->PI_STLAN         text
*      -->PT_STB           text
*      -->PT_MATCAT        text
*      -->PT_FINAL_STB     text
*      -->PT_FINAL_MATCAT  text
*----------------------------------------------------------------------*
FORM f_get_bom_stb   USING pi_marc         TYPE zzty_bom
                           pi_stlal        
TYPE stlal
                           pi_stlan        
TYPE stlan
                  
CHANGING pt_stb          TYPE roij_stpox_t
                           pt_matcat       
TYPE zzty_t_cscmat
                           pt_final_stb    
TYPE roij_stpox_t
                           pt_final_matcat  
TYPE zzty_t_cscmat.

  
CONSTANTS:
          lc_x
(1)      TYPE c         VALUE 'X',
          lc_1
(1)      TYPE c         VALUE '1',
          lc_2
(1)      TYPE c         VALUE '2',
          lc_capid     
TYPE capid     VALUE 'PP01'.

  
DATA:
        lt_matcat          
TYPE gty_t_matcat,
        ls_matcat          
TYPE cscmat,
        ls_matcat1          
TYPE cscmat,
        ls_stb             
TYPE stpox.

  
DATA:
        lt_stb             
TYPE roij_stpox_t,
        lv_flag            
TYPE flag,

        lv_datuv           
TYPE datuv.
  
FIELD-SYMBOLS:
        <ls_stb>           
TYPE stpox.


  
MOVE sy-datum TO lv_datuv.

*--- Multi-Level BOM explosion
  
CALL FUNCTION 'CS_BOM_EXPL_MAT_V2'
    
EXPORTING
      capid                 
lc_capid
      datuv                 
lv_datuv
      delnl                 
' '
      mehrs                 
lc_x                  " x
      mtnrv                 
pi_marc-matnr
      stlal                 
pi_stlal              " 01
      stlan                 
pi_stlan              " 03
      svwvo                 
lc_x
      werks                 
pi_marc-werks
      ehndl                 
lc_x                  "'2'
      vrsvo                 
lc_x
    
TABLES
      stb                   
pt_stb
      matcat                
pt_matcat
    
EXCEPTIONS
      alt_not_found         
01
      call_invalid          
02
      material_not_found    
03
      missing_authorization 
04
      no_bom_found          
05
      no_plant_data         
06
      no_suitable_bom_found 
07.
  
IF sy-subrc NE 0.
*--- do noting
  
ENDIF.
*  DELETE pt_stb WHERE mtart NOT IN gr_mtart.


  
APPEND LINES OF pt_stb[] TO pt_final_stb[].
  
SORT pt_final_stb[] BY idnrk werks.

  
IF pt_final_matcat[] IS INITIAL.
    
APPEND LINES OF pt_matcat[] TO pt_final_matcat[].
  
ELSE.
    
LOOP AT pt_matcat[] INTO ls_matcat.
      
READ TABLE pt_final_matcat INTO ls_matcat1 WITH KEY matnr ls_matcat-matnr.
      
IF sy-subrc EQ 0.
        
APPEND ls_matcat TO pt_final_matcat.
      
ENDIF.
    
ENDLOOP.
  
ENDIF.
  
SORT  pt_final_matcat[] BY matnr prwrk.  .

ENDFORM.                    "f_get_bom_stb
*&---------------------------------------------------------------------*
*&      Form  F_GET_BOM_DP
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_PT_T460A  text
*      -->P_PT_STB  text
*      -->P_PT_MATCAT  text
*      <--P_PT_FINAL  text
*----------------------------------------------------------------------*
FORM f_get_bom_dp  USING    pi_marc   TYPE zzty_bom
                            pt_t460a  
TYPE gty_t_t460a
                            pt_stb    
TYPE roij_stpox_t
                            pt_matcat 
TYPE zzty_t_cscmat
                            pv_stlal 
TYPE stlal
                            pv_stlan 
TYPE stlan
                   
CHANGING pt_final_stb    TYPE roij_stpox_t
                           pt_final_matcat  
TYPE zzty_t_cscmat.
  
DATA:ls_stb    TYPE stpox.
  
DATA:ls_marc   TYPE zzty_bom.
  
DATA:ls_t460a  TYPE gty_t460a.

  
DATA:lt_stb    TYPE gty_t_stb,
       lt_matcat 
TYPE gty_t_matcat.

  
LOOP AT pt_stb INTO ls_stb.
    
IF ls_stb-werks <> pi_marc-werks.
      ls_marc
-matnr ls_stb-idnrk.
      ls_marc
-werks ls_stb-werks.

      
PERFORM f_bom_comp USING  ls_marc
                                pt_t460a
                                pv_stlal
                                pv_stlan
                      
CHANGING  lt_stb
                                lt_matcat
                                pt_final_stb
                                pt_final_matcat
.
    
ELSE.
      
IF ls_stb-sobsl(1EQ '4'.
        
READ TABLE pt_t460a INTO ls_t460a
        
WITH  KEY werks ls_stb-werks
                  sobsl 
ls_stb-sobsl
                  sobes 
'7'
                  
BINARY SEARCH.
        
IF sy-subrc EQ 0.
          ls_marc
-matnr ls_stb-idnrk.
          ls_marc
-werks ls_t460a-wrk02.
          
PERFORM f_bom_comp USING  ls_marc
                                    pt_t460a
                                    pv_stlal
                                    pv_stlan
                          
CHANGING  lt_stb
                                    lt_matcat
                                    pt_final_stb
                                    pt_final_matcat
.

        
ENDIF.
      
ENDIF.
    
ENDIF.
  
ENDLOOP.

ENDFORM.                    " F_GET_BOM_DP

FUNCTION-POOL zdtb_mbom_plant.              "MESSAGE-ID ..


* INCLUDE LZDTB_MBOM_PLANTD...               " Local class definition

typesBEGIN OF gty_t460a,"Type for Special procurement key
          werks   
TYPE werks_d,  "Plant
          sobsl   
TYPE sobsl,    "Special procurement type
          beskz   
TYPE besch,    "Procurement type
          sobes   
TYPE esobs,    "Special procurement - external display
          wrk02   
TYPE werks_d,  "Plant
        
END OF gty_t460a,
        gty_matcat    
TYPE cscmat,
        gty_t_t460a   
TYPE STANDARD TABLE OF gty_t460a,
        gty_t_matcat  
TYPE STANDARD TABLE OF cscmat,
        gty_t_stb     
TYPE roij_stpox_t.
DATAls_bom TYPE zzty_bom.
data:gv_stlal TYPE stlal,
      gv_stlan 
TYPE stlan.
datagt_stb TYPE gty_t_stb,
      gt_matcat 
TYPE gty_t_matcat,
      gt_t460a 
TYPE gty_t_t460a,
      gt_final_stb 
TYPE gty_t_stb,
      gt_final_matcat 
TYPE gty_t_matcat.

 

TEST CASE:



No comments:

Post a Comment