《SAP ABAP 开发指南》第七单元前五课时
2018-08-20 本文已影响12人
46b61a5f089d
翱翔云天的SAP 技术网校
程序源代码
选择屏幕
TABLES: vbak.
DATA: wa_vbak TYPE vbak.
SELECTION-SCREEN BEGIN OF SCREEN 101 as SUBSCREEN.
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE TEXT-001.
SELECTION-SCREEN COMMENT /1(30) TEXT-001.
PARAMETERS: p_1 TYPE char10 DEFAULT 'abc',
p_order TYPE vbak-vbeln.
SELECTION-SCREEN ULINE.
SELECTION-SCREEN BEGIN OF LINE.
PARAMETERS:
r_rad1 RADIOBUTTON GROUP r1 DEFAULT 'X'.
SELECTION-SCREEN COMMENT 3(15) TEXT-r01 FOR FIELD r_rad1.
PARAMETERS:
r_rad2 RADIOBUTTON GROUP r1.
SELECTION-SCREEN COMMENT 20(15) TEXT-r02 FOR FIELD r_rad2.
PARAMETERS:
r_rad3 RADIOBUTTON GROUP r1.
SELECTION-SCREEN COMMENT 40(15) TEXT-r03 FOR FIELD r_rad3.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN BEGIN OF LINE.
PARAMETERS:
ch_box1 AS CHECKBOX.
SELECTION-SCREEN COMMENT 3(32) TEXT-r01 FOR FIELD ch_box1.
PARAMETERS:
ch_box2 AS CHECKBOX.
SELECTION-SCREEN COMMENT 38(15) TEXT-r02 FOR FIELD ch_box2.
SELECTION-SCREEN END OF LINE.
PARAMETERS:
pl_auart TYPE vbak-auart AS LISTBOX VISIBLE LENGTH 30.
SELECTION-SCREEN END OF BLOCK b1.
SELECTION-SCREEN END OF SCREEN 101.
SELECTION-SCREEN BEGIN OF SCREEN 102 as SUBSCREEN.
SELECTION-SCREEN BEGIN OF BLOCK b2 WITH FRAME TITLE TEXT-002.
SELECTION-SCREEN COMMENT /1(30) TEXT-002.
SELECT-OPTIONS:
s_vbeln FOR vbak-vbeln,
s_auart FOR wa_vbak-auart,
s_erdat FOR vbak-erdat NO-EXTENSION,
s_vkorg FOR vbak-vkorg NO INTERVALS.
SELECTION-SCREEN END OF BLOCK b2.
SELECTION-SCREEN END OF SCREEN 102.
SELECTION-SCREEN BEGIN OF TABBED BLOCK tab1 for 10 lines.
SELECTION-SCREEN TAB (10) text-t01 USER-COMMAND com1 DEFAULT SCREEN 101.
SELECTION-SCREEN tab (20) text-t02 USER-COMMAND com2 DEFAULT SCREEN 102.
SELECTION-SCREEN END OF BLOCK tab1.
Write
no STANDARD PAGE HEADING
line-SIZE 60
LINE-COUNT 10(1)
.
uline.
write: sy-vline, '第七单元第二课时', 60(1) sy-vline.
uline.
select vbeln,erdat,vkorg
from vbak
UP TO 30 rows
into table @DATA(lt_tab).
* test
FORMAT COLOR = 1 .
write: sy-vline, 2(10) 'Order',13(1) sy-vline, 14(15) 'Date',29(1) sy-vline, 30(10) 'Sales Org',60(1) sy-vline.
FORMAT color OFF.
uline.
loop at lt_tab into data(ls_tab).
if sy-tabix mod 2 = 0.
FORMAT color = 5.
write: sy-vline, 2(10) ls_tab-vbeln HOTSPOT,13(1) sy-vline, 14(15) ls_tab-erdat,29(1) sy-vline, 30(10) ls_tab-vkorg,60(1) sy-vline.
else.
FORMAT color = 6.
write: sy-vline, 2(10) ls_tab-vbeln HOTSPOT,13(1) sy-vline, 14(15) ls_tab-erdat,29(1) sy-vline, 30(10) ls_tab-vkorg,60(1) sy-vline.
endif.
uline.
ENDLOOP.
TOP-OF-PAGE.
write: 'New Page!'.
end-OF-PAGE.
write: 'End of Page!'.
at LINE-SELECTION.
new-page LINE-COUNT 20.
write: / ,'sy-lisel', sy-lisel.
write: / ,'sy-lsind',sy-lsind.
write: / ,'sy-lilli',sy-lilli.
write: / ,'sy-listi',sy-listi.
Reuse alv
SELECT * FROM vbak INTO TABLE @DATA(lt_tab)
UP TO 30 ROWS.
CALL FUNCTION 'REUSE_ALV_LIST_DISPLAY'
EXPORTING
i_structure_name = 'VBAK'
TABLES
t_outtab = lt_tab. " Table with data to be displayed
IF sy-subrc <> 0.
* MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
* WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
i_structure_name = 'VBAK'
TABLES
t_outtab = lt_tab. " Table with data to be displayed
IF sy-subrc <> 0.
* MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
* WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
ALV Grid
select * from vbak into TABLE @data(lt_tab) UP TO 30 ROWS.
data(o_grid) = new cl_gui_alv_grid(
i_parent = cl_gui_container=>screen0
).
o_grid->set_table_for_first_display(
EXPORTING
i_structure_name = 'VBAK' " Internal Output Table Structure Name
CHANGING
it_outtab = lt_tab " Output Table
).
call screen 100.
SALV
CLASS lcl_event_handler DEFINITION.
PUBLIC SECTION.
METHODS:
on_double_click FOR EVENT double_click
OF cl_salv_events_table
IMPORTING row column.
ENDCLASS.
SELECT * FROM vbak INTO TABLE @DATA(lt_tab) UP TO 30 ROWS.
cl_salv_table=>factory(
EXPORTING
list_display = if_salv_c_bool_sap=>false " ALV Displayed in List Mode
IMPORTING
r_salv_table = DATA(o_salv) " Basis Class Simple ALV Tables
CHANGING
t_table = lt_tab
).
DATA(o_dis) = o_salv->get_display_settings( ).
o_dis->set_list_header( value = '第七单元第四课时' ).
DATA(o_col) = o_salv->get_columns( ).
o_col->set_optimize( ).
DATA(o_mandt) = o_col->get_column( columnname = 'MANDT' ).
o_mandt->set_visible( if_salv_c_bool_sap=>false ).
DATA(o_ord) = o_col->get_column( columnname = 'VBELN' ).
o_ord->set_short_text( value = '销售订单' ).
DATA(o_sort) = o_salv->get_sorts( ).
o_sort->add_sort(
EXPORTING
columnname = 'AUART' " ALV Control: Field Name of Internal Table Field
).
DATA(o_filter) = o_salv->get_filters( ).
o_filter->add_filter(
EXPORTING
columnname = 'VBTYP' " ALV Control: Field Name of Internal Table Field
sign = 'I' " Selection Condition Sign
option = 'EQ' " Selection Condition Option
low = 'C' " Lower Value of Selection Condition
).
DATA(o_func) = o_salv->get_functions( ).
o_func->set_default(
).
DATA(o_event) = o_salv->get_event( ).
data(o_handler) = new lcl_event_handler( ).
set HANDLER o_handler->on_double_click for o_event.
o_salv->display( ).
CLASS lcl_event_handler IMPLEMENTATION.
METHOD on_double_click.
MESSAGE 'double click' TYPE 'I'.
ENDMETHOD.
ENDCLASS.