IT干货网

【ABAP系列】SAP BOM反查

wyy 2022年03月17日 SAP 275 0

以下为正文

TCODE::CS15

或者函数::CS_WHERE_USED_MAT 

​ 
 
tables : stpo,stas,mara,makt. 
 
data : begin of itab occurs 200, 
       matnr like mast-matnr, 
       menge like stpo-menge, 
       end of itab. 
 
data : begin of alttab occurs 200, 
       matnr like mast-matnr, 
       menge like stpo-menge, 
       end of alttab. 
 
data : begin of top_code occurs 100, 
       matnr(18), 
       maktx(40), 
       meins(3), 
       menge like stpo-menge, 
       matkl(9), 
       wrkst(14), 
       end of top_code. 
 
data : begin of makr occurs 10, 
       maker(7), 
       idnlf(22), 
       end of makr. 
 
data : begin of usedtab occurs 100. 
        include structure stpov. 
data : end of usedtab. 
 
data : begin of equicat occurs 100. 
        include structure  cscequi. 
data : end of equicat. 
 
data : begin of kndcat occurs 100. 
        include structure  cscknd. 
data : end of kndcat. 
 
data : begin of matcat occurs 100. 
        include structure  cscmat. 
data : end of matcat. 
 
data : begin of stdcat occurs 100. 
        include structure   cscstd. 
data : end of stdcat. 
 
data : begin of tplcat occurs 100. 
        include structure   csctpl. 
data : end of tplcat. 
 
data : top_cnt(5) type n, 
       m_cnt(5) type n, 
       lin(5) type n, 
       line_cnt(5) type n. 
 
selection-screen begin of block blk1 with frame. 
selection-screen : comment 1(60) text-001, 
                   skip. 
parameters : matnr like marc-matnr obligatory, 
             werks like marc-werks obligatory default 'PQ50'. 
select-options : bdate for sy-datum default sy-datum to sy-datum 
                 no-extension obligatory. 
selection-screen end of block blk1. 
 
start-of-selection. 
  itab-matnr = matnr. 
  itab-menge = 1. 
  append itab. 
  clear itab. 
 
  perform get_top_code. 
 
************************************ 
*&---------------------------------------------------------------------* 
*&      Form  GET_TOP_CODE 
*&---------------------------------------------------------------------* 
form get_top_code. 
 
  clear lin. 
  describe table itab lines lin. 
  if lin = 0. 
    exit. 
  endif. 
 
  loop at itab. 
    call function 'CS_WHERE_USED_MAT' 
         exporting 
              datub                      = bdate-high 
              datuv                      = bdate-low 
              matnr                      = itab-matnr 
              werks                      = werks 
         tables 
              wultb                      = usedtab 
              equicat                    = equicat 
              kndcat                     = kndcat 
              matcat                     = matcat 
              stdcat                     = stdcat 
              tplcat                     = tplcat 
         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. 
 
    clear line_cnt. 
    describe table usedtab lines line_cnt. 
    if line_cnt = 0.           
      move itab-matnr to top_code-matnr. 
      top_code-menge = itab-menge. 
      collect top_code. 
      clear top_code. 
    else. 
      loop at usedtab where postp ne 'F' and datuv le bdate-high 
                      and ( sumfg = ' ' or sumfg = 'x' ). 
        select single lkenz into stas-lkenz from stas 
               where stlty = 'M' 
               and   stlnr = usedtab-stlnr 
               and   stlal = '01' 
               and   stlkn = usedtab-stlkn 
               and   datuv le bdate-low 
               and   lkenz = 'X'. 
        if sy-subrc ne 0. 
          move usedtab-matnr to alttab-matnr. 
          alttab-menge = usedtab-menge * itab-menge. 
          collect alttab. 
        endif. 
        clear alttab. 
      endloop. 
    endif. 
    refresh : usedtab,equicat,kndcat,matcat,stdcat,tplcat. 
 
  endloop. 
 
  refresh itab. 
  itab[] = alttab[]. 
  refresh alttab. 
  perform get_top_code. 
 
endform.                    " GET_TOP_CODE 

评论关闭
IT干货网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!