查看利润分配-未分配利润的科目配置

SPRO

搜索:定义留存收益

双击

查看

输入:LXCA

显示:41040112

或者:OB53

开发区导测试数据

DATA gt_data TYPE TABLE OF skat.gt_data = VALUE #(
( SPRAS = '1'  KTOPL = 'LXCA'  SAKNR = '0022020406'  TXT20 = '应付账款-暂估-租赁-非关系人'  TXT50 = '应付账款-暂估-租赁-非关系人'  MCOD1 = '应付账款-暂估-租赁-非关系人' )
( SPRAS = '1'  KTOPL = 'LXCA'  SAKNR = '0022020407'  TXT20 = '应付账款-暂估-租赁-关系人'  TXT50 = '应付账款-暂估-租赁-关系人'  MCOD1 = '应付账款-暂估-租赁-关系人' )
( SPRAS = '1'  KTOPL = 'LXCA'  SAKNR = '0022020501'  TXT20 = '应付账款-租赁-非关系人'  TXT50 = '应付账款-租赁-非关系人'  MCOD1 = '应付账款-租赁-非关系人' )
( SPRAS = '1'  KTOPL = 'LXCA'  SAKNR = '0022020502'  TXT20 = '应付账款-租赁-关系人'  TXT50 = '应付账款-租赁-关系人'  MCOD1 = '应付账款-租赁-关系人' )
( SPRAS = '1'  KTOPL = 'LXCA'  SAKNR = '0022029001'  TXT20 = '应付账款-非关系人TIPTOP'  TXT50 = '应付账款-非关系人TIPTOP'  MCOD1 = '应付账款-非关系人TIPTOP' )
( SPRAS = '1'  KTOPL = 'LXCA'  SAKNR = '0022029002'  TXT20 = '应付账款-关系人TIPTOP'  TXT50 = '应付账款-关系人TIPTOP'  MCOD1 = '应付账款-关系人TIPTOP' )
( SPRAS = '1'  KTOPL = 'LXCA'  SAKNR = '0022029003'  TXT20 = '应付账款-暂估-非关系人TIPTOP'  TXT50 = '应付账款-暂估-非关系人TIPTOP'  MCOD1 = '应付账款-暂估-非关系人TIPTOP' )
( SPRAS = '1'  KTOPL = 'LXCA'  SAKNR = '0022029004'  TXT20 = '应付账款-暂估-关系人TIPTOP'  TXT50 = '应付账款-暂估-关系人TIPTOP'  MCOD1 = '应付账款-暂估-关系人TIPTOP' )
( SPRAS = '1'  KTOPL = 'LXCA'  SAKNR = '0022029801'  TXT20 = '应付账款-设备款-外币评价'  TXT50 = '应付账款-设备款-外币评价'  MCOD1 = '应付账款-设备款-外币评价' )
( SPRAS = '1'  KTOPL = 'LXCA'  SAKNR = '0022029901'  TXT20 = '应付账款-外币评价'  TXT50 = '应付账款-外币评价'  MCOD1 = '应付账款-外币评价' )
)."cl_demo_output=>display( gt_data ). "显示内表MODIFY SKAT FROM TABLE gt_data. "添加内表"DELETE FROM skat WHERE KTOPL = 'LXCA'. "删除
DATA gt_data1 TYPE TABLE OF SKAT.
DATA gs_data TYPE SKAT.gs_data-SPRAS = '1'.          ""语言代码
gs_data-KTOPL = 'LXCA'.          ""科目表
gs_data-SAKNR = '22020402'.          ""总账科目编号
gs_data-TXT20 = '应付账款-暂估-关系人'.          ""总帐科目名称
gs_data-TXT50 = '应付账款-暂估-关系人'.          ""总账科目长文本 "APPEND  gs_data TO gt_data1.
MODIFY SKAT FROM TABLE gt_data1.
DATA gt_data TYPE TABLE OF SKA1.
DATA gs_data TYPE SKA1.gs_data-MANDT = '110'.          ""集团
gs_data-KTOPL = 'LXCA'.          ""科目表
gs_data-SAKNR = '22020403'.          ""总账科目编号
gs_data-KTOKS = 'GL'.          ""总账科目组 "APPEND  gs_data TO gt_data.
MODIFY SKA1 FROM TABLE gt_data.
DATA gt_data1 TYPE TABLE OF bseg.
DATA gs_data TYPE bseg.gs_data-MANDT = '110'.            ""集团
gs_data-BUKRS = 'C111'.            ""公司代码
gs_data-GJAHR = '2022'.            ""会计年度
gs_data-BUZEI = 13 .            ""序号
gs_data-H_MONAT = '1'.          ""会计期间
gs_data-HKONT = '22020402'.            ""总账科目
gs_data-SHKZG = 'H'.            ""借方/贷方标识
gs_data-H_WAERS = 'CNY'.          ""货币码
gs_data-WRBTR = 20 . "10 * 6.            ""凭证货币金额
gs_data-DMBTR = 20 . "60 * 6.            ""按本位币计的金额"APPEND  gs_data TO gt_data1.
MODIFY bseg FROM TABLE gt_data1.

其他方法

  "直接取“ BKPF  总帐科目主记录 (科目表)”里的年份,不能卡年份条件SELECT  bukrs , gjahr FROM BKPF  WHERE  bukrs IN @s_bukrsINTO CORRESPONDING FIELDS OF TABLE @gt_data1.CLEAR gt_where1.LOOP AT gt_data1 INTO gs_data1  .COLLECT gs_data1 INTO gt_where1 .ENDLOOP."相当于,要加DISTINCT 除重SELECT DISTINCT bukrs , gjahr FROM BKPF  WHERE  bukrs IN @s_bukrsINTO CORRESPONDING FIELDS OF TABLE @gt_data1.

累计余额不能用这种方法改

*------------------------------------------"本币余额 求和"-------------------------"求和:余额本币CLEAR gt_where1.LOOP AT gt_report1 INTO gs_data1.CLEAR gs_data2.gs_data2-mandt = gs_data1-mandt.                   ""集团gs_data2-bukrs = gs_data1-bukrs.                   ""公司代码gs_data2-gjahr = gs_data1-gjahr.                   ""会计年度gs_data2-h_monat = gs_data1-h_monat.               ""会计期间gs_data2-hkont = gs_data1-hkont.                   ""总账科目gs_data2-sumye_dmbtr = gs_data1-ye_dmbtr.          ""求和:余额本币gs_data2-sumlj_dmbtr = gs_data1-lj_dmbtr.          ""求和:累计余额本币"COLLECT gs_data2 INTO gt_where1 .ENDLOOP."如果科目汇总后本币金额是零,则原币余额和本币余额也是零CLEAR gs_data2.gs_data2-ye_wrbtr = 0.          ""余额原币gs_data2-ye_dmbtr = 0.          ""余额本币gs_data2-lj_wrbtr = 0.          ""累计余额原币gs_data2-lj_dmbtr = 0.          ""累计余额本币"LOOP AT gt_where1 INTO gs_data1  .IF gs_data1-sumye_dmbtr = 0 .MODIFY gt_report1 FROM gs_data2 TRANSPORTING ye_wrbtr ye_dmbtrWHERE mandt = gs_data1-mandtAND bukrs = gs_data1-bukrsAND gjahr = gs_data1-gjahrAND h_monat = gs_data1-h_monatAND hkont = gs_data1-hkont .ENDIF.IF gs_data1-sumlj_dmbtr = 0 .MODIFY gt_report1 FROM gs_data2 TRANSPORTING lj_wrbtr lj_dmbtrWHERE mandt = gs_data1-mandtAND bukrs = gs_data1-bukrsAND gjahr = gs_data1-gjahrAND h_monat = gs_data1-h_monatAND hkont = gs_data1-hkont .ENDIF.ENDLOOP.

"循环取值LOOP AT gt_report1 INTO gs_report1  .gs_where-bukrs = gs_report1-bukrs.            ""公司代码gs_where-hkont =  gs_report1-hkont.            ""总账科目gs_where-h_waers =  gs_report1-h_waers .          ""币种"i = i + 1 .COLLECT gs_where INTO gt_where .ENDLOOP.LOOP AT gt_where INTO gs_where  .LOOP AT gt_report1 INTO gs_report1 WHERE  bukrs = gs_where-bukrs  AND  hkont = gs_where-hkont AND h_waers = gs_where-h_waers  .db_wrbtr =  db_wrbtr +  gs_report1-ye_wrbtr  .db_dmbtr = db_dmbtr  + gs_report1-ye_dmbtr .gs_report1-lj_wrbtr  = db_wrbtr .gs_report1-lj_dmbtr  = db_dmbtr .MODIFY gt_report1 FROM gs_report1  TRANSPORTING lj_wrbtr  lj_dmbtr .ENDLOOP.ENDLOOP.
*------------------------------------------"年初余额"-------------------------SORT gt_report1 DESCENDING BY mandt bukrs gjahr h_monat hkont h_waers .CLEAR wa_report1.CLEAR gs_data.LOOP AT gt_report1 INTO gs_report1  .IF NOT (  wa_report1-bukrs  = gs_report1-bukrs AND wa_report1-gjahr  = gs_report1-gjahr AND wa_report1-hkont  = gs_report1-hkont AND wa_report1-h_waers  = gs_report1-h_waers ) .gs_data-bukrs = gs_report1-bukrs.              ""公司代码gs_data-gjahr = gs_report1-gjahr.              ""会计年度gs_data-h_monat = gs_report1-h_monat.          ""会计期间gs_data-hkont = gs_report1-hkont.              ""总账科目gs_data-h_waers = gs_report1-h_waers.          ""币种gs_data-wrbtr = gs_report1-lj_wrbtr.           ""累计借方发生额原币gs_data-dmbtr = gs_report1-lj_dmbtr.           ""累计借方发生额本币APPEND gs_data TO gt_beg .wa_report1-bukrs  = gs_report1-bukrs .wa_report1-gjahr  = gs_report1-gjahr .wa_report1-hkont  = gs_report1-hkont .wa_report1-h_waers  = gs_report1-h_waers .ENDIF.ENDLOOP.LOOP AT gt_report1 INTO gs_report1  .CLEAR gs_data.READ TABLE gt_beg INTO gs_data WITH KEY bukrs = gs_report1-bukrs   gjahr = gs_report1-gjahr - 1   hkont = gs_report1-hkont   h_waers = gs_report1-h_waers  .IF sy-subrc = 0 .gs_report1-qc_wrbtr  = gs_data-wrbtr .gs_report1-qc_dmbtr  = gs_data-dmbtr .MODIFY gt_report1 FROM gs_report1  TRANSPORTING qc_wrbtr  qc_dmbtr .ENDIF.ENDLOOP.
  SELECTbseg~mandt,            ""集团bseg~bukrs,            ""公司代码bseg~h_waers,          ""货币码bseg~hkont,            ""总账科目skat~spras,            ""语言代码skat~ktopl,            ""科目表skat~saknr,            ""总账科目编号skat~txt20,            ""总帐科目名称skat~txt50,            ""总账科目长文本bseg~gjahr,            ""会计年度ska1~ktoks,            ""总账科目组bseg~h_monat,          ""会计期间bseg~wrbtr,            ""凭证货币金额bseg~dmbtr,            ""按本位币计的金额bseg~shkzg            ""借方/贷方标识"FROM bsegLEFT  JOIN skat ON  skat~saknr = bseg~hkont  AND skat~spras = @sy-langu AND skat~ktopl = @p_ktoplLEFT  JOIN ska1 ON  skat~saknr = ska1~saknr  AND skat~ktopl = ska1~ktoplINTO CORRESPONDING FIELDS OF TABLE @gt_data1WHERE bukrs IN @s_bukrs  AND hkont IN @s_hkont. "公司代码/总账科目APPEND LINES OF gt_data1 TO gt_data3.
  SELECTbseg~mandt,             ""集团bseg~bukrs,             ""公司代码bseg~hkont,             ""总账科目bseg~h_waers,           ""货币码bseg~gjahr,             ""会计年度bseg~h_monat,           ""会计期间bseg~belnr,             ""会计凭证号码bseg~buzei,             ""会计凭证中的行项目数skat~spras,             ""语言代码skat~ktopl,             ""科目表skat~saknr,             ""总账科目编号skat~txt20,             ""总帐科目名称skat~txt50,             ""总账科目长文本ska1~ktoks,             ""总账科目组bseg~shkzg,             ""借方/贷方标识bseg~wrbtr,             ""凭证货币金额bseg~dmbtr,             ""按本位币计的金额faglflexa~wsl,          ""原交易货币的值(凭证货币)faglflexa~hsl          ""用本地货币表示的值 "FROM bsegLEFT JOIN faglflexa ON bseg~bukrs = faglflexa~rbukrs AND bseg~gjahr = faglflexa~ryear AND bseg~belnr = faglflexa~docnr AND bseg~buzei = faglflexa~buzeiLEFT  JOIN skat ON  skat~saknr = bseg~hkont  AND skat~spras = @sy-langu AND skat~ktopl = @p_ktoplLEFT  JOIN ska1 ON  skat~saknr = ska1~saknr  AND skat~ktopl = ska1~ktoplWHERE bukrs IN @s_bukrs  AND hkont IN @s_hkont"公司代码/总账科目UNIONSELECTfaglflexa~rclnt AS mandt,            ""集团faglflexa~rbukrs AS bukrs,           ""公司代码faglflexa~racct AS hkont,            ""科目号faglflexa~rwcur AS h_waers,          ""原事务货币的货币码faglflexa~ryear AS gjahr,            ""会计年度bkpf~monat AS h_monat,          ""过账期间faglflexa~docnr AS belnr,            ""会计凭证号码faglflexa~buzei,            ""会计凭证中的行项目数skat~spras,                 ""语言代码skat~ktopl,                 ""科目表skat~saknr,                 ""总账科目编号skat~txt20,                 ""总帐科目名称skat~txt50,                 ""总账科目长文本ska1~ktoks,                 ""总账科目组faglflexa~drcrk AS shkzg,            ""借方/贷方标识bseg~wrbtr,                 ""凭证货币金额bseg~dmbtr,                 ""按本位币计的金额faglflexa~wsl,                ""原交易货币的值(凭证货币)faglflexa~hsl                ""用本地货币表示的值 "FROM faglflexaLEFT JOIN bseg ON bseg~bukrs = faglflexa~rbukrs AND bseg~gjahr = faglflexa~ryear AND bseg~belnr = faglflexa~docnr AND bseg~buzei = faglflexa~buzeiLEFT JOIN bkpf ON  bkpf~bukrs = faglflexa~rbukrs AND bkpf~gjahr = faglflexa~ryear AND bkpf~belnr = faglflexa~docnrLEFT JOIN skat ON  skat~saknr = bseg~hkont  AND skat~spras = @sy-langu AND skat~ktopl = @p_ktoplLEFT JOIN ska1 ON  skat~saknr = ska1~saknr  AND skat~ktopl = ska1~ktoplWHERE faglflexa~rbukrs IN @s_bukrs  AND hkont IN @s_hkont"公司代码/总账科目INTO CORRESPONDING FIELDS OF TABLE @gt_data1.LOOP AT gt_data1 INTO gs_data WHERE shkzg = 'S' . "借方CLEAR gs_report1.gs_report1-mandt = gs_data-mandt.              ""集团gs_report1-bukrs = gs_data-bukrs.              ""公司代码gs_report1-gjahr = gs_data-gjahr.              ""会计年度gs_report1-h_monat = gs_data-h_monat.          ""会计期间gs_report1-hkont = gs_data-hkont.              ""总账科目gs_report1-h_waers = gs_data-h_waers.          ""币种IF gs_data-wrbtr <> 0.gs_report1-jf_wrbtr = gs_data-wrbtr.           ""本月借方发生额原币gs_report1-jf_dmbtr = gs_data-dmbtr.           ""本月借方发生额本币ELSEIF gs_data-wsl <> 0.gs_report1-jf_wrbtr = gs_data-wsl.           ""本月借方发生额原币gs_report1-jf_dmbtr = gs_data-hsl.           ""本月借方发生额本币ENDIF.gs_report1-spras = gs_data-spras.          ""语言代码gs_report1-ktopl = gs_data-ktopl.          ""科目表gs_report1-saknr = gs_data-saknr.          ""总账科目编号gs_report1-txt20 = gs_data-txt20.          ""总帐科目名称gs_report1-txt50 = gs_data-txt50.          ""总账科目长文本gs_report1-ktoks = gs_data-ktoks.          ""总账科目组 "COLLECT gs_report1 INTO gt_report1 .ENDLOOP.LOOP AT gt_data1 INTO gs_data WHERE shkzg = 'H' . "贷方CLEAR gs_report1.gs_report1-mandt = gs_data-mandt.              ""集团gs_report1-bukrs = gs_data-bukrs.              ""公司代码gs_report1-gjahr = gs_data-gjahr.              ""会计年度gs_report1-h_monat = gs_data-h_monat.          ""会计期间gs_report1-hkont = gs_data-hkont.              ""总账科目gs_report1-h_waers = gs_data-h_waers.          ""币种IF gs_data-wrbtr <> 0.gs_report1-df_wrbtr = gs_data-wrbtr.           ""本月贷方发生额原币gs_report1-df_dmbtr = gs_data-dmbtr.           ""本月贷方发生额本币ELSEIF gs_data-wsl <> 0.gs_report1-df_wrbtr = gs_data-wsl.           ""本月贷方发生额原币gs_report1-df_dmbtr = gs_data-hsl.           ""本月贷方发生额本币ENDIF.gs_report1-spras = gs_data-spras.          ""语言代码gs_report1-ktopl = gs_data-ktopl.          ""科目表gs_report1-saknr = gs_data-saknr.          ""总账科目编号gs_report1-txt20 = gs_data-txt20.          ""总帐科目名称gs_report1-txt50 = gs_data-txt50.          ""总账科目长文本gs_report1-ktoks = gs_data-ktoks.          ""总账科目组 "COLLECT gs_report1 INTO gt_report1 .ENDLOOP.
