SAP FI 批量显示科目余额 发生额的报表

54 篇文章 6 订阅

实际界面

结果

源代码

*&---------------------------------------------------------------------*
*& Report ZRPT_FICO_F01
*&---------------------------------------------------------------------*
*& 20240614  批量显示余额 发生额
*&---------------------------------------------------------------------*
REPORT ZRPT_FICO_F01.

TABLES:ACDOCA,SKAT,SKA1,SKB1,BSEG.

*----------------------------------------------------------------------*
* TYPES
*----------------------------------------------------------------------*
TYPES:
  BEGIN OF TYP_DATA,
    SAKNR   TYPE SKAT-SAKNR,  "科目
    TXT20   TYPE SKAT-TXT20,  "科目描述
    DMBTRS  TYPE BSEG-DMBTR,  "期初
    DMBTRSS TYPE BSEG-DMBTR,  "借方
    DMBTRSH TYPE BSEG-DMBTR,  "贷方
    DMBTRE  TYPE BSEG-DMBTR,  "期末
    DLT     TYPE BSEG-DMBTR,  "绝对差异
    PERCENT TYPE BSEG-DMBTR,  "绝对差异
  END OF TYP_DATA.
*----------------------------------------------------------------------*
* DATA
*----------------------------------------------------------------------*
DATA:
  GT_DATA TYPE TABLE OF TYP_DATA,
  GS_DATA TYPE TYP_DATA.

* ALV变量
DATA:
  GT_FCAT   TYPE LVC_T_FCAT,
  GS_FCAT   LIKE LINE OF GT_FCAT,
  GS_LAYOUT TYPE LVC_S_LAYO.
*----------------------------------------------------------------------*
*       宏定义
*----------------------------------------------------------------------*
DEFINE FIELDS_ADD.
  GS_FCAT-FIELDNAME     = &1.
  GS_FCAT-COLTEXT       = &2..
  GS_FCAT-SCRTEXT_L     = GS_FCAT-COLTEXT.
  GS_FCAT-SCRTEXT_M     = GS_FCAT-COLTEXT.
  GS_FCAT-SCRTEXT_S     = GS_FCAT-COLTEXT.
  GS_FCAT-FIX_COLUMN    = &3.
  GS_FCAT-HOTSPOT       = &4.
  GS_FCAT-REF_TABLE     = &5.
  GS_FCAT-REF_FIELD     = &6.
  GS_FCAT-NO_ZERO = &7.
  APPEND GS_FCAT TO GT_FCAT.
  CLEAR GS_FCAT.
END-OF-DEFINITION.

SELECTION-SCREEN BEGIN OF BLOCK BLK1 WITH FRAME TITLE TXT1.
  SELECT-OPTIONS:
  S_KTOPL FOR SKAT-KTOPL,
  S_SAKNR FOR SKAT-SAKNR,
  S_BUKRS FOR SKB1-BUKRS,
  S_GSBER FOR ACDOCA-RBUSA.

  PARAMETERS:
    PGJAHRS LIKE ACDOCA-GJAHR DEFAULT SY-DATUM+0(4) OBLIGATORY,
    PPOPERS LIKE ACDOCA-POPER DEFAULT SY-DATUM+4(2) OBLIGATORY,
    PGJAHRE LIKE ACDOCA-GJAHR DEFAULT SY-DATUM+0(4) OBLIGATORY,
    PPOPERE LIKE ACDOCA-POPER DEFAULT SY-DATUM+4(2) OBLIGATORY.
SELECTION-SCREEN END OF BLOCK BLK1.
SELECTION-SCREEN BEGIN OF BLOCK DESC WITH FRAME TITLE BLKTEXT1.
  SELECTION-SCREEN COMMENT 1(78) TXT2.
SELECTION-SCREEN END OF BLOCK DESC.

INITIALIZATION.
  DATA:
  LV_REPID TYPE SY-REPID.
  LV_REPID = SY-REPID.
  TXT1 = '请选择条件'.
* 获取程序执行记录
  PERFORM FRM_GET_RPTRUNIF(ZABAP_COMMON_PROGRAM) USING '20230313'
  CHANGING BLKTEXT1 TXT2 LV_REPID.

