Chinaunix首页 | 论坛 | 博客
  • 博客访问: 7184917
  • 博文数量: 655
  • 博客积分: 10264
  • 博客等级: 上将
  • 技术积分: 8278
  • 用 户 组: 普通用户
  • 注册时间: 2007-06-04 17:47
个人简介

ABAP顾问

文章分类

全部博文(655)

文章存档

2017年(2)

2014年(8)

2013年(3)

2012年(2)

2011年(18)

2010年(102)

2009年(137)

2008年(274)

2007年(134)

分类:

2007-11-25 13:08:47

 
 
如图,需要在内表中插入一些小计、总计等。
 
*&---------------------------------------------------------------------*
*& Report  z_barry_sum                                                 *
*&                                                    *
*&---------------------------------------------------------------------*
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
 
 
阅读(7000) | 评论(5) | 转发(0) |
给主人留下些什么吧!~~

chinaunix网友2010-04-25 16:49:04

呃。。。应该叫啥?叫合计?

chinaunix网友2010-04-25 15:33:10

被骗了,这也叫小计呀

chinaunix网友2009-11-15 16:05:30

经典!