Sorun Cevaplayalım

İşinizle ilgili öngörüler edinin, gerçek zamanlı bilgilere göre karar alın.

SAP Eğitim ve Sertifika Dönemleri

Uzmanlığınızı ve deneyiminizi SAP çözümleri kullanarak tasdik edin.

Çözüm Ekibi Başvurusu

Kullanıcılara hızlı ve pratik çözümler üreterek görev almak isteyenler.

Bom Alv Report / Change Number Solution

Övünç DİNÇ

Çözüm Ekibi
Kayıtlı Üye
Katılım
8 Eki 2016
Mesajlar
928
Tepki puanı
246
Konum
İzmir
Kullandığınız SAP Modülleri
  1. SAP MM
  2. SAP PP
Katılım Bölgesi
  1. İzmir
In this document ; Bill of material list report developed with alv concept to run all of materials which are listed by users. The most important trick is a solution of dublicate records in BOM tables so change number records.
For example : In belowed printscreen that you can see STPO table.

If you read STPO table without a restriction , you will get 2 rows for PY200005 Bom item material.

upload_2017-9-23_15-25-23.png


If you do not benefit change number functionality , you can join tables like belowed and it can be used to list BOMs.

upload_2017-9-23_15-25-55.png


But , change number functionality cause additional records in STPO and other related PP tables.
To solve this problem , you can benefit belowed alv report.

This report provides last record of changing component with change number.
Go to SE38 , add this code and list results.