START-OF-SELECTION.
  DATA:
    LV_STDATUM TYPE SY-DATUM,
    LV_STUZEIT TYPE SY-UZEIT.

  LV_STDATUM = SY-DATUM.    "程序执行日期
  LV_STUZEIT = SY-UZEIT.    "程序执行时间
  PERFORM FRM_GET_DATA.
  PERFORM WRITERPTRUNRECORD(ZABAP_COMMON_PROGRAM) USING '20240614' LV_STDATUM
        LV_STUZEIT ''.
  PERFORM FRM_FIELDCAT.
  PERFORM DISPLAY_DATA.

FORM FRM_GET_DATA .

  DATA:POPERSTRS(7) TYPE C,
       POPERSTRE(7) TYPE C.
  POPERSTRS = PGJAHRS && PPOPERS.
  POPERSTRE = PGJAHRE && PPOPERE.
  SELECT SKB1~SAKNR SKAT~TXT20
    INTO TABLE GT_DATA
    FROM SKB1
  JOIN SKAT ON SKAT~SAKNR = SKB1~SAKNR
  WHERE SKB1~BUKRS IN S_BUKRS AND SKAT~SAKNR IN S_SAKNR AND SKAT~KTOPL IN S_KTOPL.

  LOOP AT GT_DATA INTO GS_DATA.
    "期初余额
    PERFORM CHANGEYE USING POPERSTRS+4(3) GS_DATA-SAKNR PGJAHRS 'QC' CHANGING GS_DATA-DMBTRS.

    "贷方金额H
    SELECT SUM( HSL )
      FROM ACDOCA
    WHERE DRCRK = 'H' AND RACCT = @GS_DATA-SAKNR
      AND RBUKRS IN @S_BUKRS  AND RLDNR = '0L' AND RRCTY = 0
      AND ( BSTAT = '' OR BSTAT IN ('L','J','U' ,'T','P','C' ) )
    AND CONCAT( RYEAR,POPER ) >= @POPERSTRS AND CONCAT( RYEAR,POPER ) <= @POPERSTRE
    INTO @GS_DATA-DMBTRSH.
    "借方金额S
    SELECT SUM( HSL )
    FROM ACDOCA
    WHERE DRCRK = 'S' AND RACCT = @GS_DATA-SAKNR
    AND RBUKRS IN @S_BUKRS  AND RLDNR = '0L' AND RRCTY = 0
    AND ( BSTAT = '' OR BSTAT IN ('L','J','U' ,'T','P','C' ) )
    AND CONCAT( RYEAR,POPER ) >= @POPERSTRS AND CONCAT( RYEAR,POPER ) <= @POPERSTRE
    INTO @GS_DATA-DMBTRSS.

    "期末余额
    PERFORM CHANGEYE USING POPERSTRE+4(3) GS_DATA-SAKNR PGJAHRE 'QM' CHANGING GS_DATA-DMBTRE.
    GS_DATA-DLT = GS_DATA-DMBTRE - GS_DATA-DMBTRS.
    IF GS_DATA-DMBTRS IS NOT INITIAL.
      GS_DATA-PERCENT = GS_DATA-DLT * 100 / GS_DATA-DMBTRS.
    ENDIF.

    MODIFY GT_DATA FROM GS_DATA.
  ENDLOOP.
