内表插入小计和总计

如图,需要在内表中插入一些小计、总计等。

 

*&———————————————————————*
*& Report  z_barry_sum                                                 *
*& Barry.bai@sap.com                                                   *
*&
———————————————————————*

REPORT  z_barry_sum              .

TABLES:hrpy_rgdir,t001,pa0001 .
TYPE-POOLS: slis.

DATA:BEGIN OF itab OCCURS 0,
     sachp(20),                                 
“部门
     pernr(20),                                 
“人员编号
     name(20),                                  
“姓名
     month(4),                                 
“月份
     bet01 LIKE pa0008-bet01,                   
“岗位工资
     bet02 LIKE pa0008-bet01,                   
“岗位津贴
     bet03 LIKE pa0008-bet01,                   
“灰色收入
   END OF itab .

DATA: BEGIN OF itab2 OCCURS 0 ,
        sachp(10),                   
“部门
        pernr(10),                   
“人员编号
        name(10),                    
“姓名
        month(4),                    
“月份
        trfgr(20),                   
“工资等级
        bet01(20),                   
“岗位工资
        bet02(20),                   
“岗位津贴
        bet03(20),                   
“灰色收入
        color(4) ,
      END OF itab2.

*****************
DATA : myrepid LIKE sy-repid. 
REPORT NAME
DATA : allfields TYPE slis_t_fieldcat_alv.
DATA : wa_allfields TYPE LINE OF slis_t_fieldcat_alv.
DATA : layout   TYPE slis_layout_alv .
DATA : ls_event TYPE slis_alv_event.
DATA : gt_events TYPE slis_t_event.
*****************

CONSTANTS: gc_grid_title(30) TYPE c  VALUE ‘工资个人明细清单’.

START-OF-SELECTION.

  PERFORM. getdata.
  PERFORM. fixdata.

*&———————————————————————*
*&      Form  getdata
*&
———————————————————————*
FORM. getdata.
  itab-sachp =
A部门’.
  itab-pernr =
111111.
  itab-name  =
‘张三’.
  itab-month =
11.
  itab-bet01 =
100.
  itab-bet02 =
120.
  itab-bet03 =
140.
  APPEND itab.
  itab-pernr =
222222.
  itab-name  =
‘李四’.
  itab-bet01 =
200.
  itab-bet02 =
210.
  itab-bet03 =
140.
  APPEND itab.
  itab-sachp =
B部门’.
  itab-pernr =
333333.
  itab-name  =
‘王麻子’.
  itab-bet01 =
160.
  itab-bet02 =
120.
  itab-bet03 =
140.
  APPEND itab.
  itab-pernr =
444444.
  itab-name  =
‘狗剩’.
  itab-bet01 =
500.
  itab-bet02 =
120.
  itab-bet03 =
260.
  APPEND itab.
  itab-sachp =
C部门’.
  itab-pernr =
555555.
  itab-name  =
‘铁蛋’.
  itab-bet01 =
400.
  itab-bet02 =
220.
  itab-bet03 =
140.
  APPEND itab.
ENDFORM.                   
getdata
*&
———————————————————————*
*&      Form  fixdata
*&
———————————————————————*
FORM. fixdata.
  SORT itab BY sachp pernr  .

  LOOP AT itab .
    PERFORM. fill .
    MOVE-CORRESPONDING itab TO itab2 .
    APPEND itab2.
    CLEAR itab2 .
    itab2-sachp =
‘ ‘.
    APPEND itab2 .
    AT END OF sachp.
      SUM.
      PERFORM. fill .
      MOVE-CORRESPONDING itab TO itab2.
      itab2-color =
C300.
      CONCATENATE itab-sachp
‘合计’ INTO itab2-sachp .
      APPEND itab2 .
      CLEAR itab2 .
      itab2-sachp =
‘ ‘.
      APPEND itab2 .
    ENDAT.
    AT LAST .
      SUM.
      PERFORM. fill .
      MOVE-CORRESPONDING itab TO itab2.
      itab2-color =
C310.
      itab2-sachp =
‘总计’ .
      APPEND itab2 .
    ENDAT.
  ENDLOOP .

  CLEAR wa_allfields.
  PERFORM. build_layout USING layout.
  PERFORM. display_data .
ENDFORM.                   
fixdata
*&
———————————————————————*
*&      Form  display_data
*&
———————————————————————*
*       text
*
———————————————————————-*
FORM. display_data .

  wa_allfields-fieldname = SACHP.
  wa_allfields-seltext_l =
‘部门’.
  APPEND wa_allfields TO allfields.
  CLEAR wa_allfields.

  wa_allfields-fieldname = PERNR.
  wa_allfields-seltext_l =
‘人员编号’.
  APPEND wa_allfields TO allfields.
  CLEAR wa_allfields.

  wa_allfields-fieldname = NAME.
  wa_allfields-seltext_l =
‘姓名’.
  APPEND wa_allfields TO allfields.
  CLEAR wa_allfields.

  wa_allfields-fieldname = MONTH.
  wa_allfields-seltext_l =
‘月份’.
  APPEND wa_allfields TO allfields.
  CLEAR wa_allfields.
