问题描述

最近有个很奇葩的需求,财务针对应收账款和收款的业务记账不是通过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相关推荐

  1. 做总账凭证FB50报错“错误调用功能模块 CHECK_PLANTS_ABROAD_ACTIVE”

    新建一公司,科目表等设置后,做总账凭证FB50,即报错如下: 错误调用功能模块 CHECK_PLANTS_ABROAD_ACTIVE 原因:公司数据中的"国家"没设好

  2. SAP新总账 凭证分割

    ECC5.0以上的版本,因为新总账里有凭证分割功能,要求对科目进行分类,以便进行不同层次的核算. 路 径:IMG->Financial accounting global settings (N ...

  3. java sap总账凭证接口_SAP系统接口自动生成会计凭证且无需记账码的方法与流程...

    本发明涉及sap系统接口自动生成会计凭证且无需记账码的方法,属于企业信息化管理技术领域. 背景技术: 在企业信息化管理领域,sap系统接口有着非常重要的意义,它担当着sap系统与其他信息系统的桥梁功能 ...

  4. access数据库删除两个日期之间 的数据 SQL语句

    sql2005中sql语句为 DELETE FROM table WHERE ([date] BETWEEN '2011 - 9 - 19 0 : 00 : 00 ' AND '2011 - 9 - ...

  5. sql server 服务器之间传递消息,SQL Server 2008 Service Broker教程 - 无法接收消息(transmission_status中的异常)...

    我正在学习如何使用SQL Server 2008 R2的Service Broker.在完成单个数据库中的完成对话教程时.在第1课之后,我成功创建了消息类型,合同,队列和服务.在第2课之后,我可能已经 ...

  6. oracle类型sql转为mysql_Oracle和MySql之间SQL区别(等效转换以及需要注意的问题)...

    >本篇博文是Oracle和MySQL之间的等效SQL转换和不同,目前市面上没有转换两种SQL的工具,小编觉得以后也不一定会有,于是在业余时间整理了一下,如果有什么错误之处请留言告知,小编也是刚 ...

  7. sql示例_操作员之间SQL概述和示例

    sql示例 We extract data from SQL Server tables along with various conditions. Usually, we have data in ...

  8. 在SQL Server中的数据库之间复制表的六种不同方法

    In this article, you'll learn the key skills that you need to copy tables between SQL Server instanc ...

  9. cdm 图片 转_PowerDesigner之CDM、PDM、SQL之间转换

    有关CDM.PDM.SQL之间转换以及不同数据库之间库表Sql的移植,首先要了解的是它们各自的用途.这里就简单的描述一下,不做详细的解释了. CDM:概念数据模型.CDM就是以其自身方式来描述E-R图 ...

最新文章

  1. SQL SERVER 2008自动备份维护计划
  2. 计算机丢失scecli,Server 2012 R2 SceCli 事件ID:1202( 0x534)解决方案
  3. mysql buff cache_Centos7 cache/buff过高处理方法
  4. python中round函数参数_python中关于round函数的小坑
  5. Linux 系统中的dvfs功能
  6. 深度学习笔记(5) 深层神经网络
  7. Python机器学习:多项式回归与模型泛化004为什么需要训练数据集和测试数据集
  8. RedHat 8.0软件包组--桌面类
  9. 程序猿的执业修养(七)——不要卖弄,多思慎言
  10. C#中你可能不知道的8件事(zz)
  11. 云计算学习一——网络基础
  12. Android简单实现高德地图显示及定位
  13. vs2010插件之VisualSVN
  14. 开博第一篇,为什么要开通博客,开通博客的申请理由
  15. 洛特卡-沃尔泰拉模型(Lotka-Volterra model)
  16. HTTP 000 CONNECTION FAILED for url <https://repo.anaconda.com/pkgs/main/linux-64/tqdm-4.64.0-py39h06
  17. PHP内置的MySQL函数总结
  18. 开源节流 企业部署SaaS最实用的价值
  19. Python3.6 安装PIL
  20. go get命令详解

热门文章

  1. 首席技术官(ChiefTechnologyOfficer)
  2. 中大计算机考研复试刷人太狠,为何考研初试分数很高的人在复试中被刷?这4个致命失误你犯了?...
  3. 面对封号潮,跨境收款如何做到不受牵连?
  4. Ubuntu下用C++调用opencv实现点阵字
  5. ☀️从0到1部署Hadoop☀️基于网站日志进行大数据分析【❤️建议收藏❤️】
  6. 计算机游戏32,腾讯宣布将32款游戏退市 2019中国十大科技成就公布
  7. 创维电视android,当贝市场创维酷开专用版
  8. 【JAVA】贪吃蛇的初步实现(三)
  9. LeeCode祖玛游戏
  10. 【深度好文】香港富豪卧底贫民窟:“你没出息,是因为不努力”害了多少程序员