ENDFORM.
FORM CHANGEYE USING PSTR TYPE C PSAKNR TYPE SAKNR PGJAHR TYPE GJAHR PQCQM TYPE C CHANGING PDMBTR TYPE DMBTR.
  DATA:LHSLVT TYPE DMBTR,
       LHSL01 TYPE DMBTR,
       LHSL02 TYPE DMBTR,
       LHSL03 TYPE DMBTR,
       LHSL04 TYPE DMBTR,
       LHSL05 TYPE DMBTR,
       LHSL06 TYPE DMBTR,
       LHSL07 TYPE DMBTR,
       LHSL08 TYPE DMBTR,
       LHSL09 TYPE DMBTR,
       LHSL10 TYPE DMBTR,
       LHSL11 TYPE DMBTR,
       LHSL12 TYPE DMBTR,
       LHSL13 TYPE DMBTR,
       LHSL14 TYPE DMBTR,
       LHSL15 TYPE DMBTR,
       LHSL16 TYPE DMBTR.
  SELECT SUM( HSLVT ),SUM( HSL01 ),SUM( HSL02 ),SUM( HSL03 ),SUM( HSL04 ),SUM( HSL05 ),SUM( HSL06 ),SUM( HSL07 ),SUM( HSL08 ),SUM( HSL09 ),SUM( HSL10 ),SUM( HSL11 ),SUM( HSL12 ),SUM( HSL13 ),SUM( HSL14 ),SUM( HSL15 ),SUM( HSL16 ) FROM FAGLFLEXT
  WHERE RYEAR = @PGJAHRS AND RACCT = @GS_DATA-SAKNR AND RBUKRS IN @S_BUKRS
  INTO ( @LHSLVT,@LHSL01,@LHSL02,@LHSL03,@LHSL04,@LHSL05,@LHSL06,@LHSL07,@LHSL08,@LHSL09,@LHSL10,@LHSL11,@LHSL12,@LHSL13,@LHSL14,@LHSL15,@LHSL16 ).
  CASE   PSTR.
    WHEN :'001'.
      PDMBTR = LHSLVT.
      IF PQCQM = 'QM'.
        PDMBTR = PDMBTR + LHSL01.
      ENDIF.
    WHEN:'002'.
      PDMBTR = LHSLVT +  LHSL01.
      IF PQCQM = 'QM'.
        PDMBTR = PDMBTR  + LHSL02.
      ENDIF.
    WHEN:'003'.
      PDMBTR = LHSLVT +  LHSL01 +  LHSL02.
      IF PQCQM = 'QM'.
        PDMBTR = PDMBTR  + LHSL03.
      ENDIF.
    WHEN:'004'.
      PDMBTR = LHSLVT +  LHSL01 +  LHSL02 +  LHSL03.
      IF PQCQM = 'QM'.
        PDMBTR = PDMBTR  + LHSL04.
      ENDIF.
    WHEN:'005'.
      PDMBTR = LHSLVT +  LHSL01 +  LHSL02 +  LHSL03 +  LHSL04.
      IF PQCQM = 'QM'.
        PDMBTR = PDMBTR  + LHSL05.
      ENDIF.
    WHEN:'006'.
      PDMBTR = LHSLVT +  LHSL01 +  LHSL02 +  LHSL03 +  LHSL04 + LHSL05.
      IF PQCQM = 'QM'.
        PDMBTR = PDMBTR  + LHSL06.
      ENDIF.
    WHEN:'007'.
      PDMBTR = LHSLVT +  LHSL01 +  LHSL02 +  LHSL03 +  LHSL04 + LHSL05 + LHSL06.
      IF PQCQM = 'QM'.
        PDMBTR = PDMBTR  + LHSL07.
      ENDIF.
    WHEN:'008'.
      PDMBTR = LHSLVT +  LHSL01 +  LHSL02 +  LHSL03 +  LHSL04 + LHSL05 + LHSL06 + LHSL07.
      IF PQCQM = 'QM'.
        PDMBTR = PDMBTR  + LHSL08.
      ENDIF.
    WHEN:'009'.
      PDMBTR = LHSLVT +  LHSL01 +  LHSL02 +  LHSL03 +  LHSL04 + LHSL05 + LHSL06 + LHSL07 + LHSL08.
      IF PQCQM = 'QM'.
        PDMBTR = PDMBTR  + LHSL09.
      ENDIF.
    WHEN:'010'.
      PDMBTR = LHSLVT +  LHSL01 +  LHSL02 +  LHSL03 +  LHSL04 + LHSL05 + LHSL06 + LHSL07 + LHSL08 + LHSL09.
      IF PQCQM = 'QM'.
        PDMBTR = PDMBTR  + LHSL10.
      ENDIF.
    WHEN:'011'.
      PDMBTR = LHSLVT +  LHSL01 +  LHSL02 +  LHSL03 +  LHSL04 + LHSL05 + LHSL06 + LHSL07 + LHSL08 + LHSL09 + LHSL10.
      IF PQCQM = 'QM'.
        PDMBTR = PDMBTR  + LHSL11.
      ENDIF.
    WHEN:'012'.
      PDMBTR = LHSLVT +  LHSL01 +  LHSL02 +  LHSL03 +  LHSL04 + LHSL05 + LHSL06 + LHSL07 + LHSL08 + LHSL09 + LHSL10 + LHSL11.
      IF PQCQM = 'QM'.
        PDMBTR = PDMBTR  + LHSL12.
      ENDIF.
    WHEN:'013'.
      PDMBTR = LHSLVT +  LHSL01 +  LHSL02 +  LHSL03 +  LHSL04 + LHSL05 + LHSL06 + LHSL07 + LHSL08 + LHSL09 + LHSL10 + LHSL11 + LHSL12.
      IF PQCQM = 'QM'.
        PDMBTR = PDMBTR  + LHSL13.
      ENDIF.
    WHEN:'014'.
      PDMBTR = LHSLVT +  LHSL01 +  LHSL02 +  LHSL03 +  LHSL04 + LHSL05 + LHSL06 + LHSL07 + LHSL08 + LHSL09 + LHSL10 + LHSL11 + LHSL12 + LHSL13.
      IF PQCQM = 'QM'.
        PDMBTR = PDMBTR  + LHSL14.
      ENDIF.
    WHEN:'015'.
      PDMBTR = LHSLVT +  LHSL01 +  LHSL02 +  LHSL03 +  LHSL04 + LHSL05 + LHSL06 + LHSL07 + LHSL08 + LHSL09 + LHSL10 + LHSL11 + LHSL12 + LHSL13 + LHSL14.
      IF PQCQM = 'QM'.
        PDMBTR = PDMBTR  + LHSL15.
      ENDIF.
    WHEN:'016'.
      PDMBTR = LHSLVT +  LHSL01 +  LHSL02 +  LHSL03 +  LHSL04 + LHSL05 + LHSL06 + LHSL07 + LHSL08 + LHSL09 + LHSL10 + LHSL11 + LHSL12 + LHSL13 + LHSL14 + LHSL15.
      IF PQCQM = 'QM'.
        PDMBTR = PDMBTR  + LHSL16.
      ENDIF.
  ENDCASE.