'本想通过凭证编号,凭证栏位去排除之后再去取表faglflexa,但是实际发现太慢了  CLEAR wa_data.READ TABLE gt_data1 INTO wa_data  WITH KEY bukrs = gs_data-bukrs gjahr = gs_data-gjahr belnr = gs_data-belnr buzei = gs_data-buzei .IF NOT sy-subrc = 0 .IF gs_data-shkzg = 'H'.gs_data-wrbtr = - gs_data-wrbtr .gs_data-dmbtr = - gs_data-dmbtr .ENDIF.APPEND  gs_data TO gt_data3.ENDIF.
"用了这个方法有可能导致系统资料不足
*  LOOP AT gt_data1 INTO gs_data1  .
*    IF gs_data1-shkzg = 'H'.
*      gs_data1-wrbtr = - gs_data1-wrbtr .
*      gs_data1-dmbtr = - gs_data1-dmbtr .
*    ENDIF.
*    APPEND  gs_data1 TO gt_data2.
*  ENDLOOP."用这个方法,然后再想其他的办法做
APPEND LINES OF gt_data1 TO gt_data2.
REPORT zmm_test_c10089213.*----------------------------------------------------------------------*
*              INCLUDE 、 TYPES_POOLS 、 TABLES  引 用 区              *
*----------------------------------------------------------------------*
TABLES : bseg ,faglflexa ,bkpf, skat , ska1.
.*----------------------------------------------------------------------*
*                 T Y P E S -  结 构 定 义                             *
*----------------------------------------------------------------------*
TYPES: BEGIN OF ty_data,mandt   TYPE mandt,               ""集团bukrs   TYPE bukrs,               ""公司代码hkont   TYPE hkont,               ""总账科目h_waers TYPE waers,               ""货币码gjahr   TYPE gjahr,               ""会计年度h_monat TYPE monat,               ""会计期间belnr   TYPE belnr_d,             ""会计凭证号码buzei   TYPE buzei,               ""会计凭证中的行项目数spras   TYPE spras,               ""语言代码ktopl   TYPE ktopl,               ""科目表saknr   TYPE saknr,               ""总账科目编号txt20   TYPE txt20_skat,          ""总帐科目名称txt50   TYPE txt50_skat,          ""总账科目长文本ktoks   TYPE ktoks,               ""总账科目组shkzg   TYPE shkzg,               ""借方/贷方标识wrbtr   TYPE wrbtr,               ""凭证货币金额dmbtr   TYPE dmbtr,               ""按本位币计的金额"wsl     TYPE vwcur12,             ""原交易货币的值(凭证货币)"hsl     TYPE vlcur12,             ""用本地货币表示的值 "END OF ty_data.TYPES: BEGIN OF ty_report1,mandt    TYPE mandt,               ""集团bukrs    TYPE bukrs,               ""公司代码hkont    TYPE hkont,               ""总账科目h_waers  TYPE waers,               ""币种gjahr    TYPE gjahr,               ""会计年度h_monat  TYPE monat,               ""会计期间spras    TYPE spras,               ""语言代码ktopl    TYPE ktopl,               ""科目表saknr    TYPE saknr,               ""总账科目编号txt20    TYPE txt20_skat,          ""总帐科目名称txt50    TYPE txt50_skat,          ""总账科目长文本ktoks    TYPE ktoks,               ""总账科目组qc_wrbtr TYPE wrbtr,               ""期初原币余额qc_dmbtr TYPE dmbtr,               ""期初本币余额jf_wrbtr TYPE wrbtr,               ""本月借方发生额原币jf_dmbtr TYPE dmbtr,               ""本月借方发生额本币df_wrbtr TYPE wrbtr,               ""本月贷方发生额原币df_dmbtr TYPE dmbtr,               ""本月贷方发生额本币shkzg    TYPE shkzg,               ""借贷标识ye_wrbtr TYPE wrbtr,               ""余额原币ye_dmbtr TYPE dmbtr,               ""余额本币lj_wrbtr TYPE wrbtr,               ""累计余额原币lj_dmbtr TYPE dmbtr,               ""累计余额本币"END OF ty_report1.*----------------------------------------------------------------------*
*                  DATA 定义                                           *
*----------------------------------------------------------------------*
DATA: gt_data1 TYPE TABLE OF ty_data,gt_data2 TYPE TABLE OF ty_data,gt_data3 TYPE TABLE OF ty_data,gs_data  TYPE ty_data,wa_data  TYPE ty_data.DATA: gt_report1 TYPE TABLE OF ty_report1,gt_report2 TYPE TABLE OF ty_report1,gt_where1  TYPE TABLE OF ty_report1,gt_where2  TYPE TABLE OF ty_report1,gt_where3  TYPE TABLE OF ty_report1,gt_where4  TYPE TABLE OF ty_report1,gt_wfplr1  TYPE TABLE OF ty_report1,gt_wfplr2  TYPE TABLE OF ty_report1,gs_report1 TYPE ty_report1,gs_report2 TYPE ty_report1,gs_report3 TYPE ty_report1,gs_report4 TYPE ty_report1.*----------------------------------------------------------------------*
*                  ALV 定义
*----------------------------------------------------------------------*
DATA: wa_layout   TYPE lvc_s_layo, "layout 布局控制 参考结构 lvc_s_layoit_fieldcat TYPE lvc_t_fcat, "fieldcat 字段目录 参考结构 LVC_T_FCATwa_fieldcat LIKE LINE OF it_fieldcat.*----------------------------------------------------------------------*
*                  选 择 屏 幕 定 义 块
*----------------------------------------------------------------------*SELECT-OPTIONS s_bukrs FOR bseg-bukrs  OBLIGATORY.   ""公司代码
PARAMETERS  p_gjahr TYPE bseg-gjahr OBLIGATORY.   ""会计年度
SELECT-OPTIONS s_monat FOR bseg-h_monat OBLIGATORY.   ""会计期间
SELECT-OPTIONS s_hkont FOR bseg-hkont.   ""总账科目"
PARAMETERS  p_ktopl TYPE skat-ktopl DEFAULT 'LXCA' OBLIGATORY.   ""科目表
PARAMETERS p_p1 TYPE char1  DEFAULT '' USER-COMMAND flag.
PARAMETERS p_wfplr TYPE bseg-hkont MODIF ID f2 DEFAULT '0041040112'.*----------------------------------------------------------------------*
*                  初 始 化 块                                         *
*----------------------------------------------------------------------*
*该事件在屏幕未显示之前执行,对程式设置值及屏幕元素进行初始化赋值*
INITIALIZATION.*----------------------------------------------------------------------*
*                  选 择 屏 幕 字 段 处 理 块
*----------------------------------------------------------------------*
AT SELECTION-SCREEN OUTPUT.LOOP AT SCREEN .IF p_p1 = ''.IF screen-group1 = 'F2' .screen-active = 0 . "不活动,相当于隐藏ENDIF.ENDIF.MODIFY SCREEN.ENDLOOP.*----------------------------------------------------------------------*
*                  逻 辑 处 理 块                                      *
*----------------------------------------------------------------------*START-OF-SELECTION. "执行按钮后触发PERFORM frm_getdata. "取数PERFORM frm_layout. "布局PERFORM frm_fieldcat. "列PERFORM frm_output. "输出*----------------------------------------------------------------------*
*                  定义宏
*----------------------------------------------------------------------*DEFINE init_fieldcat.CLEAR wa_fieldcat.
wa_fieldcat-fieldname = &1. "字段
wa_fieldcat-coltext = &2.
wa_fieldcat-fix_column = &3.
wa_fieldcat-hotspot = &4.
wa_fieldcat-key = &5. ""X"
wa_fieldcat-col_pos = &6. "1
*  wa_fieldcat-EDIT = &3.
*  wa_fieldcat-REF_TABLE = &4.
*  wa_fieldcat-REF_FIELD = &5.
*  wa_fieldcat-CHECKBOX = &6 .
*  wa_fieldcat-DO_SUM = &7 .
*  wa_fieldcat-rollname = &8 .
* wa_fieldcat-hotspot = &7 .APPEND wa_fieldcat TO it_fieldcat.END-OF-DEFINITION.*&---------------------------------------------------------------------*
*& Form FRM_GETDATA
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM frm_getdata .SELECTbseg~mandt,             ""集团bseg~bukrs,             ""公司代码bseg~hkont,             ""总账科目bseg~h_waers,           ""货币码bseg~gjahr,             ""会计年度bseg~h_monat,           ""会计期间bseg~belnr,             ""会计凭证号码bseg~buzei,             ""会计凭证中的行项目数skat~spras,             ""语言代码skat~ktopl,             ""科目表skat~saknr,             ""总账科目编号skat~txt20,             ""总帐科目名称skat~txt50,             ""总账科目长文本ska1~ktoks,             ""总账科目组bseg~shkzg,             ""借方/贷方标识bseg~wrbtr,             ""凭证货币金额bseg~dmbtr             ""按本位币计的金额FROM bsegLEFT JOIN skat ON  skat~saknr = bseg~hkont  AND skat~spras = @sy-langu AND skat~ktopl = @p_ktoplLEFT JOIN ska1 ON  skat~saknr = ska1~saknr  AND skat~ktopl = ska1~ktoplWHERE bukrs IN @s_bukrs   "公司代码INTO CORRESPONDING FIELDS OF TABLE @gt_data1.APPEND LINES OF gt_data1 TO gt_data3.SELECTfaglflexa~rclnt AS mandt,            ""集团faglflexa~rbukrs AS bukrs,           ""公司代码faglflexa~racct AS hkont,            ""科目号faglflexa~rwcur AS h_waers,          ""原事务货币的货币码faglflexa~ryear AS gjahr,            ""会计年度bkpf~monat AS h_monat,          ""过账期间faglflexa~docnr AS belnr,            ""会计凭证号码faglflexa~buzei,            ""会计凭证中的行项目数skat~spras,                 ""语言代码skat~ktopl,                 ""科目表skat~saknr,                 ""总账科目编号skat~txt20,                 ""总帐科目名称skat~txt50,                 ""总账科目长文本ska1~ktoks,                 ""总账科目组faglflexa~drcrk AS shkzg,            ""借方/贷方标识faglflexa~wsl AS wrbtr,                ""原交易货币的值(凭证货币)faglflexa~hsl AS  dmbtr                ""用本地货币表示的值 "FROM faglflexaLEFT JOIN bkpf ON  bkpf~bukrs = faglflexa~rbukrs AND bkpf~gjahr = faglflexa~ryear AND bkpf~belnr = faglflexa~docnrLEFT JOIN skat ON  skat~saknr = faglflexa~racct  AND skat~spras = @sy-langu AND skat~ktopl = @p_ktoplLEFT JOIN ska1 ON  skat~saknr = ska1~saknr  AND skat~ktopl = ska1~ktoplWHERE faglflexa~rbukrs IN @s_bukrs  AND faglflexa~buzei = '000' AND NOT bkpf~monat = '00' "公司代码 会计凭证号码 排除空,月份排除空INTO CORRESPONDING FIELDS OF TABLE @gt_data2.LOOP AT gt_data2 INTO gs_data  .IF gs_data-shkzg = 'H'.gs_data-wrbtr = - gs_data-wrbtr .gs_data-dmbtr = - gs_data-dmbtr .ENDIF.APPEND  gs_data TO gt_data3.ENDLOOP.CLEAR gs_report1.LOOP AT gt_data3 INTO gs_data WHERE shkzg = 'S' . "借方gs_report1-mandt = gs_data-mandt.              ""集团gs_report1-bukrs = gs_data-bukrs.              ""公司代码gs_report1-gjahr = gs_data-gjahr.              ""会计年度gs_report1-h_monat = gs_data-h_monat.          ""会计期间gs_report1-hkont = gs_data-hkont.              ""总账科目gs_report1-h_waers = gs_data-h_waers.          ""币种gs_report1-jf_wrbtr = gs_data-wrbtr.           ""本月借方发生额原币!!!gs_report1-jf_dmbtr = gs_data-dmbtr.           ""本月借方发生额本币!!!gs_report1-spras = gs_data-spras.          ""语言代码gs_report1-ktopl = gs_data-ktopl.          ""科目表gs_report1-saknr = gs_data-saknr.          ""总账科目编号gs_report1-txt20 = gs_data-txt20.          ""总帐科目名称gs_report1-txt50 = gs_data-txt50.          ""总账科目长文本gs_report1-ktoks = gs_data-ktoks.          ""总账科目组 "COLLECT gs_report1 INTO gt_report1 .ENDLOOP.CLEAR gs_report1.LOOP AT gt_data3 INTO gs_data WHERE shkzg = 'H' . "贷方gs_report1-mandt = gs_data-mandt.              ""集团gs_report1-bukrs = gs_data-bukrs.              ""公司代码gs_report1-gjahr = gs_data-gjahr.              ""会计年度gs_report1-h_monat = gs_data-h_monat.          ""会计期间gs_report1-hkont = gs_data-hkont.              ""总账科目gs_report1-h_waers = gs_data-h_waers.          ""币种gs_report1-df_wrbtr = gs_data-wrbtr.           ""本月贷方发生额原币!!!gs_report1-df_dmbtr = gs_data-dmbtr.           ""本月贷方发生额本币!!!gs_report1-spras = gs_data-spras.          ""语言代码gs_report1-ktopl = gs_data-ktopl.          ""科目表gs_report1-saknr = gs_data-saknr.          ""总账科目编号gs_report1-txt20 = gs_data-txt20.          ""总帐科目名称gs_report1-txt50 = gs_data-txt50.          ""总账科目长文本gs_report1-ktoks = gs_data-ktoks.          ""总账科目组 "COLLECT gs_report1 INTO gt_report1 .ENDLOOP.*------------------------------------------"补 公司~科目~币种、年~月"-------------------------CLEAR gs_report2.CLEAR gt_where1.LOOP AT gt_report1 INTO gs_report1  .gs_report2-gjahr = gs_report1-gjahr.              ""会计年度gs_report2-h_monat = gs_report1-h_monat.          ""会计期间"COLLECT gs_report2 INTO gt_where1 .ENDLOOP.CLEAR gs_report2.CLEAR gt_where2.LOOP AT gt_report1 INTO gs_report1  .gs_report2-mandt = gs_report1-mandt.              ""集团gs_report2-bukrs = gs_report1-bukrs.              ""公司代码gs_report2-hkont = gs_report1-hkont.              ""总账科目gs_report2-h_waers = gs_report1-h_waers.          ""币种gs_report2-spras = gs_report1-spras.              ""语言代码gs_report2-ktopl = gs_report1-ktopl.              ""科目表gs_report2-saknr = gs_report1-saknr.              ""总账科目编号gs_report2-txt20 = gs_report1-txt20.              ""总帐科目名称gs_report2-txt50 = gs_report1-txt50.              ""总账科目长文本gs_report2-ktoks = gs_report1-ktoks.              ""总账科目组 "COLLECT gs_report2 INTO gt_where2 .ENDLOOP.CLEAR gs_report3.LOOP AT gt_where1 INTO gs_report1  .LOOP AT gt_where2 INTO gs_report2  .gs_report1-mandt = gs_report2-mandt.              ""集团gs_report1-bukrs = gs_report2-bukrs.              ""公司代码gs_report1-hkont = gs_report2-hkont.              ""总账科目gs_report1-h_waers = gs_report2-h_waers.          ""币种gs_report1-spras = gs_report2-spras.              ""语言代码gs_report1-ktopl = gs_report2-ktopl.              ""科目表gs_report1-saknr = gs_report2-saknr.              ""总账科目编号gs_report1-txt20 = gs_report2-txt20.              ""总帐科目名称gs_report1-txt50 = gs_report2-txt50.              ""总账科目长文本gs_report1-ktoks = gs_report2-ktoks.              ""总账科目组gs_report1-gjahr = gs_report1-gjahr.              ""会计年度gs_report1-h_monat = gs_report1-h_monat.          ""会计期间"COLLECT gs_report1 INTO gt_report1 .ENDLOOP.ENDLOOP.*------------------------------------------"利润分配-未分配利润补项目"-------------------------CLEAR gt_where2.SELECTskat~spras,                 ""语言代码skat~ktopl,                 ""科目表skat~saknr,                 ""总账科目编号skat~txt20,                 ""总帐科目名称skat~txt50,                 ""总账科目长文本ska1~ktoks                 ""总账科目组FROM skatLEFT JOIN ska1 ON  skat~saknr = ska1~saknr  AND skat~ktopl = ska1~ktoplWHERE  skat~saknr = @p_wfplr  AND skat~spras = @sy-langu AND skat~ktopl = @p_ktoplINTO CORRESPONDING FIELDS OF TABLE @gt_where2.CLEAR gs_report2.CLEAR gt_where3.LOOP AT gt_report1 INTO gs_report1  .gs_report2-mandt = gs_report1-mandt.              ""集团gs_report2-bukrs = gs_report1-bukrs.          ""公司代码gs_report2-h_waers = gs_report1-h_waers .          ""货币码COLLECT gs_report2 INTO gt_where3 .ENDLOOP.CLEAR gs_report4.LOOP AT gt_where1 INTO gs_report1  .LOOP AT gt_where2 INTO gs_report2  .LOOP AT gt_where3 INTO gs_report3.gs_report4-mandt = gs_report3-mandt.              ""集团gs_report4-bukrs = gs_report3-bukrs.              ""公司代码gs_report4-hkont = p_wfplr.                         ""总账科目gs_report4-h_waers = gs_report3-h_waers.          ""币种gs_report4-spras = gs_report2-spras.              ""语言代码gs_report4-ktopl = gs_report2-ktopl.              ""科目表gs_report4-saknr = gs_report2-saknr.              ""总账科目编号gs_report4-txt20 = gs_report2-txt20.              ""总帐科目名称gs_report4-txt50 = gs_report2-txt50.              ""总账科目长文本gs_report4-ktoks = gs_report2-ktoks.              ""总账科目组gs_report4-gjahr = gs_report1-gjahr.              ""会计年度gs_report4-h_monat = gs_report1-h_monat.          ""会计期间"COLLECT gs_report4 INTO gt_report1 .APPEND gs_report4 TO gt_wfplr2 .ENDLOOP.ENDLOOP.ENDLOOP.*------------------------------------------"余额"-------------------------LOOP AT gt_report1 INTO gs_report1  .gs_report1-ye_wrbtr = gs_report1-jf_wrbtr - gs_report1-df_wrbtr .          ""余额原币gs_report1-ye_dmbtr = gs_report1-jf_dmbtr - gs_report1-df_dmbtr.          ""余额本币"IF gs_report1-ye_dmbtr = 0 .gs_report1-shkzg = '平'.ELSEIF gs_report1-ye_dmbtr > 0 .gs_report1-shkzg = '借'.ELSEIF gs_report1-ye_dmbtr < 0 .gs_report1-shkzg = '贷'.ENDIF.MODIFY gt_report1 FROM gs_report1  TRANSPORTING ye_wrbtr ye_dmbtr shkzg.ENDLOOP.*------------------------------------------"累计余额"-------------------------SORT gt_report1 BY mandt bukrs hkont h_waers gjahr h_monat .CLEAR gs_report2.LOOP AT gt_report1 INTO gs_report1  .IF NOT (  gs_report2-bukrs  = gs_report1-bukrs AND gs_report2-hkont  = gs_report1-hkont AND gs_report2-h_waers  = gs_report1-h_waers ) .gs_report2-bukrs  = gs_report1-bukrs .        "公司代码gs_report2-hkont  = gs_report1-hkont .        ""总账科目gs_report2-h_waers  = gs_report1-h_waers .   ""币种gs_report2-lj_wrbtr = 0 .gs_report2-lj_dmbtr = 0 .ENDIF.IF NOT (  gs_report2-gjahr  = gs_report1-gjahr  ) AND gs_report1-ktoks = 'PL'  .gs_report2-gjahr  = gs_report1-gjahr .gs_report2-lj_wrbtr = 0 .gs_report2-lj_dmbtr = 0 .ENDIF.gs_report2-lj_wrbtr = gs_report2-lj_wrbtr +  gs_report1-ye_wrbtr  .gs_report2-lj_dmbtr = gs_report2-lj_dmbtr  + gs_report1-ye_dmbtr .gs_report1-lj_wrbtr  = gs_report2-lj_wrbtr .gs_report1-lj_dmbtr  = gs_report2-lj_dmbtr .MODIFY gt_report1 FROM gs_report1  TRANSPORTING lj_wrbtr  lj_dmbtr .ENDLOOP.*------------------------------"利润分配-未分配利润 累计余额"-------------------------CLEAR gs_report2.CLEAR gt_wfplr1.LOOP AT gt_report1 INTO gs_report1 WHERE ktoks = 'PL' .gs_report2-bukrs  = gs_report1-bukrs . "公司代码gs_report2-gjahr  = gs_report1-gjahr + 1. ""年gs_report2-h_waers  = gs_report1-h_waers . ""币种gs_report2-ye_wrbtr = gs_report1-ye_wrbtr.gs_report2-ye_dmbtr = gs_report1-ye_dmbtr.COLLECT gs_report2 INTO gt_wfplr1.ENDLOOP.CLEAR gs_report2.LOOP AT gt_wfplr1 INTO gs_report1  .IF NOT (  gs_report2-bukrs  = gs_report1-bukrs  AND gs_report2-h_waers  = gs_report1-h_waers ) .gs_report2-bukrs  = gs_report1-bukrs .        "公司代码gs_report2-h_waers  = gs_report1-h_waers .   ""币种gs_report2-lj_wrbtr = 0 .gs_report2-lj_dmbtr = 0 .ENDIF.gs_report2-lj_wrbtr = gs_report2-lj_wrbtr +  gs_report1-ye_wrbtr  .gs_report2-lj_dmbtr = gs_report2-lj_dmbtr  + gs_report1-ye_dmbtr .gs_report1-lj_wrbtr  = gs_report2-lj_wrbtr .gs_report1-lj_dmbtr  = gs_report2-lj_dmbtr .MODIFY gt_wfplr1 FROM gs_report1  TRANSPORTING lj_wrbtr  lj_dmbtr .ENDLOOP.CLEAR gs_report3.LOOP AT gt_wfplr1 INTO gs_report1.LOOP AT gt_report1 INTO gs_report2 WHERE hkont = p_wfplr.IF gs_report1-bukrs = gs_report2-bukrs AND gs_report1-gjahr = gs_report2-gjahr AND gs_report1-h_waers = gs_report2-h_waers .gs_report3-lj_wrbtr = gs_report1-lj_wrbtr + gs_report2-lj_wrbtr.gs_report3-lj_dmbtr = gs_report1-lj_dmbtr + gs_report2-lj_dmbtr.MODIFY gt_report1 FROM gs_report3  TRANSPORTING lj_wrbtr  lj_dmbtr .ENDIF.ENDLOOP.ENDLOOP.*------------------------------------------"上期余额"-------------------------CLEAR gs_report2.LOOP AT gt_report1 INTO gs_report1  .gs_report1-qc_wrbtr  = gs_report1-lj_wrbtr - gs_report1-ye_wrbtr .gs_report1-qc_dmbtr  = gs_report1-lj_dmbtr - gs_report1-ye_dmbtr .MODIFY gt_report1 FROM gs_report1  TRANSPORTING qc_wrbtr  qc_dmbtr .ENDLOOP.*------------------------------------------"屏幕筛选"-------------------------LOOP AT gt_report1 INTO gs_report1 WHERE gjahr = p_gjahr  AND h_monat IN s_monat AND hkont IN s_hkont "会计年度 ,期间,总账科目.AND NOT (  qc_wrbtr = 0 AND  qc_dmbtr = 0 AND  jf_wrbtr = 0 AND  jf_dmbtr = 0 AND  df_wrbtr = 0 AND  df_dmbtr = 0 AND  ye_wrbtr = 0 AND  ye_dmbtr = 0 AND  lj_wrbtr = 0 AND  lj_dmbtr = 0 ) .APPEND gs_report1 TO gt_report2.ENDLOOP.ENDFORM.*&---------------------------------------------------------------------*
*& Form FRM_LAYOUT
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM frm_layout .wa_layout-cwidth_opt = 'X'. "最适列宽wa_layout-zebra = 'X'. "隔行显示斑马纹   使ALV表格按斑马线间隔条码方式显示"wa_layout-grid_title = 'test'.wa_layout-sel_mode = 'D'.
* wa_layout-excp_fname = 'light'.wa_layout-stylefname = 'CELLBTN'.
*  wa_layout-edit = 'X'.
*  wa_layout-box_fname = 'BOX'.
*  wa_layout-confirmation_prompt = 'X'.
ENDFORM.*&---------------------------------------------------------------------*
*& Form FRM_FIELDCAT
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM frm_fieldcat .init_fieldcat:'BUKRS' '公司代码'(t01) 'X' '' '' '','GJAHR' '会计年度'(t02) 'X' '' '' '','H_MONAT' '会计期间'(t03) 'X' '' '' '','HKONT' '总账科目'(t04) 'X' '' '' '','TXT50' '总账科目长文本 '(t05) 'X' '' '' '','H_WAERS' '币种'(t06) 'X' '' '' '','QC_WRBTR' '期初原币余额'(t07) 'X' '' '' '','QC_DMBTR' '期初本币余额'(t08) 'X' '' '' '','JF_WRBTR' '本月借方发生额原币'(t09) 'X' '' '' '','JF_DMBTR' '本月借方发生额本币'(t10) 'X' '' '' '','DF_WRBTR' '本月贷方发生额原币'(t11) 'X' '' '' '','DF_DMBTR' '本月贷方发生额本币'(t12) 'X' '' '' '','SHKZG' '借贷标识'(t13) 'X' '' '' '','YE_WRBTR' '余额原币'(t14) 'X' '' '' '','YE_DMBTR' '余额本币'(t15) 'X' '' '' '','LJ_WRBTR' '累计余额原币'(t16) 'X' '' '' '','LJ_DMBTR' '累计余额本币'(t17) 'X' '' '' ''."ENDFORM.*&---------------------------------------------------------------------*
*& Form FRM_OUTPUT
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM frm_output .CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'EXPORTING
*     i_callback_program = sy-repid   JUAN
*     I_INTERFACE_CHECK  = ' '
*     I_BYPASSING_BUFFER =
*     I_BUFFER_ACTIVE =
*     I_CALLBACK_PROGRAM = ' '
*     I_CALLBACK_PF_STATUS_SET          = ' '
*     I_CALLBACK_USER_COMMAND           = ' '
*     I_CALLBACK_TOP_OF_PAGE            = ' '
*     I_CALLBACK_HTML_TOP_OF_PAGE       = ' '
*     I_CALLBACK_HTML_END_OF_LIST       = ' '
*     I_STRUCTURE_NAME   =
*     I_BACKGROUND_ID = ' '
*     I_GRID_TITLE    =
*     I_GRID_SETTINGS =is_layout_lvc   = wa_layoutit_fieldcat_lvc = it_fieldcat
*     IT_EXCLUDING    =
*     IT_SPECIAL_GROUPS_LVC             =
*     IT_SORT_LVC     =
*     IT_FILTER_LVC   =
*     IT_HYPERLINK    =
*     IS_SEL_HIDE     =
*     I_DEFAULT       = 'X'i_save          = 'U'
*     IS_VARIANT      =
*     IT_EVENTS       =
*     IT_EVENT_EXIT   =
*     IS_PRINT_LVC    =
*     IS_REPREP_ID_LVC   =
*     I_SCREEN_START_COLUMN             = 0
*     I_SCREEN_START_LINE               = 0
*     I_SCREEN_END_COLUMN               = 0
*     I_SCREEN_END_LINE  = 0
*     I_HTML_HEIGHT_TOP  =
*     I_HTML_HEIGHT_END  =
*     IT_ALV_GRAPHICS =
*     IT_EXCEPT_QINFO_LVC               =
*     IR_SALV_FULLSCREEN_ADAPTER        =
* IMPORTING
*     E_EXIT_CAUSED_BY_CALLER           =
*     ES_EXIT_CAUSED_BY_USER            =TABLESt_outtab        = gt_report2EXCEPTIONSprogram_error   = 1OTHERS          = 2.IF sy-subrc <> 0.
* Implement suitable error handling hereENDIF.ENDFORM.

