Abap kullanıcı işlemleri için örnek bir senaryo üzerinden demo program yaparak daha önceki yazılarımda bulunan bilgilerden karma bir sonuç elde etmeye çalıştım.
Senaryo şudur ki; malzeme listesinin ve bilgilerinin yer aldığı MARA – MARD – MAKT tablolarını kullanarak ekranda listeleyeceğimiz malzeme listesinden seçilen bir malzemeye ait olan detaylı bilgileri ayrı bir ekranda alv grid üzerinden gösterme işlemini sağlıyor olacağız.
Kullanıcıdan alacağımız 2 adet parametreye göre yukarıda belirttiğim tablolarda yer alan bilgileri eşleştirerek öncelikle dönen malzemeleri ekrana liste şeklinde yazdıracağız. Daha sonra bu listeden istediğimiz bir malzemeye tıklayarak o malzemeye ait bazı detay bilgilerini alv grid üzerinde ekrana yansıtacağız.
Programlamaya başlarken ilk olarak yapmamız gereken ihtiyacımız olan internal tablolar ve gerekli değişken tiplerinin belirlenmesi.
TYPES : BEGIN OF STR_MARA, MATNR LIKE MARA-MATNR, ERSDA LIKE MARA-ERSDA, ERNAM LIKE MARA-ERNAM, LAEDA LIKE MARA-LAEDA, MTART LIKE MARA-MTART, MATKL LIKE MARA-MATKL, MEINS LIKE MARA-MEINS, END OF STR_MARA. DATA : WA_MARA TYPE STR_MARA, IT_MARA TYPE TABLE OF STR_MARA. TYPES : BEGIN OF IT_TY_FINAL, MATNR LIKE MARA-MATNR, ERSDA LIKE MARA-ERSDA, ERNAM LIKE MARA-ERNAM, LAEDA LIKE MARA-LAEDA, MTART LIKE MARA-MTART, MATKL LIKE MARA-MATKL, MEINS LIKE MARA-MEINS, LGORT LIKE MARD-LGORT, WERKS LIKE MARD-WERKS, END OF IT_TY_FINAL. DATA : IT_FINAL TYPE TABLE OF IT_TY_FINAL. DATA: WA_FINAL TYPE IT_TY_FINAL. DATA: FIELDCATALOG TYPE SLIS_T_FIELDCAT_ALV WITH HEADER LINE, GD_TAB_GROUP TYPE SLIS_T_SP_GROUP_ALV, GD_LAYOUT TYPE SLIS_LAYOUT_ALV. PARAMETERS : PLANT TYPE MARD-WERKS, STOR LIKE MARD-LGORT. INITIALIZATION. START-OF-SELECTION. PERFORM APPEND_IT_FINAL. IF IT_FINAL IS NOT INITIAL. PERFORM BUILD_FIELD_CATALOG. PERFORM BUILD_LAYOUT. PERFORM DISPLAY_ALV_REPORT. ENDIF.
Tanımlamaları yaptıktan sonra select ile sorgularımızı yapıp belirlenen kriterlere göre tablolardan verileri çekerek internal tablolara doldurabiliriz.
MARA-MAKT-MARD tabloları arasında MATNR key alanı ile yapacağımız select join işlemi ile IT_MARA tablosunu dolduruyoruz. IT_MARA tablosundaki eşlenik alanları daha sonrasında ekrana yansıtacağımız IT_FINAL tablosuna eşitleyerek alv raporumuzu ekrana yansıtıyoruz. PERFORM append_it_final işlemi içerisinde listeden seçtiğimiz malzemenin matnr değerine sahip olan malzemenin it_mara tablosundaki detay verilerini it_final tablosuna yazdırıyoruz.
FORM DISPLAY_ALV_REPORT . CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY' EXPORTING I_CALLBACK_PROGRAM = SY-REPID IS_LAYOUT = GD_LAYOUT I_CALLBACK_PF_STATUS_SET = 'SET_PF_STATUS' IT_FIELDCAT = FIELDCATALOG[] I_CALLBACK_USER_COMMAND = 'USER_COMMAND' I_SAVE = 'X' TABLES T_OUTTAB = IT_FINAL EXCEPTIONS PROGRAM_ERROR = 1 OTHERS = 2. IF SY-SUBRC <> 0. ENDIF. ENDFORM. FORM BUILD_LAYOUT. GD_LAYOUT-ZEBRA = 'X'. GD_LAYOUT-NO_INPUT = 'X'. GD_LAYOUT-COLWIDTH_OPTIMIZE = 'X'. GD_LAYOUT-TOTALS_TEXT = 'Totals'(201). ENDFORM. " BUILD_LAYOUT FORM BUILD_FIELD_CATALOG . FIELDCATALOG-FIELDNAME = 'MATNR'. FIELDCATALOG-SELTEXT_M = 'Malzeme No'. APPEND FIELDCATALOG TO FIELDCATALOG. CLEAR FIELDCATALOG. FIELDCATALOG-FIELDNAME = 'ERSDA'. FIELDCATALOG-SELTEXT_M = 'Yaratma Tarihi'. APPEND FIELDCATALOG TO FIELDCATALOG. CLEAR FIELDCATALOG. FIELDCATALOG-FIELDNAME = 'ERNAM'. FIELDCATALOG-SELTEXT_M = 'Yaratan Kişi'. APPEND FIELDCATALOG TO FIELDCATALOG. CLEAR FIELDCATALOG. FIELDCATALOG-FIELDNAME = 'LAEDA'. FIELDCATALOG-SELTEXT_M = 'Son Değişiklik'. APPEND FIELDCATALOG TO FIELDCATALOG. CLEAR FIELDCATALOG. FIELDCATALOG-FIELDNAME = 'MTART'. FIELDCATALOG-SELTEXT_M = 'Malzeme Türü'. APPEND FIELDCATALOG TO FIELDCATALOG. CLEAR FIELDCATALOG. FIELDCATALOG-FIELDNAME = 'MATKL'. FIELDCATALOG-SELTEXT_M = 'Mal Grubu'. APPEND FIELDCATALOG TO FIELDCATALOG. CLEAR FIELDCATALOG. FIELDCATALOG-FIELDNAME = 'LGORT'. FIELDCATALOG-SELTEXT_M = 'Depo Yeri'. APPEND FIELDCATALOG TO FIELDCATALOG. CLEAR FIELDCATALOG. FIELDCATALOG-FIELDNAME = 'WERKS'. FIELDCATALOG-SELTEXT_M = 'Üretim Yeri'. APPEND FIELDCATALOG TO FIELDCATALOG. CLEAR FIELDCATALOG. ENDFORM. " BUILD_FIELD_CATALOG *&---------------------------------------------------------------------* FORM APPEND_IT_FINAL . SELECT MARA~MATNR INTO CORRESPONDING FIELDS OF TABLE IT_MARA FROM MARA INNER JOIN MAKT ON ( MARA~MATNR = MAKT~MATNR ) INNER JOIN MARD ON ( MAKT~MATNR = MARD~MATNR ) WHERE MARD~LGORT = STOR AND MARD~WERKS = PLANT . LOOP AT IT_MARA INTO WA_MARA. WA_FINAL-MATNR = WA_MARA-MATNR. WA_FINAL-ERSDA = WA_MARA-ERSDA. WA_FINAL-ERNAM = WA_MARA-ERNAM. WA_FINAL-LAEDA = WA_MARA-LAEDA. WA_FINAL-MTART = WA_MARA-MTART. WA_FINAL-MATKL = WA_MARA-MATKL. WA_FINAL-LGORT = STOR. WA_FINAL-WERKS = PLANT. APPEND WA_FINAL TO IT_FINAL. ENDLOOP. ENDFORM. " APPEND_IT_FINAL *&---------------------------------------------------------------------* MODULE STATUS_9001 OUTPUT. SET PF-STATUS 'STANDARTD'. ENDMODULE. MODULE USER_COMMAND_9001 INPUT. IF SY-UCOMM = 'BACK'. LEAVE PROGRAM. ELSEIF SY-UCOMM = 'OUT'. LEAVE PROGRAM. ENDIF. ENDMODULE.
Sonuç olarak işlemleri tamamladığımızda ekran görüntüleri aşağıdaki şekilde olacaktır.