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

实际界面

结果

源代码

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

如有帮助

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Python | Leetcode Python题解之第149题直线上最多的点数

题目&#xff1a; 题解&#xff1a; class Solution:def maxPoints(self, points: List[List[int]]) -> int:n len(points)if n < 2:return nres 2for i in range(n):x1, y1 points[i][0], points[i][1]has {}for j in range(i 1, n):x2, y2 points[j][0], points…

[Java基本语法] 异常

&#x1f338;个人主页:https://blog.csdn.net/2301_80050796?spm1000.2115.3001.5343 &#x1f3f5;️热门专栏:&#x1f355; Collection与数据结构 (92平均质量分)https://blog.csdn.net/2301_80050796/category_12621348.html?spm1001.2014.3001.5482 &#x1f9c0;线程与…

从0到1:手动测试迈向自动化——手机web应用的自动化测试工具

引言&#xff1a; 在当今移动互联网时代&#xff0c;手机web应用已经成为人们生活中不可或缺的一部分。为了保证手机web应用的质量和稳定性&#xff0c;自动化测试工具变得十分重要。本文将介绍手机web应用自动化测试工具的选择和使用&#xff0c;提供一份超详细且规范的指南&a…

ChatGPT魔法背后的原理:如何做到词语接龙式输出?

介绍 我们都知道 ChatGPT 是 AIGC 工具&#xff0c;其实就是生成式人工智能。大家有没有想过这些问题 &#x1f914;️&#xff1a; 1、我们输入一段话&#xff0c;就可以看见它*噼里啪啦的一顿输出*&#xff0c;那么它的原理到底是什么&#xff1f; 2、到底它是怎么锁定这些…

SpringCloud之Zuul源码解析

Zuul 是在云平台上提供动态路由&#xff0c;监控&#xff0c;弹性&#xff0c;安全等边缘服务的框架。Zuul 相当于是设备和 Netflix 流应用的 Web 网站后端所有请求的前门。Zuul 可以适当的对多个 Amazon Auto Scaling Groups 进行路由请求。 其架构如下图所示&#xff1a; Zuu…

Oracle数据库安装-Linux

Oracle数据库安装-Linux 1、修改CentOS系统标志&#xff08;oracle默认不支持CentOS&#xff09;2、安装oracle 1、修改CentOS系统标志&#xff08;oracle默认不支持CentOS&#xff09; 1.1、备份原有的配置文件&#xff0c;编辑文件&#xff0c;将原有内容删除&#xff0c;替…

hrm人力管理系统源码(从招聘到薪酬的全过程人力管控系统)

一、项目介绍 一款全源码可二开&#xff0c;可基于云部署、私有部署的企业级数字化人力资源管理系统&#xff0c;涵盖了招聘、人事、考勤、绩效、社保、酬薪六大模块&#xff0c;解决了从人事招聘到酬薪计算的全周期人力资源管理&#xff0c;符合当下大中小型企业组织架构管理运…

Linux网络-HttpServer的实现

文章目录 前言一、请求报文的解析URL的解析 二、响应报文的发送Content-LenthConten-TypeCookie和Set-CookieCookie的风险 三、尝试发送一个HTML网页404网页Location 重定向 四、浏览器的多次请求行为总结 前言 之前我们简单理解了一下Http协议&#xff0c;本章我们将在LInux下…

Unity OpenCVForUnity 安装和第一个案例详解 <一>

目录 一、资源简介 二、安装使用 1.下载案例Demo 2.移动StreamingAssets文件夹 3.添加场景 三、今日案例 1.案例Texture2DToMat Example 2.什么是Mat&#xff1f; 3.如何把Texture2D变成Mat &#xff08;1&#xff09;.初始化Mat &#xff08;2&#xff09;.Cv_…

OpenAI函数调用:使用Assistants API函数工具的一个示例

Are you looking to expand GPTs capabilities? Check out this tutorial for a complete example of an AI Assistant that can send emails whenever we ask it to. 您是否希望扩展GPT的功能&#xff1f;查看这个教程&#xff0c;它提供了一个完整的示例&#xff0c;展示了…

Docker中部署Jenkins+Pipline流水线基础语法入门

