ABAP
sap abap seçim parametreleri ve alv grid bir arada dinamik ekran tasarımı
istersek seçim ekranından “AT SELECTIONSCREEN OUTPUT” yardımıyla “EXECUTE” butonunu kaldırabiliriz ve raporumuzun “AT SELECTIONSCREEN” 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. …
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