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

news2025/6/26 7:15:17

实际界面

结果

源代码

*&---------------------------------------------------------------------*
*& 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

如有帮助

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1822827.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

怎么批量去除EXCEL表格内时间?(已解决)

作为竞价优化师&#xff0c;经常碰到下载表格以后发现有冗余数据&#xff0c;这个时候我们该怎么快速处理呢&#xff01; 第一步&#xff0c;选择这一行数据 第二步&#xff0c;右击选择“单元格格式-日期” 第三步&#xff0c;选择日期中的2001-3-7格式&#xff0c;点击“确定…

QML学习及实战

QML学习及实战&#xff08;更多内容&#xff09; 创建项目 3. 剩下的就是一路下一步即可 添加静态资源——图片 添加之后完成之后的路径 案列 || demo 可以参考的资料&#xff1a;https://github.com/gongjianbo/MyTestCode/blob/master/README.md 1. 文本省略号 Text {wi…

RedHat9 | Mariadb数据库的配置与管理

一、实验环境 1、Mariadb数据库介绍 MariaDB数据库管理系统是一个开源的关系型数据库管理系统&#xff0c;与MySQL高度兼容&#xff0c;并提供了更多的功能和性能优化。 起源和背景 MariaDB是MySQL的一个分支&#xff0c;主要由开源社区维护。由MySQL的创始人Michael Widen…

百度OCR初探-python

百度OCR使用&#x1f680; 在项目中需要对一些资料首先进行OCR识别&#xff0c;然后对OCR之后得到的结果进行结构化分析&#xff0c;各家的都打算简单尝试一下&#xff0c;首先尝试一下百度的OCR&#xff0c;首先找到百度的OCR的官方&#xff0c;开始自己搜索然后尝试。 OCR&am…

浅谈数据管理架构 Data Fabric(数据编织)及其关键特征、落地应用

伴随着企业从数字化转型迈向更先进的数智化运营新阶段&#xff0c;对看数、用数的依赖越来越强&#xff0c;但数据的海量增长给数据管理带来一系列难题&#xff0c;如数据类型和加工链路日益复杂&#xff0c;数据存储和计算引擎更加分散&#xff0c;数据需求响应与数据质量、数…

【电机控制】FOC算法验证步骤——PWM、ADC

【电机控制】FOC算法验证步骤 文章目录 前言一、PWM——不接电机1、PWMA-H-50%2、PWMB-H-25%3、PWMC-H-0%4、PWMA-L-50%5、PWMB-L-75%6、PWMC-L-100% 二、ADC——不接电机1.电流零点稳定性、ADC读取的OFFSET2.电流钳准备3.运放电路分析1.电路OFFSET2.AOP3.采样电路的采样值范围…

kubespray离线安装k8s

kubespray离线安装k8s 系统环境 OS: Static hostname: test Icon name: computer-vm Chassis: vm Machine ID: 22349ac6f9ba406293d0541bcba7c05d Boot ID: 83bb7e5dbf27453c94ff9f1fe88d5f02 Virtualization: vmware Operating System: Ubuntu 22.04.4 LTS Kernel: Linux 5.…

哪个牌子的开放式耳机性价比高呢?五大口碑销量双佳产品汇总!

​喜欢户外活动的朋友们&#xff0c;你们都是懂得享受生活的达人吧&#xff01;想象一下&#xff0c;在户外活动时&#xff0c;如果能有一副既适合场景又提供超棒音乐体验的耳机&#xff0c;那该多完美啊&#xff01;这时候&#xff0c;开放式耳机就闪亮登场了&#xff01;它的…

JAVAEE值之网络原理(1)_用户数据报协议(UDP)、概念、特点、结构、代码实例

前言 在前两节中我们介绍了UDP数据报套接字编程&#xff0c;但是并没有对UDP进行详细介绍&#xff0c;本节中我们将会详细介绍传输层中的UDP协议。 一、什么是UDP&#xff1f; UDP工作在传输层&#xff0c;用于程序之间传输数据的。数据一般包含&#xff1a;文件类型&#xff0…

SpringCloud2023 - 学习笔记

文章目录 1. 简介1.1 基础知识1.2 组件更替与升级 2. 微服务基础项目构建2.1 创建项目2.2 Mapper4生成代码2.3 支付模块编码2.4 项目完善2.5 订单模块编码2.6 工程重构 3. consul服务注册与发现3.1 consul简介3.2 consul下载安装3.3 微服务入驻3.4 order订单微服务入驻3.5 其他…