场景 DockerCompose中部署Jenkins&#xff08;Docker Desktop在windows上数据卷映射&#xff09;&#xff1a; DockerCompose中部署Jenkins&#xff08;Docker Desktop在windows上数据卷映射&#xff09;-CSDN博客 DockerComposeJenkinsPipeline流水线打包SpringBoot项目(解…

AlmaLinux 8.10 x86_64 OVF (sysin) - VMware 虚拟机模板

AlmaLinux 8.10 x86_64 OVF (sysin) - VMware 虚拟机模板 AlmaLinux release 8.10 请访问原文链接&#xff1a;https://sysin.org/blog/almalinux-8-ovf/&#xff0c;查看最新版。原创作品&#xff0c;转载请保留出处。 作者主页&#xff1a;sysin.org 2023.03.08 更新&…

EasyExcel:如何快速生成一个只含有表头的模板Excel

&#x1f341; 作者&#xff1a;知识浅谈&#xff0c;CSDN签约讲师&#xff0c;CSDN博客专家&#xff0c;华为云云享专家&#xff0c;阿里云专家博主 &#x1f4cc; 擅长领域&#xff1a;全栈工程师、爬虫、ACM算法&#xff0c;大数据&#xff0c;深度学习 &#x1f492; 公众号…

PAT B1016. 部分A+B

题目描述 正整数A的“D(为1位整数&#xff09;部分”定义为由A中所有DA组成的新整数Px。例如:给定A3862767,DA6&#xff0c;则A的“6部分”PA是66,因为A中有2个6。 现给定A、D、B、DB,请编写程序计算PAPB。 输入格式 在一行中依次输入A、DA、B、DB&#xff0c;中间以空格分隔,…

秋招突击——6/14——复习{(树形DP)树的最长路径}——新作{非递归求二叉树的深度、重复区间合并}

文章目录 引言复习树形DP——树的最长路径 新作使用dfs非递归计算二叉树的深度多个区间合并删除问题实现思路实现代码参考思路 总结 引言 这两天可能有点波动&#xff0c;但是算法题还是尽量保证复习和新作一块弄&#xff0c;数量上可能有所差别。 复习 树形DP——树的最长路…

弹幕逆向signature、a_bogus

声明 本文章中所有内容仅供学习交流使用&#xff0c;不用于其他任何目的&#xff0c;抓包内容、敏感网址、数据接口等均已做脱敏处理&#xff0c;严禁用于商业用途和非法用途&#xff0c;否则由此产生的一切后果均与作者无关&#xff01; 本文章未经许可禁止转载&a…

qmt量化交易策略小白学习笔记第32期【qmt编程之获取行业概念数据--如何获取迅投行业成分股数据】

qmt编程之获取迅投行业成分股数据 qmt更加详细的教程方法&#xff0c;会持续慢慢梳理。 也可找寻博主的历史文章&#xff0c;搜索关键词查看解决方案 &#xff01; 感谢关注&#xff0c;咨询免费开通量化回测与获取实盘权限&#xff0c;欢迎和博主联系&#xff01; 获取迅投…

LeetCode | 387.字符串中的第一个唯一字符

这道题可以用字典解决&#xff0c;只需要2次遍历字符串&#xff0c;第一次遍历字符串&#xff0c;记录每个字符出现的次数&#xff0c;第二次返回第一个出现次数为1的字符的下标&#xff0c;若找不到则返回-1 class Solution(object):def firstUniqChar(self, s):""…

[大模型]Qwen2-7B-Instruct 接入 LangChain 搭建知识库助手

环境准备 在 autodl 平台中租赁一个 3090 等 24G 显存的显卡机器&#xff0c;如下图所示镜像选择 PyTorch–>2.1.0–>3.10(ubuntu20.04)–>12.1 接下来打开刚刚租用服务器的 JupyterLab&#xff0c;并且打开其中的终端开始环境配置、模型下载和运行 demo。 pip 换源…

2024 年最新 Python 调用 OpenAi 详细教程实现问答、图像合成、图像理解、语音合成、语音识别(详细教程)

OpenAi 环境安装 首先确保您的计算机上已经安装了 Python。您可以从 Python 官方网站下载并安装最新版本 Python。安装时&#xff0c;请确保勾选 “Add Python to PATH” &#xff08;添加环境变量&#xff09;选项&#xff0c;以便在 cmd 命令行中直接使用 Python。 安装 Op…