**
  wa_allfields-fieldname =
BET01.
  wa_allfields-seltext_l =
‘岗位工资’.
  APPEND wa_allfields TO allfields.
  CLEAR wa_allfields.
**
  wa_allfields-fieldname =
BET02.
  wa_allfields-seltext_l =
‘岗位津贴’.
  APPEND wa_allfields TO allfields.
  CLEAR wa_allfields.

  wa_allfields-fieldname = BET03.
  wa_allfields-seltext_l =
‘灰色收入’.
  APPEND wa_allfields TO allfields.
  CLEAR wa_allfields.

  myrepid = sy-repid.  REPROT NAME
  CALL FUNCTION
REUSE_ALV_GRID_DISPLAY
    EXPORTING
      i_callback_program = myrepid
      i_grid_title       =
‘月工资个人明细清单’ “TITLE
      is_layout          = layout
      it_events          = gt_events
      i_save             =
X
      it_fieldcat        = allfields
    TABLES
      t_outtab           = itab2
    EXCEPTIONS
      program_error      = 1
      OTHERS             = 2.
ENDFORM. .                   
display_data

*&———————————————————————*
*&      Form  build_layout
*&
———————————————————————*
*       text
*
———————————————————————-*
*     
>P_LAYOUT   text
*
———————————————————————-*
FORM. build_layout USING p_layout TYPE slis_layout_alv.
*  p_layout-zebra             =
X.
  p_layout-colwidth_optimize =
X.
  p_layout-info_fieldname =
COLOR.
ENDFORM.                              
BUILD_LAYOUT

*&———————————————————————*
*&      Form  FILL
*&
———————————————————————*
*       text
*
———————————————————————-*
FORM. fill .
  itab2-sachp =
‘部门’.
  itab2-pernr =
‘人员编号’.
  itab2-name  =
‘姓名’.
  itab2-month =
‘月份’.
  itab2-bet01 =
‘岗位工资’.
  itab2-bet02 =
‘岗位津贴’.
  itab2-bet03 =
‘灰色收入’.
  itab2-color =
C100.
  APPEND itab2 .
  CLEAR itab2 .
ENDFORM. .                   
FILL

 

效果如下:

 

 

 

如果有更多的列需要分类小计,如下图:

 

则可以再加一个AT语句,下面为更改后的程序:

REPORT  z_barry_sum              .

TABLES:hrpy_rgdir,t001,pa0001 .
TYPE-POOLS: slis.

DATA:BEGIN OF itab OCCURS 0,
     bukrs(10),                                 
“公司
     sachp(20),                                 
“部门
     pernr(20),                                 
“人员编号
     name(20),                                  
“姓名
     month(4),                                 
“月份
     bet01 LIKE pa0008-bet01,                   
“岗位工资
     bet02 LIKE pa0008-bet01,                   
“岗位津贴
     bet03 LIKE pa0008-bet01,                   
“灰色收入
   END OF itab .

DATA: BEGIN OF itab2 OCCURS 0 ,
        bukrs(16),                   
“公司
        sachp(10),                   
“部门
        pernr(10),                   
“人员编号
        name(10),                    
“姓名
        month(4),                    
“月份
        trfgr(20),                   
“工资等级
        bet01(20),                   
“岗位工资
        bet02(20),                   
“岗位津贴
        bet03(20),                   
“灰色收入
        color(4) ,
      END OF itab2.

*****************
DATA : myrepid LIKE sy-repid. 
REPORT NAME
DATA : allfields TYPE slis_t_fieldcat_alv.
DATA : wa_allfields TYPE LINE OF slis_t_fieldcat_alv.
DATA : layout   TYPE slis_layout_alv .
DATA : ls_event TYPE slis_alv_event.
DATA : gt_events TYPE slis_t_event.
*****************

CONSTANTS: gc_grid_title(30) TYPE c  VALUE ‘工资个人明细清单’.

START-OF-SELECTION.

  PERFORM. getdata.
  PERFORM. fixdata.

*&———————————————————————*
*&      Form  getdata
*&
———————————————————————*
FORM. getdata.
  itab-bukrs =
‘忽悠公司’.
  itab-sachp =
A部门’.
  itab-pernr =
111111.
  itab-name  =
‘张三’.
  itab-month =
11.
  itab-bet01 =
100.
  itab-bet02 =
120.
  itab-bet03 =
140.
  APPEND itab.
  itab-bukrs =
‘炒作公司’.
  itab-pernr =
222222.
  itab-name  =
‘李四’.
  itab-bet01 =
200.
  itab-bet02 =
210.
  itab-bet03 =
140.
  APPEND itab.
  itab-bukrs =
‘忽悠公司’.
  itab-sachp =
B部门’.
  itab-pernr =
333333.
  itab-name  =
‘王麻子’.
  itab-bet01 =
160.
  itab-bet02 =
120.
  itab-bet03 =
140.
  APPEND itab.
  itab-pernr =
444444.
  itab-name  =
‘狗剩’.
  itab-bet01 =
500.
  itab-bet02 =
120.
  itab-bet03 =
260.
  APPEND itab.
  itab-sachp =
