processing ALV WITH subtotal and total items

*&---------------------------------------------------------------------
*& Program Name     : ZTEST_CO1                                        *
*& Title            :                                                  *
*& Module Name      : CO                                               *
*& Sub-Module       :                                                  *
*& Author           : .Zhang (SAP)                                *
*& Create Date      : 2008/.....*
*& Logical DB       : Nothing                                          *
*& Selection Screen : Default                                          *
*& Program Type     : Report                                           *
*& SAP Release      : 620                                              *
*&---------------------------------------------------------------------*
*& REVISION LOG                                                        *
*& LOG#     DATE         AUTHOR        DESCRIPTION                     *
*& ----     ----       ----------      -----------                     *
*& 0000   2008/0./0. . Zhang       Initial Implementation       *
*&                                                                     *
*&---------------------------------------------------------------------*
report  ztest_co1   .
type-pools: slis.
*----------------------------------------------------------------------*
* 声明引用数据表
*----------------------------------------------------------------------*
tables: coep,cobk,afko.
*----------------------------------------------------------------------*
* 变量定义
*----------------------------------------------------------------------*
data: begin of gt_table occurs 0,
      khd(2), "考核点
      cxbh(20) ,  "产线编号
      bcbh(20) , "班次编号
      matnr like coep-matnr, "物料编号
      uspob like coep-uspob,  "成本中心
      aufnr like afko-aufnr,  "生产订单编号
      kstar like coep-kstar,  "成本要素 
      orgvg like cobk-orgvg,  "业务交易
      txt   like tj01t-txt,   "业务交易文本
      megbtr like coep-megbtr, "数量
      meinb  like coep-meinb,  "单位
      wogbtr like coep-wogbtr, "金额
      end of gt_table.
types: begin of typ_data,
      khd(2), "考核点
      cxbh(20) ,  "产线编号
      bcbh(20) , "班次编号
      matnr like coep-matnr, "物料编号
      uspob like coep-uspob,  "成本中心
      aufnr like afko-aufnr,  "生产订单编号
      kstar like coep-kstar,  "成本要素 
      orgvg like cobk-orgvg,  "业务交易
      txt   like tj01t-txt,   "业务交易文本
      megbtr like coep-megbtr, "数量
      wogbtr like coep-wogbtr, "金额
*      meinb  LIKE coep-meinb, "单位
      unit   type lvc_quan,
     end of typ_data.
data gt_outtab   type table of typ_data with header line.
data gt_fieldcat type slis_t_fieldcat_alv.
data gt_sort     type slis_t_sortinfo_alv.
data gs_variant  type disvariant.
data: sla type slis_layout_alv.
*----------------------------------------------------------------------*
* 屏幕查询条件定义
*----------------------------------------------------------------------*
selection-screen begin of block bl_1 with frame title text-001.
parameters: p_kokrs like coep-kokrs obligatory,
            p_bukrs like coep-bukrs obligatory,
            p_gjahr like coep-gjahr obligatory,
            p_perio like coep-perio obligatory.
select-options: p_aufnr for afko-aufnr,
                p_plnbez for afko-plnbez obligatory,
                p_khd for coep-sgtxt.
selection-screen end of block bl_1.
*--------------------------------------------------------------------
* Program constructor.
*--------------------------------------------------------------------
load-of-program.
** For Display Variant
  gs_variant-report = sy-repid.
  perform layout_sort_build changing gt_sort.
  perform prepare_field_catalog changing gt_fieldcat.
*--------------------------------------------------------------------
* s t a r t - o f - s e l e c t i o n.
*--------------------------------------------------------------------
start-of-selection.
  perform getdata.
  perform alvdata.
*&---------------------------------------------------------------------*
*&      Form  getdata
*&---------------------------------------------------------------------*
form getdata .
  data: begin of t_afko occurs 0,
        plnbez like afko-plnbez, "物料编号
        aufnr like afko-aufnr,  "生产订单编号
        objnr like coep-objnr,
        end of t_afko.
  data: begin of t_coep occurs 0,
        belnr like coep-belnr,
        kokrs like coep-kokrs,
