Hi all ;
I developed a abap report with MAST - MARA - MATKL - STKO - STAS - STPO tables. I did not understand relation of work center in BOM report. If you explain details for wc , someone give idea.
------------------------------------------------------------------------------------------------------------------------------------------------
*&---------------------------------------------------------------------*
*& Report ZPP_BILL_OF_MATERIAL
*&
*&---------------------------------------------------------------------*
*& M.Ozgur Unal ------ 04.11.2014
*& Ü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*
*************************
TYPES : BEGIN OF ty_mast,
matnr TYPE mast-matnr,
werks TYPE mast-werks,
stlan TYPE mast-stlan,
stlnr TYPE mast-stlnr,
stlal TYPE mast-stlal,
maktx TYPE makt-maktx,
matkl TYPE mara-matkl,
END OF ty_mast.
TYPES : BEGIN OF ty_stko,
stlnr TYPE stko-stlnr,
stlal TYPE stko-stlal,
datuv TYPE stko-datuv,
bmein TYPE stko-bmein,
bmeng TYPE stko-bmeng,
stlst TYPE stko-stlst,
END OF ty_stko.
TYPES : BEGIN OF ty_stpo,
stlnr TYPE stpo-stlnr,
stlkn TYPE stpo-stlkn,
datuv TYPE stpo-datuv,
idnrk TYPE stpo-idnrk,
meins TYPE stpo-meins,
menge TYPE stpo-menge,
aennr TYPE stpo-aennr,
andat TYPE stpo-andat,
annam TYPE stpo-annam,
aenam TYPE stpo-aenam,
posnr TYPE stpo-posnr,
maktx TYPE makt-maktx,
END OF ty_stpo.
TYPES : BEGIN OF ty_stas,
stlnr TYPE stas-stlnr,
stlal TYPE stas-stlal,
stlkn TYPE stas-stlkn,
lkenz TYPE stas-lkenz,
END OF ty_stas.
TYPES : BEGIN OF ty_final,
matnr TYPE mast-matnr,
werks TYPE mast-werks,
stlan TYPE mast-stlan,
stlnr TYPE mast-stlnr,
stlal TYPE mast-stlal,
datuv TYPE stko-datuv,
bmein TYPE stko-bmein,
bmeng TYPE stko-bmeng,
idnrk TYPE stpo-idnrk,
posnr TYPE stpo-posnr,
meins TYPE stpo-meins,
menge TYPE stpo-menge,
maktx TYPE makt-maktx,
aennr TYPE stpo-aennr,
andat TYPE stpo-andat,
annam TYPE stpo-annam,
aenam TYPE stpo-aenam,
matkl TYPE mara-matkl,
stlst TYPE stko-stlst,
lkenz TYPE stas-lkenz,
maktx2 TYPE makt-maktx,
END OF ty_final.
DATA : it_mast TYPE TABLE OF ty_mast, wa_mast LIKE LINE OF it_mast.
DATA : it_stko TYPE TABLE OF ty_stko, wa_stko LIKE LINE OF it_stko.
DATA : it_stko2 TYPE ty_stko.
DATA : it_stpo TYPE TABLE OF ty_stpo, wa_stpo LIKE LINE OF it_stpo,
it_stas TYPE TABLE OF ty_stas, wa_stas LIKE LINE OF it_stas,
gt_final TYPE TABLE OF ty_final,
gw_final TYPE ty_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 OBLIGATORY,
s_matkl FOR mara-matkl.
PARAMETERS p_werks TYPE mast-werks OBLIGATORY.
SELECTION-SCREEN END OF BLOCK blk.
*******************************
*GET DATA & INSERT TO GT_FINAL*
*******************************
PERFORM get_data.
PERFORM loop_data.
IF gt_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 NOT it_mast IS INITIAL.
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
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.
ENDIF.
IF NOT it_stko IS INITIAL.
SELECT stlnr stlkn datuv idnrk posnr meins menge
aennr andat annam aenam posnr
maktx
FROM stpo
INNER JOIN makt
ON stpo~idnrk = makt~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 gt_final.
LOOP AT it_mast INTO wa_mast.
SORT it_stpo BY idnrk.
LOOP AT it_stas INTO wa_stas WHERE stlnr = wa_mast-stlnr AND
stlal = wa_mast-stlal.
MOVE: wa_mast-matnr TO gw_final-matnr,
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_stas-lkenz TO gw_final-lkenz,
wa_mast-maktx TO gw_final-maktx2.
READ TABLE it_stko INTO wa_stko WITH KEY stlnr = wa_mast-stlnr
stlal = wa_mast-stlal.
IF sy-subrc = 0.
MOVE: wa_stko-stlnr TO gw_final-stlnr,
wa_stko-stlal TO gw_final-stlal,
wa_stko-stlst TO gw_final-stlst,
wa_stko-bmein TO gw_final-bmein,
wa_stko-bmeng TO gw_final-bmeng.
ENDIF.
READ TABLE it_stpo INTO wa_stpo WITH KEY stlkn = wa_stas-stlkn.
IF sy-subrc = 0.
MOVE: 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.
APPEND gw_final TO gt_final.
CLEAR gw_final.
ENDIF.
ENDLOOP.
ENDLOOP.
* added by ounal - 06.11.2014
* eğer silme işareti var ise ilgili tüm kodlarda update ettik
* çünkü stas tanlosunda aynı kodun hem silinmişini hem eski kaydını
* değişiklik no ile tutuyor.
SORT gt_final BY posnr lkenz DESCENDING.
FIELD-SYMBOLS: <fs_gt_final> LIKE LINE OF gt_final.
IF LINES( gt_final ) NE 0.
LOOP AT gt_final ASSIGNING <fs_gt_final>.
IF <fs_gt_final> IS ASSIGNED.
READ TABLE gt_final INTO gw_final
WITH KEY stlnr = <fs_gt_final>-stlnr
idnrk = <fs_gt_final>-idnrk
" stlkn = <fs_gt_final>-stlkn
menge = <fs_gt_final>-menge
posnr = <fs_gt_final>-posnr.
IF <fs_gt_final> IS ASSIGNED AND sy-subrc = 0.
<fs_gt_final>-lkenz = gw_final-lkenz .
ENDIF.
ENDIF.
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 = 'GT_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 = 'GT_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 = 'GT_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 = 'GT_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 = 'GT_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 = 'GT_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 = 'GT_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 = 'GT_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 = 'GT_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 = 'GT_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 = 'GT_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 = 'GT_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 = 'GT_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 = 'GT_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 = 'GT_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 = 'GT_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 = 'GT_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 = 'GT_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 = 'GT_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 = 'GT_FINAL'.
gw_fcat-seltext_m = 'Silme'.
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 = gt_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 gt_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