供应商应付票据报表

report  zfi_r_16_ap.

include zfi_r_16_init .
include zfi_r_16_form .
include zfi_r_16_alv  .

*公司代码的权限控制
at selection-screen on p_bukrs.
    authority-check object 'F_BKPF_BUK' id 'BUKRS' field p_bukrs
                                        id 'ACTVT' field '03'.
    if sy-subrc ne 0.
      message  e007(zfiwith '你没有权限查看' p_bukrs '公司代码的数据!'.
      exit.
    endif.

initialization.
  perform layout_init using g_layout_s.    "ALV GRID LAYOUT
  perform eventtab_build using g_events_t[].  "ALV GRID EVENT

start-of-selection.
   perform get_list .
   perform displaycatalog_merge using g_fieldcat_t[] .
   perform alv_display tables itab_list[].

***********************************************************************************************
*&---------------------------------------------------------------------*
*&  包括                ZFI_R_16_INIT
*&---------------------------------------------------------------------*
*供应商付款发票明细表
tablesbsis,lfa1 .

typesbegin of s_list,
  lifnr like lfa1-lifnr "供应商编号
  name1 like lfa1-name1 "供应商名称
  dmbtr like bsis-dmbtr "本位币金额
  zfbdt like bsis-zfbdt "基准日期(到期日)
  bldat like bsis-bldat "凭证日期
  month like vtbbewe-atage "月份数
  sgtxt like bsis-sgtxt "付款银行
  zuonr like bsis-zuonr "分配(票号)
  gjahr like bsis-gjahr "会计年度
  belnr like bsis-belnr "会计凭证
  buzei like bsis-buzei "行项目号
  bukrs like bsis-bukrs "公司代码
  shkzg like bsis-shkzg "借贷标志
end of s_list .
dataitab_list type standard table of  s_list with non-unique default key ,
      wa_list like line of itab_list .
*会计凭证明细
typesbegin of s_belnr ,
  gjahr like bsis-gjahr "会计年度
  belnr like bsis-belnr "会计凭证
  buzei like bsis-buzei "行项目号
  bukrs like bsis-bukrs "公司代码
end of s_belnr .
dataitab_belnr type standard table of  s_belnr with non-unique default key ,
      wa_belnr like line of itab_belnr .
*供应商明细
typesbegin of s_vendor ,
  gjahr like bsis-gjahr "会计年度
  belnr like bsis-belnr "会计凭证
  buzei like bsis-buzei "行项目号
  bukrs like bsis-bukrs "公司代码
  lifnr like lfa1-lifnr "供应商编号
  name1 like lfa1-name1 "供应商名称
end of s_vendor .
dataitab_vendor type standard table of  s_vendor with non-unique default key ,
      wa_vendor like line of itab_vendor .

selection-screen begin of block bl1 with frame title text-001.
  select-options:
    s_budat for bsis-budat no intervals no-extension obligatory ."凭证记帐截止日期
selection-screen end of block bl1.

parametersp_bukrs like bsad-bukrs obligatory default '1000'.    "Company Code
selection-screen begin of block bl2 with frame title text-002.
  select-options:
    s_gjahr for bsis-gjahr no intervals,"会计年度
    s_belnr for bsis-belnr ,"凭证号码
    s_hkont for bsis-hkont no intervals,"  DEFAULT '21110000' OBLIGATORY,
    s_blart for bsis-blart no intervals."  DEFAULT 'Z6'."凭证类型
    "S_LIFNR FOR LFA1-LIFNR ."供应商编号
selection-screen end of block bl2.


*{ INSERT  Customizing 091228 CHEN.JR
initialization.
perform set_so_value.
*} INSERT

**********************************************************************************************
*&---------------------------------------------------------------------*
*&  包括                ZFI_R_16_FORM
*&---------------------------------------------------------------------*
*得到供应商应付票据明细
form get_list .
  "得到供应商应付票据明细
  select dmbtr zfbdt bldat sgtxt zuonr gjahr belnr buzei bukrs shkzg
    into corresponding fields of table itab_list
    from bsis
    where budat <= s_budat-low "记帐日期
      and bukrs p_bukrs "公司代码
      and gjahr in s_gjahr "会计年度
      and belnr in s_belnr "凭证号码
      and hkont in s_hkont "总帐科目
      and blart in s_blart "凭证类型
        .
  "得到凭证明细表
  refresh itab_belnr .
  clear itab_belnr .

  loop at itab_list into wa_list .
    clear wa_belnr .
    move-corresponding wa_list to wa_belnr .
    collect wa_belnr into itab_belnr .
    "得到开票日期到到期日的月份数
    call function 'FIMA_DAYS_AND_MONTHS_AND_YEARS'
      exporting
        i_date_from wa_list-bldat
        i_date_to   wa_list-zfbdt
      importing
        e_months    wa_list-month.
    modify itab_list from wa_list .
  endloop.
  "得到供应商编号
  if not itab_belnr[] is initial .
    "得到供应商的明细
    select lifnr gjahr belnr buzei bukrs
      into corresponding fields of table itab_vendor
      from bseg
      for all entries in itab_belnr
      where bukrs itab_belnr-bukrs
        and belnr itab_belnr-belnr
        and gjahr itab_belnr-gjahr
        and buzei itab_belnr-buzei
        .
    data name1 like lfa1-name1 .
    loop at itab_vendor into wa_vendor .
      clear name1 .
      "得到供应商名称
      select single name1
        into name1
        from lfa1
        where lifnr wa_vendor-lifnr
        .

      wa_vendor-name1 name1 .
      modify itab_vendor from wa_vendor .
    endloop .
  endif .
  loop at itab_list into wa_list .
    clear wa_vendor .
    read table itab_vendor with key
      bukrs wa_list-bukrs belnr wa_list-belnr gjahr wa_list-gjahr buzei wa_list-buzei
      into wa_vendor .
    if wa_list-shkzg 'S'."借方
      wa_list-dmbtr wa_list-dmbtr * -.
      modify itab_list from wa_list  .
    endif .
    if sy-subrc eq .
      wa_list-lifnr wa_vendor-lifnr .
      wa_list-name1 wa_vendor-name1 .
      modify itab_list from wa_list  .
    endif .
  endloop .

endform .                    "GET_LIST

*&---------------------------------------------------------------------*
*&      Form  set_so_value
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
form set_so_value.

  move 'I'  to s_hkont-sign.
  move 'EQ' to s_hkont-option.
  move '22010000' to s_hkont-low.  append s_hkont.
  move '22010001' to s_hkont-low.  append s_hkont.
  clear s_hkont.

endform.                    "set_so_value
**********************************************************************************************

*&---------------------------------------------------------------------*
*&  包括                ZFI_R_16_ALV
*&---------------------------------------------------------------------*
type-poolsslis.
typesslis_t_fieldcat_alv type slis_fieldcat_alv occurs 1.
datag_events_t type slis_t_event,
      g_fieldcat_t type slis_t_fieldcat_alv.
datag_layout_s type slis_layout_alv.
datal_fieldcat_s type slis_fieldcat_alv.
define __field_tab.
  l_fieldcat_s-seltext_l &1.
  l_fieldcat_s-seltext_m &1.
  l_fieldcat_s-seltext_s &1.
  l_fieldcat_s-ddictxt ' '.
end-of-definition.

*&--------------------------------------------------------------------*
*&      Form  LAYOUT_INIT
*&--------------------------------------------------------------------*
*       text
*---------------------------------------------------------------------*
*      -->P_G_LAYOUT_text
*---------------------------------------------------------------------*
form layout_init using p_g_layout_s type slis_layout_alv.
** Build layout for list display
  p_g_layout_s-detail_popup 'X'.
  p_g_layout_s-colwidth_optimize 'X'.
endform.  " LAYOUT_INIT
*--------------------------------------------------------------------
*       FORM EVENTTAB_BUILD
*--------------------------------------------------------------------
form eventtab_build using  p_g_events_t  type slis_t_event.
** Registration of events to happen during list display
  datal_event type slis_alv_event.
  call function 'REUSE_ALV_EVENTS_GET'
    exporting
      i_list_type 0
    importing
      et_events   p_g_events_t.
* GUI STATUS
  read table p_g_events_t with key name slis_ev_pf_status_set
                          into l_event.
  if sy-subrc eq 0.
    move 'PF_STATUS_SET' to l_event-form.
    append l_event      to p_g_events_t.
  endif.
endform.  " EVENTTAB_BUILD

*--------------------------------------------------------------------
*       FORM ALV_DISPLAY
*--------------------------------------------------------------------
form alv_display tables p_int_t.
  call function 'REUSE_ALV_GRID_DISPLAY'
    exporting
      i_callback_program 'ZFI_R_16_ALV' "G_REPID
      is_layout          g_layout_s
      it_fieldcat        g_fieldcat_t[]
      i_save             'A'
    tables
      t_outtab           p_int_t
    exceptions
      program_error      1
      others             2.
endform.  " ALV_DISPLAY


*&--------------------------------------------------------------------*
*&      Form  DISPLAYCATALOG_MERGE
*&--------------------------------------------------------------------*
*       text
*---------------------------------------------------------------------*
*      -->ALV显示
*      -->P_TABNAME  text
*---------------------------------------------------------------------*
form displaycatalog_merge using p_g_fieldcat_t
                                type slis_t_fieldcat_alv .

  clear l_fieldcat_s.
  l_fieldcat_s-fieldname 'NAME1'.
  l_fieldcat_s-seltext_m '名称'.
  l_fieldcat_s-fix_column 'X' .
  l_fieldcat_s-emphasize 'X'.
  append l_fieldcat_s to p_g_fieldcat_t.

  l_fieldcat_s-fieldname 'LIFNR'.
  l_fieldcat_s-seltext_m '供应商'.
  l_fieldcat_s-ref_fieldname 'LIFNR'.
  l_fieldcat_s-ref_tabname 'LFA1'.
  "L_FIELDCAT_S-lzero = 'X' .
  append l_fieldcat_s to p_g_fieldcat_t.
  clear l_fieldcat_s.

  l_fieldcat_s-fieldname 'DMBTR'.
  l_fieldcat_s-seltext_m '本位币金额'.
  l_fieldcat_s-do_sum 'X'.
  append l_fieldcat_s to p_g_fieldcat_t.

  clear l_fieldcat_s .

  l_fieldcat_s-fieldname 'BLDAT'.
  l_fieldcat_s-seltext_m '开票日期'.
  append l_fieldcat_s to p_g_fieldcat_t.

  l_fieldcat_s-fieldname 'ZFBDT'.
  l_fieldcat_s-seltext_m '到期日'.
  append l_fieldcat_s to p_g_fieldcat_t.

  l_fieldcat_s-fieldname 'SGTXT'.
  l_fieldcat_s-seltext_m '付款银行'.
  append l_fieldcat_s to p_g_fieldcat_t.

  l_fieldcat_s-fieldname 'ZUONR'.
  l_fieldcat_s-seltext_m '票号'.
  append l_fieldcat_s to p_g_fieldcat_t.

    l_fieldcat_s-fieldname 'MONTH'.
  l_fieldcat_s-seltext_m '月份数'.
  append l_fieldcat_s to p_g_fieldcat_t.

  l_fieldcat_s-fieldname 'SHKZG'.
  l_fieldcat_s-seltext_m '借贷标志'.
  append l_fieldcat_s to p_g_fieldcat_t.

endform.  " FIELDCATALOG_MERGE
**************************************************************************************************
P_BUKRS 公司代码
S_BELNR 会计凭证号 
S_BLART 凭证类型
S_BUDAT 记帐截止日期
S_GJAHR 会计年度
S_HKONT 总帐科目

001 日期选择
002 详细选择


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