Report中我们会经常使用ALV和直接Write的方式来显示数据,对与Write的普通列表中,可以通过At line-selection.实现数据行的选择事件(即:向下钻取方法),对与ALV也有对与的line-selection事件,其主要是通过FUNCTION 'REUSE_ALV_GRID_DISPLAY' 的参数 i_callback_user_command来传递触发事件。
下面是一个Report example,该Report的功能是,显示AP List(即:请款清单),在显示列表中双击BELNR字段时,会触发事件并显示该凭证的详细数据,在凭证详细数据列表界面中,再双击BELNR时,会触发事件并进入FB03,显示对应的凭证。
双击触发事件的代码部分都在INCLUDE zevantest018f02中,如果觉得example代码太长,可以直接看INCLUDE zevantest018f02部分的内容。
*&---------------------------------------------------------------------*
*& Report ZEVANTEST018
*& AP List(请款清单)
*&---------------------------------------------------------------------*
REPORT zevantest018.
TABLES: bsik,bkpf,bseg,t001.
INCLUDE zevantest018top.
INCLUDE zevantest018f01.
INCLUDE zevantest018f02.
INITIALIZATION.
AT SELECTION-SCREEN OUTPUT.
AT SELECTION-SCREEN.
PERFORM check_auth.
START-OF-SELECTION.
PERFORM get_data.
PERFORM process_data.
END-OF-SELECTION.
PERFORM show_alv_ap.
*&---------------------------------------------------------------------*
*& Include ZFIR00025TOP
*&---------------------------------------------------------------------*
DATA: BEGIN OF item,
bukrs LIKE bkpf-bukrs, "Company Code
lifnr LIKE bsik-lifnr, "Vendor's account number
name1 LIKE lfa1-name1, "Vendor's name
belnr LIKE bsik-belnr, "Accounting Document Number
budat LIKE bkpf-budat, "Posting Date in the Document
gjahr LIKE bsik-gjahr, "Fiscal Year
buzei LIKE bsik-buzei, "Number of Line Item
dmbtr LIKE bsik-dmbtr, "Amount in Local Currency
hwaer LIKE bkpf-hwaer, "Local Currency
wrbtr LIKE bsik-wrbtr, "Amount in document currency
waers LIKE bkpf-waers, "Document Currency Key
bktxt LIKE bkpf-bktxt, "報關單 (請款單號)
sgtxt LIKE bsik-sgtxt, "Text (摘要)
usnam LIKE bkpf-usnam, "User Name
zfbdt LIKE bsik-zfbdt, "Baseline Date for Due Date Calculation
zterm LIKE bsik-zterm, "Terms of Payment Key
fdtag LIKE bseg-fdtag, "Planning date
END OF item.
DATA: wa_item LIKE item,
it_item LIKE TABLE OF item WITH HEADER LINE.
DATA: BEGIN OF wa_bseg,
bukrs LIKE bseg-bukrs, "Company Code
gjahr LIKE bseg-gjahr, "Year
belnr LIKE bseg-belnr, "Document Number
buzei LIKE bseg-buzei, "item
budat LIKE bkpf-budat, "Posting Date
wrbtr LIKE bseg-wrbtr, "Amt in Doc. Curr
waers LIKE bkpf-waers, "Doc. Currency
dmbtr LIKE bseg-dmbtr, "Amt in Local Curr
hwaer LIKE bkpf-hwaer, "Local Currency
sgtxt LIKE bseg-sgtxt, "
END OF wa_bseg.
DATA it_bseg LIKE TABLE OF wa_bseg WITH HEADER LINE.
*-----Data variable for use of ALV------------------------------------*
TYPE-POOLS: slis.
DATA: wa_fieldcat TYPE slis_fieldcat_alv.
DATA: it_fieldcat TYPE slis_t_fieldcat_alv,
it_events TYPE slis_t_event,
wa_print TYPE slis_print_alv,
it_sp_group TYPE slis_t_sp_group_alv,
it_sort TYPE slis_t_sortinfo_alv WITH HEADER LINE,
it_list_top_of_page TYPE slis_t_listheader,
wa_layout TYPE slis_layout_alv.
DATA: wa_variant LIKE disvariant,
g_save(1),
g_exit(1),
gs_repid LIKE sy-repid,
p_varnt LIKE disvariant-variant.
DATA: this_show(10) TYPE c,
this_type(10) TYPE c.
*---------------------------------------------------------------------*
* SELECTION SCREEN *
*---------------------------------------------------------------------*
SELECTION-SCREEN BEGIN OF BLOCK blk1 WITH FRAME TITLE text-001.
PARAMETERS: p_bukrs LIKE bkpf-bukrs OBLIGATORY. "company code
SELECT-OPTIONS: s_belnr FOR bsik-belnr, "Accounting Document Number
s_budat FOR bsik-budat OBLIGATORY DEFAULT sy-datum, "Posting Date in the Document
s_usnam FOR bkpf-usnam, "User Name
s_lifnr FOR bsik-lifnr, "Vendor's account number
s_bktxt FOR bkpf-bktxt. "E-flow number(報關單)
SELECTION-SCREEN END OF BLOCK blk1.
*&---------------------------------------------------------------------*
*& Include ZFIR00025F01
*&---------------------------------------------------------------------*
FORM show_alv_ap.
PERFORM alv_init.
PERFORM build_alv_ap.
PERFORM display_alv_ap.
ENDFORM. "display_alv_AP
FORM check_auth .
SELECT SINGLE * FROM t001 WHERE bukrs = p_bukrs.
IF sy-subrc <> 0.
MESSAGE 'The Company code is not exist!' TYPE 'E'.
EXIT.
ENDIF.
AUTHORITY-CHECK OBJECT 'F_BKPF_BUK'
ID 'BUKRS' FIELD p_bukrs.
IF sy-subrc <> 0.
MESSAGE 'Company code does not has authorization' TYPE 'E'.
EXIT.
ENDIF.
ENDFORM. " check_auth
FORM get_data .
SELECT bkpf~bktxt
bsik~belnr
bsik~lifnr
bkpf~budat
bkpf~usnam
bsik~dmbtr
bkpf~hwaer
bsik~wrbtr
bkpf~waers
bkpf~bukrs
bsik~sgtxt
bsik~zfbdt "Baseline Date for Due Date Calculation
bsik~zterm "Terms of Payment Key
bsik~gjahr "Fiscal Year
bsik~buzei "Number of Line Item
INTO CORRESPONDING FIELDS OF TABLE it_item
FROM bkpf
INNER JOIN bsik
ON bsik~bukrs = bkpf~bukrs
AND bsik~belnr = bkpf~belnr
AND bsik~gjahr = bkpf~gjahr
WHERE bkpf~bktxt IN s_bktxt
AND bkpf~bukrs = p_bukrs
AND bkpf~belnr IN s_belnr
AND bkpf~budat IN s_budat
AND bsik~lifnr IN s_lifnr
AND bkpf~usnam IN s_usnam.
SORT it_item BY bukrs lifnr belnr gjahr buzei.
DELETE ADJACENT DUPLICATES FROM it_item.
DATA: g_name1 LIKE lfa1-name1.
CLEAR g_name1.
LOOP AT it_item.
**get vendor name
AT NEW lifnr.
SELECT SINGLE name1 FROM lfa1 INTO g_name1
WHERE lifnr = it_item-lifnr.
ENDAT.
it_item-name1 = g_name1.
**get planning date from bseg
SELECT SINGLE fdtag FROM bseg INTO it_item-fdtag
WHERE bukrs = it_item-bukrs
AND belnr = it_item-belnr
AND gjahr = it_item-gjahr
AND buzei = it_item-buzei.
MODIFY it_item TRANSPORTING name1 fdtag.
ENDLOOP.
ENDFORM. " get_data
FORM build_alv_ap .
REFRESH it_fieldcat.
PERFORM build_filecat USING: 'BUKRS' 'BUKRS' 'BKPF' 'C' '' '' 'Company Code',
'LIFNR' 'LIFNR' 'BSIK' 'C' '' '' 'Vendor ID',
'NAME1' 'NAME1' 'LFA1' 'C' '' '' 'Vendor name',
'BELNR' 'BELNR' 'BSIK' 'C' '' '' 'Document Number',
'BUDAT' 'BUDAT' 'BKPF' 'C' '' '' 'Posting Date',
'WRBTR' 'WRBTR' 'BSIK' 'CURR' 'WAERS' '' 'Amt in Doc. Curr',
'WAERS' 'WAERS' 'BKPF' 'C' '' '' 'Doc. Currency',
'DMBTR' 'DMBTR' 'BSIK' 'CURR' 'HWAER' '' 'Amt in Local Curr',
'HWAER' 'HWAER' 'BKPF' 'C' '' '' 'Local Currency',
'BKTXT' '' '' 'C' '' '' 'E-flow Number(報關單)',
'SGTXT' 'SGTXT' 'BSIK' 'C' '' '' 'Text',
'USNAM' 'USNAM' 'BKPF' 'C' '' '' 'User Name',
'ZFBDT' 'ZFBDT' 'BSIK' 'C' '' 'X' 'Bline Date',
'ZTERM' 'ZTERM' 'BSIK' 'C' '' 'X' 'Payment Terms',
'FDTAG' 'FDTAG' 'BSEG' 'C' '' '' 'Planning date'.
ENDFORM. " build_alv
FORM alv_init .
CLEAR: wa_variant.
gs_repid = sy-repid.
wa_variant-report = gs_repid.
wa_variant-username = sy-uname.
g_save = 'A'.
CLEAR: wa_layout.
wa_layout-zebra = 'X'. "Striped pattern
wa_layout-colwidth_optimize = 'X'. " Column width optimize
ENDFORM. " alv_init
FORM display_alv_ap .
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
i_callback_program = gs_repid
* i_callback_top_of_page = 'SET_TOP_OF_PAGE'
* i_callback_user_command = ''
* i_callback_pf_status_set = ''
i_default = 'X'
i_background_id = 'ALV_BACKGROUND'
is_layout = wa_layout
it_fieldcat = it_fieldcat[]
* it_events = it_events[]
it_special_groups = it_sp_group[]
i_save = g_save
is_print = wa_print
is_variant = wa_variant
i_callback_user_command = 'COMMAND_AP'
TABLES
t_outtab = it_item
EXCEPTIONS
program_error = 1
OTHERS = 2.
ENDFORM. " display_alv
FORM build_filecat USING value(p_field)
value(p_ref_field)
value(p_ref_tabname)
value(p_datatype)
value(p_cfieldname)
value(p_no_out)
value(p_seltext_l).
CLEAR wa_fieldcat.
wa_fieldcat-fieldname = p_field.
wa_fieldcat-ref_fieldname = p_ref_field.
wa_fieldcat-ref_tabname = p_ref_tabname.
wa_fieldcat-seltext_l = p_seltext_l.
wa_fieldcat-datatype = p_datatype.
wa_fieldcat-cfieldname = p_cfieldname.
wa_fieldcat-no_out = p_no_out.
wa_fieldcat-outputlen = 20.
APPEND wa_fieldcat TO it_fieldcat.
ENDFORM. " build_filecat
*&---------------------------------------------------------------------*
*& Include ZEVANTEST018F02
*&---------------------------------------------------------------------*
FORM show_bseg.
PERFORM get_bseg.
SORT it_bseg BY bukrs gjahr belnr buzei.
PERFORM show_bseg_alv.
ENDFORM. " out_perid_so
FORM show_bseg_alv.
PERFORM alv_init.
PERFORM build_alv_bseg.
PERFORM display_alv_bseg.
ENDFORM. " show_so
FORM build_alv_bseg.
REFRESH it_fieldcat.
PERFORM build_filecat USING: 'BUKRS' 'BUKRS' 'BSEG' 'C' '' '' 'Company Code',
'BELNR' 'BELNR' 'BSEG' 'C' '' '' 'Document Number',
'GJAHR' 'GJAHR' 'BSEG' 'C' '' '' 'Year',
'BUZEI' 'BUZEI' 'BSEG' 'C' '' '' 'Item',
'BUDAT' 'BUDAT' 'BKPF' 'C' '' '' 'Posting Date',
'WRBTR' 'WRBTR' 'BSEG' 'CURR' 'WAERS' '' 'Amt in Doc. Curr',
'WAERS' 'WAERS' 'BKPF' 'C' '' '' 'Doc. Currency',
'DMBTR' 'DMBTR' 'BSEG' 'CURR' 'HWAER' '' 'Amt in Local Curr',
'HWAER' 'HWAER' 'BKPF' 'C' '' '' 'Local Currency',
'SGTXT' 'SGTXT' 'BSEG' 'C' '' '' 'Text'.
ENDFORM. " build_alv
FORM frm_command USING u_ucomm LIKE sy-ucomm
selfield TYPE slis_selfield
c_type.
DATA:field_name LIKE selfield-sel_tab_field.
DATA:lmp_c(20) TYPE c,
t_name(20) TYPE c, "表名
f_name(20) TYPE c. "字段名
* this_type = c_type.
READ TABLE it_fieldcat INTO wa_fieldcat INDEX 1.
t_name = wa_fieldcat-tabname.
field_name = selfield-sel_tab_field.
SPLIT field_name AT '-' INTO lmp_c f_name.
CASE u_ucomm.
WHEN '&IC1'. "双击事件
IF c_type = 'AP'.
READ TABLE it_item INTO wa_item INDEX selfield-tabindex.
CASE f_name.
WHEN 'BELNR'.
PERFORM show_bseg.
ENDCASE.
ELSEIF c_type = 'BSEG'.
READ TABLE it_bseg INTO wa_bseg INDEX selfield-tabindex.
CASE f_name.
WHEN 'BELNR'.
PERFORM show_bkpf.
ENDCASE.
ENDIF.
ENDCASE.
ENDFORM. "frm_command
FORM command_bseg USING u_ucomm LIKE sy-ucomm
selfield TYPE slis_selfield.
PERFORM frm_command USING u_ucomm selfield 'BSEG'.
ENDFORM. "command_BSEG
FORM command_ap USING u_ucomm LIKE sy-ucomm
selfield TYPE slis_selfield.
PERFORM frm_command USING u_ucomm selfield 'AP'.
ENDFORM. "command_AP
FORM get_bseg .
SELECT bukrs belnr gjahr buzei
wrbtr dmbtr sgtxt
INTO CORRESPONDING FIELDS OF TABLE it_bseg
FROM bseg
WHERE bukrs = wa_item-bukrs
AND belnr = wa_item-belnr
AND gjahr = wa_item-gjahr.
DATA: budat LIKE bkpf-budat,
waers LIKE bkpf-waers,
hwaer LIKE bkpf-hwaer.
LOOP AT it_bseg.
AT NEW belnr.
SELECT SINGLE budat waers hwaer FROM bkpf
INTO (budat,waers,hwaer)
WHERE bukrs = it_bseg-bukrs
AND belnr = it_bseg-belnr
AND gjahr = it_bseg-gjahr.
ENDAT.
it_bseg-budat = budat.
it_bseg-waers = waers.
it_bseg-hwaer = hwaer.
MODIFY it_bseg TRANSPORTING budat waers hwaer.
ENDLOOP.
ENDFORM. " get_bseg
FORM display_alv_bseg .
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
i_callback_program = gs_repid
i_default = 'X'
i_background_id = 'ALV_BACKGROUND'
is_layout = wa_layout
it_fieldcat = it_fieldcat[]
it_events = it_events[]
it_special_groups = it_sp_group[]
i_save = g_save
is_print = wa_print
is_variant = wa_variant
i_callback_user_command = 'COMMAND_BSEG'
TABLES
t_outtab = it_bseg
EXCEPTIONS
program_error = 1
OTHERS = 2.
ENDFORM. " display_alv_bseg
FORM show_bkpf .
SET PARAMETER ID 'BLN' FIELD wa_bseg-belnr.
SET PARAMETER ID 'GJR' FIELD wa_bseg-gjahr.
SET PARAMETER ID 'BUK' FIELD wa_bseg-bukrs.
CALL TRANSACTION 'FB03' AND SKIP FIRST SCREEN.
ENDFORM. " show_bkpf
ABAP ALV中实现line-Selection事件(向下钻取)
最新推荐文章于 2024-04-28 10:02:26 发布