DEMO区运行

*&---------------------------------------------------------------------*
*& Report ZCOR0054
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*& Responsibility
*&---------------------------------------------------------------------*
* Program Name: ZCOR001
* Date written: 2023-06-12
* Author's name: C10089213 朱鸿飞
* Last update:
* Program title: 立铠科目余额表(原币)
* Project Name: 立讯精密ERP实施项目
* Version: V1.0REPORT zcor0054 MESSAGE-ID zfi001.*----------------------------------------------------------------------*
*              INCLUDE 、 TYPES_POOLS 、 TABLES  引 用 区              *
*----------------------------------------------------------------------*
TABLES : bseg ,faglflexa ,bkpf, skat , ska1 ,t001.*----------------------------------------------------------------------*
*                 T Y P E S -  结 构 定 义                             *
*----------------------------------------------------------------------*
TYPES: BEGIN OF ty_data,mandt    TYPE mandt,               ""集团bukrs    TYPE bukrs,               ""公司代码hkont    TYPE hkont,               ""总账科目h_waers  TYPE waers,               ""货币码gjahr    TYPE gjahr,               ""会计年度h_monat  TYPE monat,               ""会计期间"belnr    TYPE belnr_d,             ""会计凭证号码"buzei    TYPE buzei,               ""会计凭证中的行项目数"spras    TYPE spras,               ""语言代码"ktopl    TYPE ktopl,               ""科目表"saknr    TYPE saknr,               ""总账科目编号"txt20    TYPE txt20_skat,          ""总帐科目名称txt50    TYPE txt50_skat,          ""总账科目长文本ktoks    TYPE ktoks,               ""总账科目组shkzg    TYPE shkzg,               ""借方/贷方标识wrbtr    TYPE wrbtr,               ""凭证货币金额dmbtr    TYPE dmbtr,               ""按本位币计的金额qc_wrbtr TYPE wrbtr,               ""期初原币余额qc_dmbtr TYPE dmbtr,               ""期初本币余额jf_wrbtr TYPE wrbtr,               ""本月借方发生额原币jf_dmbtr TYPE dmbtr,               ""本月借方发生额本币df_wrbtr TYPE wrbtr,               ""本月贷方发生额原币df_dmbtr TYPE dmbtr,               ""本月贷方发生额本币h_shkzg  TYPE shkzg,               ""借贷标识(显示)ye_wrbtr TYPE wrbtr,               ""余额原币ye_dmbtr TYPE dmbtr,               ""余额本币lj_wrbtr TYPE wrbtr,               ""累计余额原币lj_dmbtr TYPE dmbtr,               ""累计余额本币"END OF ty_data.*----------------------------------------------------------------------*
*                  DATA 定义                                           *
*----------------------------------------------------------------------*
DATA: gt_data1   TYPE TABLE OF ty_data,gt_data2   TYPE TABLE OF ty_data,gt_report1 TYPE TABLE OF ty_data,gt_report2 TYPE TABLE OF ty_data,gt_where1  TYPE TABLE OF ty_data,gt_where2  TYPE TABLE OF ty_data,gt_where3  TYPE TABLE OF ty_data,gt_where4  TYPE TABLE OF ty_data,gt_wfplr1  TYPE TABLE OF ty_data,gt_wfplr2  TYPE TABLE OF ty_data,gt_bukrs   TYPE TABLE OF ty_data,gs_data1   TYPE ty_data,gs_data2   TYPE ty_data,gs_data3   TYPE ty_data,gs_data4   TYPE ty_data,gs_bukrs   TYPE ty_data,se16       TYPE char10.*----------------------------------------------------------------------*
*                  ALV 定义
*----------------------------------------------------------------------*
DATA: wa_layout   TYPE lvc_s_layo, "layout 布局控制 参考结构 lvc_s_layoit_fieldcat TYPE lvc_t_fcat, "fieldcat 字段目录 参考结构 LVC_T_FCATwa_fieldcat LIKE LINE OF it_fieldcat.*----------------------------------------------------------------------*
*                  选 择 屏 幕 定 义 块
*----------------------------------------------------------------------*SELECTION-SCREEN BEGIN OF BLOCK text1.
SELECT-OPTIONS:s_bukrs FOR bseg-bukrs   OBLIGATORY,   ""公司代码s_gjahr FOR bseg-gjahr   OBLIGATORY,   ""会计年度s_monat FOR bseg-h_monat OBLIGATORY,   ""会计期间s_hkont FOR bseg-hkont.   ""总账科目"
PARAMETERS p_ktopl TYPE skat-ktopl DEFAULT 'LXCA' OBLIGATORY.   ""科目表
PARAMETERS p_p1 TYPE char1  DEFAULT '' USER-COMMAND flag.
PARAMETERS p_wfplr TYPE bseg-hkont MODIF ID f2 DEFAULT '0041040112' OBLIGATORY.
SELECTION-SCREEN END OF BLOCK text1.*----------------------------------------------------------------------*
*                  初 始 化 块                                         *
*----------------------------------------------------------------------*
*该事件在屏幕未显示之前执行,对程式设置值及屏幕元素进行初始化赋值*
INITIALIZATION.*----------------------------------------------------------------------*
*                  选 择 屏 幕 字 段 处 理 块
*----------------------------------------------------------------------*
AT SELECTION-SCREEN OUTPUT.LOOP AT SCREEN .IF p_p1 = ''.IF screen-group1 = 'F2' .screen-active = 0 . "不活动,相当于隐藏ENDIF.ENDIF.MODIFY SCREEN.ENDLOOP.*----------------------------------------------------------------------*
*                  逻 辑 处 理 块                                      *
*----------------------------------------------------------------------*START-OF-SELECTION. "执行按钮后触发PERFORM frm_authority_check. "检查权限PERFORM frm_getdata. "取数PERFORM frm_layout. "布局PERFORM frm_fieldcat. "列PERFORM frm_output. "输出*----------------------------------------------------------------------*
*                  定义宏
*----------------------------------------------------------------------*DEFINE init_fieldcat.CLEAR wa_fieldcat.
wa_fieldcat-fieldname = &1. "字段
wa_fieldcat-coltext = &2.
wa_fieldcat-fix_column = &3.
wa_fieldcat-hotspot = &4.
wa_fieldcat-key = &5. ""X"
wa_fieldcat-col_pos = &6. "1
*  wa_fieldcat-EDIT = &3.
*  wa_fieldcat-REF_TABLE = &4.
*  wa_fieldcat-REF_FIELD = &5.
*  wa_fieldcat-CHECKBOX = &6 .
*  wa_fieldcat-DO_SUM = &7 .
*  wa_fieldcat-rollname = &8 .
* wa_fieldcat-hotspot = &7 .APPEND wa_fieldcat TO it_fieldcat.END-OF-DEFINITION.*&---------------------------------------------------------------------*
*& Form FRM_GETDATA
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM frm_getdata .SELECT  bukrs FROM t001  WHERE  bukrs IN @s_bukrsINTO CORRESPONDING FIELDS OF TABLE @gt_bukrs.LOOP AT gt_bukrs INTO gs_bukrs  .CLEAR gt_data1.SELECTbseg~mandt,             ""集团bseg~bukrs,             ""公司代码bseg~hkont,             ""总账科目bseg~h_waers,           ""货币码bseg~gjahr,             ""会计年度bseg~h_monat,           ""会计期间"bseg~belnr,             ""会计凭证号码"bseg~buzei,             ""会计凭证中的行项目数"skat~spras,             ""语言代码"skat~ktopl,             ""科目表"skat~saknr,             ""总账科目编号"skat~txt20,             ""总帐科目名称skat~txt50,             ""总账科目长文本ska1~ktoks,             ""总账科目组bseg~shkzg,             ""借方/贷方标识bseg~wrbtr,             ""凭证货币金额bseg~dmbtr             ""按本位币计的金额FROM bsegLEFT JOIN skat ON  skat~saknr = bseg~hkont  AND skat~spras = @sy-langu AND skat~ktopl = @p_ktoplLEFT JOIN ska1 ON  skat~saknr = ska1~saknr  AND skat~ktopl = ska1~ktoplWHERE bseg~bukrs = @gs_bukrs-bukrs  "公司代码INTO CORRESPONDING FIELDS OF TABLE @gt_data1.se16 = 'bseg'.PERFORM frm_calculatedata. "计算CLEAR gt_data1.SELECTfaglflexa~rclnt AS mandt,            ""集团faglflexa~rbukrs AS bukrs,           ""公司代码faglflexa~racct AS hkont,            ""科目号faglflexa~rwcur AS h_waers,          ""原事务货币的货币码faglflexa~ryear AS gjahr,            ""会计年度bkpf~monat AS h_monat,          ""过账期间"faglflexa~docnr AS belnr,            ""会计凭证号码"faglflexa~buzei,            ""会计凭证中的行项目数"skat~spras,                 ""语言代码"skat~ktopl,                 ""科目表"skat~saknr,                 ""总账科目编号"skat~txt20,                 ""总帐科目名称skat~txt50,                 ""总账科目长文本ska1~ktoks,                 ""总账科目组faglflexa~drcrk AS shkzg,            ""借方/贷方标识faglflexa~wsl AS wrbtr,                ""原交易货币的值(凭证货币)faglflexa~hsl AS  dmbtr                ""用本地货币表示的值 "FROM faglflexaLEFT JOIN bkpf ON  bkpf~bukrs = faglflexa~rbukrs AND bkpf~gjahr = faglflexa~ryear AND bkpf~belnr = faglflexa~docnrLEFT JOIN skat ON  skat~saknr = faglflexa~racct  AND skat~spras = @sy-langu AND skat~ktopl = @p_ktoplLEFT JOIN ska1 ON  skat~saknr = ska1~saknr  AND skat~ktopl = ska1~ktoplWHERE faglflexa~rbukrs IN @s_bukrs  AND faglflexa~buzei = '000' AND NOT bkpf~monat = '00' "公司代码 会计凭证号码 排除空,月份排除空INTO CORRESPONDING FIELDS OF TABLE @gt_data1.se16 = 'faglflexa'.PERFORM frm_calculatedata. "计算ENDLOOP.
*------------------------------------------"补 公司~科目~币种、年~月"-------------------------CLEAR gs_data2.CLEAR gt_where1.LOOP AT gt_report1 INTO gs_data1  .gs_data2-gjahr = gs_data1-gjahr.              ""会计年度gs_data2-h_monat = gs_data1-h_monat.          ""会计期间"COLLECT gs_data2 INTO gt_where1 .ENDLOOP.CLEAR gs_data2.CLEAR gt_where2.LOOP AT gt_report1 INTO gs_data1  .gs_data2-mandt = gs_data1-mandt.              ""集团gs_data2-bukrs = gs_data1-bukrs.              ""公司代码gs_data2-hkont = gs_data1-hkont.              ""总账科目gs_data2-h_waers = gs_data1-h_waers.          ""币种"gs_data2-spras = gs_data1-spras.              ""语言代码"gs_data2-ktopl = gs_data1-ktopl.              ""科目表"gs_data2-saknr = gs_data1-saknr.              ""总账科目编号"gs_data2-txt20 = gs_data1-txt20.              ""总帐科目名称gs_data2-txt50 = gs_data1-txt50.              ""总账科目长文本gs_data2-ktoks = gs_data1-ktoks.              ""总账科目组 "COLLECT gs_data2 INTO gt_where2 .ENDLOOP.CLEAR gs_data3.LOOP AT gt_where1 INTO gs_data1  .LOOP AT gt_where2 INTO gs_data2  .gs_data1-mandt = gs_data2-mandt.              ""集团gs_data1-bukrs = gs_data2-bukrs.              ""公司代码gs_data1-hkont = gs_data2-hkont.              ""总账科目gs_data1-h_waers = gs_data2-h_waers.          ""币种"gs_data1-spras = gs_data2-spras.              ""语言代码"gs_data1-ktopl = gs_data2-ktopl.              ""科目表"gs_data1-saknr = gs_data2-saknr.              ""总账科目编号"gs_data1-txt20 = gs_data2-txt20.              ""总帐科目名称gs_data1-txt50 = gs_data2-txt50.              ""总账科目长文本gs_data1-ktoks = gs_data2-ktoks.              ""总账科目组gs_data1-gjahr = gs_data1-gjahr.              ""会计年度gs_data1-h_monat = gs_data1-h_monat.          ""会计期间"COLLECT gs_data1 INTO gt_report1 .ENDLOOP.ENDLOOP.*------------------------------------------"利润分配-未分配利润补项目"-------------------------CLEAR gt_where2.SELECT"skat~spras,                 ""语言代码"skat~ktopl,                 ""科目表"skat~saknr,                 ""总账科目编号"skat~txt20,                 ""总帐科目名称skat~txt50,                 ""总账科目长文本ska1~ktoks                 ""总账科目组FROM skatLEFT JOIN ska1 ON  skat~saknr = ska1~saknr  AND skat~ktopl = ska1~ktoplWHERE  skat~saknr = @p_wfplr  AND skat~spras = @sy-langu AND skat~ktopl = @p_ktoplINTO CORRESPONDING FIELDS OF TABLE @gt_where2.CLEAR gs_data2.CLEAR gt_where3.LOOP AT gt_report1 INTO gs_data1  .gs_data2-mandt = gs_data1-mandt.              ""集团gs_data2-bukrs = gs_data1-bukrs.          ""公司代码gs_data2-h_waers = gs_data1-h_waers .          ""货币码COLLECT gs_data2 INTO gt_where3 .ENDLOOP.CLEAR gs_data4.LOOP AT gt_where1 INTO gs_data1  .LOOP AT gt_where2 INTO gs_data2  .LOOP AT gt_where3 INTO gs_data3.gs_data4-mandt = gs_data3-mandt.              ""集团gs_data4-bukrs = gs_data3-bukrs.              ""公司代码gs_data4-hkont = p_wfplr.                         ""总账科目gs_data4-h_waers = gs_data3-h_waers.          ""币种"gs_data4-spras = gs_data2-spras.              ""语言代码"gs_data4-ktopl = gs_data2-ktopl.              ""科目表"gs_data4-saknr = gs_data2-saknr.              ""总账科目编号"gs_data4-txt20 = gs_data2-txt20.              ""总帐科目名称gs_data4-txt50 = gs_data2-txt50.              ""总账科目长文本gs_data4-ktoks = gs_data2-ktoks.              ""总账科目组gs_data4-gjahr = gs_data1-gjahr.              ""会计年度gs_data4-h_monat = gs_data1-h_monat.          ""会计期间"COLLECT gs_data4 INTO gt_report1 .APPEND gs_data4 TO gt_wfplr2 .ENDLOOP.ENDLOOP.ENDLOOP.*------------------------------------------"余额"-------------------------LOOP AT gt_report1 INTO gs_data1  .gs_data1-ye_wrbtr = gs_data1-jf_wrbtr - gs_data1-df_wrbtr .          ""余额原币gs_data1-ye_dmbtr = gs_data1-jf_dmbtr - gs_data1-df_dmbtr.          ""余额本币"IF gs_data1-ye_dmbtr = 0 .gs_data1-h_shkzg = '平'.ELSEIF gs_data1-ye_dmbtr > 0 .gs_data1-h_shkzg = '借'.ELSEIF gs_data1-ye_dmbtr < 0 .gs_data1-h_shkzg = '贷'.ENDIF.MODIFY gt_report1 FROM gs_data1  TRANSPORTING ye_wrbtr ye_dmbtr h_shkzg.ENDLOOP.*------------------------------------------"累计余额"-------------------------SORT gt_report1 BY mandt bukrs hkont h_waers gjahr h_monat .CLEAR gs_data2.LOOP AT gt_report1 INTO gs_data1  .IF NOT (  gs_data2-bukrs  = gs_data1-bukrs AND gs_data2-hkont  = gs_data1-hkont AND gs_data2-h_waers  = gs_data1-h_waers ) .gs_data2-bukrs  = gs_data1-bukrs .        "公司代码gs_data2-hkont  = gs_data1-hkont .        ""总账科目gs_data2-h_waers  = gs_data1-h_waers .   ""币种gs_data2-lj_wrbtr = 0 .gs_data2-lj_dmbtr = 0 .ENDIF.IF NOT (  gs_data2-gjahr  = gs_data1-gjahr  ) AND gs_data1-ktoks = 'PL'  .gs_data2-gjahr  = gs_data1-gjahr .gs_data2-lj_wrbtr = 0 .gs_data2-lj_dmbtr = 0 .ENDIF.gs_data2-lj_wrbtr = gs_data2-lj_wrbtr +  gs_data1-ye_wrbtr  .gs_data2-lj_dmbtr = gs_data2-lj_dmbtr  + gs_data1-ye_dmbtr .gs_data1-lj_wrbtr  = gs_data2-lj_wrbtr .gs_data1-lj_dmbtr  = gs_data2-lj_dmbtr .MODIFY gt_report1 FROM gs_data1  TRANSPORTING lj_wrbtr  lj_dmbtr .ENDLOOP.*------------------------------"利润分配-未分配利润 累计余额"-------------------------CLEAR gs_data2.CLEAR gt_wfplr1.LOOP AT gt_report1 INTO gs_data1 WHERE ktoks = 'PL' .gs_data2-bukrs  = gs_data1-bukrs . "公司代码gs_data2-gjahr  = gs_data1-gjahr + 1. ""年gs_data2-h_waers  = gs_data1-h_waers . ""币种gs_data2-ye_wrbtr = gs_data1-ye_wrbtr.gs_data2-ye_dmbtr = gs_data1-ye_dmbtr.COLLECT gs_data2 INTO gt_wfplr1.ENDLOOP.CLEAR gs_data2.LOOP AT gt_wfplr1 INTO gs_data1  .IF NOT (  gs_data2-bukrs  = gs_data1-bukrs  AND gs_data2-h_waers  = gs_data1-h_waers ) .gs_data2-bukrs  = gs_data1-bukrs .        "公司代码gs_data2-h_waers  = gs_data1-h_waers .   ""币种gs_data2-lj_wrbtr = 0 .gs_data2-lj_dmbtr = 0 .ENDIF.gs_data2-lj_wrbtr = gs_data2-lj_wrbtr +  gs_data1-ye_wrbtr  .gs_data2-lj_dmbtr = gs_data2-lj_dmbtr  + gs_data1-ye_dmbtr .gs_data1-lj_wrbtr  = gs_data2-lj_wrbtr .gs_data1-lj_dmbtr  = gs_data2-lj_dmbtr .MODIFY gt_wfplr1 FROM gs_data1  TRANSPORTING lj_wrbtr  lj_dmbtr .ENDLOOP.CLEAR gs_data3.LOOP AT gt_wfplr1 INTO gs_data1.LOOP AT gt_report1 INTO gs_data2 WHERE hkont = p_wfplr.IF gs_data1-bukrs = gs_data2-bukrs AND gs_data1-gjahr = gs_data2-gjahr AND gs_data1-h_waers = gs_data2-h_waers .gs_data3-lj_wrbtr = gs_data1-lj_wrbtr + gs_data2-lj_wrbtr.gs_data3-lj_dmbtr = gs_data1-lj_dmbtr + gs_data2-lj_dmbtr.MODIFY gt_report1 FROM gs_data3  TRANSPORTING lj_wrbtr  lj_dmbtr .ENDIF.ENDLOOP.ENDLOOP.*------------------------------------------"上期余额"-------------------------CLEAR gs_data2.LOOP AT gt_report1 INTO gs_data1  .gs_data1-qc_wrbtr  = gs_data1-lj_wrbtr - gs_data1-ye_wrbtr .gs_data1-qc_dmbtr  = gs_data1-lj_dmbtr - gs_data1-ye_dmbtr .MODIFY gt_report1 FROM gs_data1  TRANSPORTING qc_wrbtr  qc_dmbtr .ENDLOOP.*------------------------------------------"屏幕筛选"-------------------------LOOP AT gt_report1 INTO gs_data1 WHERE gjahr IN s_gjahr  AND h_monat IN s_monat AND hkont IN s_hkont "会计年度 ,期间,总账科目.AND NOT (  qc_wrbtr = 0 AND  qc_dmbtr = 0 AND  jf_wrbtr = 0 AND  jf_dmbtr = 0 AND  df_wrbtr = 0 AND  df_dmbtr = 0 AND  ye_wrbtr = 0 AND  ye_dmbtr = 0 AND  lj_wrbtr = 0 AND  lj_dmbtr = 0 ) .APPEND gs_data1 TO gt_report2.ENDLOOP.ENDFORM.*&---------------------------------------------------------------------*
*& Form FRM_LAYOUT
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM frm_layout .wa_layout-cwidth_opt = 'X'. "最适列宽wa_layout-zebra = 'X'. "隔行显示斑马纹   使ALV表格按斑马线间隔条码方式显示"wa_layout-grid_title = 'test'.wa_layout-sel_mode = 'D'.
* wa_layout-excp_fname = 'light'.wa_layout-stylefname = 'CELLBTN'.
*  wa_layout-edit = 'X'.
*  wa_layout-box_fname = 'BOX'.
*  wa_layout-confirmation_prompt = 'X'.
ENDFORM.*&---------------------------------------------------------------------*
*& Form FRM_FIELDCAT
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM frm_fieldcat .init_fieldcat:'BUKRS' '公司代码'(t01) 'X' '' '' '','GJAHR' '会计年度'(t02) 'X' '' '' '','H_MONAT' '会计期间'(t03) 'X' '' '' '','HKONT' '总账科目'(t04) 'X' '' '' '','TXT50' '总账科目长文本 '(t05) 'X' '' '' '','H_WAERS' '币种'(t06) 'X' '' '' '','QC_WRBTR' '期初原币余额'(t07) 'X' '' '' '','QC_DMBTR' '期初本币余额'(t08) 'X' '' '' '','JF_WRBTR' '本月借方发生额原币'(t09) 'X' '' '' '','JF_DMBTR' '本月借方发生额本币'(t10) 'X' '' '' '','DF_WRBTR' '本月贷方发生额原币'(t11) 'X' '' '' '','DF_DMBTR' '本月贷方发生额本币'(t12) 'X' '' '' '','H_SHKZG' '借贷标识'(t13) 'X' '' '' '','YE_WRBTR' '余额原币'(t14) 'X' '' '' '','YE_DMBTR' '余额本币'(t15) 'X' '' '' '','LJ_WRBTR' '累计余额原币'(t16) 'X' '' '' '','LJ_DMBTR' '累计余额本币'(t17) 'X' '' '' ''."ENDFORM.*&---------------------------------------------------------------------*
*& Form FRM_OUTPUT
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM frm_output .CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'EXPORTING
*     i_callback_program = sy-repid   JUAN
*     I_INTERFACE_CHECK  = ' '
*     I_BYPASSING_BUFFER =
*     I_BUFFER_ACTIVE =
*     I_CALLBACK_PROGRAM = ' '
*     I_CALLBACK_PF_STATUS_SET          = ' '
*     I_CALLBACK_USER_COMMAND           = ' '
*     I_CALLBACK_TOP_OF_PAGE            = ' '
*     I_CALLBACK_HTML_TOP_OF_PAGE       = ' '
*     I_CALLBACK_HTML_END_OF_LIST       = ' '
*     I_STRUCTURE_NAME   =
*     I_BACKGROUND_ID = ' '
*     I_GRID_TITLE    =
*     I_GRID_SETTINGS =is_layout_lvc   = wa_layoutit_fieldcat_lvc = it_fieldcat
*     IT_EXCLUDING    =
*     IT_SPECIAL_GROUPS_LVC             =
*     IT_SORT_LVC     =
*     IT_FILTER_LVC   =
*     IT_HYPERLINK    =
*     IS_SEL_HIDE     =
*     I_DEFAULT       = 'X'i_save          = 'U'
*     IS_VARIANT      =
*     IT_EVENTS       =
*     IT_EVENT_EXIT   =
*     IS_PRINT_LVC    =
*     IS_REPREP_ID_LVC   =
*     I_SCREEN_START_COLUMN             = 0
*     I_SCREEN_START_LINE               = 0
*     I_SCREEN_END_COLUMN               = 0
*     I_SCREEN_END_LINE  = 0
*     I_HTML_HEIGHT_TOP  =
*     I_HTML_HEIGHT_END  =
*     IT_ALV_GRAPHICS =
*     IT_EXCEPT_QINFO_LVC               =
*     IR_SALV_FULLSCREEN_ADAPTER        =
* IMPORTING
*     E_EXIT_CAUSED_BY_CALLER           =
*     ES_EXIT_CAUSED_BY_USER            =TABLESt_outtab        = gt_report2EXCEPTIONSprogram_error   = 1OTHERS          = 2.IF sy-subrc <> 0.
* Implement suitable error handling hereENDIF.ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_CALCULATEDATA
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM frm_calculatedata .CLEAR gs_data2.LOOP AT gt_data1 INTO gs_data1 WHERE shkzg = 'S' . "借方gs_data2-mandt = gs_data1-mandt.              ""集团gs_data2-bukrs = gs_data1-bukrs.              ""公司代码gs_data2-gjahr = gs_data1-gjahr.              ""会计年度gs_data2-h_monat = gs_data1-h_monat.          ""会计期间gs_data2-hkont = gs_data1-hkont.              ""总账科目gs_data2-h_waers = gs_data1-h_waers.          ""币种IF se16 = 'faglflexa'.IF gs_data1-shkzg = 'H'.gs_data1-wrbtr = - gs_data1-wrbtr .gs_data1-dmbtr = - gs_data1-dmbtr .ENDIF.ENDIF.gs_data2-jf_wrbtr = gs_data1-wrbtr.           ""本月借方发生额原币!!!gs_data2-jf_dmbtr = gs_data1-dmbtr.           ""本月借方发生额本币!!!"gs_data2-spras = gs_data1-spras.          ""语言代码"gs_data2-ktopl = gs_data1-ktopl.          ""科目表"gs_data2-saknr = gs_data1-saknr.          ""总账科目编号"gs_data2-txt20 = gs_data1-txt20.          ""总帐科目名称gs_data2-txt50 = gs_data1-txt50.          ""总账科目长文本gs_data2-ktoks = gs_data1-ktoks.          ""总账科目组 "COLLECT gs_data2 INTO gt_report1 .ENDLOOP.CLEAR gs_data2.LOOP AT gt_data1 INTO gs_data1 WHERE shkzg = 'H' . "贷方gs_data2-mandt = gs_data1-mandt.              ""集团gs_data2-bukrs = gs_data1-bukrs.              ""公司代码gs_data2-gjahr = gs_data1-gjahr.              ""会计年度gs_data2-h_monat = gs_data1-h_monat.          ""会计期间gs_data2-hkont = gs_data1-hkont.              ""总账科目gs_data2-h_waers = gs_data1-h_waers.          ""币种IF se16 = 'faglflexa'.IF gs_data1-shkzg = 'H'.gs_data1-wrbtr = - gs_data1-wrbtr .gs_data1-dmbtr = - gs_data1-dmbtr .ENDIF.ENDIF.gs_data2-df_wrbtr = gs_data1-wrbtr.           ""本月贷方发生额原币!!!gs_data2-df_dmbtr = gs_data1-dmbtr.           ""本月贷方发生额本币!!!"gs_data2-spras = gs_data1-spras.          ""语言代码"gs_data2-ktopl = gs_data1-ktopl.          ""科目表"gs_data2-saknr = gs_data1-saknr.          ""总账科目编号"gs_data2-txt20 = gs_data1-txt20.          ""总帐科目名称gs_data2-txt50 = gs_data1-txt50.          ""总账科目长文本gs_data2-ktoks = gs_data1-ktoks.          ""总账科目组 "COLLECT gs_data2 INTO gt_report1 .ENDLOOP.CLEAR gt_data1.
ENDFORM.*&---------------------------------------------------------------------*
*&      FORM  getaction
*&---------------------------------------------------------------------*
*       处理用户权限
*----------------------------------------------------------------------*
FORM frm_authority_check.DATA:BEGIN OF lt_bukrs OCCURS 0,bukrs LIKE t001-bukrs,END OF lt_bukrs.SELECT * INTO CORRESPONDING FIELDS OF TABLE lt_bukrs FROM t001 WHERE bukrs IN s_bukrs.LOOP AT lt_bukrs.AUTHORITY-CHECK OBJECT  'F_SKA1_BUK'ID 'BUKRS' FIELD lt_bukrs-bukrs."检查字段IF sy-subrc <> 0.MESSAGE s021 WITH lt_bukrs-bukrs DISPLAY LIKE 'E'.LEAVE LIST-PROCESSING.ENDIF.ENDLOOP.
ENDFORM.