*        perio LIKE coep-perio,
        aufnr like afko-aufnr,  "生产订单编号
        matnr like coep-matnr,  "coep物料编号
        uspob like coep-uspob,  "成本中心
        objnr like coep-objnr,  "对象编号
        kstar like coep-kstar,  "成本要素
        megbtr like coep-megbtr, "数量
        meinb  like coep-meinb,  "单位
        wogbtr like coep-wogbtr, "金额
        sgtxt like coep-sgtxt,   "借用字段
        orgvg like cobk-orgvg,
        txt like tj01t-txt,
        end of t_coep.
  data: begin of t_coep2 occurs 0,
        aufnr like afko-aufnr,
        kokrs like coep-kokrs,
        matnr like coep-matnr,  "coep物料编号
        uspob like coep-uspob,  "成本中心
        objnr like coep-objnr,  "对象编号
        kstar like coep-kstar,  "成本要素
        megbtr like coep-megbtr, "数量
        meinb  like coep-meinb,  "单位
        wogbtr like coep-wogbtr, "金额
        sgtxt like coep-sgtxt,   "借用字段
        orgvg like cobk-orgvg,
        txt like tj01t-txt,
        end of t_coep2.
  data: begin of t_cobk occurs 0,
        belnr like cobk-belnr,
        kokrs like cobk-kokrs,
        orgvg like cobk-orgvg,
        txt like tj01t-txt,
        end of t_cobk.
*根据成品物料号得到订单号码和对象号码
  select plnbez aufnr from afko
  into corresponding fields of table t_afko
  where plnbez in p_plnbez and
        aufnr in p_aufnr.
  loop at t_afko.
    concatenate 'OR' t_afko-aufnr into t_afko-objnr.
    modify t_afko.
  endloop.
  sort t_afko.
  delete adjacent duplicates from t_afko.
  if not t_afko[] is initial.
*根据对象编号取得COEP相关字段
    select coep~kokrs coep~belnr coep~matnr coep~uspob coep~objnr
           coep~kstar coep~megbtr coep~meinb coep~wogbtr coep~sgtxt
    from coep
    into corresponding fields of table t_coep
    for all entries in t_afko
    where coep~objnr = t_afko-objnr and
          coep~gjahr = p_gjahr and
          coep~kokrs = p_kokrs and
          coep~perio = p_perio and
          coep~lednr = '00'.  "一般情况下为 00 ********.
  endif.
* COBK~ORGVR,tj01t~tx
  select cobk~orgvg tj01t~txt cobk~kokrs cobk~belnr
  from cobk inner join tj01t
  on cobk~orgvg = tj01t~vrgng
  into corresponding fields of table t_cobk
  where tj01t~spras = sy-langu.
* 将ORGVG,TXT写入T_COEP
  loop at t_coep.
  read table t_cobk with key belnr = t_coep-belnr  kokrs = t_coep-kokrs
  binary search.
    if sy-subrc = 0.
      t_coep-orgvg = t_cobk-orgvg.
      t_coep-txt = t_cobk-txt.
      modify t_coep .
    endif.
  endloop.
*如果为重估类型 人工写入
  loop at t_coep where orgvg = ''.
    select single tj01t~txt into t_coep-txt
    from tj01t
    where vrgng = 'RKLN'.
    t_coep-orgvg = 'RKLN'.
    modify t_coep.
  endloop.
*将订单编号写入T_COEP
  loop at t_coep.
    read table t_afko with key objnr = t_coep-objnr binary search.
    if sy-subrc = 0.
      t_coep-aufnr = t_afko-aufnr.
      modify t_coep.
    endif.
  endloop.
  data: h1 like coep-sgtxt,
        h2 like coep-sgtxt,
        h3 like coep-sgtxt.
