*&---------------------------------------------------------------------*
*& 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.

 

活到老,学到老。