DEMO区运行2

*&---------------------------------------------------------------------*
*& Report ZCOR0054
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*& Responsibility
*&---------------------------------------------------------------------*
* Program Name: ZCOR0054
* Date written: 2023-06-27
* Author's name: C10089213 朱鸿飞
* Last update:
* Program title: 立铠科目余额表(原币)
* Project Name: 立讯精密ERP实施项目
* Version: V1.0*参考资料
*在SAP系统中,凭证项目相关的数据可以在表BKPF(凭证抬头数据)和BSEG(凭证行项目数据)中找到。在BSEG表中,可以使用字段GL_ACCOUNT来查找会计科目16020107相关的凭证项目数据。具体来说,你可以使用如下的SAP ABAP代码来查询该会计科目的凭证项目数据:
*
*SELECT *
*FROM BSEG
*WHERE GL_ACCOUNT = '16020107'.
*需要注意的是,在实际使用中,你需要根据自己的SAP系统配置和权限,来确定可以访问哪些表和字段。另外,我们需要保证查询操作的合法性和准确性,避免对系统数据造成不必要的影响。
*
*
*在SAP系统中,除了BSEG表(凭证行项目数据),还有其他一些表可以存储凭证项目相关的数据。以下是一些常见的例子:
*
*BKPF表:凭证抬头数据表,包含凭证的基本信息,如凭证号、凭证日期、凭证类型等。BKPF表和BSEG表通过凭证号(BELNR)字段进行关联,可以用来检索特定凭证的所有行项目数据。
*COEP表:成本元素总帐凭证行项目数据表,用于存储与成本核算相关的凭证项目数据。COEP表和BSEG表通过凭证号、凭证行项目号(BUZEI)和成本元素(COSTELEMENT)字段进行关联。
*FAGLFLEXA表:总账分析项数据表,用于存储总账分析项相关的凭证数据。FAGLFLEXA表和BSEG表通过凭证号和凭证行项目号字段进行关联。
*FAGL_SPLINFO表:总账分期余额表,用于存储总账分期余额相关的凭证数据。FAGL_SPLINFO表和BSEG表通过凭证号、凭证行项目号和总账分期(FISCPER)字段进行关联。
*需要根据具体情况选择合适的表来查询凭证项目相关的数据。同时,需要注意不同表之间的关联关系,以及表中字段的含义和使用方式。REPORT zcor001 MESSAGE-ID zfi001.*----------------------------------------------------------------------*
*              INCLUDE 、 TYPES_POOLS 、 TABLES  引 用 区              *
*----------------------------------------------------------------------*
TABLES : bseg ,faglflexa ,bkpf, skat , ska1 ,t001.*----------------------------------------------------------------------*
*                 T Y P E S -  结 构 定 义                             *
*----------------------------------------------------------------------*
TYPES: BEGIN OF ty_data,mandt       TYPE mandt,               ""集团bukrs       TYPE bukrs,               ""公司代码hkont       TYPE hkont,               ""总账科目h_waers     TYPE waers,               ""货币码gjahr       TYPE gjahr,               ""会计年度h_monat     TYPE monat,               ""会计期间"belnr    TYPE belnr_d,             ""会计凭证号码"buzei    TYPE buzei,               ""会计凭证中的行项目数"spras    TYPE spras,               ""语言代码"ktopl    TYPE ktopl,               ""科目表"saknr    TYPE saknr,               ""总账科目编号"txt20    TYPE txt20_skat,          ""总帐科目名称txt50       TYPE txt50_skat,          ""总账科目长文本ktoks       TYPE ktoks,               ""总账科目组shkzg       TYPE shkzg,               ""借方/贷方标识wrbtr       TYPE wrbtr,               ""凭证货币金额dmbtr       TYPE dmbtr,               ""按本位币计的金额qc_wrbtr    TYPE wrbtr,               ""期初原币余额qc_dmbtr    TYPE dmbtr,               ""期初本币余额jf_wrbtr    TYPE wrbtr,               ""本月借方发生额原币jf_dmbtr    TYPE dmbtr,               ""本月借方发生额本币df_wrbtr    TYPE wrbtr,               ""本月贷方发生额原币df_dmbtr    TYPE dmbtr,               ""本月贷方发生额本币h_shkzg     TYPE shkzg,               ""借贷标识(显示)ye_wrbtr    TYPE wrbtr,               ""余额原币ye_dmbtr    TYPE dmbtr,               ""余额本币lj_wrbtr    TYPE wrbtr,               ""累计余额原币lj_dmbtr    TYPE dmbtr,               ""累计余额本币waers       TYPE waers,               ""T001货币码pswsl       TYPE pswsl,               ""更新总分类帐交易数字货币pswbt       TYPE pswbt,               ""总帐中更新的金额sumye_dmbtr TYPE dmbtr,               ""求和 余额本币sumlj_dmbtr TYPE dmbtr,               ""求和 累计余额本币END OF ty_data.*----------------------------------------------------------------------*
*                  DATA 定义                                           *
*----------------------------------------------------------------------*
DATA: gt_data1   TYPE TABLE OF ty_data,gt_report1 TYPE TABLE OF ty_data,gt_report2 TYPE TABLE OF ty_data,gt_where1  TYPE TABLE OF ty_data,gt_where2  TYPE TABLE OF ty_data,gt_where3  TYPE TABLE OF ty_data,gt_where4  TYPE TABLE OF ty_data,gt_wfplr1  TYPE TABLE OF ty_data,gt_wfplr2  TYPE TABLE OF ty_data,gs_data1   TYPE ty_data,gs_data2   TYPE ty_data,gs_data3   TYPE ty_data,gs_data4   TYPE ty_data,bl_wfplr   TYPE boolean.*----------------------------------------------------------------------*
*                  ALV 定义
*----------------------------------------------------------------------*
DATA: wa_layout   TYPE lvc_s_layo, "layout 布局控制 参考结构 lvc_s_layoit_fieldcat TYPE lvc_t_fcat, "fieldcat 字段目录 参考结构 LVC_T_FCATwa_fieldcat LIKE LINE OF it_fieldcat.*----------------------------------------------------------------------*
*                  选 择 屏 幕 定 义 块
*----------------------------------------------------------------------*SELECTION-SCREEN BEGIN OF BLOCK text1.
SELECT-OPTIONS:s_bukrs FOR bseg-bukrs   OBLIGATORY,   ""公司代码s_gjahr FOR bseg-gjahr   OBLIGATORY,   ""会计年度s_monat FOR bseg-h_monat OBLIGATORY,   ""会计期间s_hkont FOR bseg-hkont.   ""总账科目"
PARAMETERS:p_ktopl TYPE skat-ktopl DEFAULT 'LXCA' OBLIGATORY,   ""科目表p_p1    TYPE char1  DEFAULT '' USER-COMMAND flag,p_wfplr TYPE bseg-hkont MODIF ID f2 DEFAULT '0041040112' OBLIGATORY.
SELECTION-SCREEN END OF BLOCK text1.*----------------------------------------------------------------------*
*                  初 始 化 块                                         *
*----------------------------------------------------------------------*
*该事件在屏幕未显示之前执行,对程式设置值及屏幕元素进行初始化赋值*
INITIALIZATION.*----------------------------------------------------------------------*
*                  选 择 屏 幕 字 段 处 理 块
*----------------------------------------------------------------------*
AT SELECTION-SCREEN OUTPUT.LOOP AT SCREEN .IF p_p1 = ''.IF screen-group1 = 'F2' .screen-active = 0 . "不活动,相当于隐藏ENDIF.ENDIF.MODIFY SCREEN.ENDLOOP.*----------------------------------------------------------------------*
*                  逻 辑 处 理 块                                      *
*----------------------------------------------------------------------*START-OF-SELECTION. "执行按钮后触发PERFORM frm_authority_check. "检查权限PERFORM frm_getdata. "取数PERFORM frm_layout. "布局PERFORM frm_fieldcat. "列PERFORM frm_output. "输出*&---------------------------------------------------------------------*
*& Form FRM_GETDATA
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM frm_getdata ."由于公司数量多的话数据量会非常大,所以分公司取数据,取完之后清空内表,以避免出现内存不足的情况!!!"如果此处筛选了月份的话会出现利润分配-未分配利润无法结转的情况"如本月导上月的科目余额表,并不需要本月的科目余额数据,但是此处并没有筛选"并没有考虑单独导非利润分配-未分配利润的科目数据取得多的情况,一般而言科目余额表就导全部的科目数据即可"faglflexa此表有月份是0的数据,初步判断是年初的余额,但是暂估类的科目没有原币金额,所以最后还是剔除"此处并没有取FAGL_SPLINFO,AGL_SPLINFO 未清项目的拆分信息 中 ,"举列:单号1900002039,厂区C121,年份2023 分摊了两个科目 22020201 应付账款-非关系人 22210101 应交税费-应交增值税-进项税额  到利润中心,但是会发生借贷方金额发生改变的情况"此程序与系统的借贷方发生额会有差异,但是本币累计余额经过核对没有差异*------------------------------------------"判断需不需要会计科目 利润分配-未分配利润"-------------------------IF p_wfplr IN s_hkont .bl_wfplr = 'X'.ENDIF.*------------------------------------------"SELECT 取SE16"-------------------------CLEAR gt_data1.SELECTbseg~mandt,             ""集团bseg~bukrs,             ""公司代码bseg~hkont,             ""总账科目bseg~h_waers,           ""货币码bseg~gjahr,             ""会计年度bseg~h_monat,           ""会计期间"bseg~belnr,             ""会计凭证号码"bseg~buzei,             ""会计凭证中的行项目数"skat~spras,             ""语言代码"skat~ktopl,             ""科目表"skat~saknr,             ""总账科目编号"skat~txt20,             ""总帐科目名称skat~txt50,             ""总账科目长文本ska1~ktoks,             ""总账科目组t001~waers,               ""T001货币码bseg~shkzg,             ""借方/贷方标识bseg~pswsl,             ""更新总分类帐交易数字货币SUM( bseg~wrbtr ) AS wrbtr,             ""凭证货币金额SUM( bseg~dmbtr ) AS dmbtr,             ""按本位币计的金额SUM( bseg~pswbt ) AS pswbt             ""总帐中更新的金额FROM bsegLEFT JOIN skat ON  skat~saknr = bseg~hkont  AND skat~spras = @sy-langu AND skat~ktopl = @p_ktoplLEFT JOIN ska1 ON  skat~saknr = ska1~saknr  AND skat~ktopl = ska1~ktoplLEFT JOIN t001 ON  t001~bukrs = bseg~bukrsWHERE( @bl_wfplr = 'X'  AND bseg~bukrs IN @s_bukrs ) OR  "公司代码( @bl_wfplr <> 'X' AND bseg~bukrs IN @s_bukrs  AND bseg~hkont IN @s_hkont ) "公司代码、科目!!!GROUP BYbseg~mandt,             ""集团bseg~bukrs,             ""公司代码bseg~hkont,             ""总账科目bseg~h_waers,           ""货币码bseg~gjahr,             ""会计年度bseg~h_monat,           ""会计期间"bseg~belnr,             ""会计凭证号码"bseg~buzei,             ""会计凭证中的行项目数"skat~spras,             ""语言代码"skat~ktopl,             ""科目表"skat~saknr,             ""总账科目编号"skat~txt20,             ""总帐科目名称skat~txt50,             ""总账科目长文本ska1~ktoks,             ""总账科目组t001~waers,               ""T001货币码bseg~shkzg,             ""借方/贷方标识bseg~pswsl             ""更新总分类帐交易数字货币INTO CORRESPONDING FIELDS OF TABLE @gt_data1.PERFORM frm_calculatedata USING 'bseg'. "计算CLEAR gt_data1.SELECTfaglflexa~rclnt AS mandt,            ""集团faglflexa~rbukrs AS bukrs,           ""公司代码faglflexa~racct AS hkont,            ""科目号faglflexa~rwcur AS h_waers,          ""原事务货币的货币码faglflexa~ryear AS gjahr,            ""会计年度bkpf~monat AS h_monat,          ""过账期间"faglflexa~docnr AS belnr,            ""会计凭证号码"faglflexa~buzei,            ""会计凭证中的行项目数"skat~spras,                 ""语言代码"skat~ktopl,                 ""科目表"skat~saknr,                 ""总账科目编号"skat~txt20,                 ""总帐科目名称skat~txt50,                 ""总账科目长文本ska1~ktoks,                 ""总账科目组faglflexa~drcrk AS shkzg,            ""借方/贷方标识SUM( CASE faglflexa~drcrk WHEN 'S' THEN faglflexa~wsl WHEN 'H' THEN - faglflexa~wsl END ) AS wrbtr,                ""原交易货币的值(凭证货币)SUM( CASE faglflexa~drcrk WHEN 'S' THEN faglflexa~hsl WHEN 'H' THEN - faglflexa~hsl END ) AS dmbtr                ""用本地货币表示的值 "FROM faglflexaLEFT JOIN bkpf ON  bkpf~bukrs = faglflexa~rbukrs AND bkpf~gjahr = faglflexa~ryear AND bkpf~belnr = faglflexa~docnrLEFT JOIN skat ON  skat~saknr = faglflexa~racct  AND skat~spras = @sy-langu AND skat~ktopl = @p_ktoplLEFT JOIN ska1 ON  skat~saknr = ska1~saknr  AND skat~ktopl = ska1~ktoplWHERE( @bl_wfplr = 'X'  AND faglflexa~buzei = '000' AND NOT bkpf~monat = '00' AND faglflexa~rbukrs IN @s_bukrs ) OR   "公司代码 会计凭证号码 排除空,月份排除空( @bl_wfplr <> 'X' AND faglflexa~buzei = '000' AND NOT bkpf~monat = '00' AND faglflexa~rbukrs IN @s_bukrs AND faglflexa~racct IN @s_hkont )   "公司代码 会计凭证号码 排除空,月份排除空、科目!!!GROUP BYfaglflexa~rclnt ,            ""集团faglflexa~rbukrs ,           ""公司代码faglflexa~racct ,            ""科目号faglflexa~rwcur ,          ""原事务货币的货币码faglflexa~ryear ,            ""会计年度bkpf~monat ,          ""过账期间"faglflexa~docnr AS belnr,            ""会计凭证号码"faglflexa~buzei,            ""会计凭证中的行项目数"skat~spras,                 ""语言代码"skat~ktopl,                 ""科目表"skat~saknr,                 ""总账科目编号"skat~txt20,                 ""总帐科目名称skat~txt50,                 ""总账科目长文本ska1~ktoks,                 ""总账科目组faglflexa~drcrk            ""借方/贷方标识INTO CORRESPONDING FIELDS OF TABLE @gt_data1.PERFORM frm_calculatedata USING 'faglflexa'. "计算"用了这种方式效率会很低,程式很慢,而且容易数据溢出!!!
*  "直接取“ BKPF  总帐科目主记录 (科目表)”里的年份,不能卡年份条件
*  " DISTINCT 可以去重
*  CLEAR gt_where1.
*  SELECT DISTINCT bukrs , gjahr FROM bkpf  WHERE  bukrs IN @s_bukrs
*  INTO CORRESPONDING FIELDS OF TABLE @gt_where1.
*
*  "卡公司年份主要是担心内存不够,否则不需要这么麻烦
*  LOOP AT gt_where1 INTO gs_data1.
*    IF bl_wfplr = 'X'. "如果包含利润分配未分配利润这个科目就要全选,否则就卡科目的条件,以便提高速度
*
*      "----------------------------------------------------bseg--------------------------------------------
*      CLEAR gt_data1.
*      SELECT
*          bseg~mandt,             ""集团
*          bseg~bukrs,             ""公司代码
*          bseg~hkont,             ""总账科目
*          bseg~h_waers,           ""货币码
*          bseg~gjahr,             ""会计年度
*          bseg~h_monat,           ""会计期间
*          "bseg~belnr,             ""会计凭证号码
*          "bseg~buzei,             ""会计凭证中的行项目数
*          "skat~spras,             ""语言代码
*          "skat~ktopl,             ""科目表
*          "skat~saknr,             ""总账科目编号
*          "skat~txt20,             ""总帐科目名称
*          skat~txt50,             ""总账科目长文本
*          ska1~ktoks,             ""总账科目组
*          bseg~shkzg,             ""借方/贷方标识
*          bseg~wrbtr,             ""凭证货币金额
*          bseg~dmbtr,             ""按本位币计的金额
*          bseg~pswsl,             ""更新总分类帐交易数字货币
*          bseg~pswbt,             ""总帐中更新的金额
*          t001~waers               ""T001货币码
*      FROM bseg
*        LEFT JOIN skat ON  skat~saknr = bseg~hkont  AND skat~spras = @sy-langu AND skat~ktopl = @p_ktopl
*        LEFT JOIN ska1 ON  skat~saknr = ska1~saknr  AND skat~ktopl = ska1~ktopl
*        LEFT JOIN t001 ON  t001~bukrs = bseg~bukrs
*        WHERE bseg~gjahr = @gs_data1-gjahr AND bseg~bukrs = @gs_data1-bukrs "年份、公司代码
*        INTO CORRESPONDING FIELDS OF TABLE @gt_data1.
*
*      PERFORM frm_calculatedata USING 'bseg'. "计算
*
*      "----------------------------------------------------faglflexa--------------------------------------------
*      CLEAR gt_data1.
*      SELECT
*          faglflexa~rclnt AS mandt,            ""集团
*          faglflexa~rbukrs AS bukrs,           ""公司代码
*          faglflexa~racct AS hkont,            ""科目号
*          faglflexa~rwcur AS h_waers,          ""原事务货币的货币码
*          faglflexa~ryear AS gjahr,            ""会计年度
*          bkpf~monat AS h_monat,          ""过账期间
*          "faglflexa~docnr AS belnr,            ""会计凭证号码
*          "faglflexa~buzei,            ""会计凭证中的行项目数
*          "skat~spras,                 ""语言代码
*          "skat~ktopl,                 ""科目表
*          "skat~saknr,                 ""总账科目编号
*          "skat~txt20,                 ""总帐科目名称
*          skat~txt50,                 ""总账科目长文本
*          ska1~ktoks,                 ""总账科目组
*          faglflexa~drcrk AS shkzg,            ""借方/贷方标识
*          faglflexa~wsl AS wrbtr,                ""原交易货币的值(凭证货币)
*          faglflexa~hsl AS  dmbtr                ""用本地货币表示的值 "
*      FROM faglflexa
*          LEFT JOIN bkpf ON  bkpf~bukrs = faglflexa~rbukrs AND bkpf~gjahr = faglflexa~ryear AND bkpf~belnr = faglflexa~docnr
*          LEFT JOIN skat ON  skat~saknr = faglflexa~racct  AND skat~spras = @sy-langu AND skat~ktopl = @p_ktopl
*          LEFT JOIN ska1 ON  skat~saknr = ska1~saknr  AND skat~ktopl = ska1~ktopl
*          WHERE faglflexa~ryear = @gs_data1-gjahr AND faglflexa~rbukrs = @gs_data1-bukrs  AND faglflexa~buzei = '000' AND NOT bkpf~monat = '00'   "年份、公司代码 会计凭证号码 排除空,月份排除空
*          INTO CORRESPONDING FIELDS OF TABLE @gt_data1.
*
*      PERFORM frm_calculatedata USING 'faglflexa'. "计算
*
*
*    ELSE.  "----------------------------------------------------ELSE--------------------------------------------
*
*
*      ""----------------------------------------------------bseg--------------------------------------------
*      CLEAR gt_data1.
*      SELECT
*          bseg~mandt,             ""集团
*          bseg~bukrs,             ""公司代码
*          bseg~hkont,             ""总账科目
*          bseg~h_waers,           ""货币码
*          bseg~gjahr,             ""会计年度
*          bseg~h_monat,           ""会计期间
*          "bseg~belnr,             ""会计凭证号码
*          "bseg~buzei,             ""会计凭证中的行项目数
*          "skat~spras,             ""语言代码
*          "skat~ktopl,             ""科目表
*          "skat~saknr,             ""总账科目编号
*          "skat~txt20,             ""总帐科目名称
*          skat~txt50,             ""总账科目长文本
*          ska1~ktoks,             ""总账科目组
*          bseg~shkzg,             ""借方/贷方标识
*          bseg~wrbtr,             ""凭证货币金额
*          bseg~dmbtr,             ""按本位币计的金额
*          bseg~pswsl,             ""更新总分类帐交易数字货币
*          bseg~pswbt,             ""总帐中更新的金额
*          t001~waers               ""T001货币码
*      FROM bseg
*        LEFT JOIN skat ON  skat~saknr = bseg~hkont  AND skat~spras = @sy-langu AND skat~ktopl = @p_ktopl
*        LEFT JOIN ska1 ON  skat~saknr = ska1~saknr  AND skat~ktopl = ska1~ktopl
*        LEFT JOIN t001 ON  t001~bukrs = bseg~bukrs
*        WHERE bseg~gjahr = @gs_data1-gjahr AND bseg~bukrs = @gs_data1-bukrs   AND hkont IN @s_hkont "年份、公司代码、科目!!!
*        INTO CORRESPONDING FIELDS OF TABLE @gt_data1.
*
*      PERFORM frm_calculatedata USING 'bseg'. "计算
*
*      "----------------------------------------------------faglflexa--------------------------------------------
*      CLEAR gt_data1.
*      SELECT
*          faglflexa~rclnt AS mandt,            ""集团
*          faglflexa~rbukrs AS bukrs,           ""公司代码
*          faglflexa~racct AS hkont,            ""科目号
*          faglflexa~rwcur AS h_waers,          ""原事务货币的货币码
*          faglflexa~ryear AS gjahr,            ""会计年度
*          bkpf~monat AS h_monat,          ""过账期间
*          "faglflexa~docnr AS belnr,            ""会计凭证号码
*          "faglflexa~buzei,            ""会计凭证中的行项目数
*          "skat~spras,                 ""语言代码
*          "skat~ktopl,                 ""科目表
*          "skat~saknr,                 ""总账科目编号
*          "skat~txt20,                 ""总帐科目名称
*          skat~txt50,                 ""总账科目长文本
*          ska1~ktoks,                 ""总账科目组
*          faglflexa~drcrk AS shkzg,            ""借方/贷方标识
*          faglflexa~wsl AS wrbtr,                ""原交易货币的值(凭证货币)
*          faglflexa~hsl AS  dmbtr                ""用本地货币表示的值 "
*      FROM faglflexa
*          LEFT JOIN bkpf ON  bkpf~bukrs = faglflexa~rbukrs AND bkpf~gjahr = faglflexa~ryear AND bkpf~belnr = faglflexa~docnr
*          LEFT JOIN skat ON  skat~saknr = faglflexa~racct  AND skat~spras = @sy-langu AND skat~ktopl = @p_ktopl
*          LEFT JOIN ska1 ON  skat~saknr = ska1~saknr  AND skat~ktopl = ska1~ktopl
*          WHERE faglflexa~ryear = @gs_data1-gjahr AND faglflexa~rbukrs = @gs_data1-bukrs  AND faglflexa~buzei = '000' AND NOT bkpf~monat = '00' AND faglflexa~racct IN @s_hkont   "年份、公司代码 会计凭证号码 排除空,月份排除空、科目!!!
*          INTO CORRESPONDING FIELDS OF TABLE @gt_data1.
*
*      PERFORM frm_calculatedata USING 'faglflexa'. "计算
*
*    ENDIF.
*  ENDLOOP.*------------------------------------------"补 公司~科目~币种、年~月"-------------------------"比如上个月有发生额,本月没有发生额,但是却又存在累计余额的情况,目的是取出全部科目的累计余额"直接取“ BKPF  总帐科目主记录 (科目表)”里的年会计年度、会计期间",不能卡年份条件" DISTINCT 可以去重"不能直接在 gt_report1 里去取,因为如果筛选了科目,就会发生科目当月没发生额而丢失了期末余额的状况CLEAR gt_where1.SELECT DISTINCT gjahr ,monat AS  h_monat FROM bkpf  WHERE  bukrs IN @s_bukrsINTO CORRESPONDING FIELDS OF TABLE @gt_where1.CLEAR gs_data2.CLEAR gt_where2.LOOP AT gt_report1 INTO gs_data1  .gs_data2-mandt = gs_data1-mandt.              ""集团gs_data2-bukrs = gs_data1-bukrs.              ""公司代码gs_data2-hkont = gs_data1-hkont.              ""总账科目gs_data2-h_waers = gs_data1-h_waers.          ""币种"gs_data2-spras = gs_data1-spras.              ""语言代码"gs_data2-ktopl = gs_data1-ktopl.              ""科目表"gs_data2-saknr = gs_data1-saknr.              ""总账科目编号"gs_data2-txt20 = gs_data1-txt20.              ""总帐科目名称gs_data2-txt50 = gs_data1-txt50.              ""总账科目长文本gs_data2-ktoks = gs_data1-ktoks.              ""总账科目组 "COLLECT gs_data2 INTO gt_where2 .ENDLOOP.LOOP AT gt_where1 INTO gs_data1  .LOOP AT gt_where2 INTO gs_data2  ."*gs_data2-mandt = gs_data2-mandt.              ""集团"*gs_data2-bukrs = gs_data2-bukrs.              ""公司代码"*gs_data2-hkont = gs_data2-hkont.              ""总账科目"*gs_data2-h_waers = gs_data2-h_waers.          ""币种""gs_data2-spras = gs_data2-spras.              ""语言代码""gs_data2-ktopl = gs_data2-ktopl.              ""科目表""gs_data2-saknr = gs_data2-saknr.              ""总账科目编号""gs_data2-txt20 = gs_data2-txt20.              ""总帐科目名称"*gs_data2-txt50 = gs_data2-txt50.              ""总账科目长文本"*gs_data2-ktoks = gs_data2-ktoks.              ""总账科目组gs_data2-gjahr = gs_data1-gjahr.              ""会计年度gs_data2-h_monat = gs_data1-h_monat.          ""会计期间"COLLECT gs_data2 INTO gt_report1 .ENDLOOP.ENDLOOP.*------------------------------------------"利润分配-未分配利润补项目"-------------------------"利润分配-未分配利润此科目系统没有产生凭证,并且初步判断,系统结转的时候是按照本币结转,没有考虑原币的情况,而且几乎不会有发生额,所以需要根据此科目补条目IF bl_wfplr = 'X'.CLEAR gt_where2.SELECT"skat~spras,                 ""语言代码"skat~ktopl,                 ""科目表"skat~saknr,                 ""总账科目编号"skat~txt20,                 ""总帐科目名称skat~txt50,                 ""总账科目长文本ska1~ktoks                 ""总账科目组FROM skatLEFT JOIN ska1 ON  skat~saknr = ska1~saknr  AND skat~ktopl = ska1~ktoplWHERE  skat~saknr = @p_wfplr  AND skat~spras = @sy-langu AND skat~ktopl = @p_ktoplINTO CORRESPONDING FIELDS OF TABLE @gt_where2.CLEAR gs_data2.CLEAR gt_where3.LOOP AT gt_report1 INTO gs_data1  .gs_data2-mandt = gs_data1-mandt.              ""集团gs_data2-bukrs = gs_data1-bukrs.          ""公司代码gs_data2-h_waers = gs_data1-h_waers .          ""货币码COLLECT gs_data2 INTO gt_where3 .ENDLOOP.CLEAR gs_data4.LOOP AT gt_where1 INTO gs_data1  .LOOP AT gt_where2 INTO gs_data2  .LOOP AT gt_where3 INTO gs_data3.gs_data4-mandt = gs_data3-mandt.              ""集团gs_data4-bukrs = gs_data3-bukrs.              ""公司代码gs_data4-hkont = p_wfplr.                         ""总账科目gs_data4-h_waers = gs_data3-h_waers.          ""币种"gs_data4-spras = gs_data2-spras.              ""语言代码"gs_data4-ktopl = gs_data2-ktopl.              ""科目表"gs_data4-saknr = gs_data2-saknr.              ""总账科目编号"gs_data4-txt20 = gs_data2-txt20.              ""总帐科目名称gs_data4-txt50 = gs_data2-txt50.              ""总账科目长文本gs_data4-ktoks = gs_data2-ktoks.              ""总账科目组gs_data4-gjahr = gs_data1-gjahr.              ""会计年度gs_data4-h_monat = gs_data1-h_monat.          ""会计期间"COLLECT gs_data4 INTO gt_report1 .APPEND gs_data4 TO gt_wfplr2 .ENDLOOP.ENDLOOP.ENDLOOP.ENDIF.*------------------------------------------"余额"-------------------------"余额=借方-贷方LOOP AT gt_report1 INTO gs_data1  .gs_data1-ye_wrbtr = gs_data1-jf_wrbtr - gs_data1-df_wrbtr .          ""余额原币gs_data1-ye_dmbtr = gs_data1-jf_dmbtr - gs_data1-df_dmbtr.          ""余额本币"IF gs_data1-ye_dmbtr = 0 .gs_data1-h_shkzg = '平'.ELSEIF gs_data1-ye_dmbtr > 0 .gs_data1-h_shkzg = '借'.ELSEIF gs_data1-ye_dmbtr < 0 .gs_data1-h_shkzg = '贷'.ENDIF.MODIFY gt_report1 FROM gs_data1  TRANSPORTING ye_wrbtr ye_dmbtr h_shkzg.ENDLOOP.*------------------------------------------"本币余额 求和"-------------------------"求和:余额本币CLEAR gt_where1.LOOP AT gt_report1 INTO gs_data1.CLEAR gs_data2.gs_data2-mandt = gs_data1-mandt.                   ""集团gs_data2-bukrs = gs_data1-bukrs.                   ""公司代码gs_data2-gjahr = gs_data1-gjahr.                   ""会计年度gs_data2-h_monat = gs_data1-h_monat.               ""会计期间gs_data2-hkont = gs_data1-hkont.                   ""总账科目gs_data2-sumye_dmbtr = gs_data1-ye_dmbtr.          ""求和:余额本币COLLECT gs_data2 INTO gt_where1 .ENDLOOP."如果科目汇总后本币金额是零,则原币余额和本币余额也是零CLEAR gs_data2.gs_data2-ye_wrbtr = 0.          ""余额原币gs_data2-ye_dmbtr = 0.          ""余额本币LOOP AT gt_where1 INTO gs_data1  .IF gs_data1-sumye_dmbtr = 0 .MODIFY gt_report1 FROM gs_data2 TRANSPORTING ye_wrbtr ye_dmbtrWHERE mandt = gs_data1-mandtAND bukrs = gs_data1-bukrsAND gjahr = gs_data1-gjahrAND h_monat = gs_data1-h_monatAND hkont = gs_data1-hkont .ENDIF.ENDLOOP.*------------------------------------------"累计余额"-------------------------"累计余额一定要先排序"排序后按照余额进行累计,但是不同法人,不同科目,不同币别时要清空"如果是费用类的科目跨年会结转到利润分配-未分配利润,所以也要跨年清空累计余额SORT gt_report1 BY mandt bukrs hkont h_waers gjahr h_monat .CLEAR gs_data2.LOOP AT gt_report1 INTO gs_data1  .IF NOT (  gs_data2-bukrs  = gs_data1-bukrs AND gs_data2-hkont  = gs_data1-hkont AND gs_data2-h_waers  = gs_data1-h_waers ) .gs_data2-bukrs  = gs_data1-bukrs .        "公司代码gs_data2-hkont  = gs_data1-hkont .        ""总账科目gs_data2-h_waers  = gs_data1-h_waers .   ""币种gs_data2-lj_wrbtr = 0 .gs_data2-lj_dmbtr = 0 .ENDIF.IF NOT (  gs_data2-gjahr  = gs_data1-gjahr  ) AND gs_data1-ktoks = 'PL'  .gs_data2-gjahr  = gs_data1-gjahr .gs_data2-lj_wrbtr = 0 .gs_data2-lj_dmbtr = 0 .ENDIF.gs_data2-lj_wrbtr = gs_data2-lj_wrbtr +  gs_data1-ye_wrbtr  .gs_data2-lj_dmbtr = gs_data2-lj_dmbtr  + gs_data1-ye_dmbtr .gs_data1-lj_wrbtr  = gs_data2-lj_wrbtr .gs_data1-lj_dmbtr  = gs_data2-lj_dmbtr .MODIFY gt_report1 FROM gs_data1  TRANSPORTING lj_wrbtr  lj_dmbtr .ENDLOOP.*------------------------------"利润分配-未分配利润 累计余额"-------------------------"加总费用类的科目余额,并且给下一年的利润分配-未分配利润的累计余额IF bl_wfplr = 'X'.CLEAR gs_data2.CLEAR gt_wfplr1.LOOP AT gt_report1 INTO gs_data1 WHERE ktoks = 'PL' .gs_data2-bukrs  = gs_data1-bukrs . "公司代码gs_data2-gjahr  = gs_data1-gjahr + 1. ""年gs_data2-h_waers  = gs_data1-h_waers . ""币种gs_data2-ye_wrbtr = gs_data1-ye_wrbtr.gs_data2-ye_dmbtr = gs_data1-ye_dmbtr.COLLECT gs_data2 INTO gt_wfplr1.ENDLOOP.CLEAR gs_data2.LOOP AT gt_wfplr1 INTO gs_data1  .IF NOT (  gs_data2-bukrs  = gs_data1-bukrs  AND gs_data2-h_waers  = gs_data1-h_waers ) .gs_data2-bukrs  = gs_data1-bukrs .        "公司代码gs_data2-h_waers  = gs_data1-h_waers .   ""币种gs_data2-lj_wrbtr = 0 .gs_data2-lj_dmbtr = 0 .ENDIF.gs_data2-lj_wrbtr = gs_data2-lj_wrbtr +  gs_data1-ye_wrbtr  .gs_data2-lj_dmbtr = gs_data2-lj_dmbtr  + gs_data1-ye_dmbtr .gs_data1-lj_wrbtr  = gs_data2-lj_wrbtr .gs_data1-lj_dmbtr  = gs_data2-lj_dmbtr .MODIFY gt_wfplr1 FROM gs_data1  TRANSPORTING lj_wrbtr  lj_dmbtr .ENDLOOP.CLEAR gs_data3.LOOP AT gt_wfplr1 INTO gs_data1.LOOP AT gt_report1 INTO gs_data2 WHERE hkont = p_wfplr.IF gs_data1-bukrs = gs_data2-bukrs AND gs_data1-gjahr = gs_data2-gjahr AND gs_data1-h_waers = gs_data2-h_waers .gs_data3-lj_wrbtr = gs_data1-lj_wrbtr + gs_data2-lj_wrbtr.gs_data3-lj_dmbtr = gs_data1-lj_dmbtr + gs_data2-lj_dmbtr.MODIFY gt_report1 FROM gs_data3  TRANSPORTING lj_wrbtr  lj_dmbtr .ENDIF.ENDLOOP.ENDLOOP.ENDIF.*-------------------------------------"累计本币余额 求和"------------------------------"求和:累计余额本币CLEAR gt_where1.LOOP AT gt_report1 INTO gs_data1.CLEAR gs_data2.gs_data2-mandt = gs_data1-mandt.                   ""集团gs_data2-bukrs = gs_data1-bukrs.                   ""公司代码gs_data2-gjahr = gs_data1-gjahr.                   ""会计年度gs_data2-h_monat = gs_data1-h_monat.               ""会计期间gs_data2-hkont = gs_data1-hkont.                   ""总账科目gs_data2-sumlj_dmbtr = gs_data1-lj_dmbtr.          ""求和:余额本币COLLECT gs_data2 INTO gt_where1.ENDLOOP."如果科目汇总后本币金额是零,则原币余额和本币余额也是零CLEAR gs_data2.gs_data2-lj_wrbtr = 0.          ""余额原币gs_data2-lj_dmbtr = 0.          ""余额本币LOOP AT gt_where1 INTO gs_data1  .IF gs_data1-sumlj_dmbtr = 0 .MODIFY gt_report1 FROM gs_data2 TRANSPORTING lj_wrbtr lj_dmbtrWHERE mandt = gs_data1-mandtAND bukrs = gs_data1-bukrsAND gjahr = gs_data1-gjahrAND h_monat = gs_data1-h_monatAND hkont = gs_data1-hkont .ENDIF.ENDLOOP.*------------------------------------------"上期余额"-------------------------"上月余额,不是年初余额CLEAR gs_data2.LOOP AT gt_report1 INTO gs_data1  .gs_data1-qc_wrbtr  = gs_data1-lj_wrbtr - gs_data1-ye_wrbtr .gs_data1-qc_dmbtr  = gs_data1-lj_dmbtr - gs_data1-ye_dmbtr .MODIFY gt_report1 FROM gs_data1  TRANSPORTING qc_wrbtr  qc_dmbtr .ENDLOOP.*------------------------------------------"屏幕筛选"-------------------------"根据公司取出所有数据后,再根据用户的筛选条件筛选具体的科目、月份等信息LOOP AT gt_report1 INTO gs_data1 WHERE gjahr IN s_gjahr  AND h_monat IN s_monat AND hkont IN s_hkont "会计年度 ,期间,总账科目.AND NOT (  qc_wrbtr = 0 AND  qc_dmbtr = 0 AND  jf_wrbtr = 0 AND  jf_dmbtr = 0 AND  df_wrbtr = 0 AND  df_dmbtr = 0 AND  ye_wrbtr = 0 AND  ye_dmbtr = 0 AND  lj_wrbtr = 0 AND  lj_dmbtr = 0 ) .APPEND gs_data1 TO gt_report2.ENDLOOP."没有满足条件的数据,提示信息并终止程序IF gt_report2 IS INITIAL.MESSAGE s001 WITH '“科目余额表”' DISPLAY LIKE 'E'.LEAVE LIST-PROCESSING.ENDIF.ENDFORM.*&---------------------------------------------------------------------*
*& Form FRM_LAYOUT
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM frm_layout .wa_layout-cwidth_opt = 'X'. "最适列宽wa_layout-zebra = 'X'. "隔行显示斑马纹   使ALV表格按斑马线间隔条码方式显示wa_layout-sel_mode = 'D'. "选择模式 "'D' 单元格的选择,可以多选单元格 多行,多列,任何单元格多选 用户可以使用最左边的选择按钮来选择多行wa_layout-stylefname = 'CELLBTN'. "设置单元"wa_layout-grid_title = 'test'."wa_layout-excp_fname = 'light'."wa_layout-edit = 'X'. "可编辑"wa_layout-box_fname = 'BOX'."wa_layout-confirmation_prompt = 'X'.
ENDFORM.*&---------------------------------------------------------------------*
*& Form FRM_FIELDCAT
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM frm_fieldcat .*----------------------------------------------------------------------*
*                  定义宏
*----------------------------------------------------------------------*DEFINE init_fieldcat.CLEAR wa_fieldcat.wa_fieldcat-fieldname = &1. "标题列对应的字段名wa_fieldcat-coltext = &2. "列标题 列标题,如果字段参考了DDIC,可不设置wa_fieldcat-fix_column = &3. "固定列 与KEY字段类似,固定列但颜色不变蓝,必须要在左边才起作用(如果设置固定列的左边包含非固定列,则该列不固定)wa_fieldcat-no_zero = &4. "是否隐藏输出为零的字段 当字段为数值为0时,不显示【如0,0.00,则会显示为空】当字段包含前导0时,隐藏前导0,【如0100,则会显示为100】wa_fieldcat-cfieldname = &5. "currency unit field name值为当前输出内表中的货币单位字段的字段名称wa_fieldcat-edit = &6. "准备输入 X:可编辑,space:不可编辑 该控制是在整列的级别上,如果想控制仅仅某一行可编辑,则需要通过style来控制"wa_fieldcat-col_pos = ''. "输出列  列位置,即从左到右的顺序。若为空,则按字段添加到内表中的顺序"wa_fieldcat-key = ''. "关键字段 key值在左右滚动时不移动,蓝色显示"wa_fieldcat-hotspot = ''. "单击敏感 设置为带下划线热点,可触发热点、双击事件"wa_fieldcat-do_sum = 'X' . "总计列值"wa_fieldcat-no_sum = 'X' . "没有总计列值"wa_fieldcat-LOWERCASE  = 'X'. "允许/不允许小写字母 X:区分大小写/空:不区分(小写自动转换为大写) "主要影响数据的录入,当通过ALV输入数据的时候,如果未设置该标识,则输入小写字母如abc时,系统自动转换为ABC主键字段一般都是大写,主要是文本、描述字段时需要注意"wa_fieldcat-REF_TABLE = ''. "内部表字段的参考表名称"wa_fieldcat-REF_FIELD = ''. "部表字段的参考字段名称"wa_fieldcat-CHECKBOX = 'X' . "作为复选框输出 复选框标志只有字段值为X时,复选框才会被设置为选中,空或者其它值时为不选中"wa_fieldcat-rollname = '' . "F1 帮助的数据元素"wa_fieldcat-just = ''. "对齐 空时:字符默认左对齐:C/X/D/T/STRING/XSTRING数值默认右对齐:I/F/P/N 非空时:(R)ight/(L)eft/(C)enterAPPEND wa_fieldcat TO it_fieldcat.END-OF-DEFINITION.init_fieldcat:'BUKRS' '公司代码'(t01) 'X' '' '' '','GJAHR' '会计年度'(t02) 'X' '' '' '','H_MONAT' '会计期间'(t03) 'X' '' '' '','HKONT' '总账科目'(t04) 'X' 'X' '' '','TXT50' '总账科目长文本 '(t05) 'X' '' '' '','H_WAERS' '币种'(t06) 'X' '' '' '','QC_WRBTR' '期初原币余额'(t07) '' '' 'H_WAERS' '','QC_DMBTR' '期初本币余额'(t08) '' '' '' '','JF_WRBTR' '本月借方发生额原币'(t09)  '' '' 'H_WAERS' '','JF_DMBTR' '本月借方发生额本币'(t10) '' '' '' '','DF_WRBTR' '本月贷方发生额原币'(t11) '' '' 'H_WAERS' '','DF_DMBTR' '本月贷方发生额本币'(t12) '' '' '' '','H_SHKZG' '借贷标识'(t13) '' '' '' '','YE_WRBTR' '余额原币'(t14) '' '' 'H_WAERS' '','YE_DMBTR' '余额本币'(t15) '' '' '' '','LJ_WRBTR' '累计余额原币'(t16) '' '' 'H_WAERS' '','LJ_DMBTR' '累计余额本币'(t17) '' '' '' ''."ENDFORM.*&---------------------------------------------------------------------*
*& Form FRM_OUTPUT
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM frm_output .CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'EXPORTINGi_callback_program = sy-cprog "sy-repid
*     I_INTERFACE_CHECK  = ' '
*     I_BYPASSING_BUFFER =
*     I_BUFFER_ACTIVE    =
*     I_CALLBACK_PROGRAM = ' '
*     I_CALLBACK_PF_STATUS_SET          = ' '
*     I_CALLBACK_USER_COMMAND           = ' '
*     I_CALLBACK_TOP_OF_PAGE            = ' '
*     I_CALLBACK_HTML_TOP_OF_PAGE       = ' '
*     I_CALLBACK_HTML_END_OF_LIST       = ' '
*     I_STRUCTURE_NAME   =
*     I_BACKGROUND_ID    = ' '
*     I_GRID_TITLE       =
*     I_GRID_SETTINGS    =is_layout_lvc      = wa_layoutit_fieldcat_lvc    = it_fieldcat
*     IT_EXCLUDING       =
*     IT_SPECIAL_GROUPS_LVC             =
*     IT_SORT_LVC        =
*     IT_FILTER_LVC      =
*     IT_HYPERLINK       =
*     IS_SEL_HIDE        =i_default          = 'X'i_save             = 'A' " 'U'
*     IS_VARIANT         =
*     IT_EVENTS          =
*     IT_EVENT_EXIT      =
*     IS_PRINT_LVC       =
*     IS_REPREP_ID_LVC   =
*     I_SCREEN_START_COLUMN             = 0
*     I_SCREEN_START_LINE               = 0
*     I_SCREEN_END_COLUMN               = 0
*     I_SCREEN_END_LINE  = 0
*     I_HTML_HEIGHT_TOP  =
*     I_HTML_HEIGHT_END  =
*     IT_ALV_GRAPHICS    =
*     IT_EXCEPT_QINFO_LVC               =
*     IR_SALV_FULLSCREEN_ADAPTER        =
* IMPORTING
*     E_EXIT_CAUSED_BY_CALLER           =
*     ES_EXIT_CAUSED_BY_USER            =TABLESt_outtab           = gt_report2EXCEPTIONSprogram_error      = 1OTHERS             = 2.IF sy-subrc <> 0.
* Implement suitable error handling here"LEAVE LIST-PROCESSING.ENDIF.ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_CALCULATEDATA
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM frm_calculatedata USING se16 TYPE char10.LOOP AT gt_data1 INTO gs_data1 .CLEAR gs_data2.IF se16 = 'bseg'. "如果交易货币不是公司代码的本币就默认是原币,进而带出总帐中更新的金额IF gs_data1-pswsl <> gs_data1-waers.gs_data1-h_waers = gs_data1-pswsl. ""币种gs_data1-wrbtr = gs_data1-pswbt.   ""原币ENDIF."ELSEIF se16 = 'faglflexa'. "也可以写到SELECT语句里"  IF gs_data1-shkzg = 'H'."   gs_data1-wrbtr = - gs_data1-wrbtr ."    gs_data1-dmbtr = - gs_data1-dmbtr ."  ENDIF.ENDIF.gs_data2-mandt = gs_data1-mandt.              ""集团gs_data2-bukrs = gs_data1-bukrs.              ""公司代码gs_data2-gjahr = gs_data1-gjahr.              ""会计年度gs_data2-h_monat = gs_data1-h_monat.          ""会计期间gs_data2-hkont = gs_data1-hkont.              ""总账科目gs_data2-h_waers = gs_data1-h_waers.          ""币种"凭证直接取日币是缩小了一百倍,应该通过ALV显示的时候更改而不是改内表,虽然测试的结果是一样的"IF gs_data1-h_waers  = 'JPY' . "币别为小币种的时候,数据放大倍数"   gs_data1-wrbtr = gs_data1-wrbtr * 100.           ""本月借方发生额原币!!!"ENDIF.IF gs_data1-shkzg = 'S'. "借方gs_data2-jf_wrbtr = gs_data1-wrbtr.           ""本月借方发生额原币!!!gs_data2-jf_dmbtr = gs_data1-dmbtr.           ""本月借方发生额本币!!!ELSEIF gs_data1-shkzg = 'H'. "贷方gs_data2-df_wrbtr = gs_data1-wrbtr.           ""本月贷方发生额原币!!!gs_data2-df_dmbtr = gs_data1-dmbtr.           ""本月贷方发生额本币!!!ENDIF."gs_data2-spras = gs_data1-spras.          ""语言代码"gs_data2-ktopl = gs_data1-ktopl.          ""科目表"gs_data2-saknr = gs_data1-saknr.          ""总账科目编号"gs_data2-txt20 = gs_data1-txt20.          ""总帐科目名称gs_data2-txt50 = gs_data1-txt50.          ""总账科目长文本gs_data2-ktoks = gs_data1-ktoks.          ""总账科目组 "COLLECT gs_data2 INTO gt_report1 .ENDLOOP.CLEAR gt_data1.
ENDFORM.*&---------------------------------------------------------------------*
*&      FORM  getaction
*&---------------------------------------------------------------------*
*       处理用户权限
*----------------------------------------------------------------------*
FORM frm_authority_check.DATA:BEGIN OF lt_bukrs OCCURS 0,bukrs LIKE t001-bukrs,END OF lt_bukrs.SELECT * INTO CORRESPONDING FIELDS OF TABLE lt_bukrs FROM t001 WHERE bukrs IN s_bukrs.LOOP AT lt_bukrs.AUTHORITY-CHECK OBJECT  'F_SKA1_BUK'ID 'BUKRS' FIELD lt_bukrs-bukrs."检查字段IF sy-subrc <> 0.MESSAGE s021 WITH lt_bukrs-bukrs DISPLAY LIKE 'E'.LEAVE LIST-PROCESSING.ENDIF.ENDLOOP.
ENDFORM.

