总账凭证之间核销的SQL
问题描述
最近有个很奇葩的需求,财务针对应收账款和收款的业务记账不是通过EBS AR模块做的,而是直接在GL总账录入凭证,但是又想出应收款账龄报表。我们面对的数据是一堆日记账,有借:应收科目的,有贷应收科目的,借代表有应收款,贷表示收款后核销应收,由于已经无从知道到底核销哪一笔,采用按借应收款的入账日期进行核销,考虑写个FUNCTION来逐笔计算核销,每笔日记账循环性能会有问题,所以想用SQL直接计算出借应收款核销余额。
解决方法
首先吐槽财务管理之混乱无序无规则。能出现这种记账方式居然还是实施了EBS的公司,叹息。
假设我们已经有一个表A,存储了科目是应收账款的journal line, A可以是个临时表,也可以用WITH AS 语句获得。下面介绍如何在A基础上得到核销金额和核销余额。基本的思路是:
1 将A按金额分组并且按组编号,金额>0的一组,<0的一组,>0代表应收款, <0代表收款准备要核销应收款的记录
2 应收款的一组组内按记账日期排序
3 收款的一组计算每组的收款总和
4 核销,计算核销金额和核销余额
具体的SQL如下:
with a as
(select .....),c AS(SELECT a.*,--按某些字段分组,根据业务需求,dense_rank()是各个组的编号,即组内每行记录的编号是一样的dense_rank() over(ORDER BY ou_name, currency_code, currency_conversion_rate, segment3, batch_name) group_numberFROM a),d AS(SELECT c.*,-- rn 是组内按记账日期排序序号rank() over(PARTITION BY c.group_number ORDER BY default_effective_date) rn, --计算每组记账日期排序每行前序金额总和,这样后面可以计算出该行能核销多少SUM(acc_dr_cr) over(PARTITION BY c.group_number ORDER BY default_effective_date RANGE BETWEEN unbounded preceding AND CURRENT ROW) sum_dr_cr FROM cWHERE acc_dr_cr > 0),
e AS(SELECT c.group_number,SUM(abs(acc_dr_cr)) sum_dr_crFROM cWHERE acc_dr_cr < 0GROUP BY group_number)
select f.*, f.applied_amt, f.acc_dr_cr-f.applied_amt amt_remaining
from
(SELECT d.*,CASEWHEN d.sum_dr_cr >= e.sum_dr_cr + d.acc_dr_cr THEN0WHEN d.sum_dr_cr < e.sum_dr_cr THENd.acc_dr_crELSEe.sum_dr_cr + d.acc_dr_cr - d.sum_dr_crEND applied_amt
FROM d,e
WHERE d.group_number = e.group_number(+)) f
where f.acc_dr_cr-applied_amt<>0
order by f.group_number,f.rn
总账凭证之间核销的SQL相关推荐
- 做总账凭证FB50报错“错误调用功能模块 CHECK_PLANTS_ABROAD_ACTIVE”
新建一公司,科目表等设置后,做总账凭证FB50,即报错如下: 错误调用功能模块 CHECK_PLANTS_ABROAD_ACTIVE 原因:公司数据中的"国家"没设好
- SAP新总账 凭证分割
ECC5.0以上的版本,因为新总账里有凭证分割功能,要求对科目进行分类,以便进行不同层次的核算. 路 径:IMG->Financial accounting global settings (N ...
- java sap总账凭证接口_SAP系统接口自动生成会计凭证且无需记账码的方法与流程...
本发明涉及sap系统接口自动生成会计凭证且无需记账码的方法,属于企业信息化管理技术领域. 背景技术: 在企业信息化管理领域,sap系统接口有着非常重要的意义,它担当着sap系统与其他信息系统的桥梁功能 ...
- access数据库删除两个日期之间 的数据 SQL语句
sql2005中sql语句为 DELETE FROM table WHERE ([date] BETWEEN '2011 - 9 - 19 0 : 00 : 00 ' AND '2011 - 9 - ...
- sql server 服务器之间传递消息,SQL Server 2008 Service Broker教程 - 无法接收消息(transmission_status中的异常)...
我正在学习如何使用SQL Server 2008 R2的Service Broker.在完成单个数据库中的完成对话教程时.在第1课之后,我成功创建了消息类型,合同,队列和服务.在第2课之后,我可能已经 ...
- oracle类型sql转为mysql_Oracle和MySql之间SQL区别(等效转换以及需要注意的问题)...
>本篇博文是Oracle和MySQL之间的等效SQL转换和不同,目前市面上没有转换两种SQL的工具,小编觉得以后也不一定会有,于是在业余时间整理了一下,如果有什么错误之处请留言告知,小编也是刚 ...
- sql示例_操作员之间SQL概述和示例
sql示例 We extract data from SQL Server tables along with various conditions. Usually, we have data in ...
- 在SQL Server中的数据库之间复制表的六种不同方法
In this article, you'll learn the key skills that you need to copy tables between SQL Server instanc ...
- cdm 图片 转_PowerDesigner之CDM、PDM、SQL之间转换
有关CDM.PDM.SQL之间转换以及不同数据库之间库表Sql的移植,首先要了解的是它们各自的用途.这里就简单的描述一下,不做详细的解释了. CDM:概念数据模型.CDM就是以其自身方式来描述E-R图 ...
最新文章
- SQL SERVER 2008自动备份维护计划
- 计算机丢失scecli,Server 2012 R2 SceCli 事件ID:1202( 0x534)解决方案
- mysql buff cache_Centos7 cache/buff过高处理方法
- python中round函数参数_python中关于round函数的小坑
- Linux 系统中的dvfs功能
- 深度学习笔记(5) 深层神经网络
- Python机器学习:多项式回归与模型泛化004为什么需要训练数据集和测试数据集
- RedHat 8.0软件包组--桌面类
- 程序猿的执业修养(七)——不要卖弄,多思慎言
- C#中你可能不知道的8件事(zz)
- 云计算学习一——网络基础
- Android简单实现高德地图显示及定位
- vs2010插件之VisualSVN
- 开博第一篇,为什么要开通博客,开通博客的申请理由
- 洛特卡-沃尔泰拉模型(Lotka-Volterra model)
- HTTP 000 CONNECTION FAILED for url <https://repo.anaconda.com/pkgs/main/linux-64/tqdm-4.64.0-py39h06
- PHP内置的MySQL函数总结
- 开源节流 企业部署SaaS最实用的价值
- Python3.6 安装PIL
- go get命令详解
热门文章
- 首席技术官(ChiefTechnologyOfficer)
- 中大计算机考研复试刷人太狠,为何考研初试分数很高的人在复试中被刷?这4个致命失误你犯了?...
- 面对封号潮,跨境收款如何做到不受牵连?
- Ubuntu下用C++调用opencv实现点阵字
- ☀️从0到1部署Hadoop☀️基于网站日志进行大数据分析【❤️建议收藏❤️】
- 计算机游戏32,腾讯宣布将32款游戏退市 2019中国十大科技成就公布
- 创维电视android,当贝市场创维酷开专用版
- 【JAVA】贪吃蛇的初步实现(三)
- LeeCode祖玛游戏
- 【深度好文】香港富豪卧底贫民窟:“你没出息,是因为不努力”害了多少程序员