sap alv example - РУЧНАЯ РАБОТА
https://www.youtube.com/watch?v=jYopvudn8wY&list=PL-9XBzq-UEp4OBpdluj4NIoDqurXErLmk&index=63
*&---------------------------------------------------------------------*
*& Report ZUPDATE_ALV*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT zupdate_alv.
TYPE-POOLS: vimty.
TYPES:
BEGIN OF ty_mod,
row TYPE i,
END OF ty_mod.
DATA:
g_container TYPE scrfname VALUE 'CUSTOM_CONTAINER',
grid1 TYPE REF TO cl_gui_alv_grid,
g_custom_container TYPE REF TO cl_gui_custom_container.
DATA:
i_table TYPE REF TO data,
wa_all TYPE REF TO data.
DATA:
org_crit_inst TYPE vimty_oc_type,
old_rc LIKE sy-subrc,
act_level LIKE authb-actvt,
only_show_allowed TYPE c,
i_exclude TYPE ui_functions.
DATA:
i_mod TYPE STANDARD TABLE OF ty_mod,
i_del TYPE STANDARD TABLE OF ty_mod.
FIELD-SYMBOLS:
<i_itab> TYPE table,
<wa_tab> TYPE any.
DATA: BEGIN OF header OCCURS 1.
INCLUDE STRUCTURE vimdesc.
DATA: END OF header.
DATA: BEGIN OF namtab OCCURS 50.
INCLUDE STRUCTURE vimnamtab.
DATA: END OF namtab.
DATA: vim_wheretab LIKE vimwheretb OCCURS 10.
DATA: dba_sellist LIKE vimsellist OCCURS 10.
"selection screen
SELECTION-SCREEN BEGIN OF BLOCK bb WITH FRAME TITLE TEXT-100.
PARAMETERS: viewname TYPE tvdir-tabname.
SELECTION-SCREEN SKIP 2.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN PUSHBUTTON 20(10) TEXT-101 USER-COMMAND b1. "display
SELECTION-SCREEN PUSHBUTTON 36(10) TEXT-102 USER-COMMAND b2. "change /modif
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN END OF BLOCK bb.
AT SELECTION-SCREEN.
CASE sy-ucomm.
WHEN 'B1'.
SET PF-STATUS 'ALV'.
CALL SCREEN 9001.
WHEN 'B2'.
SET PF-STATUS 'ALV1'.
CALL SCREEN 9001.
WHEN OTHERS.
ENDCASE.
CLASS lcl_event_handler DEFINITION.
PUBLIC SECTION.
METHODS: handle_data_changed
FOR EVENT data_changed OF cl_gui_alv_grid
IMPORTING er_data_changed.
ENDCLASS.
CLASS lcl_event_handler IMPLEMENTATION.
METHOD handle_data_changed.
PERFORM handle_data_changed USING er_data_changed.
ENDMETHOD.
ENDCLASS.
*&---------------------------------------------------------------------*
*& Form HANDLE_DATA_CHANGED
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> ER_DATA_CHANGED
*&---------------------------------------------------------------------*
FORM handle_data_changed USING p_er_data_changed.
ENDFORM.
INCLUDE zupdate_alv_status_9001o01.
INCLUDE zupdate_alv_user_comand_9001.
*&---------------------------------------------------------------------*
*& Form EXCLUDE_TB_FUNCTIONS
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& <-- I_EXCLUDE
*&---------------------------------------------------------------------*
FORM exclude_tb_functions CHANGING p_i_exclude.
ENDFORM.
"""""""""""""""""""""""""""""""""""""""""""""""""""""
"""""""""""""""""""""""""""""""""""""""""""""""""""""
*----------------------------------------------------------------------*
***INCLUDE ZUPDATE_ALV_STATUS_9001O01.
*----------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*& Module STATUS_9001 OUTPUT
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
MODULE status_9001 OUTPUT.
* SET PF-STATUS 'xxxxxxxx'.
* SET TITLEBAR 'xxx'.
DATA:
gr_event_handler TYPE REF TO lcl_event_handler.
DATA:
lh_norec TYPE i,
lh_total(5) TYPE c,
lh_succ(40) TYPE c,
lwa_del TYPE ty_mod,
lwa_mod TYPE ty_mod,
lh_totdel TYPE i,
lh_flag TYPE c,
li_fieldcat TYPE lvc_t_fcat,
lwa_fieldcat TYPE lvc_s_fcat.
* create instance for event handler
CREATE OBJECT gr_event_handler.
TRY.
CREATE DATA i_table TYPE TABLE OF (viewname).
ASSIGN i_table->* TO <i_itab>.
CREATE DATA wa_all LIKE LINE OF <i_itab>.
ASSIGN wa_all->* TO <wa_tab>.
"select data dinamically
SELECT * FROM (viewname) INTO TABLE <i_itab>.
"build the fieldcatalog
CALL FUNCTION 'LVC_FIELDCATALOG_MERGE'
EXPORTING
i_structure_name = viewname
CHANGING
ct_fieldcat = li_fieldcat
EXCEPTIONS
inconsistent_interface = 1
program_error = 2
OTHERS = 3.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv3 sy-msgv4 sy-msgv2.
ENDIF.
* "Making the field editable except for the key fields
* IF sy-subrc = 'UPD' OR sy-ucomm EQ 'CHANGE' .
* LOOP AT li_fieldcat INTO lwa_fieldcat .
* IF lwa_fieldcat-key EQ space.
* lwa_fieldcat-edit = 'X'.
* MODIFY li_fieldcat FROM lwa_fieldcat.
* ENDIF.
* ENDLOOP.
* ENDIF.
"making fields editable
IF sy-ucomm EQ 'NEW'.
LOOP AT li_fieldcat INTO lwa_fieldcat.
lwa_fieldcat-edit = 'X'.
MODIFY li_fieldcat FROM lwa_fieldcat.
ENDLOOP.
lh_flag = 'X'.
clear : <i_itab>.
do 100 times.
append <wa_tab> to <i_itab>.
enddo.
ENDIF.
"exclude buttons
perform exclude_tb_functions changing i_exclude.
IF g_custom_container is initial.
create OBJECT g_custom_container
EXPORTING
container_name = g_container.
CREATE OBJECT grid1
EXPORTING
i_parent = g_custom_container.
ENDIF.
"making all fields non editable
IF sy-ucomm eq 'SHOW'.
LOOP AT li_fieldcat into lwa_fieldcat.
lwa_fieldcat-edit = ' '.
modify li_fieldcat from lwa_fieldcat.
ENDLOOP.
ENDIF.
IF sy-ucomm eq 'SAVE'..
LOOP AT li_fieldcat into lwa_fieldcat.
IF lwa_fieldcat-key = space.
lwa_fieldcat-edit = space.
MODIFY li_fieldcat from lwa_fieldcat.
ENDIF.
ENDLOOP.
ENDIF.
"displaying the alv grid
CALL METHOD grid1->set_table_for_first_display
EXPORTING
i_structure_name = viewname
it_toolbar_excluding = i_exclude
CHANGING
it_outtab = <i_itab>
it_fieldcatalog = li_fieldcat.
IF sy-subrc <> 0.
exit.
ENDIF.
"getting changed data
set HANDLER gr_event_handler->handle_data_changed for grid1.
CATCH cx_sy_create_data_error.
ENDTRY.
ENDMODULE.
***INCLUDE ZUPDATE_ALV_STATUS_9001O01.
*----------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*& Module STATUS_9001 OUTPUT
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
MODULE status_9001 OUTPUT.
* SET PF-STATUS 'xxxxxxxx'.
* SET TITLEBAR 'xxx'.
DATA:
gr_event_handler TYPE REF TO lcl_event_handler.
DATA:
lh_norec TYPE i,
lh_total(5) TYPE c,
lh_succ(40) TYPE c,
lwa_del TYPE ty_mod,
lwa_mod TYPE ty_mod,
lh_totdel TYPE i,
lh_flag TYPE c,
li_fieldcat TYPE lvc_t_fcat,
lwa_fieldcat TYPE lvc_s_fcat.
* create instance for event handler
CREATE OBJECT gr_event_handler.
TRY.
CREATE DATA i_table TYPE TABLE OF (viewname).
ASSIGN i_table->* TO <i_itab>.
CREATE DATA wa_all LIKE LINE OF <i_itab>.
ASSIGN wa_all->* TO <wa_tab>.
"select data dinamically
SELECT * FROM (viewname) INTO TABLE <i_itab>.
"build the fieldcatalog
CALL FUNCTION 'LVC_FIELDCATALOG_MERGE'
EXPORTING
i_structure_name = viewname
CHANGING
ct_fieldcat = li_fieldcat
EXCEPTIONS
inconsistent_interface = 1
program_error = 2
OTHERS = 3.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv3 sy-msgv4 sy-msgv2.
ENDIF.
* "Making the field editable except for the key fields
* IF sy-subrc = 'UPD' OR sy-ucomm EQ 'CHANGE' .
* LOOP AT li_fieldcat INTO lwa_fieldcat .
* IF lwa_fieldcat-key EQ space.
* lwa_fieldcat-edit = 'X'.
* MODIFY li_fieldcat FROM lwa_fieldcat.
* ENDIF.
* ENDLOOP.
* ENDIF.
"making fields editable
IF sy-ucomm EQ 'NEW'.
LOOP AT li_fieldcat INTO lwa_fieldcat.
lwa_fieldcat-edit = 'X'.
MODIFY li_fieldcat FROM lwa_fieldcat.
ENDLOOP.
lh_flag = 'X'.
clear : <i_itab>.
do 100 times.
append <wa_tab> to <i_itab>.
enddo.
ENDIF.
"exclude buttons
perform exclude_tb_functions changing i_exclude.
IF g_custom_container is initial.
create OBJECT g_custom_container
EXPORTING
container_name = g_container.
CREATE OBJECT grid1
EXPORTING
i_parent = g_custom_container.
ENDIF.
"making all fields non editable
IF sy-ucomm eq 'SHOW'.
LOOP AT li_fieldcat into lwa_fieldcat.
lwa_fieldcat-edit = ' '.
modify li_fieldcat from lwa_fieldcat.
ENDLOOP.
ENDIF.
IF sy-ucomm eq 'SAVE'..
LOOP AT li_fieldcat into lwa_fieldcat.
IF lwa_fieldcat-key = space.
lwa_fieldcat-edit = space.
MODIFY li_fieldcat from lwa_fieldcat.
ENDIF.
ENDLOOP.
ENDIF.
"displaying the alv grid
CALL METHOD grid1->set_table_for_first_display
EXPORTING
i_structure_name = viewname
it_toolbar_excluding = i_exclude
CHANGING
it_outtab = <i_itab>
it_fieldcatalog = li_fieldcat.
IF sy-subrc <> 0.
exit.
ENDIF.
"getting changed data
set HANDLER gr_event_handler->handle_data_changed for grid1.
CATCH cx_sy_create_data_error.
ENDTRY.
ENDMODULE.
"""""""""""""""""""""""""""""""""""""""""""""""""""""
"""""""""""""""""""""""""""""""""""""""""""""""""""""
*----------------------------------------------------------------------*
***INCLUDE ZUPDATE_ALV_USER_COMAND_9001.
*----------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*& Module USER_COMMAND_9001 INPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE user_command_9001 INPUT.
"" not copy
ENDMODULE.
***INCLUDE ZUPDATE_ALV_USER_COMAND_9001.
*----------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*& Module USER_COMMAND_9001 INPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE user_command_9001 INPUT.
"" not copy
ENDMODULE.
Comments
Post a Comment