istersek seçim ekranından “AT SELECTION-SCREEN OUTPUT” yardımıyla “EXECUTE” butonunu kaldırabiliriz ve raporumuzun “AT SELECTION-SCREEN” yardımıyla “ENTER” tuşuna basıldığında oluşmasını sağlayabiliriz.
daha sonra rapor alv gridimizin büyüklüğünü belirleyip bir “DOCKING CONTAINER” oluşturabiliriz. istersek bu container’ı “SPLITTER CONTAINER” ile parçalara ayırabiliriz. ama ben aşağıdaki örnekte bu “DOCKING CONTAINER” içerisine tek parça halinde bir alv grid ekledim. alv gridime “TOOLBAR” ekleyip buradan basılacak herhangi bir butonu handle etmek için ise “EVENT LISTENER” oluşturdum. bazı hücrelerin bir takım koşullarda kullanıcı girişine açık olmasını sağlayabilmek için de “CELL STYLE” oluşturdum. aşağıdaki örnekte teslimattan mal girişi yani 501 mal hareketi yapan programımı görebilirsiniz.
*&---------------------------------------------------------------------* *& Report ZSD_TESLIMAT_MAL_GIRISI *& *&---------------------------------------------------------------------* *& Serkan Özcan *& *&---------------------------------------------------------------------* REPORT zsd_teslimat_mal_girisi. CLASS lcl_events_d0001 DEFINITION DEFERRED. DATA: gt_exclude TYPE TABLE OF syucomm, oref_dock TYPE REF TO cl_gui_docking_container, oref_alv1 TYPE REF TO cl_gui_alv_grid, gs_toolbar1 TYPE stb_button, event_receiver1 TYPE REF TO lcl_events_d0001, gs_layout1 TYPE lvc_s_layo, gt_cellstyle TYPE lvc_t_styl, gs_cellstyle TYPE lvc_s_styl. DATA: gt_teslimat TYPE STANDARD TABLE OF zsd_s_teslimat INITIAL SIZE 0, gs_teslimat LIKE LINE OF gt_teslimat. TABLES: likp. SELECT-OPTIONS: s_vbeln FOR likp-vbeln NO-EXTENSION NO INTERVALS OBLIGATORY. AT SELECTION-SCREEN OUTPUT. PERFORM initialize_output. AT SELECTION-SCREEN. PERFORM get_data. *----------------------------------------------------------------------* * CLASS lcl_events_d0001 DEFINITION *----------------------------------------------------------------------* * *----------------------------------------------------------------------* CLASS lcl_events_d0001 DEFINITION. PUBLIC SECTION. *---code addition for ALV pushbuttons *--for placing buttons METHODS handle_toolbar_set FOR EVENT toolbar OF cl_gui_alv_grid IMPORTING e_object e_interactive. *---user command on clicking a button METHODS handle_user_command FOR EVENT user_command OF cl_gui_alv_grid IMPORTING e_ucomm. ENDCLASS. "lcl_events_d0001 DEFINITION *----------------------------------------------------------------------* * CLASS lcl_events_d0001 IMPLEMENTATION *----------------------------------------------------------------------* * *----------------------------------------------------------------------* CLASS lcl_events_d0001 IMPLEMENTATION. *---method for handling toolbar METHOD handle_toolbar_set. CLEAR gs_toolbar1. gs_toolbar1-function = 'MGRS'. "name of btn to catch click gs_toolbar1-butn_type = 0. gs_toolbar1-text = 'Seçilenlerin Mal Girişini Yap'. APPEND gs_toolbar1 TO e_object->mt_toolbar. ENDMETHOD. "handle_toolbar_set METHOD handle_user_command. DATA: wr_data_changed TYPE REF TO cl_alv_changed_data_protocol. DATA: lt_rows TYPE lvc_t_row, lt_index TYPE lvc_s_row-index. CASE e_ucomm. WHEN 'MGRS'. PERFORM goodsmvt_create. ENDCASE. ENDMETHOD. "handle_user_command ENDCLASS. "lcl_events_d0001 IMPLEMENTATION *&---------------------------------------------------------------------* *& Form INITIALIZE_OUTPUT *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * --> p1 text * <-- p2 text *----------------------------------------------------------------------* FORM initialize_output . APPEND 'ONLI' TO gt_exclude. APPEND 'SJOB' TO gt_exclude. APPEND 'PRIN' TO gt_exclude. CALL FUNCTION 'RS_SET_SELSCREEN_STATUS' EXPORTING p_status = sy-pfkey p_program = sy-repid TABLES p_exclude = gt_exclude. IF oref_dock IS NOT BOUND. CREATE OBJECT oref_dock EXPORTING repid = sy-repid dynnr = '1000' side = cl_gui_docking_container=>dock_at_bottom ratio = 90 EXCEPTIONS cntl_error = 1 cntl_system_error = 2 create_error = 3 lifetime_error = 4 lifetime_dynpro_dynpro_link = 5 OTHERS = 6. IF sy-subrc <> 0. MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. ENDIF. ENDIF. IF oref_alv1 IS NOT BOUND. CHECK oref_dock IS BOUND. CREATE OBJECT oref_alv1 EXPORTING i_parent = oref_dock EXCEPTIONS error_cntl_create = 1 error_cntl_init = 2 error_cntl_link = 3 error_dp_create = 4 OTHERS = 5. IF sy-subrc <> 0. MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. ENDIF. CHECK oref_alv1 IS BOUND. CALL METHOD oref_alv1->set_ready_for_input EXPORTING i_ready_for_input = 1. CREATE OBJECT event_receiver1. SET HANDLER event_receiver1->handle_toolbar_set FOR oref_alv1. SET HANDLER event_receiver1->handle_user_command FOR oref_alv1. gs_layout1-sel_mode = 'A'. "A,C,D multiple select B single select gs_layout1-stylefname = 'CELLSTYLE'. CALL METHOD oref_alv1->set_table_for_first_display EXPORTING i_structure_name = 'ZSD_S_TESLIMAT' i_save = 'A' is_layout = gs_layout1 CHANGING it_outtab = gt_teslimat EXCEPTIONS invalid_parameter_combination = 1 program_error = 2 too_many_lines = 3 OTHERS = 4. IF sy-subrc <> 0. MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. ENDIF. ENDIF. ENDFORM. " INITIALIZE_OUTPUT *&---------------------------------------------------------------------* *& Form GET_DATA *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * --> p1 text * <-- p2 text *----------------------------------------------------------------------* FORM get_data . CHECK sy-ucomm = space. REFRESH gt_teslimat. SELECT * FROM lips INTO CORRESPONDING FIELDS OF TABLE gt_teslimat WHERE vbeln IN s_vbeln. REFRESH gt_cellstyle. gs_cellstyle-fieldname = 'LFIMG'. gs_cellstyle-style = cl_gui_alv_grid=>mc_style_enabled. INSERT gs_cellstyle INTO TABLE gt_cellstyle. LOOP AT gt_teslimat INTO gs_teslimat. INSERT LINES OF gt_cellstyle INTO TABLE gs_teslimat-cellstyle. MODIFY gt_teslimat FROM gs_teslimat. ENDLOOP. CALL METHOD oref_alv1->refresh_table_display EXCEPTIONS finished = 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. IF gt_teslimat[] IS INITIAL. MESSAGE w000(zpp) WITH 'Kayıt bulunamadı'. ENDIF. ENDFORM. " GET_DATA *&---------------------------------------------------------------------* *& Form GOODSMVT_CREATE *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * --> p1 text * <-- p2 text *----------------------------------------------------------------------* FORM goodsmvt_create . DATA: lt_selected_rows TYPE lvc_t_roid, ls_selected_row TYPE lvc_s_roid. DATA: lt_mal_giris TYPE STANDARD TABLE OF zsd_s_teslimat INITIAL SIZE 0, ls_mal_giris LIKE LINE OF lt_mal_giris. DATA: lt_return LIKE bapiret2 OCCURS 0 WITH HEADER LINE, lt_messtab TYPE TABLE OF symsg WITH HEADER LINE, ls_header TYPE bapi2017_gm_head_01, lt_item TYPE TABLE OF bapi2017_gm_item_create WITH HEADER LINE, lv_code TYPE bapi2017_gm_code, lv_mblnr TYPE mblnr, lv_mjahr TYPE mjahr, lv_oran TYPE f, lv_kwmeng TYPE vbap-kwmeng, lv_vbeln TYPE vbeln, lv_posnr TYPE posnr. *--getting the selected row indexes CALL METHOD oref_alv1->get_selected_rows IMPORTING et_row_no = lt_selected_rows. LOOP AT lt_selected_rows INTO ls_selected_row. READ TABLE gt_teslimat INTO gs_teslimat INDEX ls_selected_row-row_id. IF sy-subrc EQ 0. APPEND gs_teslimat TO lt_mal_giris. ENDIF. ENDLOOP. CLEAR:lt_item[],lt_item,ls_header. ls_header-pstng_date = sy-datum. ls_header-doc_date = sy-datum. PERFORM determine_bapi_code USING '501' CHANGING lv_code. LOOP AT lt_mal_giris INTO ls_mal_giris. lt_item-material = ls_mal_giris-matnr. lt_item-entry_qnt = ls_mal_giris-lfimg. lt_item-entry_uom = ls_mal_giris-meins. lt_item-stck_type = 'F'. lt_item-val_s_ord_item = ls_mal_giris-vgpos. lt_item-val_sales_ord = ls_mal_giris-vgbel. lt_item-move_type = '501'. lt_item-spec_stock = 'E'. lt_item-plant = ls_mal_giris-werks. lt_item-stge_loc = ls_mal_giris-lgort. COLLECT lt_item. ENDLOOP. CLEAR lt_return[]. CALL FUNCTION 'BAPI_GOODSMVT_CREATE' EXPORTING goodsmvt_header = ls_header goodsmvt_code = lv_code IMPORTING materialdocument = lv_mblnr matdocumentyear = lv_mjahr TABLES goodsmvt_item = lt_item return = lt_return. IF lt_return[] IS NOT INITIAL. LOOP AT lt_return. CLEAR lt_messtab. lt_messtab-msgty = lt_return-type. lt_messtab-msgid = lt_return-id. lt_messtab-msgno = lt_return-number. lt_messtab-msgv1 = lt_return-message_v1. lt_messtab-msgv2 = lt_return-message_v2. lt_messtab-msgv3 = lt_return-message_v3. lt_messtab-msgv4 = lt_return-message_v4. APPEND lt_messtab. ENDLOOP. ELSE. CLEAR lt_messtab. lt_messtab-msgno = 'ZRF'. lt_messtab-msgid = '000'. lt_messtab-msgty = 'E'. lt_messtab-msgv1 = lv_mblnr. lt_messtab-msgv2 = lv_mjahr. lt_messtab-msgv3 = '413'. lt_messtab-msgv4 = 'Malzeme hareketi gerçekleşti'. APPEND lt_messtab. CALL FUNCTION 'BAPI_TRANSACTION_COMMIT' EXPORTING wait = 'X'. COMMIT WORK AND WAIT . ENDIF. CALL FUNCTION 'RHVM_SHOW_MESSAGE' EXPORTING mess_header = 'Mesajlar' TABLES tem_message = lt_messtab EXCEPTIONS canceled = 1 OTHERS = 2. ENDFORM. " GOODSMVT_CREATE *&---------------------------------------------------------------------* *& Form determine_bapi_code *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * -->P_BWART text * -->P_CODE text *----------------------------------------------------------------------* FORM determine_bapi_code USING p_bwart TYPE bwart CHANGING p_code TYPE bapi2017_gm_code. DATA lt_t158b TYPE TABLE OF t158b WITH HEADER LINE. CLEAR : p_code, lt_t158b. REFRESH : lt_t158b . SELECT tcode FROM t158b INTO CORRESPONDING FIELDS OF TABLE lt_t158b WHERE bwart EQ p_bwart. LOOP AT lt_t158b. SELECT SINGLE gmcode FROM t158g INTO p_code WHERE tcode EQ lt_t158b-tcode. IF sy-subrc IS INITIAL. EXIT. ENDIF. ENDLOOP. ENDFORM. "determine_bapi_code |