正式运行

*&---------------------------------------------------------------------*
*& Report ZCOR0054
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*& Responsibility
*&---------------------------------------------------------------------*
* Program Name: ZCOR0054
* Date written: 2023-06-27
* Author's name: C10089213 朱鸿飞
* Last update:
* Program title: 立铠科目余额表(原币)
* Project Name: 立讯精密ERP实施项目
* Version: V1.0*参考资料
*在SAP系统中,凭证项目相关的数据可以在表BKPF(凭证抬头数据)和BSEG(凭证行项目数据)中找到。在BSEG表中,可以使用字段GL_ACCOUNT来查找会计科目16020107相关的凭证项目数据。具体来说,你可以使用如下的SAP ABAP代码来查询该会计科目的凭证项目数据:
*
*SELECT *
*FROM BSEG
*WHERE GL_ACCOUNT = '16020107'.
*需要注意的是,在实际使用中,你需要根据自己的SAP系统配置和权限,来确定可以访问哪些表和字段。另外,我们需要保证查询操作的合法性和准确性,避免对系统数据造成不必要的影响。
*
*
*在SAP系统中,除了BSEG表(凭证行项目数据),还有其他一些表可以存储凭证项目相关的数据。以下是一些常见的例子:
*
*BKPF表:凭证抬头数据表,包含凭证的基本信息,如凭证号、凭证日期、凭证类型等。BKPF表和BSEG表通过凭证号(BELNR)字段进行关联,可以用来检索特定凭证的所有行项目数据。
*COEP表:成本元素总帐凭证行项目数据表,用于存储与成本核算相关的凭证项目数据。COEP表和BSEG表通过凭证号、凭证行项目号(BUZEI)和成本元素(COSTELEMENT)字段进行关联。
*FAGLFLEXA表:总账分析项数据表,用于存储总账分析项相关的凭证数据。FAGLFLEXA表和BSEG表通过凭证号和凭证行项目号字段进行关联。
*FAGL_SPLINFO表:总账分期余额表,用于存储总账分期余额相关的凭证数据。FAGL_SPLINFO表和BSEG表通过凭证号、凭证行项目号和总账分期(FISCPER)字段进行关联。
*需要根据具体情况选择合适的表来查询凭证项目相关的数据。同时,需要注意不同表之间的关联关系,以及表中字段的含义和使用方式。REPORT zcor0054 MESSAGE-ID zfi001.*----------------------------------------------------------------------*
*              INCLUDE 、 TYPES_POOLS 、 TABLES  引 用 区              *
*----------------------------------------------------------------------*
TABLES : bseg ,faglflexa ,bkpf, skat , ska1 ,t001 , t030 .*----------------------------------------------------------------------*
*                 T Y P E S -  结 构 定 义                             *
*----------------------------------------------------------------------*
TYPES: BEGIN OF ty_data,mandt       TYPE mandt,               ""集团bukrs       TYPE bukrs,               ""公司代码hkont       TYPE hkont,               ""总账科目h_waers     TYPE waers,               ""货币码gjahr       TYPE gjahr,               ""会计年度h_monat     TYPE monat,               ""会计期间"belnr    TYPE belnr_d,             ""会计凭证号码"buzei    TYPE buzei,               ""会计凭证中的行项目数"ktopl       TYPE ktopl,               ""科目表"saknr    TYPE saknr,               ""总账科目编号"txt20    TYPE txt20_skat,          ""总帐科目名称txt50       TYPE txt50_skat,          ""总账科目长文本ktoks       TYPE ktoks,               ""总账科目组shkzg       TYPE shkzg,               ""借方/贷方标识wrbtr       TYPE wrbtr,               ""凭证货币金额dmbtr       TYPE dmbtr,               ""按本位币计的金额qc_wrbtr    TYPE wrbtr,               ""期初原币余额qc_dmbtr    TYPE dmbtr,               ""期初本币余额jf_wrbtr    TYPE wrbtr,               ""本月借方发生额原币jf_dmbtr    TYPE dmbtr,               ""本月借方发生额本币df_wrbtr    TYPE wrbtr,               ""本月贷方发生额原币df_dmbtr    TYPE dmbtr,               ""本月贷方发生额本币h_shkzg     TYPE shkzg,               ""借贷标识(显示)ye_wrbtr    TYPE wrbtr,               ""余额原币ye_dmbtr    TYPE dmbtr,               ""余额本币lj_wrbtr    TYPE wrbtr,               ""累计余额原币lj_dmbtr    TYPE dmbtr,               ""累计余额本币waers       TYPE waers,               ""T001货币码pswsl       TYPE pswsl,               ""更新总分类帐交易数字货币pswbt       TYPE pswbt,               ""总帐中更新的金额sumye_dmbtr TYPE dmbtr,               ""求和 余额本币sumlj_dmbtr TYPE dmbtr,               ""求和 累计余额本币END OF ty_data.*----------------------------------------------------------------------*
*                  DATA 定义                                           *
*----------------------------------------------------------------------*
DATA: gt_data1   TYPE TABLE OF ty_data,gt_report1 TYPE TABLE OF ty_data,gt_report2 TYPE TABLE OF ty_data,gt_where1  TYPE TABLE OF ty_data,gt_where2  TYPE TABLE OF ty_data,gt_wfplr1  TYPE TABLE OF ty_data,gt_wfplr2  TYPE TABLE OF ty_data,gs_data1   TYPE ty_data,gs_data2   TYPE ty_data,gs_data3   TYPE ty_data,gs_ob53    TYPE ty_data,bl_ob53    TYPE boolean.*----------------------------------------------------------------------*
*                  ALV 定义
*----------------------------------------------------------------------*
DATA: wa_layout   TYPE lvc_s_layo, "layout 布局控制 参考结构 lvc_s_layoit_fieldcat TYPE lvc_t_fcat, "fieldcat 字段目录 参考结构 LVC_T_FCATwa_fieldcat LIKE LINE OF it_fieldcat.*----------------------------------------------------------------------*
*                  选 择 屏 幕 定 义 块
*----------------------------------------------------------------------*SELECTION-SCREEN BEGIN OF BLOCK text1.
SELECT-OPTIONS:s_bukrs FOR bseg-bukrs   OBLIGATORY,   ""公司代码s_gjahr FOR bseg-gjahr   OBLIGATORY,   ""会计年度s_monat FOR bseg-h_monat OBLIGATORY,   ""会计期间s_hkont FOR bseg-hkont.                ""总账科目"
SELECTION-SCREEN END OF BLOCK text1.*----------------------------------------------------------------------*
*                  初 始 化 块                                         *
*----------------------------------------------------------------------*
*该事件在屏幕未显示之前执行,对程式设置值及屏幕元素进行初始化赋值*
INITIALIZATION.*----------------------------------------------------------------------*
*                  选 择 屏 幕 字 段 处 理 块
*----------------------------------------------------------------------*
AT SELECTION-SCREEN OUTPUT.*----------------------------------------------------------------------*
*                  逻 辑 处 理 块                                      *
*----------------------------------------------------------------------*START-OF-SELECTION. "执行按钮后触发PERFORM frm_authority_check. "检查权限PERFORM frm_getdata. "取数PERFORM frm_layout. "布局PERFORM frm_fieldcat. "列PERFORM frm_output. "输出*&---------------------------------------------------------------------*
*& Form FRM_GETDATA
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM frm_getdata .*------------------------------------------"查询 利润分配-未分配利润 的会计科目"-------------------------"OB53 查看配置"SAP 总账在年结时可以自动结转本年利润或未分配利润,也就是说系统自动将利润表科目余额转入资产负债表科目中的本年利润或未分配利润。这里是定义转入的科目,称之为留存收益科目。"SPRO :IMG→财务会计→总帐会计→主记录→准备→定义留存收益"不支持多个公司对应不同的科目表SELECT SINGLEt030~konth AS hkont,        "利润分配-未分配利润 的会计科目"skat~saknr,                 ""总账科目编号"skat~txt20,                 ""总帐科目名称skat~txt50,                 ""总账科目长文本ska1~ktoks                 ""总账科目组FROM t030LEFT JOIN t001 ON t001~ktopl = t030~ktopl "科目表LEFT JOIN skat ON skat~saknr = t030~konth  AND skat~spras = @sy-langu AND skat~ktopl = t001~ktopl "利润分配-未分配利润 的会计科目、语言码、科目表LEFT JOIN ska1 ON skat~saknr = ska1~saknr  AND skat~ktopl = ska1~ktopl "利润分配-未分配利润 的会计科目、科目表WHERE t001~bukrs IN @s_bukrs AND t030~ktosl = 'BIL' AND t030~komok = 'X' " tcode:OB53  BIL:结转余额INTO CORRESPONDING FIELDS OF @gs_ob53.IF gs_ob53 IS INITIAL.MESSAGE s001 WITH '“利润分配-未分配利润 的 会计科目”'  DISPLAY LIKE 'E'.LEAVE LIST-PROCESSING.ENDIF.*------------------------------------------"判断需不需要会计科目 利润分配-未分配利润"-------------------------IF gs_ob53-hkont IN s_hkont .bl_ob53 = 'X'.ENDIF.*------------------------------------------"SELECT 取SE16"-------------------------"此处并没有取FAGL_SPLINFO,AGL_SPLINFO 未清项目的拆分信息 中 ,"举列:单号1900002039,厂区C121,年份2023 分摊了两个科目 22020201 应付账款-非关系人 22210101 应交税费-应交增值税-进项税额  到利润中心,但是会发生借贷方金额发生改变的情况"此程序与系统的借贷方发生额会有差异,但是本币累计余额经过核对没有差异"如果此处筛选了月份的话会出现利润分配-未分配利润无法结转的情况"为了算出累计余额需要计算所有月份的凭证的行项目,而不是只取下了条件的月份的数据计算"就一般而言,是本月导上月(结完账月份)的科目余额表,并不需要本月的科目余额数据,但是此处并没有筛选,会取多了一点数据CLEAR gt_data1.SELECTbseg~mandt,             ""集团bseg~bukrs,             ""公司代码bseg~hkont,             ""总账科目bseg~h_waers,           ""货币码bseg~gjahr,             ""会计年度bseg~h_monat,           ""会计期间"bseg~belnr,             ""会计凭证号码"bseg~buzei,             ""会计凭证中的行项目数"skat~ktopl,             ""科目表"skat~saknr,             ""总账科目编号"skat~txt20,             ""总帐科目名称skat~txt50,             ""总账科目长文本ska1~ktoks,             ""总账科目组t001~waers,               ""T001货币码bseg~shkzg,             ""借方/贷方标识bseg~pswsl,             ""更新总分类帐交易数字货币SUM( bseg~wrbtr ) AS wrbtr,             ""凭证货币金额SUM( bseg~dmbtr ) AS dmbtr,             ""按本位币计的金额SUM( bseg~pswbt ) AS pswbt             ""总帐中更新的金额FROM bsegLEFT JOIN t001 ON t001~bukrs = bseg~bukrsLEFT JOIN skat ON skat~saknr = bseg~hkont AND skat~spras = @sy-langu  AND skat~ktopl = t001~ktoplLEFT JOIN ska1 ON skat~saknr = ska1~saknr AND skat~ktopl = ska1~ktoplWHERE( @bl_ob53 = 'X'  AND bseg~bukrs IN @s_bukrs ) OR  "公司代码( @bl_ob53 <> 'X' AND bseg~bukrs IN @s_bukrs  AND bseg~hkont IN @s_hkont ) "公司代码、科目!!!GROUP BYbseg~mandt,             ""集团bseg~bukrs,             ""公司代码bseg~hkont,             ""总账科目bseg~h_waers,           ""货币码bseg~gjahr,             ""会计年度bseg~h_monat,           ""会计期间"bseg~belnr,             ""会计凭证号码"bseg~buzei,             ""会计凭证中的行项目数"skat~ktopl,             ""科目表"skat~saknr,             ""总账科目编号"skat~txt20,             ""总帐科目名称skat~txt50,             ""总账科目长文本ska1~ktoks,             ""总账科目组t001~waers,               ""T001货币码bseg~shkzg,             ""借方/贷方标识bseg~pswsl             ""更新总分类帐交易数字货币INTO CORRESPONDING FIELDS OF TABLE @gt_data1.PERFORM frm_calculatedata USING 'bseg'. "计算"faglflexa此表有月份是0的数据,初步判断是年初的余额,但是暂估类的科目没有原币金额,所以最后还是剔除CLEAR gt_data1.SELECTfaglflexa~rclnt AS mandt,            ""集团faglflexa~rbukrs AS bukrs,           ""公司代码faglflexa~racct AS hkont,            ""科目号faglflexa~rwcur AS h_waers,          ""原事务货币的货币码faglflexa~ryear AS gjahr,            ""会计年度bkpf~monat AS h_monat,          ""过账期间"faglflexa~docnr AS belnr,            ""会计凭证号码"faglflexa~buzei,            ""会计凭证中的行项目数"skat~ktopl,                 ""科目表"skat~saknr,                 ""总账科目编号"skat~txt20,                 ""总帐科目名称skat~txt50,                 ""总账科目长文本ska1~ktoks,                 ""总账科目组faglflexa~drcrk AS shkzg,            ""借方/贷方标识SUM( CASE faglflexa~drcrk WHEN 'S' THEN faglflexa~wsl WHEN 'H' THEN - faglflexa~wsl END ) AS wrbtr,                ""原交易货币的值(凭证货币)SUM( CASE faglflexa~drcrk WHEN 'S' THEN faglflexa~hsl WHEN 'H' THEN - faglflexa~hsl END ) AS dmbtr                ""用本地货币表示的值 "FROM faglflexaLEFT JOIN t001 ON  t001~bukrs = faglflexa~rbukrsLEFT JOIN skat ON  skat~saknr = faglflexa~racct  AND skat~spras = @sy-langu AND skat~ktopl = t001~ktoplLEFT JOIN ska1 ON  skat~saknr = ska1~saknr  AND skat~ktopl = ska1~ktoplLEFT JOIN bkpf ON  bkpf~bukrs = faglflexa~rbukrs AND bkpf~gjahr = faglflexa~ryear AND bkpf~belnr = faglflexa~docnrWHERE( @bl_ob53 = 'X'  AND faglflexa~buzei = '000' AND NOT bkpf~monat = '00' AND faglflexa~rbukrs IN @s_bukrs ) OR   "公司代码 会计凭证号码 排除空,月份排除空( @bl_ob53 <> 'X' AND faglflexa~buzei = '000' AND NOT bkpf~monat = '00' AND faglflexa~rbukrs IN @s_bukrs AND faglflexa~racct IN @s_hkont )   "公司代码 会计凭证号码 排除空,月份排除空、科目!!!GROUP BYfaglflexa~rclnt ,            ""集团faglflexa~rbukrs ,           ""公司代码faglflexa~racct ,            ""科目号faglflexa~rwcur ,          ""原事务货币的货币码faglflexa~ryear ,            ""会计年度bkpf~monat ,          ""过账期间"faglflexa~docnr AS belnr,            ""会计凭证号码"faglflexa~buzei,            ""会计凭证中的行项目数"skat~ktopl,                 ""科目表"skat~saknr,                 ""总账科目编号"skat~txt20,                 ""总帐科目名称skat~txt50,                 ""总账科目长文本ska1~ktoks,                 ""总账科目组faglflexa~drcrk            ""借方/贷方标识INTO CORRESPONDING FIELDS OF TABLE @gt_data1.PERFORM frm_calculatedata USING 'faglflexa'. "计算*------------------------------------------"补 公司~科目~币种、年~月"-------------------------"比如上个月有发生额,本月没有发生额,但是却又存在累计余额的情况,目的是取出全部科目的累计余额"直接取“ BKPF  总帐科目主记录 (科目表)”里的年会计年度、会计期间",不能卡年份条件" DISTINCT 可以去重"不能直接在 gt_report1 里去取,因为如果筛选了科目,就会发生科目当月没发生额而丢失了期末余额的状况CLEAR gt_where1.SELECT DISTINCT gjahr ,monat AS  h_monat FROM bkpf  WHERE  bukrs IN @s_bukrsINTO CORRESPONDING FIELDS OF TABLE @gt_where1. " gt_where1: 年、月CLEAR gs_data2.CLEAR gt_where2.LOOP AT gt_report1 INTO gs_data1  .gs_data2-mandt = gs_data1-mandt.              ""集团gs_data2-bukrs = gs_data1-bukrs.              ""公司代码gs_data2-hkont = gs_data1-hkont.              ""总账科目gs_data2-h_waers = gs_data1-h_waers.          ""币种"gs_data2-spras = gs_data1-spras.              ""语言代码"gs_data2-ktopl = gs_data1-ktopl.              ""科目表"gs_data2-saknr = gs_data1-saknr.              ""总账科目编号"gs_data2-txt20 = gs_data1-txt20.              ""总帐科目名称gs_data2-txt50 = gs_data1-txt50.              ""总账科目长文本gs_data2-ktoks = gs_data1-ktoks.              ""总账科目组 "COLLECT gs_data2 INTO gt_where2 .ENDLOOP.LOOP AT gt_where1 INTO gs_data1  .LOOP AT gt_where2 INTO gs_data2  ."*gs_data2-mandt = gs_data2-mandt.              ""集团"*gs_data2-bukrs = gs_data2-bukrs.              ""公司代码"*gs_data2-hkont = gs_data2-hkont.              ""总账科目"*gs_data2-h_waers = gs_data2-h_waers.          ""币种""gs_data2-spras = gs_data2-spras.              ""语言代码""gs_data2-ktopl = gs_data2-ktopl.              ""科目表""gs_data2-saknr = gs_data2-saknr.              ""总账科目编号""gs_data2-txt20 = gs_data2-txt20.              ""总帐科目名称"*gs_data2-txt50 = gs_data2-txt50.              ""总账科目长文本"*gs_data2-ktoks = gs_data2-ktoks.              ""总账科目组gs_data2-gjahr = gs_data1-gjahr.              ""会计年度gs_data2-h_monat = gs_data1-h_monat.          ""会计期间"COLLECT gs_data2 INTO gt_report1 .ENDLOOP.ENDLOOP.*------------------------------------------"利润分配-未分配利润补项目"-------------------------"利润分配-未分配利润此科目系统没有产生凭证,并且初步判断,系统结转的时候是按照本币结转,没有考虑原币的情况,而且几乎不会有发生额,所以需要根据此科目补条目IF bl_ob53 = 'X'.CLEAR gs_data2.CLEAR gt_where2.LOOP AT gt_report1 INTO gs_data1  .gs_data2-mandt = gs_data1-mandt.              ""集团gs_data2-bukrs = gs_data1-bukrs.          ""公司代码gs_data2-h_waers = gs_data1-h_waers .          ""货币码COLLECT gs_data2 INTO gt_where2 .ENDLOOP." gt_where1: 年、月 ,上面添加后并没有清空CLEAR gs_data3.LOOP AT gt_where1 INTO gs_data1  .LOOP AT gt_where2 INTO gs_data2.gs_data3-mandt = gs_data2-mandt.              ""集团gs_data3-bukrs = gs_data2-bukrs.              ""公司代码gs_data3-hkont = gs_ob53-hkont.               ""总账科目 利润分配-未分配利润gs_data3-h_waers = gs_data2-h_waers.          ""币种gs_data3-txt50 = gs_ob53-txt50.              ""总账科目长文本gs_data3-ktoks = gs_ob53-ktoks.              ""总账科目组gs_data3-gjahr = gs_data1-gjahr.              ""会计年度gs_data3-h_monat = gs_data1-h_monat.          ""会计期间"COLLECT gs_data3 INTO gt_report1 .APPEND gs_data3 TO gt_wfplr2 .ENDLOOP.ENDLOOP.ENDIF.*------------------------------------------"余额"-------------------------"余额=借方-贷方LOOP AT gt_report1 INTO gs_data1  .gs_data1-ye_wrbtr = gs_data1-jf_wrbtr - gs_data1-df_wrbtr .          ""余额原币gs_data1-ye_dmbtr = gs_data1-jf_dmbtr - gs_data1-df_dmbtr.          ""余额本币"IF gs_data1-ye_dmbtr = 0 .gs_data1-h_shkzg = '平'.ELSEIF gs_data1-ye_dmbtr > 0 .gs_data1-h_shkzg = '借'.ELSEIF gs_data1-ye_dmbtr < 0 .gs_data1-h_shkzg = '贷'.ENDIF.MODIFY gt_report1 FROM gs_data1  TRANSPORTING ye_wrbtr ye_dmbtr h_shkzg.ENDLOOP.*------------------------------------------"本币余额 求和"-------------------------"求和:余额本币CLEAR gt_where1.LOOP AT gt_report1 INTO gs_data1.CLEAR gs_data2.gs_data2-mandt = gs_data1-mandt.                   ""集团gs_data2-bukrs = gs_data1-bukrs.                   ""公司代码gs_data2-gjahr = gs_data1-gjahr.                   ""会计年度gs_data2-h_monat = gs_data1-h_monat.               ""会计期间gs_data2-hkont = gs_data1-hkont.                   ""总账科目gs_data2-sumye_dmbtr = gs_data1-ye_dmbtr.          ""求和:余额本币COLLECT gs_data2 INTO gt_where1 .ENDLOOP."如果科目汇总后本币金额是零,则原币余额和本币余额也是零CLEAR gs_data2.gs_data2-ye_wrbtr = 0.          ""余额原币gs_data2-ye_dmbtr = 0.          ""余额本币LOOP AT gt_where1 INTO gs_data1  .IF gs_data1-sumye_dmbtr = 0 .MODIFY gt_report1 FROM gs_data2 TRANSPORTING ye_wrbtr ye_dmbtrWHERE mandt = gs_data1-mandtAND bukrs = gs_data1-bukrsAND gjahr = gs_data1-gjahrAND h_monat = gs_data1-h_monatAND hkont = gs_data1-hkont .ENDIF.ENDLOOP.*------------------------------------------"累计余额"-------------------------"累计余额一定要先排序"排序后按照余额进行累计,但是不同法人,不同科目,不同币别时要清空"如果是费用类的科目跨年会结转到利润分配-未分配利润,所以也要跨年清空累计余额SORT gt_report1 BY mandt bukrs hkont h_waers gjahr h_monat .CLEAR gs_data2.LOOP AT gt_report1 INTO gs_data1  .IF NOT (  gs_data2-bukrs  = gs_data1-bukrs AND gs_data2-hkont  = gs_data1-hkont AND gs_data2-h_waers  = gs_data1-h_waers ) .gs_data2-bukrs  = gs_data1-bukrs .        "公司代码gs_data2-hkont  = gs_data1-hkont .        ""总账科目gs_data2-h_waers  = gs_data1-h_waers .   ""币种gs_data2-lj_wrbtr = 0 .gs_data2-lj_dmbtr = 0 .ENDIF.IF NOT (  gs_data2-gjahr  = gs_data1-gjahr  ) AND gs_data1-ktoks = 'PL'  . "'PL':损益类科目gs_data2-gjahr  = gs_data1-gjahr .gs_data2-lj_wrbtr = 0 .gs_data2-lj_dmbtr = 0 .ENDIF.gs_data2-lj_wrbtr = gs_data2-lj_wrbtr +  gs_data1-ye_wrbtr  .gs_data2-lj_dmbtr = gs_data2-lj_dmbtr  + gs_data1-ye_dmbtr .gs_data1-lj_wrbtr  = gs_data2-lj_wrbtr .gs_data1-lj_dmbtr  = gs_data2-lj_dmbtr .MODIFY gt_report1 FROM gs_data1  TRANSPORTING lj_wrbtr  lj_dmbtr .ENDLOOP.*------------------------------"利润分配-未分配利润 累计余额"-------------------------"加总费用类的科目余额,并且给下一年的利润分配-未分配利润的累计余额IF bl_ob53 = 'X'.CLEAR gs_data2.CLEAR gt_wfplr1.LOOP AT gt_report1 INTO gs_data1 WHERE ktoks = 'PL' .gs_data2-bukrs  = gs_data1-bukrs . "公司代码gs_data2-gjahr  = gs_data1-gjahr + 1. ""年gs_data2-h_waers  = gs_data1-h_waers . ""币种gs_data2-ye_wrbtr = gs_data1-ye_wrbtr.gs_data2-ye_dmbtr = gs_data1-ye_dmbtr.COLLECT gs_data2 INTO gt_wfplr1.ENDLOOP.CLEAR gs_data2.LOOP AT gt_wfplr1 INTO gs_data1  .IF NOT (  gs_data2-bukrs  = gs_data1-bukrs  AND gs_data2-h_waers  = gs_data1-h_waers ) .gs_data2-bukrs  = gs_data1-bukrs .        "公司代码gs_data2-h_waers  = gs_data1-h_waers .   ""币种gs_data2-lj_wrbtr = 0 .gs_data2-lj_dmbtr = 0 .ENDIF.gs_data2-lj_wrbtr = gs_data2-lj_wrbtr +  gs_data1-ye_wrbtr  .gs_data2-lj_dmbtr = gs_data2-lj_dmbtr  + gs_data1-ye_dmbtr .gs_data1-lj_wrbtr  = gs_data2-lj_wrbtr .gs_data1-lj_dmbtr  = gs_data2-lj_dmbtr .MODIFY gt_wfplr1 FROM gs_data1  TRANSPORTING lj_wrbtr  lj_dmbtr .ENDLOOP.CLEAR gs_data3.LOOP AT gt_wfplr1 INTO gs_data1.LOOP AT gt_report1 INTO gs_data2 WHERE hkont = gs_ob53-hkont.IF gs_data1-bukrs = gs_data2-bukrs AND gs_data1-gjahr = gs_data2-gjahr AND gs_data1-h_waers = gs_data2-h_waers .gs_data3-lj_wrbtr = gs_data1-lj_wrbtr + gs_data2-lj_wrbtr.gs_data3-lj_dmbtr = gs_data1-lj_dmbtr + gs_data2-lj_dmbtr.MODIFY gt_report1 FROM gs_data3  TRANSPORTING lj_wrbtr  lj_dmbtr .ENDIF.ENDLOOP.ENDLOOP.ENDIF.*-------------------------------------"累计本币余额 求和"------------------------------"求和:累计余额本币CLEAR gt_where1.LOOP AT gt_report1 INTO gs_data1.CLEAR gs_data2.gs_data2-mandt = gs_data1-mandt.                   ""集团gs_data2-bukrs = gs_data1-bukrs.                   ""公司代码gs_data2-gjahr = gs_data1-gjahr.                   ""会计年度gs_data2-h_monat = gs_data1-h_monat.               ""会计期间gs_data2-hkont = gs_data1-hkont.                   ""总账科目gs_data2-sumlj_dmbtr = gs_data1-lj_dmbtr.          ""求和:余额本币COLLECT gs_data2 INTO gt_where1.ENDLOOP."如果科目汇总后本币金额是零,则原币余额和本币余额也是零CLEAR gs_data2.gs_data2-lj_wrbtr = 0.          ""余额原币gs_data2-lj_dmbtr = 0.          ""余额本币LOOP AT gt_where1 INTO gs_data1  .IF gs_data1-sumlj_dmbtr = 0 .MODIFY gt_report1 FROM gs_data2 TRANSPORTING lj_wrbtr lj_dmbtrWHERE mandt = gs_data1-mandtAND bukrs = gs_data1-bukrsAND gjahr = gs_data1-gjahrAND h_monat = gs_data1-h_monatAND hkont = gs_data1-hkont .ENDIF.ENDLOOP.*------------------------------------------"上期余额"-------------------------"上月余额,不是年初余额CLEAR gs_data2.LOOP AT gt_report1 INTO gs_data1  .gs_data1-qc_wrbtr  = gs_data1-lj_wrbtr - gs_data1-ye_wrbtr .gs_data1-qc_dmbtr  = gs_data1-lj_dmbtr - gs_data1-ye_dmbtr .MODIFY gt_report1 FROM gs_data1  TRANSPORTING qc_wrbtr  qc_dmbtr .ENDLOOP.*------------------------------------------"屏幕筛选"-------------------------"根据公司取出所有数据后,再根据用户的筛选条件筛选具体的科目、月份等信息LOOP AT gt_report1 INTO gs_data1 WHERE gjahr IN s_gjahr  AND h_monat IN s_monat AND hkont IN s_hkont "会计年度 ,期间,总账科目.AND NOT (  qc_wrbtr = 0 AND  qc_dmbtr = 0 AND  jf_wrbtr = 0 AND  jf_dmbtr = 0 AND  df_wrbtr = 0 AND  df_dmbtr = 0 AND  ye_wrbtr = 0 AND  ye_dmbtr = 0 AND  lj_wrbtr = 0 AND  lj_dmbtr = 0 ) .APPEND gs_data1 TO gt_report2.ENDLOOP."没有满足条件的数据,提示信息并终止程序IF gt_report2 IS INITIAL.MESSAGE s001 WITH '“科目余额表”' DISPLAY LIKE 'E'.LEAVE LIST-PROCESSING.ENDIF.ENDFORM.*&---------------------------------------------------------------------*
*& Form FRM_LAYOUT
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM frm_layout .wa_layout-cwidth_opt = 'X'. "最适列宽wa_layout-zebra = 'X'. "隔行显示斑马纹   使ALV表格按斑马线间隔条码方式显示wa_layout-sel_mode = 'D'. "选择模式 "'D' 单元格的选择,可以多选单元格 多行,多列,任何单元格多选 用户可以使用最左边的选择按钮来选择多行wa_layout-stylefname = 'CELLBTN'. "设置单元"wa_layout-grid_title = 'test'."wa_layout-excp_fname = 'light'."wa_layout-edit = 'X'. "可编辑"wa_layout-box_fname = 'BOX'."wa_layout-confirmation_prompt = 'X'.
ENDFORM.*&---------------------------------------------------------------------*
*& Form FRM_FIELDCAT
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM frm_fieldcat .*----------------------------------------------------------------------*
*                  定义宏
*----------------------------------------------------------------------*DEFINE init_fieldcat.CLEAR wa_fieldcat.wa_fieldcat-fieldname = &1. "标题列对应的字段名wa_fieldcat-coltext = &2. "列标题 列标题,如果字段参考了DDIC,可不设置wa_fieldcat-fix_column = &3. "固定列 与KEY字段类似,固定列但颜色不变蓝,必须要在左边才起作用(如果设置固定列的左边包含非固定列,则该列不固定)wa_fieldcat-no_zero = &4. "是否隐藏输出为零的字段 当字段为数值为0时,不显示【如0,0.00,则会显示为空】当字段包含前导0时,隐藏前导0,【如0100,则会显示为100】wa_fieldcat-cfieldname = &5. "currency unit field name值为当前输出内表中的货币单位字段的字段名称wa_fieldcat-edit = &6. "准备输入 X:可编辑,space:不可编辑 该控制是在整列的级别上,如果想控制仅仅某一行可编辑,则需要通过style来控制"wa_fieldcat-col_pos = ''. "输出列  列位置,即从左到右的顺序。若为空,则按字段添加到内表中的顺序"wa_fieldcat-key = ''. "关键字段 key值在左右滚动时不移动,蓝色显示"wa_fieldcat-hotspot = ''. "单击敏感 设置为带下划线热点,可触发热点、双击事件"wa_fieldcat-do_sum = 'X' . "总计列值"wa_fieldcat-no_sum = 'X' . "没有总计列值"wa_fieldcat-LOWERCASE  = 'X'. "允许/不允许小写字母 X:区分大小写/空:不区分(小写自动转换为大写) "主要影响数据的录入,当通过ALV输入数据的时候,如果未设置该标识,则输入小写字母如abc时,系统自动转换为ABC主键字段一般都是大写,主要是文本、描述字段时需要注意"wa_fieldcat-REF_TABLE = ''. "内部表字段的参考表名称"wa_fieldcat-REF_FIELD = ''. "部表字段的参考字段名称"wa_fieldcat-CHECKBOX = 'X' . "作为复选框输出 复选框标志只有字段值为X时,复选框才会被设置为选中,空或者其它值时为不选中"wa_fieldcat-rollname = '' . "F1 帮助的数据元素"wa_fieldcat-just = ''. "对齐 空时:字符默认左对齐:C/X/D/T/STRING/XSTRING数值默认右对齐:I/F/P/N 非空时:(R)ight/(L)eft/(C)enterAPPEND wa_fieldcat TO it_fieldcat.END-OF-DEFINITION.init_fieldcat:'BUKRS' '公司代码'(t01) 'X' '' '' '','GJAHR' '会计年度'(t02) 'X' '' '' '','H_MONAT' '会计期间'(t03) 'X' '' '' '','HKONT' '总账科目'(t04) 'X' 'X' '' '','TXT50' '总账科目长文本 '(t05) 'X' '' '' '','H_WAERS' '币种'(t06) 'X' '' '' '','QC_WRBTR' '期初原币余额'(t07) '' '' 'H_WAERS' '','QC_DMBTR' '期初本币余额'(t08) '' '' '' '','JF_WRBTR' '本月借方发生额原币'(t09)  '' '' 'H_WAERS' '','JF_DMBTR' '本月借方发生额本币'(t10) '' '' '' '','DF_WRBTR' '本月贷方发生额原币'(t11) '' '' 'H_WAERS' '','DF_DMBTR' '本月贷方发生额本币'(t12) '' '' '' '','H_SHKZG' '借贷标识'(t13) '' '' '' '','YE_WRBTR' '余额原币'(t14) '' '' 'H_WAERS' '','YE_DMBTR' '余额本币'(t15) '' '' '' '','LJ_WRBTR' '累计余额原币'(t16) '' '' 'H_WAERS' '','LJ_DMBTR' '累计余额本币'(t17) '' '' '' ''."ENDFORM.*&---------------------------------------------------------------------*
*& Form FRM_OUTPUT
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM frm_output .CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'EXPORTINGi_callback_program = sy-cprog "sy-repid
*     I_INTERFACE_CHECK  = ' '
*     I_BYPASSING_BUFFER =
*     I_BUFFER_ACTIVE    =
*     I_CALLBACK_PROGRAM = ' '
*     I_CALLBACK_PF_STATUS_SET          = ' '
*     I_CALLBACK_USER_COMMAND           = ' '
*     I_CALLBACK_TOP_OF_PAGE            = ' '
*     I_CALLBACK_HTML_TOP_OF_PAGE       = ' '
*     I_CALLBACK_HTML_END_OF_LIST       = ' '
*     I_STRUCTURE_NAME   =
*     I_BACKGROUND_ID    = ' '
*     I_GRID_TITLE       =
*     I_GRID_SETTINGS    =is_layout_lvc      = wa_layoutit_fieldcat_lvc    = it_fieldcat
*     IT_EXCLUDING       =
*     IT_SPECIAL_GROUPS_LVC             =
*     IT_SORT_LVC        =
*     IT_FILTER_LVC      =
*     IT_HYPERLINK       =
*     IS_SEL_HIDE        =i_default          = 'X'i_save             = 'A' " 'U'
*     IS_VARIANT         =
*     IT_EVENTS          =
*     IT_EVENT_EXIT      =
*     IS_PRINT_LVC       =
*     IS_REPREP_ID_LVC   =
*     I_SCREEN_START_COLUMN             = 0
*     I_SCREEN_START_LINE               = 0
*     I_SCREEN_END_COLUMN               = 0
*     I_SCREEN_END_LINE  = 0
*     I_HTML_HEIGHT_TOP  =
*     I_HTML_HEIGHT_END  =
*     IT_ALV_GRAPHICS    =
*     IT_EXCEPT_QINFO_LVC               =
*     IR_SALV_FULLSCREEN_ADAPTER        =
* IMPORTING
*     E_EXIT_CAUSED_BY_CALLER           =
*     ES_EXIT_CAUSED_BY_USER            =TABLESt_outtab           = gt_report2EXCEPTIONSprogram_error      = 1OTHERS             = 2.IF sy-subrc <> 0.
* Implement suitable error handling here"LEAVE LIST-PROCESSING.ENDIF.ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_CALCULATEDATA
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM frm_calculatedata USING se16 TYPE char10.LOOP AT gt_data1 INTO gs_data1 .CLEAR gs_data2.IF se16 = 'bseg'. "如果交易货币不是公司代码的本币就默认是原币,进而带出总帐中更新的金额IF gs_data1-pswsl <> gs_data1-waers.gs_data1-h_waers = gs_data1-pswsl. ""币种gs_data1-wrbtr = gs_data1-pswbt.   ""原币ENDIF."ELSEIF se16 = 'faglflexa'. "也可以写到SELECT语句里"  IF gs_data1-shkzg = 'H'."   gs_data1-wrbtr = - gs_data1-wrbtr ."    gs_data1-dmbtr = - gs_data1-dmbtr ."  ENDIF.ENDIF.gs_data2-mandt = gs_data1-mandt.              ""集团gs_data2-bukrs = gs_data1-bukrs.              ""公司代码gs_data2-gjahr = gs_data1-gjahr.              ""会计年度gs_data2-h_monat = gs_data1-h_monat.          ""会计期间gs_data2-hkont = gs_data1-hkont.              ""总账科目gs_data2-h_waers = gs_data1-h_waers.          ""币种"凭证直接取日币是缩小了一百倍,应该通过ALV显示的时候更改而不是改内表,虽然测试的结果是一样的"IF gs_data1-h_waers  = 'JPY' . "币别为小币种的时候,数据放大倍数"   gs_data1-wrbtr = gs_data1-wrbtr * 100.           ""本月借方发生额原币!!!"ENDIF.IF gs_data1-shkzg = 'S'. "借方gs_data2-jf_wrbtr = gs_data1-wrbtr.           ""本月借方发生额原币!!!gs_data2-jf_dmbtr = gs_data1-dmbtr.           ""本月借方发生额本币!!!ELSEIF gs_data1-shkzg = 'H'. "贷方gs_data2-df_wrbtr = gs_data1-wrbtr.           ""本月贷方发生额原币!!!gs_data2-df_dmbtr = gs_data1-dmbtr.           ""本月贷方发生额本币!!!ENDIF."gs_data2-ktopl = gs_data1-ktopl.          ""科目表"gs_data2-saknr = gs_data1-saknr.          ""总账科目编号"gs_data2-txt20 = gs_data1-txt20.          ""总帐科目名称gs_data2-txt50 = gs_data1-txt50.          ""总账科目长文本gs_data2-ktoks = gs_data1-ktoks.          ""总账科目组 "COLLECT gs_data2 INTO gt_report1 .ENDLOOP.CLEAR gt_data1.
ENDFORM.*&---------------------------------------------------------------------*
*&      FORM  getaction
*&---------------------------------------------------------------------*
*       处理用户权限
*----------------------------------------------------------------------*
FORM frm_authority_check.DATA:BEGIN OF lt_bukrs OCCURS 0,bukrs LIKE t001-bukrs,END OF lt_bukrs.SELECT * INTO CORRESPONDING FIELDS OF TABLE lt_bukrs FROM t001 WHERE bukrs IN s_bukrs.LOOP AT lt_bukrs.AUTHORITY-CHECK OBJECT  'F_SKA1_BUK'ID 'BUKRS' FIELD lt_bukrs-bukrs."检查字段IF sy-subrc <> 0.MESSAGE s021 WITH lt_bukrs-bukrs DISPLAY LIKE 'E'.LEAVE LIST-PROCESSING.ENDIF.ENDLOOP.
ENDFORM.

