付款申请单控制申请金额,1、每行记录不可高于采购订单金额减去已申请金额,2、申请时判断之前的已付款项,供应商采购发票有没有到齐。
付款申请单控制申请金额,1、每行记录不可高于采购订单金额减去已申请金额,2、申请时判断之前的已付款项,供应商采购发票有没有到齐,第一次付款时无付款申请记录可直接通过,当有付款记录后,若已付款项的发票还未催回则不允许再次申请。
采用触发器实现,语句如下:
CREATE TRIGGER [dbo].[tr_FHS_ApplyPayControl]
ON [dbo].[AP_ApplyPayVouchs]
FOR INSERT, UPDATE
AS
DECLARE @iSum MONEY; --采购订单原币价税合计
DECLARE @AppForPo MONEY; --付款申请单参照采购订单已申请金额
DECLARE @AppForBill MONEY; --付款申请单参照采购发票已申请金额
DECLARE @iApplyAmt_f MONEY; --付款申请单原币申请金额
DECLARE @cDefine27 MONEY; --付款申请单剩余可申请金额
DECLARE @cOrderNo VARCHAR(500); --采购订单号
DECLARE @iPOsID VARCHAR(500); --采购订单表体ID
DECLARE @AutoID VARCHAR(500); --付款申请单子表
DECLARE @cInvCode VARCHAR(500); --物料编码
DECLARE @cVCCode VARCHAR(500); --供应商分类编码,排除机加工直接做付款申请的情况
DECLARE @cSource VARCHAR(500); --单据来源
DECLARE @PID INT; --付款申请单子表PID
DECLARE @quantity INT; --付款申请单记录数
DECLARE @iApplyAmtTotal MONEY; --付款申请单原币申请总金额
--DECLARE @iSumTotal MONEY; --采购订单整单原币价税合计
DECLARE @iOriSumTotal MONEY; --采购发票原币价税合计
SELECT @iPOsID = iPOsID,
@AutoID = AutoID,
@iApplyAmt_f = iApplyAmt_f,
@cInvCode = cInvCode,
@cSource = cSource,
@cOrderNo = cOrderNo,
@PID = PID
FROM Inserted;
IF @cSource != '委外发票'
BEGIN
---采购订单已做付款申请金额
SELECT @iSum = PO_Podetails.iNatSum + 5, --采购订单本币价税合计
@AppForPo = ISNULL(
(
SELECT SUM(AP_ApplyPayVouchs.iApplyAmt_f)
FROM AP_ApplyPayVouchs
JOIN dbo.AP_ApplyPayVouch
ON AP_ApplyPayVouchs.PID = AP_ApplyPayVouch.PID
AND AP_ApplyPayVouch.cSource = '采购订单'
--AND AP_ApplyPayVouch.cSource!='委外发票'
WHERE AP_ApplyPayVouchs.iBVid = PO_Podetails.ID
AND AP_ApplyPayVouchs.AutoID != @AutoID
--AND AP_ApplyPayVouchs.cSource!='委外发票'
),
0
), --付款申请单参照采购订单已申请金额
@AppForBill = ISNULL(
(
SELECT SUM(AP_ApplyPayVouchs.iApplyAmt_f)
FROM dbo.AP_ApplyPayVouch
JOIN dbo.AP_ApplyPayVouchs
ON AP_ApplyPayVouchs.PID = AP_ApplyPayVouch.PID
AND AP_ApplyPayVouch.cSource = '采购发票'
--AND AP_ApplyPayVouch.cSource!='委外发票'
WHERE AP_ApplyPayVouchs.iPOsID = PO_Podetails.ID
AND AP_ApplyPayVouchs.AutoID != @AutoID
--AND AP_ApplyPayVouchs.cSource!='委外发票'
),
0
), --付款申请单参照采购发票已申请金额
@quantity =
(
SELECT COUNT(*)
FROM AP_ApplyPayVouchs
WHERE cOrderNo = @cOrderNo
AND PID NOT IN ( @PID )
)
FROM dbo.PO_Pomain
JOIN dbo.PO_Podetails
ON PO_Podetails.POID = PO_Pomain.POID
WHERE PO_Podetails.ID = @iPOsID;
SELECT @iApplyAmtTotal = ISNULL(SUM(iApplyAmt_f), 0), ---付款申请单原币申请金额
-- @iSumTotal =
--ISNULL((
-- SELECT SUM(iSum)
-- FROM dbo.PO_Pomain
-- JOIN dbo.PO_Podetails
-- ON PO_Podetails.POID = PO_Pomain.POID
-- AND PO_Pomain.cPOID = @cOrderNo
--),0), --采购订单整单原币价税合计
@iOriSumTotal = ISNULL(
(
SELECT SUM(iOriSum)
FROM dbo.PurBillVouchs
JOIN dbo.PurBillVouch
ON PurBillVouch.PBVID = PurBillVouchs.PBVID
AND PurBillVouch.cPBVVerifier IS NOT NULL
WHERE iPOsID IN
(
SELECT ID
FROM dbo.PO_Pomain
JOIN dbo.PO_Podetails
ON PO_Podetails.POID = PO_Pomain.POID
AND PO_Pomain.cPOID = @cOrderNo
)
),
0
) --采购发票原币价税合计
FROM AP_ApplyPayVouchs
WHERE cOrderNo = @cOrderNo
AND PID NOT IN ( @PID );
SELECT @cVCCode = cVCCode
FROM Vendor
WHERE cVenCode =
(
SELECT PO_Pomain.cVenCode
FROM dbo.PO_Pomain
JOIN dbo.PO_Podetails
ON PO_Podetails.POID = PO_Pomain.POID
AND PO_Podetails.ID = @iPOsID
);
SET @cDefine27 = (ISNULL(@iSum, 0) - ISNULL(@AppForPo, 0) - ISNULL(@AppForBill, 0));
UPDATE AP_ApplyPayVouchs
SET cDefine27 = @cDefine27 - 5 --由于采购订单原始金额浮动了5元,在此处去除浮动
WHERE AutoID = @AutoID;
IF (@quantity > 0 AND (@iApplyAmtTotal - @iOriSumTotal) > 0)
BEGIN
RAISERROR('采购订单%s供应商发票不足,请催回发票后再进行付款申请!', 16, 1, @cOrderNo);
END;
ELSE IF (((@cDefine27 - @iApplyAmt_f) < 0) AND @cVCCode NOT IN ( 'JJ01' ))
BEGIN
RAISERROR('物料%s申请金额超出可申请金额,请检查!', 16, 1, @cInvCode);
END;
END;
付款申请单控制申请金额,1、每行记录不可高于采购订单金额减去已申请金额,2、申请时判断之前的已付款项,供应商采购发票有没有到齐。相关推荐
- 付款申请单,如何追查跨级源头采购订单
案例背景: 采购订单 -> 收料通知单 -> 采购入库单 -> 应付单 -> 付款申请单,采购订单经过 多步下推 ,才生成付款申请单. 现在需要根据付款申请单的单据内码,寻找其 ...
- 采购申请、采购订单、供应商
账户EBAN 采购申请 BANFN 采购申请号 BNFPO 项目 EBELN 采购订单号 ...
- SAP中采购订单修改触发重新审批的相关控制逻辑及测试
关于SAP中采购订单(以下简称PO)金额修改与重新触发审批的关系.相信很多应用者都有类似的问题.需要掌握和了解其控制逻辑才能更好的满足业务控制需求.本文结合相关自身企业的应用经验和测试,梳理了一下. ...
- 采购订单审批与采购申请审批
1 采购申请可以有项目审批,采购订单只有抬头审批.意义:申请可能只同意部分行:申请可以同意部分数量,这个在申请转订单时实现. 2 无分类审批,只能做抬头审批,并且只有帐户类别,物料组,工厂,值4个选项 ...
- 用友U8查询采购订单明细可付款申请金额
SELECT * FROM dbo.PO_Pomain WHERE cPOID='IPO201116010' SELECT ID FROM dbo.PO_Podetails WHERE POID= ...
- oracle po:默认申请分组,PR自动创建PO采购订单:强制按照PR行进行分组
有时候,需要实现强制按照PR行来自动创建PO. 举个例子:假设2张PR,同一个物料,同一个需求日期等等的,在合并采购订单的时候,希望是2个PO行. 按照标准功能的处理逻辑,如果是同一个物料+需求日期( ...
- 金蝶付款申请单选单显示空白,但有合计数量
问题描述:付款申请单选单采购订单时,界面空白只显示一个合计数量.另外,付款申请单上查时,界面也是空白的. 处理方法:数据库中复制以下语句,执行(做好账套相关备份) insert into ICTabl ...
- SAP MM 按采购订单查询付款信息的报表?
SAP MM 按采购订单查询付款信息的报表? 上午给P3项目采购部门用户做了一个采购相关的报表的培训.培训过程中,客户的采购部门经理提出了一个问题:有没有报表能查询到各个采购订单的付款情况,显示采购订 ...
- 遇到问题:从采购申请 复制 建立分类的采购订单的时候, 报错: 采购申请未批准。
遇到问题:从采购申请 复制 建立分类的采购订单的时候, 报错: 采购申请未批准. 解决: google上搜索可能的 关于批准采购订单的 内容. 找到2个重要信息: MM常用事务码(T Code)清单 ...
最新文章
- MySQL高级 - 存储引擎 - 特性
- mysql 查询语句_MySQL相关(一)- 一条查询语句是如何执行的
- ZK的实际应用:MVVM –加载和渲染数据
- bootstrap 取消_学习写个网站(5)Bootstrap学习2
- Kotlin学习笔记 第四章Kotlin调用Java
- 怎么在虚拟机上安装linux mint,如何在VirtualBox上安装Linux Mint?
- cin.ignore()函数的用法
- Android Multimedia框架总结(三)MediaPlayer中创建到setDataSource过程
- 关于for循环的javascript习题
- VS添加lib库文件步骤
- 外包IT运维面临的问题及挑战
- bodymovin导出没有html5,Bodymovin导出Json文件避坑指南
- 项目管理十大知识领域之项目范围管理
- python关键字保留字
- PT1000 电桥测温
- 【数据分析】销售案例分析——分解目标
- php 微信多客服系统,如何使用微信公众平台开发模式实现多客服
- CDN(内容分发网络)
- edk2中的fdf文件简介
- 无线传感器网络路由协议
热门文章
- 请求被挂起导致页面加载缓慢
- 直播软件源码开发,直播间内消息系统的实现
- 批量修改文件名中的一部分,图文教程
- Conrad Spirit Of Innovation Challenge康莱德创业挑战赛详细介绍
- 简单题-不用库函数,求解一个数字的平方根
- 题目:海滩上有一堆桃子,五只猴子来分。第一只猴子把这堆桃子凭据分为五份,多了一个,这只猴子把多的一个扔入海中,拿走了一份。第二只猴子把剩下的桃子又平均分成五份,又多了一个,它同样把多的一个扔入海中,拿
- 小程序setdata优化_支付宝小程序扩展能力 附录 1:优化 setData 逻辑方案明细
- 信号与电源完整性4:网络间的串扰分析及解决方案
- 灰蓝色商务数据图表合集PPT模板
- 电子标签芯片的组成及功能