C部门’.
  itab-pernr =
555555.
  itab-name  =
‘铁蛋’.
  itab-bet01 =
400.
  itab-bet02 =
220.
  itab-bet03 =
140.
  APPEND itab.
ENDFORM.                   
getdata
*&
———————————————————————*
*&      Form  fixdata
*&
———————————————————————*
FORM. fixdata.
  SORT itab BY bukrs sachp pernr  .

  LOOP AT itab .
    PERFORM. fill .
    MOVE-CORRESPONDING itab TO itab2 .
    APPEND itab2.
    CLEAR itab2 .
*    APPEND itab2 .
    AT END OF sachp.
      SUM.
      PERFORM. fill .
      MOVE-CORRESPONDING itab TO itab2.
      itab2-color =
C300.
      CONCATENATE itab-sachp
‘合计’ INTO itab2-sachp .
      APPEND itab2 .
      CLEAR itab2 .
*      APPEND itab2 .
    ENDAT.
    AT END OF bukrs.
      SUM.
      PERFORM. fill .
      MOVE-CORRESPONDING itab TO itab2.
      itab2-color =
C310.
      CONCATENATE itab-bukrs
‘小计’ INTO itab2-bukrs .
      APPEND itab2 .
      CLEAR itab2 .
*      APPEND itab2 .
    ENDAT.
    AT LAST .
      SUM.
      PERFORM. fill .
      MOVE-CORRESPONDING itab TO itab2.
      itab2-color =
C710.
      itab2-bukrs =
‘总计’ .
      APPEND itab2 .
    ENDAT.
  ENDLOOP .

  CLEAR wa_allfields.
  PERFORM. build_layout USING layout.
  PERFORM. display_data .
ENDFORM.                   
fixdata
*&
———————————————————————*
*&      Form  display_data
*&
———————————————————————*
*       text
*
———————————————————————-*
FORM. display_data .

  wa_allfields-fieldname = BUKRS.
  wa_allfields-seltext_l =
‘公司’.
  APPEND wa_allfields TO allfields.
  CLEAR wa_allfields.

  wa_allfields-fieldname = SACHP.
  wa_allfields-seltext_l =
‘部门’.
  APPEND wa_allfields TO allfields.
  CLEAR wa_allfields.

  wa_allfields-fieldname = PERNR.
  wa_allfields-seltext_l =
‘人员编号’.
  APPEND wa_allfields TO allfields.
  CLEAR wa_allfields.

  wa_allfields-fieldname = NAME.
  wa_allfields-seltext_l =
‘姓名’.
  APPEND wa_allfields TO allfields.
  CLEAR wa_allfields.

  wa_allfields-fieldname = MONTH.
  wa_allfields-seltext_l =
‘月份’.
  APPEND wa_allfields TO allfields.
  CLEAR wa_allfields.
**
  wa_allfields-fieldname =
BET01.
  wa_allfields-seltext_l =
‘岗位工资’.
  APPEND wa_allfields TO allfields.
  CLEAR wa_allfields.
**
  wa_allfields-fieldname =
BET02.
  wa_allfields-seltext_l =
‘岗位津贴’.
  APPEND wa_allfields TO allfields.
  CLEAR wa_allfields.

  wa_allfields-fieldname = BET03.
  wa_allfields-seltext_l =
‘灰色收入’.
  APPEND wa_allfields TO allfields.
  CLEAR wa_allfields.

  myrepid = sy-repid.  REPROT NAME
  CALL FUNCTION
REUSE_ALV_GRID_DISPLAY
    EXPORTING
      i_callback_program = myrepid
      i_grid_title       =
‘月工资个人明细清单’ “TITLE
      is_layout          = layout
      it_events          = gt_events
      i_save             =
X
      it_fieldcat        = allfields
    TABLES
      t_outtab           = itab2
    EXCEPTIONS
      program_error      = 1
      OTHERS             = 2.
ENDFORM. .                   
display_data

*&———————————————————————*
*&      Form  build_layout
*&
———————————————————————*
*       text
*
———————————————————————-*
*     
>P_LAYOUT   text
*
———————————————————————-*
FORM. build_layout USING p_layout TYPE slis_layout_alv.
*  p_layout-zebra             =
X.
  p_layout-colwidth_optimize =
X.
  p_layout-info_fieldname =
COLOR.
ENDFORM.                              
BUILD_LAYOUT

*&———————————————————————*
*&      Form  FILL
*&
———————————————————————*
*       text
*
———————————————————————-*
FORM. fill .
*  itab2-bukrs =
‘公司’.
*  itab2-sachp =
‘部门’.
*  itab2-pernr =
‘人员编号’.
*  itab2-name  =
‘姓名’.
*  itab2-month =
‘月份’.
*  itab2-bet01 =
‘岗位工资’.
*  itab2-bet02 =
‘岗位津贴’.
*  itab2-bet03 =
‘灰色收入’.
*  itab2-color =
C100.
*  APPEND itab2 .
*  CLEAR itab2 .
ENDFORM. .                   
FILL

 

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/13973563/viewspace-752280/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/13973563/viewspace-752280/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值