美摄科技匿名化处理解决方案,包含模糊、同色、马赛克、效果遮挡等各种形式

信息安全已成为企业发展中不可忽视的重要一环&#xff0c;随着信息安全法规的日益严格和公众对个人隐私保护意识的不断提高&#xff0c;企业如何在保障业务顺畅进行的同时&#xff0c;满足信息安全和隐私保护的要求&#xff0c;成为了亟待解决的问题。美摄科技凭借其强大的技术…

手把手搭建 Nginx + VIP + Keepalived 高可用集群

文章目录 1、前置讲解1.1、常用方案1.2、实现流程 2、集群搭建2.1、环境准备2.2、关于 Nginx2.2.1、安装 Nginx2.2.2、调整 Nginx 首页 2.3、关于 Keepalived2.3.1、安装 Keepalived2.3.2、编写 Shell2.3.3、调整 KeepAlived 配置 1、前置讲解 其实阿里云ECS本身不支持使用服务…

Kubernetes集群持久化部署实践

WordPress 网站持久化部署 要持久化MariaDB 可以把 Deployment 改成了 StatefulSet&#xff0c;修改 YAML添加“serviceName”“volumeClaimTemplates”这两个字段&#xff0c;定义网络标识和 NFS 动态存储卷&#xff0c;然后在容器部分用“volumeMounts”挂载到容器里的数据目…

一文搞懂阻塞赋值和非阻塞赋值

目录 2.非阻塞赋值举例3.阻塞赋值举例4.总结 微信公众号获取更多FPGA相关源码&#xff1a; # 1.阻塞赋值和非阻塞赋值的区别&#xff1a; (1)阻塞赋值""&#xff0c;必须是阻塞赋值完成后&#xff0c;才进行下一条语句的执行&#xff1b;赋值一旦完成&#xff0c;等号…

docker环境中配置phpstorm php xdebug调试工具

本文介绍通过docker compose的使用方式 第一步&#xff1a;在php镜像中安装phpxdebug扩展&#xff0c;比如php7.4对应的是xdebug3.1.6 第二步&#xff1a;设置项目中的docker-compose.yml docker-compose 增加开启xdebug的环境变量,host.docker.internal是宿主机的地址&#…

MBTI:探索你的性格类型

人不走空 &#x1f308;个人主页&#xff1a;人不走空 &#x1f496;系列专栏&#xff1a;算法专题 ⏰诗词歌赋&#xff1a;斯是陋室&#xff0c;惟吾德馨 目录 &#x1f308;个人主页&#xff1a;人不走空 &#x1f496;系列专栏&#xff1a;算法专题 ⏰诗词歌…

4.音视频 AAC SSAASS

目录 AAC 1.什么是ADIF和ADTS&#xff1f; 2.ADTS的数据结构是怎样的&#xff1f; SSA/ASS 1.SSA/ASS的基本结构 AAC AAC(Advanced Audio Coding&#xff0c;高级音频编码)是一种声音数据的文件压缩格式。AAC分为ADIF和ADTS两种文件格式。 1.什么是ADIF和ADTS&#xff…

Day01 C语言嵌入式

目录 1、嵌入式知识体系 2、计算机的组成原理 3、计算机之父 4、C语言标准 5、关键字 6、字符编码 7、字符集 1、嵌入式知识体系 备注&#xff1a;图片来源于网络&#xff0c;为嵌入式知识体系思维导图&#xff0c;分为软件、硬件和理论知识三个部分&#xff0c;仅供各位…

【LeetCode】4,寻找两个正序数组中的中位数

题目地址 B站那个官方解答视频实在看不懂&#xff0c;我就根据他那个代码和自己的理解写一篇文章 1. 基本思路 在只有一个有序数组的时候&#xff0c;中位数把数组分割成两个部分。中位数的定义&#xff1a;中位数&#xff0c;又称中点数&#xff0c;中值。中位数是按顺序排列…

全志摄像头屏幕预览、录制(H264)

一、录像 使用dvr_test录制视频 运行dvr_test demo出现space not enought问题&#xff0c;修改/etc/dvrconfig.ini文件下对应的camera节点下cur_filedir属性无效 修改以下内容解决; 录制时出现摄像头画面异常&#xff0c;如下 摄像头型号与打印信息匹配&#xff1a; 但是出现画…