费用凭证行明细报表

report  zfi_r_29_gln.

type-pools:slis.

tables:bkpf,bseg,cskt,csks,csku,setheadert,skat.

include zfi_r_29_glntop.
include zfi_r_29_glnsel.
include zfi_r_29_glnf01.

start-of-selection.
if s_kostl[] is initial and s_khinr[] is initial.
  message i000(zfi001with '请输入成本中心或成本中心组!'.
  stop.
  elseif s_kostl[] is not initial and s_khinr[] is not initial.
    message i000(zfi001with '成本中心或成本中心组只能输入其一!'.
  stop.
  endif.
perform get_data.
perform e01_fieldcat_init using gt_fieldcat[].
perform f_show_grid.

***********************************************************************************
*&---------------------------------------------------------------------*
*&  包括                ZFI_R_29_GLTOP
*&---------------------------------------------------------------------*

databegin of lt_tab occurs 0,
*           butxt         LIKE t001-butxt,
*           ltext         LIKE t003t-ltext,
           bukrs         like bkpf-bukrs,
*           BLART         LIKE BKPF-BLART,
           gjahr         like bkpf-gjahr,
*           MONAT         LIKE bkpf-MONAT,
           bldat         like bkpf-bldat,
           budat         like bkpf-budat,
           xref3         like bseg-xref3,
           kstar         like bseg-kstar,
           ktext         like csku-ktext" 成本要素
           kostl         like bseg-kostl,
           ktextc        like cskt-ktext,
           khinr         like csks-khinr,
           bktxt         like bkpf-bktxt,
*           belnr         LIKE bkpf-belnr,
           sgtxt         like bseg-sgtxt,
           shkzg         like bseg-shkzg,  "借贷标志
*           lokkt         LIKE bseg-lokkt,
           hkont         like bseg-hkont,
*           KUNNR         LIKE BSEG-KUNNR,
*           LIFNR         LIKE BSEG-LIFNR,
           txt20         like skat-txt20,
*           waers         LIKE bkpf-waers,
*           kursf         LIKE bkpf-kursf,
*           wrbtr         like bseg-wrbtr,
           dmbtr         like bseg-dmbtr,
           aufnr         like bseg-aufnr"内部订单号
           auart         like aufk-auart"订单类型
           txt           like aufk-ktext,   "订单类型描述
           matnr         like bseg-matnr,
           maktx         like makt-maktx,
           fkber         like bseg-fkber"功能范围
           belnr         like bkpf-belnr,
           xblnr         like bkpf-xblnr,
           usnam         like bkpf-usnam,
*           GSBER         like bseg-GSBER,
*           PRCTR         LIKE BSEG-PRCTR,
*           KTEXTF        LIKE CEPCT-KTEXT,
*           BUZEI         LIKE BSEG-BUZEI,
*           BSTAT         LIKE BKPF-BSTAT,
*           vname         like LFA1-name1,
*           cname         like kna1-name1,
       end of lt_tab.

typesbegin of ls_tab,
*           butxt         LIKE t001-butxt,
*           ltext         LIKE t003t-ltext,
           bukrs         like bkpf-bukrs,
*           BLART         LIKE BKPF-BLART,
           gjahr         like bkpf-gjahr,
*           MONAT         LIKE bkpf-MONAT,
           bldat         like bkpf-bldat,
           budat         like bkpf-budat,
           xref3         like bseg-xref3,
           kstar         like bseg-kstar,
           ktext         like csku-ktext" 成本要素
           kostl         like bseg-kostl,
           ktextc        like cskt-ktext,
           khinr         like csks-khinr,
           bktxt         like bkpf-bktxt,
*           belnr         LIKE bkpf-belnr,
           sgtxt         like bseg-sgtxt,
           shkzg         like bseg-shkzg,  "借贷标志
*           lokkt         LIKE bseg-lokkt,
           hkont         like bseg-hkont,
*           KUNNR         LIKE BSEG-KUNNR,
*           LIFNR         LIKE BSEG-LIFNR,
           txt20         like skat-txt20,
*           waers         LIKE bkpf-waers,
*           kursf         LIKE bkpf-kursf,
*           wrbtr         like bseg-wrbtr,
           dmbtr         like bseg-dmbtr,
           aufnr         like bseg-aufnr"内部订单号
           matnr         like bseg-matnr,
           maktx         like makt-maktx,
           fkber         like bseg-fkber"功能范围
           belnr         like bkpf-belnr,
           xblnr         like bkpf-xblnr,
           usnam         like bkpf-usnam,
*           GSBER         like bseg-GSBER,
*           PRCTR         LIKE BSEG-PRCTR,
*           KTEXTF        LIKE CEPCT-KTEXT,
*           BUZEI         LIKE BSEG-BUZEI,
*           BSTAT         LIKE BKPF-BSTAT,
*           vname         like LFA1-name1,
*           cname         like kna1-name1,
       end of ls_tab.

data:begin of lt_bkpf occurs 0,
   bukrs like bkpf-bukrs,
   gjahr like bkpf-gjahr,
   bldat like bkpf-bldat,
   budat like bkpf-budat,
   belnr like bkpf-belnr,
   bstat like bkpf-bstat,
   bktxt like bkpf-bktxt,
   xblnr like bkpf-xblnr,
   usnam like bkpf-usnam,
  end of lt_bkpf.

data:begin of lt_csks occurs 0,
  kokrs like csks-kokrs,
  kostl like csks-kostl,
  datbi like csks-datbi,
  bkzkp like csks-bkzkp,
  khinr like csks-khinr,
  end of lt_csks.

datags_layout       type slis_layout_alv,
      gt_fieldcat     type slis_t_fieldcat_alv,
      gt_sp_group     type slis_t_sp_group_alv,
      gt_sort         type slis_t_sortinfo_alv,
      gt_events       type slis_t_event,
      gs_print        type slis_print_alv,
      g_variant       type disvariant.

datag_repid like sy-repid,
      g_datum like  sy-datum.

datagt_list_top_of_page type slis_t_listheader,
      i_events type slis_t_event ,
      it_lines like tline occurs with header line.

*******************************************************************************************************
*&---------------------------------------------------------------------*
*&  包括                ZFI_R_29_GLF01
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*&      Form  GET_DATA
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
form get_data .

  select   bkpf~bukrs bkpf~gjahr  bkpf~belnr bkpf~bstat bkpf~bldat
           bkpf~budat bkpf~bktxt bkpf~xblnr bkpf~usnam
  into corresponding fields of table lt_bkpf
          from bkpf
          where bukrs in s_bukrs
          and   gjahr in s_gjahr
          and   budat in s_budat.
*          AND bstat IN (' ', 'A', 'B', 'D', 'M', 'S', 'V', 'W', 'Z').

  if lt_bkpf[] is initial.
    message i000(zfi001with 'No data ,Please enter agein!'.
    stop.
  else.
    sort lt_bkpf.
  endif.

  if s_kostl[] is not initial.  " 选择条件成本中心不为空

    " 凭证表体信息        VBSEGS~lokkt       VBSEGS~hkont

    select bseg~xref3 bseg~kstar bseg~kostl bseg~sgtxt
           bseg~shkzg bseg~hkont bseg~dmbtr bseg~aufnr
           bseg~matnr bseg~fkber "功能范围
           bukrs gjahr belnr

    into corresponding fields of table lt_tab
    from bseg
    for all entries in lt_bkpf
    where bukrs lt_bkpf-bukrs
    and belnr lt_bkpf-belnr
    and gjahr lt_bkpf-gjahr
    and hkont in s_hkont
    and kostl in s_kostl
    and kstar in s_kstar
    and aufnr in s_aufnr
    and xref3 in s_xref3.

    loop at lt_tab.
*      LOOP AT LT_BKPF WHERE BUKRS = LT_TAB-BUKRS
*                      AND   GJAHR = LT_TAB-GJAHR
*                      AND   belnr = LT_TAB-belnr.
*        LT_TAB-BLDAT = LT_BKPF-BLDAT .
*        LT_TAB-BUDAT = LT_BKPF-BUDAT .
*        LT_TAB-BKTXT = LT_BKPF-BKTXT .
*        LT_TAB-XBLNR = LT_BKPF-XBLNR .
*        LT_TAB-USNAM = LT_BKPF-USNAM.
*
*      ENDLOOP.
      select single bldat budat bktxt xblnr usnam
        into (lt_tab-bldat,lt_tab-budat,lt_tab-bktxt,lt_tab-xblnr,lt_tab-usnam)
        from bkpf
        where bukrs lt_tab-bukrs
        and   gjahr lt_tab-gjahr
        and   belnr lt_tab-belnr.

      select single ktext into lt_tab-ktext "成本要素
      from csku
        where kstar lt_tab-kstar
        and   ktopl '1000'
        and   spras '1'.

      select single ktext into lt_tab-ktextc "成本中心
        from cskt
        where kostl lt_tab-kostl
        and   kokrs '1000'
        and   spras '1'.

      select single  txt20 into lt_tab-txt20  "科目
        from  skat
        where saknr lt_tab-hkont
        and   ktopl '1000'
        and   spras '1'.

      if lt_tab-shkzg 'H'.
         lt_tab-dmbtr -* lt_tab-dmbtr.
        endif.

      if lt_tab-aufnr is not initial.
        select single autyp ktext into (lt_tab-auart,lt_tab-txt"订单类别、名次
          from aufk
          where aufnr lt_tab-aufnr.
      endif.

      if lt_tab-matnr is not initial.
        select single maktx into lt_tab-maktx  "物料
          from makt
          where matnr lt_tab-matnr
          and   spras '1'.
      endif.

      call function 'CONVERSION_EXIT_ALPHA_OUTPUT'
        exporting
          input  lt_tab-kstar
        importing
          output lt_tab-kstar.

      call function 'CONVERSION_EXIT_ALPHA_OUTPUT'
        exporting
          input  lt_tab-hkont
        importing
          output lt_tab-hkont.

      call function 'CONVERSION_EXIT_ALPHA_OUTPUT'
        exporting
          input  lt_tab-aufnr
        importing
          output lt_tab-aufnr.

      call function 'CONVERSION_EXIT_ALPHA_OUTPUT'
        exporting
          input  lt_tab-matnr
        importing
          output lt_tab-matnr.

      modify lt_tab.

    endloop.

  endif.

  if s_khinr[] is not initial.

    select kostl kokrs  datbi bkzkp khinr
      from csks
      into corresponding fields of table lt_csks
      where khinr in s_khinr
      and   datbi >= sy-datum
      and   bkzkp <> 'X'.

    if lt_csks[] is initial.
      message i000(zfi001with 'No data ,Please enter agein!'.
      stop.
    else.
      sort lt_csks.
    endif.

*    LOOP AT LT_CSKS INTO
*      S_KOSTL.
*      ENDLOOP.

    " 凭证表体信息        VBSEGS~lokkt       VBSEGS~hkont

    select bseg~xref3 bseg~kstar bseg~kostl bseg~sgtxt
           bseg~shkzg bseg~hkont bseg~dmbtr bseg~aufnr
           bseg~matnr bseg~fkber "功能范围
           bukrs gjahr belnr
    into corresponding fields of table lt_tab
    from bseg
    for all entries in lt_bkpf
    where bukrs lt_bkpf-bukrs
    and belnr lt_bkpf-belnr
    and gjahr lt_bkpf-gjahr
    and hkont in s_hkont
*    AND KOSTL IN LT_CSKS-KOSTL
    and kstar in s_kstar
    and aufnr in s_aufnr
    and xref3 in s_xref3.

    loop at lt_tab.
      loop at lt_csks where kostl lt_tab-kostl.
        lt_tab-khinr lt_csks-khinr.
      endloop.

      if lt_tab-khinr is initial.
        delete lt_tab.
        continue.
      endif.
*
*      LOOP AT LT_BKPF WHERE BUKRS = LT_TAB-BUKRS
*                        AND   GJAHR = LT_TAB-GJAHR
*                        AND   belnr = LT_TAB-belnr.
*        LT_TAB-BLDAT = LT_BKPF-BLDAT .
*        LT_TAB-BUDAT = LT_BKPF-BUDAT .
*        LT_TAB-BKTXT = LT_BKPF-BKTXT .
*        LT_TAB-XBLNR = LT_BKPF-XBLNR .
*        LT_TAB-USNAM = LT_BKPF-USNAM.
*
*      ENDLOOP.

      select single bldat budat bktxt xblnr usnam
        into (lt_tab-bldat,lt_tab-budat,lt_tab-bktxt,lt_tab-xblnr,lt_tab-usnam)
        from bkpf
        where bukrs lt_tab-bukrs
        and   gjahr lt_tab-gjahr
        and   belnr lt_tab-belnr.

      select single ktext into lt_tab-ktext "成本要素
      from csku
        where kstar lt_tab-kstar
        and   ktopl '1000'
        and   spras '1'.

      select single ktext into lt_tab-ktextc "成本中心
        from cskt
        where kostl lt_tab-kostl
        and   kokrs '1000'
        and   spras '1'.

      select single  txt20 into lt_tab-txt20  "科目
        from  skat
        where saknr lt_tab-hkont
        and   ktopl '1000'
        and   spras '1'.

      if lt_tab-shkzg 'H'.
         lt_tab-dmbtr -* lt_tab-dmbtr.
        endif.

      if lt_tab-aufnr is not initial.
        select single autyp ktext into (lt_tab-auart,lt_tab-txt"订单类别、名次
          from aufk
          where aufnr lt_tab-aufnr.
      endif.

      if lt_tab-matnr is not initial.
        select single maktx into lt_tab-maktx  "物料
          from makt
          where matnr lt_tab-matnr
          and   spras '1'.
      endif.

      call function 'CONVERSION_EXIT_ALPHA_OUTPUT'
        exporting
          input  lt_tab-kstar
        importing
          output lt_tab-kstar.

      call function 'CONVERSION_EXIT_ALPHA_OUTPUT'
        exporting
          input  lt_tab-hkont
        importing
          output lt_tab-hkont.

      call function 'CONVERSION_EXIT_ALPHA_OUTPUT'
        exporting
          input  lt_tab-aufnr
        importing
          output lt_tab-aufnr.

      call function 'CONVERSION_EXIT_ALPHA_OUTPUT'
        exporting
          input  lt_tab-matnr
        importing
          output lt_tab-matnr.

      modify lt_tab.

    endloop.


  endif.

endform.                    " GET_DATA
*&---------------------------------------------------------------------*
*&      Form  E01_FIELDCAT_INIT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_GT_FIELDCAT[]  text
*----------------------------------------------------------------------*
form e01_fieldcat_init  using e01_lt_fieldcat type slis_t_fieldcat_alv.
  datals_fieldcat type slis_fieldcat_alv,
        l_fname type lvc_fname,
        s_field type string.

  clear ls_fieldcat.
  ls_fieldcat-fieldname    'BLDAT'.
  ls_fieldcat-seltext_s    '凭证日期'.
  ls_fieldcat-seltext_m    '凭证日期'.
  ls_fieldcat-seltext_l    '凭证日期'.
  ls_fieldcat-outputlen    '10'.
  append ls_fieldcat to e01_lt_fieldcat.

  clear ls_fieldcat.
  ls_fieldcat-fieldname    'BUDAT'.
  ls_fieldcat-seltext_s    '过帐日期'.
  ls_fieldcat-seltext_m    '过帐日期'.
  ls_fieldcat-seltext_l    '过帐日期'.
  ls_fieldcat-outputlen    '10'.
  append ls_fieldcat to e01_lt_fieldcat.

  clear ls_fieldcat.
  ls_fieldcat-fieldname    'XREF3'.
  ls_fieldcat-seltext_s    '参考码3'.
  ls_fieldcat-seltext_m    '参考码3'.
  ls_fieldcat-seltext_l    '参考码3'.
  ls_fieldcat-outputlen    '10'.
  append ls_fieldcat to e01_lt_fieldcat.

  clear ls_fieldcat.
  ls_fieldcat-fieldname    'KSTAR'.
  ls_fieldcat-seltext_s    '成本要素'.
  ls_fieldcat-seltext_m    '成本要素'.
  ls_fieldcat-seltext_l    '成本要素'.
  ls_fieldcat-outputlen    '10'.
  append ls_fieldcat to e01_lt_fieldcat.

  clear ls_fieldcat.
  ls_fieldcat-fieldname    'KTEXT'.
  ls_fieldcat-seltext_s    '成本要素描述'.
  ls_fieldcat-seltext_m    '成本要素描述'.
  ls_fieldcat-seltext_l    '成本要素描述'.
  ls_fieldcat-outputlen    '20'.
  append ls_fieldcat to e01_lt_fieldcat.

  clear ls_fieldcat.
  ls_fieldcat-fieldname    'KOSTL'.
  ls_fieldcat-seltext_s    '成本中心'.
  ls_fieldcat-seltext_m    '成本中心'.
  ls_fieldcat-seltext_l    '成本中心'.
  ls_fieldcat-outputlen    '10'.
  append ls_fieldcat to e01_lt_fieldcat.

  clear ls_fieldcat.
  ls_fieldcat-fieldname    'KTEXTC'.
  ls_fieldcat-seltext_s    '成本中心描述'.
  ls_fieldcat-seltext_m    '成本中心描述'.
  ls_fieldcat-seltext_l    '成本中心描述'.
  ls_fieldcat-outputlen    '20'.
  append ls_fieldcat to e01_lt_fieldcat.

  clear ls_fieldcat.
  ls_fieldcat-fieldname    'BKTXT'.
  ls_fieldcat-seltext_s    '凭证抬头文本'.
  ls_fieldcat-seltext_m    '凭证抬头文本'.
  ls_fieldcat-seltext_l    '凭证抬头文本'.
  ls_fieldcat-outputlen    '25'.
  append ls_fieldcat to e01_lt_fieldcat.

  clear ls_fieldcat.
  ls_fieldcat-fieldname    'SGTXT'.
  ls_fieldcat-seltext_s    '项目文本'.
  ls_fieldcat-seltext_m    '项目文本'.
  ls_fieldcat-seltext_l    '项目文本'.
  ls_fieldcat-outputlen    '30'.
  append ls_fieldcat to e01_lt_fieldcat.

  clear ls_fieldcat.
  ls_fieldcat-fieldname    'SHKZG'.
  ls_fieldcat-seltext_s    'D/C'.
  ls_fieldcat-seltext_m    'D/C'.
  ls_fieldcat-seltext_l    'D/C'.
  ls_fieldcat-outputlen    '1'.
  append ls_fieldcat to e01_lt_fieldcat.

  clear ls_fieldcat.
  ls_fieldcat-fieldname    'HKONT'.
  ls_fieldcat-seltext_s    '总分类帐帐目'.
  ls_fieldcat-seltext_m    '总分类帐帐目'.
  ls_fieldcat-seltext_l    '总分类帐帐目'.
  ls_fieldcat-outputlen    '10'.
  append ls_fieldcat to e01_lt_fieldcat.

  clear ls_fieldcat.
  ls_fieldcat-fieldname    'TXT20'.
  ls_fieldcat-seltext_s    '总帐科目名称'.
  ls_fieldcat-seltext_m    '总帐科目名称'.
  ls_fieldcat-seltext_l    '总帐科目名称'.
  ls_fieldcat-outputlen    '20'.
  append ls_fieldcat to e01_lt_fieldcat.

  clear ls_fieldcat.
  ls_fieldcat-fieldname    'DMBTR'.
  ls_fieldcat-seltext_s    '本位币金额'.
  ls_fieldcat-seltext_m    '本位币的金额'.
  ls_fieldcat-seltext_l    '本位币计的金额'.
  ls_fieldcat-do_sum       'X'.
  ls_fieldcat-outputlen    '13'.
  append ls_fieldcat to e01_lt_fieldcat.

  clear ls_fieldcat.
  ls_fieldcat-fieldname    'AUFNR'.
  ls_fieldcat-seltext_s    '订单号'.
  ls_fieldcat-seltext_m    '内部订单号'.
  ls_fieldcat-seltext_l    '内部订单号'.
  ls_fieldcat-outputlen    '12'.
  append ls_fieldcat to e01_lt_fieldcat.

  clear ls_fieldcat.
  ls_fieldcat-fieldname    'AUART'.
  ls_fieldcat-seltext_s    '订单类型'.
  ls_fieldcat-seltext_m    '订单类型'.
  ls_fieldcat-seltext_l    '订单类型'.
  ls_fieldcat-outputlen    '7'.
  append ls_fieldcat to e01_lt_fieldcat.

  clear ls_fieldcat.
  ls_fieldcat-fieldname    'TXT'.
  ls_fieldcat-seltext_s    '内部订单名称'.
  ls_fieldcat-seltext_m    '内部订单名称'.
  ls_fieldcat-seltext_l    '内部订单名称'.
  ls_fieldcat-outputlen    '20'.
  append ls_fieldcat to e01_lt_fieldcat.

  clear ls_fieldcat.
  ls_fieldcat-fieldname    'MATNR'.
  ls_fieldcat-seltext_s    '物料号'.
  ls_fieldcat-seltext_m    '物料号'.
  ls_fieldcat-seltext_l    '物料号'.
  ls_fieldcat-outputlen    '13'.
  append ls_fieldcat to e01_lt_fieldcat.

  clear ls_fieldcat.
  ls_fieldcat-fieldname    'MAKTX'.
  ls_fieldcat-seltext_s    '物料描述'.
  ls_fieldcat-seltext_m    '物料描述'.
  ls_fieldcat-seltext_l    '物料描述'.
  ls_fieldcat-outputlen    '40'.
  append ls_fieldcat to e01_lt_fieldcat.

  clear ls_fieldcat.
  ls_fieldcat-fieldname    'FKBER'.
  ls_fieldcat-seltext_s    '功能范围'.
  ls_fieldcat-seltext_m    '功能范围'.
  ls_fieldcat-seltext_l    '功能范围'.
  ls_fieldcat-outputlen    '7'.
  append ls_fieldcat to e01_lt_fieldcat.

  clear ls_fieldcat.
  ls_fieldcat-fieldname    'BELNR'.
  ls_fieldcat-seltext_s    '会计凭证编号'.
  ls_fieldcat-seltext_m    '会计凭证编号'.
  ls_fieldcat-seltext_l    '会计凭证编号'.
  ls_fieldcat-outputlen    '10'.
  append ls_fieldcat to e01_lt_fieldcat.

  clear ls_fieldcat.
  ls_fieldcat-fieldname    'XBLNR'.
  ls_fieldcat-seltext_s    '参考凭证号'.
  ls_fieldcat-seltext_m    '参考凭证号'.
  ls_fieldcat-seltext_l    '参考凭证号'.
  ls_fieldcat-outputlen    '12'.
  append ls_fieldcat to e01_lt_fieldcat.

  clear ls_fieldcat.
  ls_fieldcat-fieldname    'USNAM'.
  ls_fieldcat-seltext_s    '用户名'.
  ls_fieldcat-seltext_m    '用户名'.
  ls_fieldcat-seltext_l    '用户名'.
  ls_fieldcat-outputlen    '8'.
  append ls_fieldcat to e01_lt_fieldcat.

endform.                    " E01_FIELDCAT_INIT
*&---------------------------------------------------------------------*
*&      Form  F_SHOW_GRID
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
form f_show_grid .

  call function 'REUSE_ALV_GRID_DISPLAY'
    exporting
*        I_BACKGROUND_ID    = 'ALV_WALLPAPER2'
      i_callback_program sy-repid
*        I_CALLBACK_TOP_OF_PAGE = 'TOP_OF_PAGE '
      i_structure_name   'LS_TAB'
*        IS_LAYOUT          = GS_LAYOUT
*      I_CALLBACK_PF_STATUS_SET = 'SET_PF_STATUS'
      i_callback_user_command 'USER_CALLBACK'
      it_fieldcat        gt_fieldcat[]
      it_special_groups  gt_sp_group[]
      it_sort            gt_sort[]
      i_save             'A'
      is_variant         g_variant
      it_events          gt_events[]
      is_print           gs_print
    tables
      t_outtab           lt_tab.

endform.                    " F_SHOW_GRID
*&---------------------------------------------------------------------*
*&      Form  USER_CALLBACK
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->RF_UCOMM     text
*      -->RS_SELFIELD  text
*----------------------------------------------------------------------*
form user_callback using rf_ucomm type sy-ucomm
                        rs_selfield type slis_selfield.
  case rf_ucomm.
    when '&IC1'.
      data msg type string.
      field-symbols  like line of lt_tab.
      read table lt_tab index rs_selfield-tabindex assigning .
      if sy-subrc 0.
        set parameter id'BLN' field -belnr,
                          'BUK' field -bukrs,
                          'GJR' field -gjahr.
        call transaction 'FB03' and skip first screen.
      endif.
  endcase.
endform.                    "USER_CALLBACK

**********************************************************************************************************
*&---------------------------------------------------------------------*
*&  包括                ZFI_R_29_GLF01
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*&      Form  GET_DATA
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
form get_data .

  select   bkpf~bukrs bkpf~gjahr  bkpf~belnr bkpf~bstat bkpf~bldat
           bkpf~budat bkpf~bktxt bkpf~xblnr bkpf~usnam
  into corresponding fields of table lt_bkpf
          from bkpf
          where bukrs in s_bukrs
          and   gjahr in s_gjahr
          and   budat in s_budat.
*          AND bstat IN (' ', 'A', 'B', 'D', 'M', 'S', 'V', 'W', 'Z').

  if lt_bkpf[] is initial.
    message i000(zfi001with 'No data ,Please enter agein!'.
    stop.
  else.
    sort lt_bkpf.
  endif.

  if s_kostl[] is not initial.  " 选择条件成本中心不为空

    " 凭证表体信息        VBSEGS~lokkt       VBSEGS~hkont

    select bseg~xref3 bseg~kstar bseg~kostl bseg~sgtxt
           bseg~shkzg bseg~hkont bseg~dmbtr bseg~aufnr
           bseg~matnr bseg~fkber "功能范围
           bukrs gjahr belnr

    into corresponding fields of table lt_tab
    from bseg
    for all entries in lt_bkpf
    where bukrs lt_bkpf-bukrs
    and belnr lt_bkpf-belnr
    and gjahr lt_bkpf-gjahr
    and hkont in s_hkont
    and kostl in s_kostl
    and kstar in s_kstar
    and aufnr in s_aufnr
    and xref3 in s_xref3.

    loop at lt_tab.
*      LOOP AT LT_BKPF WHERE BUKRS = LT_TAB-BUKRS
*                      AND   GJAHR = LT_TAB-GJAHR
*                      AND   belnr = LT_TAB-belnr.
*        LT_TAB-BLDAT = LT_BKPF-BLDAT .
*        LT_TAB-BUDAT = LT_BKPF-BUDAT .
*        LT_TAB-BKTXT = LT_BKPF-BKTXT .
*        LT_TAB-XBLNR = LT_BKPF-XBLNR .
*        LT_TAB-USNAM = LT_BKPF-USNAM.
*
*      ENDLOOP.
      select single bldat budat bktxt xblnr usnam
        into (lt_tab-bldat,lt_tab-budat,lt_tab-bktxt,lt_tab-xblnr,lt_tab-usnam)
        from bkpf
        where bukrs lt_tab-bukrs
        and   gjahr lt_tab-gjahr
        and   belnr lt_tab-belnr.

      select single ktext into lt_tab-ktext "成本要素
      from csku
        where kstar lt_tab-kstar
        and   ktopl '1000'
        and   spras '1'.

      select single ktext into lt_tab-ktextc "成本中心
        from cskt
        where kostl lt_tab-kostl
        and   kokrs '1000'
        and   spras '1'.

      select single  txt20 into lt_tab-txt20  "科目
        from  skat
        where saknr lt_tab-hkont
        and   ktopl '1000'
        and   spras '1'.

      if lt_tab-shkzg 'H'.
         lt_tab-dmbtr -* lt_tab-dmbtr.
        endif.

      if lt_tab-aufnr is not initial.
        select single autyp ktext into (lt_tab-auart,lt_tab-txt"订单类别、名次
          from aufk
          where aufnr lt_tab-aufnr.
      endif.

      if lt_tab-matnr is not initial.
        select single maktx into lt_tab-maktx  "物料
          from makt
          where matnr lt_tab-matnr
          and   spras '1'.
      endif.

      call function 'CONVERSION_EXIT_ALPHA_OUTPUT'
        exporting
          input  lt_tab-kstar
        importing
          output lt_tab-kstar.

      call function 'CONVERSION_EXIT_ALPHA_OUTPUT'
        exporting
          input  lt_tab-hkont
        importing
          output lt_tab-hkont.

      call function 'CONVERSION_EXIT_ALPHA_OUTPUT'
        exporting
          input  lt_tab-aufnr
        importing
          output lt_tab-aufnr.

      call function 'CONVERSION_EXIT_ALPHA_OUTPUT'
        exporting
          input  lt_tab-matnr
        importing
          output lt_tab-matnr.

      modify lt_tab.

    endloop.

  endif.

  if s_khinr[] is not initial.

    select kostl kokrs  datbi bkzkp khinr
      from csks
      into corresponding fields of table lt_csks
      where khinr in s_khinr
      and   datbi >= sy-datum
      and   bkzkp <> 'X'.

    if lt_csks[] is initial.
      message i000(zfi001with 'No data ,Please enter agein!'.
      stop.
    else.
      sort lt_csks.
    endif.

*    LOOP AT LT_CSKS INTO
*      S_KOSTL.
*      ENDLOOP.

    " 凭证表体信息        VBSEGS~lokkt       VBSEGS~hkont

    select bseg~xref3 bseg~kstar bseg~kostl bseg~sgtxt
           bseg~shkzg bseg~hkont bseg~dmbtr bseg~aufnr
           bseg~matnr bseg~fkber "功能范围
           bukrs gjahr belnr
    into corresponding fields of table lt_tab
    from bseg
    for all entries in lt_bkpf
    where bukrs lt_bkpf-bukrs
    and belnr lt_bkpf-belnr
    and gjahr lt_bkpf-gjahr
    and hkont in s_hkont
*    AND KOSTL IN LT_CSKS-KOSTL
    and kstar in s_kstar
    and aufnr in s_aufnr
    and xref3 in s_xref3.

    loop at lt_tab.
      loop at lt_csks where kostl lt_tab-kostl.
        lt_tab-khinr lt_csks-khinr.
      endloop.

      if lt_tab-khinr is initial.
        delete lt_tab.
        continue.
      endif.
*
*      LOOP AT LT_BKPF WHERE BUKRS = LT_TAB-BUKRS
*                        AND   GJAHR = LT_TAB-GJAHR
*                        AND   belnr = LT_TAB-belnr.
*        LT_TAB-BLDAT = LT_BKPF-BLDAT .
*        LT_TAB-BUDAT = LT_BKPF-BUDAT .
*        LT_TAB-BKTXT = LT_BKPF-BKTXT .
*        LT_TAB-XBLNR = LT_BKPF-XBLNR .
*        LT_TAB-USNAM = LT_BKPF-USNAM.
*
*      ENDLOOP.

      select single bldat budat bktxt xblnr usnam
        into (lt_tab-bldat,lt_tab-budat,lt_tab-bktxt,lt_tab-xblnr,lt_tab-usnam)
        from bkpf
        where bukrs lt_tab-bukrs
        and   gjahr lt_tab-gjahr
        and   belnr lt_tab-belnr.

      select single ktext into lt_tab-ktext "成本要素
      from csku
        where kstar lt_tab-kstar
        and   ktopl '1000'
        and   spras '1'.

      select single ktext into lt_tab-ktextc "成本中心
        from cskt
        where kostl lt_tab-kostl
        and   kokrs '1000'
        and   spras '1'.

      select single  txt20 into lt_tab-txt20  "科目
        from  skat
        where saknr lt_tab-hkont
        and   ktopl '1000'
        and   spras '1'.

      if lt_tab-shkzg 'H'.
         lt_tab-dmbtr -* lt_tab-dmbtr.
        endif.

      if lt_tab-aufnr is not initial.
        select single autyp ktext into (lt_tab-auart,lt_tab-txt"订单类别、名次
          from aufk
          where aufnr lt_tab-aufnr.
      endif.

      if lt_tab-matnr is not initial.
        select single maktx into lt_tab-maktx  "物料
          from makt
          where matnr lt_tab-matnr
          and   spras '1'.
      endif.

      call function 'CONVERSION_EXIT_ALPHA_OUTPUT'
        exporting
          input  lt_tab-kstar
        importing
          output lt_tab-kstar.

      call function 'CONVERSION_EXIT_ALPHA_OUTPUT'
        exporting
          input  lt_tab-hkont
        importing
          output lt_tab-hkont.

      call function 'CONVERSION_EXIT_ALPHA_OUTPUT'
        exporting
          input  lt_tab-aufnr
        importing
          output lt_tab-aufnr.

      call function 'CONVERSION_EXIT_ALPHA_OUTPUT'
        exporting
          input  lt_tab-matnr
        importing
          output lt_tab-matnr.

      modify lt_tab.

    endloop.


  endif.

endform.                    " GET_DATA
*&---------------------------------------------------------------------*
*&      Form  E01_FIELDCAT_INIT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_GT_FIELDCAT[]  text
*----------------------------------------------------------------------*
form e01_fieldcat_init  using e01_lt_fieldcat type slis_t_fieldcat_alv.
  datals_fieldcat type slis_fieldcat_alv,
        l_fname type lvc_fname,
        s_field type string.

  clear ls_fieldcat.
  ls_fieldcat-fieldname    'BLDAT'.
  ls_fieldcat-seltext_s    '凭证日期'.
  ls_fieldcat-seltext_m    '凭证日期'.
  ls_fieldcat-seltext_l    '凭证日期'.
  ls_fieldcat-outputlen    '10'.
  append ls_fieldcat to e01_lt_fieldcat.

  clear ls_fieldcat.
  ls_fieldcat-fieldname    'BUDAT'.
  ls_fieldcat-seltext_s    '过帐日期'.
  ls_fieldcat-seltext_m    '过帐日期'.
  ls_fieldcat-seltext_l    '过帐日期'.
  ls_fieldcat-outputlen    '10'.
  append ls_fieldcat to e01_lt_fieldcat.

  clear ls_fieldcat.
  ls_fieldcat-fieldname    'XREF3'.
  ls_fieldcat-seltext_s    '参考码3'.
  ls_fieldcat-seltext_m    '参考码3'.
  ls_fieldcat-seltext_l    '参考码3'.
  ls_fieldcat-outputlen    '10'.
  append ls_fieldcat to e01_lt_fieldcat.

  clear ls_fieldcat.
  ls_fieldcat-fieldname    'KSTAR'.
  ls_fieldcat-seltext_s    '成本要素'.
  ls_fieldcat-seltext_m    '成本要素'.
  ls_fieldcat-seltext_l    '成本要素'.
  ls_fieldcat-outputlen    '10'.
  append ls_fieldcat to e01_lt_fieldcat.

  clear ls_fieldcat.
  ls_fieldcat-fieldname    'KTEXT'.
  ls_fieldcat-seltext_s    '成本要素描述'.
  ls_fieldcat-seltext_m    '成本要素描述'.
  ls_fieldcat-seltext_l    '成本要素描述'.
  ls_fieldcat-outputlen    '20'.
  append ls_fieldcat to e01_lt_fieldcat.

  clear ls_fieldcat.
  ls_fieldcat-fieldname    'KOSTL'.
  ls_fieldcat-seltext_s    '成本中心'.
  ls_fieldcat-seltext_m    '成本中心'.
  ls_fieldcat-seltext_l    '成本中心'.
  ls_fieldcat-outputlen    '10'.
  append ls_fieldcat to e01_lt_fieldcat.

  clear ls_fieldcat.
  ls_fieldcat-fieldname    'KTEXTC'.
  ls_fieldcat-seltext_s    '成本中心描述'.
  ls_fieldcat-seltext_m    '成本中心描述'.
  ls_fieldcat-seltext_l    '成本中心描述'.
  ls_fieldcat-outputlen    '20'.
  append ls_fieldcat to e01_lt_fieldcat.

  clear ls_fieldcat.
  ls_fieldcat-fieldname    'BKTXT'.
  ls_fieldcat-seltext_s    '凭证抬头文本'.
  ls_fieldcat-seltext_m    '凭证抬头文本'.
  ls_fieldcat-seltext_l    '凭证抬头文本'.
  ls_fieldcat-outputlen    '25'.
  append ls_fieldcat to e01_lt_fieldcat.

  clear ls_fieldcat.
  ls_fieldcat-fieldname    'SGTXT'.
  ls_fieldcat-seltext_s    '项目文本'.
  ls_fieldcat-seltext_m    '项目文本'.
  ls_fieldcat-seltext_l    '项目文本'.
  ls_fieldcat-outputlen    '30'.
  append ls_fieldcat to e01_lt_fieldcat.

  clear ls_fieldcat.
  ls_fieldcat-fieldname    'SHKZG'.
  ls_fieldcat-seltext_s    'D/C'.
  ls_fieldcat-seltext_m    'D/C'.
  ls_fieldcat-seltext_l    'D/C'.
  ls_fieldcat-outputlen    '1'.
  append ls_fieldcat to e01_lt_fieldcat.

  clear ls_fieldcat.
  ls_fieldcat-fieldname    'HKONT'.
  ls_fieldcat-seltext_s    '总分类帐帐目'.
  ls_fieldcat-seltext_m    '总分类帐帐目'.
  ls_fieldcat-seltext_l    '总分类帐帐目'.
  ls_fieldcat-outputlen    '10'.
  append ls_fieldcat to e01_lt_fieldcat.

  clear ls_fieldcat.
  ls_fieldcat-fieldname    'TXT20'.
  ls_fieldcat-seltext_s    '总帐科目名称'.
  ls_fieldcat-seltext_m    '总帐科目名称'.
  ls_fieldcat-seltext_l    '总帐科目名称'.
  ls_fieldcat-outputlen    '20'.
  append ls_fieldcat to e01_lt_fieldcat.

  clear ls_fieldcat.
  ls_fieldcat-fieldname    'DMBTR'.
  ls_fieldcat-seltext_s    '本位币金额'.
  ls_fieldcat-seltext_m    '本位币的金额'.
  ls_fieldcat-seltext_l    '本位币计的金额'.
  ls_fieldcat-do_sum       'X'.
  ls_fieldcat-outputlen    '13'.
  append ls_fieldcat to e01_lt_fieldcat.

  clear ls_fieldcat.
  ls_fieldcat-fieldname    'AUFNR'.
  ls_fieldcat-seltext_s    '订单号'.
  ls_fieldcat-seltext_m    '内部订单号'.
  ls_fieldcat-seltext_l    '内部订单号'.
  ls_fieldcat-outputlen    '12'.
  append ls_fieldcat to e01_lt_fieldcat.

  clear ls_fieldcat.
  ls_fieldcat-fieldname    'AUART'.
  ls_fieldcat-seltext_s    '订单类型'.
  ls_fieldcat-seltext_m    '订单类型'.
  ls_fieldcat-seltext_l    '订单类型'.
  ls_fieldcat-outputlen    '7'.
  append ls_fieldcat to e01_lt_fieldcat.

  clear ls_fieldcat.
  ls_fieldcat-fieldname    'TXT'.
  ls_fieldcat-seltext_s    '内部订单名称'.
  ls_fieldcat-seltext_m    '内部订单名称'.
  ls_fieldcat-seltext_l    '内部订单名称'.
  ls_fieldcat-outputlen    '20'.
  append ls_fieldcat to e01_lt_fieldcat.

  clear ls_fieldcat.
  ls_fieldcat-fieldname    'MATNR'.
  ls_fieldcat-seltext_s    '物料号'.
  ls_fieldcat-seltext_m    '物料号'.
  ls_fieldcat-seltext_l    '物料号'.
  ls_fieldcat-outputlen    '13'.
  append ls_fieldcat to e01_lt_fieldcat.

  clear ls_fieldcat.
  ls_fieldcat-fieldname    'MAKTX'.
  ls_fieldcat-seltext_s    '物料描述'.
  ls_fieldcat-seltext_m    '物料描述'.
  ls_fieldcat-seltext_l    '物料描述'.
  ls_fieldcat-outputlen    '40'.
  append ls_fieldcat to e01_lt_fieldcat.

  clear ls_fieldcat.
  ls_fieldcat-fieldname    'FKBER'.
  ls_fieldcat-seltext_s    '功能范围'.
  ls_fieldcat-seltext_m    '功能范围'.
  ls_fieldcat-seltext_l    '功能范围'.
  ls_fieldcat-outputlen    '7'.
  append ls_fieldcat to e01_lt_fieldcat.

  clear ls_fieldcat.
  ls_fieldcat-fieldname    'BELNR'.
  ls_fieldcat-seltext_s    '会计凭证编号'.
  ls_fieldcat-seltext_m    '会计凭证编号'.
  ls_fieldcat-seltext_l    '会计凭证编号'.
  ls_fieldcat-outputlen    '10'.
  append ls_fieldcat to e01_lt_fieldcat.

  clear ls_fieldcat.
  ls_fieldcat-fieldname    'XBLNR'.
  ls_fieldcat-seltext_s    '参考凭证号'.
  ls_fieldcat-seltext_m    '参考凭证号'.
  ls_fieldcat-seltext_l    '参考凭证号'.
  ls_fieldcat-outputlen    '12'.
  append ls_fieldcat to e01_lt_fieldcat.

  clear ls_fieldcat.
  ls_fieldcat-fieldname    'USNAM'.
  ls_fieldcat-seltext_s    '用户名'.
  ls_fieldcat-seltext_m    '用户名'.
  ls_fieldcat-seltext_l    '用户名'.
  ls_fieldcat-outputlen    '8'.
  append ls_fieldcat to e01_lt_fieldcat.

endform.                    " E01_FIELDCAT_INIT
*&---------------------------------------------------------------------*
*&      Form  F_SHOW_GRID
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
form f_show_grid .

  call function 'REUSE_ALV_GRID_DISPLAY'
    exporting
*        I_BACKGROUND_ID    = 'ALV_WALLPAPER2'
      i_callback_program sy-repid
*        I_CALLBACK_TOP_OF_PAGE = 'TOP_OF_PAGE '
      i_structure_name   'LS_TAB'
*        IS_LAYOUT          = GS_LAYOUT
*      I_CALLBACK_PF_STATUS_SET = 'SET_PF_STATUS'
      i_callback_user_command 'USER_CALLBACK'
      it_fieldcat        gt_fieldcat[]
      it_special_groups  gt_sp_group[]
      it_sort            gt_sort[]
      i_save             'A'
      is_variant         g_variant
      it_events          gt_events[]
      is_print           gs_print
    tables
      t_outtab           lt_tab.

endform.                    " F_SHOW_GRID
*&---------------------------------------------------------------------*
*&      Form  USER_CALLBACK
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->RF_UCOMM     text
*      -->RS_SELFIELD  text
*----------------------------------------------------------------------*
form user_callback using rf_ucomm type sy-ucomm
                        rs_selfield type slis_selfield.
  case rf_ucomm.
    when '&IC1'.
      data msg type string.
      field-symbols  like line of lt_tab.
      read table lt_tab index rs_selfield-tabindex assigning .
      if sy-subrc 0.
        set parameter id'BLN' field -belnr,
                          'BUK' field -bukrs,
                          'GJR' field -gjahr
       call transaction 'FB03' and skip first screen.
      endif.
  endcase.
endform.                    "USER_CALLBACK

*****************************************************************************************************
S_AUFNR 内部订单号 
S_BUDAT 过账日期
S_BUKRS 公司
S_GJAHR 会计年度
S_HKONT 科目
S_KHINR 成本中心组 
S_KOSTL 成本中心
S_KSTAR 成本要素
S_XREF3 参考凭证3


请使用浏览器的分享功能分享到微信等