*非差异数据分解SGTXT字段为KHD,CXBH,BCBH,写入GT_TABLE
  loop at t_coep.
    if t_coep-matnr = '' and t_coep-uspob = ''.
    else.
      if t_coep-sgtxt <> ''.
        split t_coep-sgtxt at ';' into h1 h2.
        split h2 at ';' into h2 h3.
        gt_table-khd = h1.
        gt_table-cxbh = h2.
        gt_table-bcbh = h3.
      endif.
    endif.
    move-corresponding t_coep to gt_table.
    append gt_table.
  endloop.

  if not p_khd[] is initial.
    loop at gt_table.
      if gt_table not in p_khd[].
        delete gt_table.
      endif.
    endloop.
  endif.
  loop at gt_table.
    gt_outtab-unit = gt_table-meinb.
    move-corresponding gt_table to gt_outtab.
    append gt_outtab.
  endloop.
endform.                    " getdata
*&---------------------------------------------------------------------*
*&      Form  alvdata
*&---------------------------------------------------------------------*
form alvdata .
  perform setlayout.
  call function 'REUSE_ALV_GRID_DISPLAY'
    exporting
      i_callback_program = gs_variant-report
      it_fieldcat        = gt_fieldcat[]
      it_sort            = gt_sort[]
      is_variant         = gs_variant
      is_layout          = sla
    tables
      t_outtab           = gt_outtab[]
    exceptions
      program_error      = 1
      others             = 2.
endform.                    " alvdata
*---------------------------------------------------------------------*
*       FORM LAYOUT_SORT_BUILD                                        *
*---------------------------------------------------------------------*
*       Sorting                                                       *
*---------------------------------------------------------------------*
*  -->  LT_SORT                                                       *
*---------------------------------------------------------------------*
form layout_sort_build changing lt_sort type slis_t_sortinfo_alv.
  data ls_sort type slis_sortinfo_alv.
* Key
  clear ls_sort.
  ls_sort-fieldname = 'KHD'.
  ls_sort-spos      = 1.
  ls_sort-up        = 'X'.
  ls_sort-subtot    = 'X'.
  append ls_sort to lt_sort.
  clear ls_sort.
  ls_sort-fieldname = 'MATNR'.
  ls_sort-spos      = 1.
  ls_sort-up        = 'X'.
  ls_sort-subtot    = 'X'.
  append ls_sort to lt_sort.
  clear ls_sort.
  ls_sort-fieldname = 'USPOB'.
  ls_sort-spos      = 1.
  ls_sort-up        = 'X'.
  ls_sort-subtot    = 'X'.
  append ls_sort to lt_sort.
  clear ls_sort.
  ls_sort-fieldname = 'TXT'.
  ls_sort-spos      = 1.
  ls_sort-up        = 'X'.
  ls_sort-subtot    = 'X'.
  append ls_sort to lt_sort.
endform.  " LAYOUT_sort_build
*&---------------------------------------------------------------------*
*&      Form  prepare_field_catalog
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
form prepare_field_catalog changing lt_fieldcat type slis_t_fieldcat_alv
.
  data ls_fieldcat type slis_fieldcat_alv.
  clear ls_fieldcat.
  ls_fieldcat-fieldname    = 'KHD'.
  ls_fieldcat-tabname      = 'gt_outtab'.
  ls_fieldcat-reptext_ddic = '考核点'.
  ls_fieldcat-outputlen    = 10.
  ls_fieldcat-no_sum       = 'X'.
  ls_fieldcat-key          = 'X'.
  append ls_fieldcat to lt_fieldcat.
  clear ls_fieldcat.
  ls_fieldcat-fieldname    = 'CXBH'.
  ls_fieldcat-tabname      = 'gt_outtab'.
  ls_fieldcat-reptext_ddic = '产线编号'.
  ls_fieldcat-outputlen    = 10.
  ls_fieldcat-no_sum       = 'X'.
*  ls_fieldcat-key          = 'X'.
  append ls_fieldcat to lt_fieldcat.
  clear ls_fieldcat.
  ls_fieldcat-fieldname    = 'BCBH'.
  ls_fieldcat-tabname      = 'gt_outtab'.
  ls_fieldcat-reptext_ddic = '班次编号'.
  ls_fieldcat-outputlen    = 10.
  ls_fieldcat-no_sum       = 'X'.