参考资料

*在SAP系统中,凭证项目相关的数据可以在表BKPF(凭证抬头数据)和BSEG(凭证行项目数据)中找到。在BSEG表中,可以使用字段GL_ACCOUNT来查找会计科目16020107相关的凭证项目数据。具体来说,你可以使用如下的SAP ABAP代码来查询该会计科目的凭证项目数据:
*
*SELECT *
*FROM BSEG
*WHERE GL_ACCOUNT = '16020107'.
*需要注意的是,在实际使用中,你需要根据自己的SAP系统配置和权限,来确定可以访问哪些表和字段。另外,我们需要保证查询操作的合法性和准确性,避免对系统数据造成不必要的影响。
*
*
*在SAP系统中,除了BSEG表(凭证行项目数据),还有其他一些表可以存储凭证项目相关的数据。以下是一些常见的例子:
*
*BKPF表:凭证抬头数据表,包含凭证的基本信息,如凭证号、凭证日期、凭证类型等。BKPF表和BSEG表通过凭证号(BELNR)字段进行关联,可以用来检索特定凭证的所有行项目数据。
*COEP表:成本元素总帐凭证行项目数据表,用于存储与成本核算相关的凭证项目数据。COEP表和BSEG表通过凭证号、凭证行项目号(BUZEI)和成本元素(COSTELEMENT)字段进行关联。
*FAGLFLEXA表:总账分析项数据表,用于存储总账分析项相关的凭证数据。FAGLFLEXA表和BSEG表通过凭证号和凭证行项目号字段进行关联。
*FAGL_SPLINFO表:总账分期余额表,用于存储总账分期余额相关的凭证数据。FAGL_SPLINFO表和BSEG表通过凭证号、凭证行项目号和总账分期(FISCPER)字段进行关联。
*需要根据具体情况选择合适的表来查询凭证项目相关的数据。同时,需要注意不同表之间的关联关系,以及表中字段的含义和使用方式。