Kod:
*&---------------------------------------------------------------------*
*& Report ZPP_BILL_OF_MATERIAL
*&
*&---------------------------------------------------------------------*
*& Ürün ağaçları listeleme raporudur.
*&---------------------------------------------------------------------*
REPORT ZPP_BILL_OF_MATERIAL.
TYPE-POOLS : slis.
CONSTANTS : c_tcode(4) TYPE c VALUE 'CS03'.
TABLES : mast , stko , stpo , stas , makt , mara .
*************************
* DATA TYPES DEFINITIONS*
*************************
DATA: BEGIN OF it_mast OCCURS 0 , matnr LIKE mast-matnr, werks LIKE mast-werks, stlan LIKE mast-stlan, stlnr LIKE mast-stlnr, stlal LIKE mast-stlal, maktx LIKE makt-maktx, matkl LIKE mara-matkl, END OF it_mast.
DATA : BEGIN OF it_stko OCCURS 0, stlnr LIKE stko-stlnr, stlal LIKE stko-stlal, datuv LIKE stko-datuv, bmein LIKE stko-bmein, bmeng LIKE stko-bmeng, stlst LIKE stko-stlst, END OF it_stko.
DATA : BEGIN OF it_stpo OCCURS 0, stlnr LIKE stpo-stlnr, stlkn LIKE stpo-stlkn, datuv LIKE stpo-datuv, idnrk LIKE stpo-idnrk, meins LIKE stpo-meins, menge LIKE stpo-menge, aennr LIKE stpo-aennr, andat LIKE stpo-andat, annam LIKE stpo-annam, aenam LIKE stpo-aenam, posnr LIKE stpo-posnr, maktx LIKE makt-maktx, vgknt LIKE stpo-vgknt, stvkn LIKE stpo-stvkn, stpoz LIKE stpo-stpoz, vgpzl LIKE stpo-vgpzl, matkl LIKE mara-matkl, END OF it_stpo.
DATA : BEGIN OF it_stas OCCURS 0, stlnr LIKE stas-stlnr, stlal LIKE stas-stlal, stlkn LIKE stas-stlkn, aennr LIKE stas-aennr, lkenz LIKE stas-lkenz, stvkn LIKE stas-stvkn, END OF it_stas.
DATA : BEGIN OF it_final OCCURS 0, matnr LIKE mast-matnr, werks LIKE mast-werks, stlan LIKE mast-stlan, stlnr LIKE mast-stlnr, stlal LIKE mast-stlal, datuv LIKE stko-datuv, bmein LIKE stko-bmein, bmeng LIKE stko-bmeng, idnrk LIKE stpo-idnrk, posnr LIKE stpo-posnr, meins LIKE stpo-meins, menge LIKE stpo-menge, maktx LIKE makt-maktx, aennr LIKE stpo-aennr, andat LIKE stpo-andat, annam LIKE stpo-annam, aenam LIKE stpo-aenam, matkl LIKE mara-matkl, stlst LIKE stko-stlst, lkenz LIKE stas-lkenz, maktx2 LIKE makt-maktx, stvkn LIKE stas-stvkn, vgknt LIKE stpo-vgknt, stlkn LIKE stpo-stlkn, stvkn2 LIKE stpo-stvkn, stpoz LIKE stpo-stpoz, vgpzl LIKE stpo-vgpzl, matkl2 LIKE mara-matkl, END OF it_final.
DATA : wa_mast LIKE LINE OF it_mast.
DATA : wa_stko LIKE LINE OF it_stko.
DATA : wa_stpo LIKE LINE OF it_stpo, wa_stas LIKE LINE OF it_stas, gw_final LIKE LINE OF it_final, gw_final2 LIKE LINE OF it_final, gt_fcat TYPE slis_t_fieldcat_alv, gw_fcat TYPE slis_fieldcat_alv.
******************
*SELECTION SCREEN*
******************
SELECTION-SCREEN BEGIN OF BLOCK blk WITH FRAME TITLE text-001.
SELECT-OPTIONS: s_matnr FOR mast-matnr, s_matkl FOR mara-matkl.
PARAMETERS p_werks TYPE mast-werks OBLIGATORY DEFAULT 1006.
SELECTION-SCREEN END OF BLOCK blk.
*******************************
*GET DATA & INSERT TO GT_FINAL*
*******************************
PERFORM get_data.
PERFORM loop_data.
IF it_final[] IS NOT INITIAL. PERFORM f_fill_fcat . PERFORM f_display_alv .
ELSE . MESSAGE 'Veri bulunamadı' TYPE 'I'.
ENDIF.
PERFORM plant_validation.
*&---------------------------------------------------------------------*
*& Form FETCH_DATA_RETREIVE
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM get_data . " break ounal. SELECT mast~matnr mast~werks mast~stlan mast~stlnr mast~stlal makt~maktx mara~matkl INTO CORRESPONDING FIELDS OF TABLE it_mast FROM mast INNER JOIN makt ON mast~matnr = makt~matnr INNER JOIN mara ON makt~matnr = mara~matnr WHERE mast~matnr IN s_matnr AND mast~werks = p_werks AND mast~stlan = '1' AND mara~matkl IN s_matkl. IF LINES( it_mast ) GT 0. SELECT stlnr stlal datuv bmein bmeng aennr andat annam aenam stlst FROM stko INTO CORRESPONDING FIELDS OF TABLE it_stko FOR ALL ENTRIES IN it_mast WHERE stlnr = it_mast-stlnr AND stlal = it_mast-stlal. SORT it_stko BY datuv DESCENDING. SELECT stlnr stlal stlkn lkenz aennr stvkn FROM stas INTO CORRESPONDING FIELDS OF TABLE it_stas FOR ALL ENTRIES IN it_mast WHERE stlnr = it_mast-stlnr AND stlal = it_mast-stlal. SORT it_stas BY lkenz DESCENDING. ENDIF.
*Üretim tarafından bileşenlerin mal grubu eklenmesi talebi ile
*revize edildi.
IF LINES( it_stko ) GT 0. SELECT stpo~stlnr stpo~stlkn stpo~datuv stpo~idnrk stpo~posnr stpo~meins stpo~menge stpo~aennr stpo~andat stpo~annam stpo~aenam stpo~posnr makt~maktx stpo~vgknt stpo~stvkn stpo~stpoz stpo~vgpzl mara~matkl FROM stpo INNER JOIN makt ON stpo~idnrk = makt~matnr INNER JOIN mara ON makt~matnr = mara~matnr INTO CORRESPONDING FIELDS OF TABLE it_stpo FOR ALL ENTRIES IN it_mast WHERE stlnr = it_mast-stlnr. ENDIF.
ENDFORM. " FETCH_DATA_RETREIVE
*&---------------------------------------------------------------------*
*& Form LOOP_DATA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM loop_data . REFRESH it_final. LOOP AT it_mast INTO wa_mast. LOOP AT it_stpo INTO wa_stpo WHERE stlnr = wa_mast-stlnr. IF sy-subrc = 0. MOVE: wa_mast-matnr TO gw_final-matnr, wa_mast-stlnr TO gw_final-stlnr, wa_mast-werks TO gw_final-werks, wa_mast-stlal TO gw_final-stlal, wa_mast-stlan TO gw_final-stlan, wa_mast-matkl TO gw_final-matkl, wa_mast-maktx TO gw_final-maktx2, wa_stpo-matkl TO gw_final-matkl2, wa_stpo-idnrk TO gw_final-idnrk, wa_stpo-menge TO gw_final-menge, wa_stpo-aennr TO gw_final-aennr, wa_stpo-andat TO gw_final-andat, wa_stpo-annam TO gw_final-annam, wa_stpo-aenam TO gw_final-aenam, wa_stpo-posnr TO gw_final-posnr, wa_stpo-meins TO gw_final-meins, wa_stpo-maktx TO gw_final-maktx, wa_stpo-datuv TO gw_final-datuv, wa_stpo-stlkn TO gw_final-stlkn, wa_stpo-vgknt TO gw_final-vgknt, wa_stpo-stvkn TO gw_final-stvkn2, wa_stpo-stpoz TO gw_final-stpoz, wa_stpo-vgpzl TO gw_final-vgpzl. READ TABLE it_stko INTO wa_stko WITH KEY stlnr = wa_mast-stlnr stlal = wa_mast-stlal. IF sy-subrc = 0. MOVE: wa_stko-stlst TO gw_final-stlst, wa_stko-bmein TO gw_final-bmein, wa_stko-bmeng TO gw_final-bmeng. ENDIF. ENDIF. READ TABLE it_stas INTO wa_stas WITH KEY stlnr = wa_stpo-stlnr " stlkn = wa_stpo-stlkn stvkn = wa_stpo-stvkn. MOVE: wa_stas-stvkn TO gw_final-stvkn, wa_stas-lkenz TO gw_final-lkenz. APPEND gw_final TO it_final. CLEAR gw_final. ENDLOOP. ENDLOOP.
*add by ounal.
*Silinip yerine değişiklik no ile atama yapılan kalemlerin ürün
*ağaçlarında standart dışında eski düğüm ve eski sayaç no yu
*kullanarak atama yapıyoruz.
FIELD-SYMBOLS: <fs_it_final> LIKE LINE OF it_final, <fs_it_final2> LIKE LINE OF it_final. SORT it_final BY stlnr stlkn ASCENDING. IF LINES( it_final ) NE 0. LOOP AT it_final ASSIGNING <fs_it_final>. LOOP AT it_final ASSIGNING <fs_it_final2>. IF <fs_it_final> IS ASSIGNED. IF <fs_it_final2> IS ASSIGNED. IF <fs_it_final>-stlnr = <fs_it_final2>-stlnr AND <fs_it_final>-stlkn = <fs_it_final2>-vgknt AND <fs_it_final>-stpoz = <fs_it_final2>-vgpzl. <fs_it_final>-idnrk = <fs_it_final2>-idnrk. <fs_it_final>-menge = <fs_it_final2>-menge. <fs_it_final>-aennr = <fs_it_final2>-aennr. <fs_it_final>-matkl2 = <fs_it_final2>-matkl2. <fs_it_final>-lkenz = ''. ENDIF. ENDIF. ENDIF. ENDLOOP. ENDLOOP. ENDIF.
ENDFORM. " LOOP_DATA
*&---------------------------------------------------------------------*
*& Form f_fill_fcat
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM f_fill_fcat . gw_fcat-col_pos = 1. gw_fcat-fieldname = 'WERKS'. gw_fcat-tabname = 'IT_FINAL'. gw_fcat-seltext_m = 'Üretim yeri'. APPEND gw_fcat TO gt_fcat. CLEAR gw_fcat. gw_fcat-col_pos = 2. gw_fcat-fieldname = 'STLNR'. gw_fcat-tabname = 'IT_FINAL'. gw_fcat-seltext_m = 'Ürün ağacı no.'. APPEND gw_fcat TO gt_fcat. CLEAR gw_fcat. gw_fcat-col_pos = 3. gw_fcat-fieldname = 'STLAL'. gw_fcat-tabname = 'IT_FINAL'. gw_fcat-seltext_m = 'Alternatif bom'.
* gw_fcat-do_sum = 'X'. APPEND gw_fcat TO gt_fcat. CLEAR gw_fcat. gw_fcat-col_pos = 4. gw_fcat-fieldname = 'MATNR'. gw_fcat-tabname = 'IT_FINAL'. gw_fcat-seltext_m = 'Malzeme No.'. APPEND gw_fcat TO gt_fcat. CLEAR gw_fcat. gw_fcat-col_pos = 5. gw_fcat-fieldname = 'MAKTX2'. gw_fcat-tabname = 'IT_FINAL'. gw_fcat-seltext_m = 'Kısa metin'. APPEND gw_fcat TO gt_fcat. CLEAR gw_fcat. gw_fcat-col_pos = 6. gw_fcat-fieldname = 'IDNRK'. gw_fcat-tabname = 'IT_FINAL'. gw_fcat-seltext_m = 'Bileşen'. gw_fcat-outputlen = 10.
* gw_fcat-emphasize = 'X'.
* gw_fcat-key = 'X'. APPEND gw_fcat TO gt_fcat. CLEAR gw_fcat. gw_fcat-col_pos = 7. gw_fcat-fieldname = 'POSNR'. gw_fcat-tabname = 'IT_FINAL'. gw_fcat-seltext_m = 'Kalem no'. APPEND gw_fcat TO gt_fcat. CLEAR gw_fcat. gw_fcat-col_pos = 8. gw_fcat-fieldname = 'BMENG'. gw_fcat-tabname = 'IT_FINAL'. gw_fcat-seltext_m = 'Temel miktar'. APPEND gw_fcat TO gt_fcat. CLEAR gw_fcat. gw_fcat-col_pos = 9. gw_fcat-fieldname = 'MENGE'. gw_fcat-tabname = 'IT_FINAL'. gw_fcat-seltext_m = 'Bileşen miktarı'. APPEND gw_fcat TO gt_fcat. CLEAR gw_fcat. gw_fcat-col_pos = 10. gw_fcat-fieldname = 'AENAM'. gw_fcat-tabname = 'IT_FINAL'. gw_fcat-seltext_m = 'Değiştiren'. APPEND gw_fcat TO gt_fcat. CLEAR gw_fcat. gw_fcat-col_pos = 11. gw_fcat-fieldname = 'MATKL'. gw_fcat-tabname = 'IT_FINAL'. gw_fcat-seltext_m = 'Mal grubu'. APPEND gw_fcat TO gt_fcat. CLEAR gw_fcat. gw_fcat-col_pos = 12. gw_fcat-fieldname = 'AENNR'. gw_fcat-tabname = 'IT_FINAL'. gw_fcat-seltext_m = 'Değişiklik no'. APPEND gw_fcat TO gt_fcat. CLEAR gw_fcat. gw_fcat-col_pos = 13. gw_fcat-fieldname = 'ANDAT'. gw_fcat-tabname = 'IT_FINAL'. gw_fcat-seltext_m = 'Kayıt tarihi'. APPEND gw_fcat TO gt_fcat. CLEAR gw_fcat. gw_fcat-col_pos = 14. gw_fcat-fieldname = 'ANNAM'. gw_fcat-tabname = 'IT_FINAL'. gw_fcat-seltext_m = 'Kaydeden'. APPEND gw_fcat TO gt_fcat. CLEAR gw_fcat. gw_fcat-col_pos = 15. gw_fcat-fieldname = 'DATUV'. gw_fcat-tabname = 'IT_FINAL'. gw_fcat-seltext_m = 'Geçerlilik başı'. APPEND gw_fcat TO gt_fcat. CLEAR gw_fcat. gw_fcat-col_pos = 16. gw_fcat-fieldname = 'STLST'. gw_fcat-tabname = 'IT_FINAL'. gw_fcat-seltext_m = 'Statü'. APPEND gw_fcat TO gt_fcat. CLEAR gw_fcat. gw_fcat-col_pos = 17. gw_fcat-fieldname = 'BMEIN'. gw_fcat-tabname = 'IT_FINAL'. gw_fcat-seltext_m = 'Temel ölçü'. APPEND gw_fcat TO gt_fcat. CLEAR gw_fcat. gw_fcat-col_pos = 18. gw_fcat-fieldname = 'MEINS'. gw_fcat-tabname = 'IT_FINAL'. gw_fcat-seltext_m = 'Bileşen ölçü'. APPEND gw_fcat TO gt_fcat. CLEAR gw_fcat. gw_fcat-col_pos = 19. gw_fcat-fieldname = 'MAKTX'. gw_fcat-tabname = 'IT_FINAL'. gw_fcat-seltext_m = 'Bileşen metni'. APPEND gw_fcat TO gt_fcat. CLEAR gw_fcat. gw_fcat-col_pos = 20. gw_fcat-fieldname = 'LKENZ'. gw_fcat-tabname = 'IT_FINAL'. gw_fcat-seltext_m = 'Silme'. APPEND gw_fcat TO gt_fcat. CLEAR gw_fcat. gw_fcat-col_pos = 21. gw_fcat-fieldname = 'STVKN'. gw_fcat-tabname = 'IT_FINAL'. gw_fcat-seltext_m = 'Düğüm as'. APPEND gw_fcat TO gt_fcat. CLEAR gw_fcat. gw_fcat-col_pos = 22. gw_fcat-fieldname = 'VGKNT'. gw_fcat-tabname = 'IT_FINAL'. gw_fcat-seltext_m = 'Önceki düğüm'. APPEND gw_fcat TO gt_fcat. CLEAR gw_fcat. gw_fcat-col_pos = 23. gw_fcat-fieldname = 'STVKN2'. gw_fcat-tabname = 'IT_FINAL'. gw_fcat-seltext_m = 'Düğüm po'. APPEND gw_fcat TO gt_fcat. CLEAR gw_fcat. gw_fcat-col_pos = 24. gw_fcat-fieldname = 'STLKN'. gw_fcat-tabname = 'IT_FINAL'. gw_fcat-seltext_m = 'Düğüm'. APPEND gw_fcat TO gt_fcat. CLEAR gw_fcat. gw_fcat-col_pos = 25. gw_fcat-fieldname = 'STPOZ'. gw_fcat-tabname = 'IT_FINAL'. gw_fcat-seltext_m = 'Dahili sayaç'. APPEND gw_fcat TO gt_fcat. CLEAR gw_fcat. gw_fcat-col_pos = 26. gw_fcat-fieldname = 'VGPZL'. gw_fcat-tabname = 'IT_FINAL'. gw_fcat-seltext_m = 'Eski sayaç'. APPEND gw_fcat TO gt_fcat. CLEAR gw_fcat. gw_fcat-col_pos = 27. gw_fcat-fieldname = 'MATKL2'. gw_fcat-tabname = 'IT_FINAL'. gw_fcat-seltext_m = 'Bileşen mal grubu'. APPEND gw_fcat TO gt_fcat. CLEAR gw_fcat.
ENDFORM. "f_fill_fcat
*&---------------------------------------------------------------------*
*& Form f_display_alv
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM f_display_alv . DATA:lv_repid TYPE sy-repid. lv_repid = sy-cprog. DATA: w_layout TYPE slis_layout_alv. w_layout-colwidth_optimize = 'X'. w_layout-zebra = 'X'. CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY' EXPORTING i_callback_program = sy-cprog is_layout = w_layout i_callback_user_command = 'USER_COMMAND' it_fieldcat = gt_fcat[] i_default = 'X' i_save = 'A' TABLES t_outtab = it_final EXCEPTIONS program_error = 1 OTHERS = 2. IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4. ENDIF.
ENDFORM. "f_display_alv
*&---------------------------------------------------------------------*
*& Form PLANT_VALIDATION
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM plant_validation . DATA : lv_plant TYPE mast-werks. SELECT SINGLE werks FROM mast INTO lv_plant WHERE werks = p_werks. IF sy-subrc NE 0. MESSAGE 'Üretim yerini kontrol ediniz' TYPE 'I'. RETURN. ENDIF.
ENDFORM. "PLANT_VALIDATION
*&---------------------------------------------------------------------*
*& Form user_command
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->R_UCOMM text
* -->RS_SELFIELD text
*----------------------------------------------------------------------*
FORM user_command USING r_ucomm LIKE sy-ucomm rs_selfield TYPE
slis_selfield. IF r_ucomm = '&IC1'. READ TABLE it_final INTO gw_final INDEX rs_selfield-tabindex. rs_selfield-value = gw_final-matnr. SET PARAMETER ID 'MAT' FIELD rs_selfield-value. CALL TRANSACTION 'CS03' AND SKIP FIRST SCREEN. ENDIF.
ENDFORM. "user_command

Finally , you can get this list.

upload_2017-9-23_15-29-51.png
 
Üst