*&---------------------------------------------------------------------* *& Report ZFIRP0037 *&---------------------------------------------------------------------* *& *&---------------------------------------------------------------------* REPORT zfirp0037. TABLES :bseg,kna1. **定义结构 TYPES: BEGIN OF gty_out, bukrs LIKE bseg-bukrs, belnr LIKE bseg-belnr, gjahr LIKE bseg-gjahr, shkzg LIKE bseg-shkzg, hkont LIKE bseg-hkont, kunnr LIKE bseg-kunnr, xref1 LIKE bseg-xref1, wrbtr LIKE bseg-wrbtr, sgtxt LIKE bseg-sgtxt, h_blart LIKE bseg-h_blart, END OF gty_out. *标准的ALV输出 * slis 类型池 全局变量 定义,多数没用, DATA: g_repid TYPE sy-repid, g_line TYPE slis_fieldcat_alv, gt_fieldcat TYPE slis_t_fieldcat_alv, gt_layout TYPE slis_layout_alv, gt_sortinfo TYPE slis_sortinfo_alv, gt_lvc_title TYPE lvc_title, gt_list_top_of_page TYPE slis_t_listheader, gt_events TYPE slis_t_event, gt_fcat TYPE lvc_t_fcat, gt_table TYPE REF TO data, gs_settings TYPE lvc_s_glay, f2code LIKE sy-ucomm VALUE '&TEA'. * 定义用于输出的内表 DATA: gt_tab TYPE STANDARD TABLE OF gty_out. DATA: gt_tab2 TYPE STANDARD TABLE OF gty_out. *选择屏幕 SELECT-OPTIONS:s_kunnr FOR bseg-kunnr, s_BUKRS FOR bseg-bukrs, s_xref1 FOR bseg-xref1, s_rq FOR bseg-h_bldat OBLIGATORY. **功能 程序 START-OF-SELECTION. SELECT b~bukrs, b~belnr, b~gjahr, b~shkzg, b~hkont, b~kunnr, b~xref1, b~wrbtr, b~sgtxt INTO TABLE @gt_tab FROM bseg AS a INNER JOIN bseg AS b ON a~bukrs = b~bukrs AND a~belnr = b~belnr AND a~gjahr = b~gjahr WHERE ( a~hkont LIKE '1002%' OR a~hkont LIKE '1121%' OR a~hkont LIKE '1012%' ) AND a~shkzg = 'S' AND (b~hkont LIKE '1122%' ) AND b~shkzg = 'H' AND b~h_monat <> '000' AND b~kunnr <> '' AND a~h_bldat IN @s_rq. **sql 2 SELECT a~bukrs a~belnr a~gjahr a~shkzg a~hkont a~kunnr a~xref1 a~wrbtr a~sgtxt INTO CORRESPONDING FIELDS OF TABLE gt_tab2 FROM bseg AS a WHERE ( a~hkont LIKE '1002%' OR a~hkont LIKE '1121%' OR a~hkont LIKE '1012%' ) AND a~shkzg = 'h' AND a~h_bldat IN s_rq. **FIELD-SYMBOL 指针 可直接更改内表字段的值 . LOOP AT gt_tab2 ASSIGNING FIELD-SYMBOL(<fs_out>). <fs_out>-wrbtr = <fs_out>-wrbtr * -1. ENDLOOP. APPEND LINES OF gt_tab2 TO gt_taB. END-OF-SELECTION. **执行函数 PERFORM frm_show_alv. * 输出 alv 报表 FORM frm_show_alv . DEFINE append_alv_field. CLEAR g_line. g_line-fieldname = &1. g_line-tabname = 'GT_ALV'. g_line-reptext_ddic = &2. g_line-seltext_l = &2. g_line-seltext_m = &2. g_line-seltext_s = &2. g_line-cfieldname = &3. g_line-ctabname = &4. g_line-no_out = &5. g_line-no_zero = &6. g_line-outputlen = &7. g_line-qfieldname = &8. g_line-just = &9. g_line-ddictxt = 'L'. APPEND g_line TO gt_fieldcat. END-OF-DEFINITION. **ALV 显示字段 REFRESH:gt_fieldcat. append_alv_field 'bukrs' '公司代码' '' '' '' '' '' '' ''. append_alv_field 'kunnr' '客户号' '' '' '' '' '' '' ''. append_alv_field 'wrbtr' '金额' '' '' '' '' '' '' ''. CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY' EXPORTING i_callback_program = sy-repid * i_callback_pf_status_set = 'FRM_STATUS' "GUI指定子程序 * i_callback_user_command = 'FRM_USER_COMM' "客户命令指定子程序 is_layout = gt_layout it_fieldcat = gt_fieldcat[] * it_events = events[] TABLES t_outtab = gt_tab[] "指定要显示的内表名称 EXCEPTIONS program_error = 1 OTHERS = 2. ENDFORM.