SAP 原币科目余额表相关推荐

  1. SAP审计科目余额表和序时账差异原因分析实例

    近日处理了一笔问题,过程有点曲折,也花了不少时间.主要是对账对我来说不很熟练.但月结期间,财务较忙.接到审计提出的这个问题时,我本能的好奇,有空,加上手欠,就接手了.(玩笑,其实我的观点一直是顾问应把 ...

  2. SAP S4 HANA 本地化报表配置(科目余额表/资产负债表/利润表/会计凭证明细表)

    目录 IDCNACCTBLN科目余额表 报表配置:IDCNALG 报表展示IDCNACCTBLN IDCNBSAIS本地化报表(资产负债表/

  3. sql 凭证明细表 科目余额表_金碟财务软件手册——明细账 凭证汇总表 科目余额表...

    金碟财务软件手册--明细账 凭证汇总表 科目余额表 明细账 查询各科目的明细账账务数据, 这里可以输出现金日记账, 银行存款日记账和其 它各科目的三栏式明细账的账务明细数据: 在明细账查询功能中, 还 ...

  4. EAS 科目余额表、辅助账余额表(1F、1L、1R、5F、5L、5R)的含义

    T_GL_AccountBalance 科目余额视图 T_GL_AccountBalance_1F 科目余额表 未过账+已过账的原币余额  T_GL_AccountBalance_1L 科目余额表 未 ...

  5. EAS BOS:科目余额表、辅助账余额表

    T_GL_AccountBalance 科目余额视图 T_GL_AccountBalance_1F 科目余额表 未过账+已过账的原币余额  T_GL_AccountBalance_1L 科目余额表 未 ...

  6. oracle账户余额表和明细表,科目余额表与明细账

    (明细与上相同)在建工程 11 小计 明细账科 LI 余额表 年月日 序上期余额本期发生额月末余额科目名称号借方贷方借方贷方借方 贷方二.负债类短期借款 12 XX 银行 XX 银行应付账款 13 X ...

  7. sql 凭证明细表 科目余额表_sql查询金蝶科目余额表个期间的数据

    select null as QYDM, null as SBNF, null as SBYF, 本期发生_本年累计_科目余额表.会计年度 as 会计年度, 本期发生_本年累计_科目余额表.会计期间 ...

  8. 管家婆分销ERPV3A8本币科目余额表和凭证明细数据不平衡,不能结账!

    ---------------------------以报告形式展现信息的判断处理---------------------------------------------------------- ...

  9. oracle科目余额表的查询,科目余额表查询 · selfaccount-services · 看云

    ## 查询某个月的科目余额表 *访问财务数据库并查询某个月的科目余额表* +++ post:/finicial_getItemBalance *string:acctId#登录者账号id *strin ...

最新文章

  1. 「二分查找」之我见!今天刷一道leetcode算法!
  2. 【NLP】GitHub 上有哪些有趣的关于 NLP 的Python项目?
  3. Linux Redis 重启数据丢失解决方案,Linux重启后Redis数据丢失解决方
  4. JAVA的extends使用方法
  5. python玩转大数据视频[非原创视频]
  6. 《并行计算的编程模型》一1.10 MPI开发心得
  7. html音乐播放心得体会,音乐心得体会
  8. 多项式展开的逆过程的MATLAB实现
  9. 读《创业36条军规》(六)凡事只能靠自己
  10. 大量用户反馈 QQ 账号被盗;​AirPods Pro2 或支持查找功能;Spring Boot 2.7.1发布|极客头条
  11. 老挑毛 win7 linux,老挑毛u盘装系统步骤|老挑毛u盘一键装系统
  12. 决策树之CART 算法(回归树,分类树)
  13. Sequence operation HDU - 3397
  14. 股市跷跷板—债券基金
  15. WIN10提示没有默认的邮件客户端,或者当前的邮件客户端无法实现该请求,请将outlook设为默认邮件客户端“
  16. GNU Radio入门之旅
  17. 利用excel求特定条件下的最大/小值(maxif/minif)
  18. Adobe illustrator如何将导入的pdf格式图片里的图形对象拆分组合
  19. 华北理工大学的计算机科学与技术在哪个学院,2021年华北理工大学有哪些专业好和学院及院系排名...
  20. dedecms 发布文章时,关键字会自动加内链

热门文章

  1. 大数据学习之双11来了,你的订单可能是机器人在处理
  2. npm-upgrade : 无法加载文件 C:\Users\Administrator\AppData\Roaming\npm\npm-upgrade.ps1
  3. 制作超美的个人网页(附源码带音乐
  4. 祖先后代选择器ancestor descendant(jQuery)
  5. python求子集_【算法07】求子数组的最大和
  6. 记录一下最近找到的好玩的东西
  7. 历届真题 魔方旋转问题【历届真题】【决赛】【高职组】
  8. P1428小鱼比可爱——C++实现
  9. 如何在自己的电脑上复现开源论文里的代码
  10. 最简单的OpenSL播放PCM实时音频