ENDFORM.


FORM FRM_FIELDCAT .
  FIELDS_ADD:
  'SAKNR'   '科目'           ' '    ' '   'SKAT'      'SAKNR' 'X',
  'TXT20'   '科目描述'           ' '    ' '   'SKAT'      'TXT20' '',
  'DMBTRS'   '期初余额'               ' '    ' '   'BSEG'      'DMBTR' '',
  'DMBTRSS'   '借方发生额'           ' '    ' '   'BSEG'      'DMBTR' '',
  'DMBTRSH'   '贷方发生额'           ' '    ' '   'BSEG'      'DMBTR' '',
  'DMBTRE' '期末余额'    ' '    ' '   'BSEG'      'DMBTR' '',
  'DLT' '绝对差额'    ' '    ' '   'BSEG'      'DMBTR' '',
  'PERCENT' '百分比'    ' '    ' '   'BSEG'      'DMBTR' ''.
ENDFORM.
FORM DISPLAY_DATA .
  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
    EXPORTING
      I_CALLBACK_PROGRAM = SY-REPID
      IS_LAYOUT_LVC      = GS_LAYOUT
      IT_FIELDCAT_LVC    = GT_FCAT
    TABLES
      T_OUTTAB           = GT_DATA
    EXCEPTIONS
      PROGRAM_ERROR      = 1
      OTHERS             = 2.
ENDFORM.


FORM FRM_LAYOUT .
  GS_LAYOUT-ZEBRA = 'X' .    "使ALV界面呈现颜色交替
  GS_LAYOUT-SEL_MODE = 'A' . " 选择模式,“A”在最左端有选择按钮
  GS_LAYOUT-CWIDTH_OPT = 'X' . " 自动优化列宽
  GS_LAYOUT-DETAILINIT = 'X' . " 是否出现细节屏幕
ENDFORM.                    " FRM_LAYOUT

如有帮助

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

gavin_gxh

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值