*  ls_fieldcat-key          = 'X'.
  append ls_fieldcat to lt_fieldcat.

  clear ls_fieldcat.
  ls_fieldcat-fieldname    = 'MATNR'.
  ls_fieldcat-tabname      = 'gt_outtab'.
  ls_fieldcat-reptext_ddic = '物料编号'.
  ls_fieldcat-outputlen    = 10.
  ls_fieldcat-no_sum       = 'X'.
  ls_fieldcat-key          = 'X'.
  append ls_fieldcat to lt_fieldcat.
  clear ls_fieldcat.
  ls_fieldcat-fieldname    = 'USPOB'.
  ls_fieldcat-tabname      = 'gt_outtab'.
  ls_fieldcat-reptext_ddic = '成本中心'.
  ls_fieldcat-outputlen    = 20.
  ls_fieldcat-no_sum       = 'X'.
  ls_fieldcat-key          = 'X'.
  append ls_fieldcat to lt_fieldcat.
  clear ls_fieldcat.
  ls_fieldcat-fieldname    = 'AUFNR'.
  ls_fieldcat-tabname      = 'gt_outtab'.
  ls_fieldcat-reptext_ddic = '生产订单编号'.
  ls_fieldcat-outputlen    = 10.
  ls_fieldcat-no_sum       = 'X'.
*  ls_fieldcat-key          = 'X'.
  append ls_fieldcat to lt_fieldcat.
  clear ls_fieldcat.
  ls_fieldcat-fieldname    = 'KSTAR'.
  ls_fieldcat-tabname      = 'gt_outtab'.
  ls_fieldcat-reptext_ddic = '成本要素'.
  ls_fieldcat-outputlen    = 10.
  ls_fieldcat-no_sum       = 'X'.
*  ls_fieldcat-key          = 'X'.
  append ls_fieldcat to lt_fieldcat.
  clear ls_fieldcat.
  ls_fieldcat-fieldname    = 'TXT'.
  ls_fieldcat-tabname      = 'gt_outtab'.
  ls_fieldcat-reptext_ddic = '交易业务'.
  ls_fieldcat-outputlen    = 20.
  ls_fieldcat-no_sum       = 'X'.
  ls_fieldcat-key          = 'X'.
  append ls_fieldcat to lt_fieldcat.
* Num
  clear ls_fieldcat.
  ls_fieldcat-fieldname    = 'MEGBTR'.
  ls_fieldcat-tabname      = 'gt_outtab'.
  ls_fieldcat-reptext_ddic = '数量'.
  ls_fieldcat-outputlen    = 10.
*  ls_fieldcat-do_sum       = 'X'.
  ls_fieldcat-no_sum       = 'X'.
  append ls_fieldcat to lt_fieldcat.
  clear ls_fieldcat.
  ls_fieldcat-fieldname    = 'WOGBTR'.
  ls_fieldcat-tabname      = 'gt_outtab'.
  ls_fieldcat-reptext_ddic = '金额'.
  ls_fieldcat-outputlen    = 10 .
  ls_fieldcat-do_sum       = 'X'.
  append ls_fieldcat to lt_fieldcat.
* UNIT
  clear ls_fieldcat.
  ls_fieldcat-fieldname    = 'UNIT'.
  ls_fieldcat-tabname      = 'gt_outtab'.
  ls_fieldcat-reptext_ddic = '单位'.
  ls_fieldcat-outputlen    = 10.
*  ls_fieldcat-do_sum       = 'X'.
  append ls_fieldcat to lt_fieldcat.
endform.                    "prepare_field_catalog
*&---------------------------------------------------------------------*
*&      Form  setlayout
*&---------------------------------------------------------------------*
form setlayout .
  sla-colwidth_optimize = 'X'.
  sla-zebra             = 'X'.
endform.                    " setlayout

你可能感兴趣的:(process)