付款申请单控制申请金额,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、申请时判断之前的已付款项,供应商采购发票有没有到齐。相关推荐

  1. 付款申请单,如何追查跨级源头采购订单

    案例背景: 采购订单 -> 收料通知单 -> 采购入库单 -> 应付单 -> 付款申请单,采购订单经过 多步下推 ,才生成付款申请单. 现在需要根据付款申请单的单据内码,寻找其 ...

  2. 采购申请、采购订单、供应商

    账户EBAN 采购申请 BANFN 采购申请号                              BNFPO 项目 EBELN 采购订单号                            ...

  3. SAP中采购订单修改触发重新审批的相关控制逻辑及测试

    关于SAP中采购订单(以下简称PO)金额修改与重新触发审批的关系.相信很多应用者都有类似的问题.需要掌握和了解其控制逻辑才能更好的满足业务控制需求.本文结合相关自身企业的应用经验和测试,梳理了一下. ...

  4. 采购订单审批与采购申请审批

    1 采购申请可以有项目审批,采购订单只有抬头审批.意义:申请可能只同意部分行:申请可以同意部分数量,这个在申请转订单时实现. 2 无分类审批,只能做抬头审批,并且只有帐户类别,物料组,工厂,值4个选项 ...

  5. 用友U8查询采购订单明细可付款申请金额

    SELECT * FROM  dbo.PO_Pomain WHERE cPOID='IPO201116010' SELECT ID FROM  dbo.PO_Podetails WHERE POID= ...

  6. oracle po:默认申请分组,PR自动创建PO采购订单:强制按照PR行进行分组

    有时候,需要实现强制按照PR行来自动创建PO. 举个例子:假设2张PR,同一个物料,同一个需求日期等等的,在合并采购订单的时候,希望是2个PO行. 按照标准功能的处理逻辑,如果是同一个物料+需求日期( ...

  7. 金蝶付款申请单选单显示空白,但有合计数量

    问题描述:付款申请单选单采购订单时,界面空白只显示一个合计数量.另外,付款申请单上查时,界面也是空白的. 处理方法:数据库中复制以下语句,执行(做好账套相关备份) insert into ICTabl ...

  8. SAP MM 按采购订单查询付款信息的报表?

    SAP MM 按采购订单查询付款信息的报表? 上午给P3项目采购部门用户做了一个采购相关的报表的培训.培训过程中,客户的采购部门经理提出了一个问题:有没有报表能查询到各个采购订单的付款情况,显示采购订 ...

  9. 遇到问题:从采购申请 复制 建立分类的采购订单的时候, 报错: 采购申请未批准。

    遇到问题:从采购申请 复制 建立分类的采购订单的时候, 报错: 采购申请未批准. 解决: google上搜索可能的 关于批准采购订单的 内容. 找到2个重要信息: MM常用事务码(T Code)清单 ...

最新文章

  1. MySQL高级 - 存储引擎 - 特性
  2. mysql 查询语句_MySQL相关(一)- 一条查询语句是如何执行的
  3. ZK的实际应用:MVVM –加载和渲染数据
  4. bootstrap 取消_学习写个网站(5)Bootstrap学习2
  5. Kotlin学习笔记 第四章Kotlin调用Java
  6. 怎么在虚拟机上安装linux mint,如何在VirtualBox上安装Linux Mint?
  7. cin.ignore()函数的用法
  8. Android Multimedia框架总结(三)MediaPlayer中创建到setDataSource过程
  9. 关于for循环的javascript习题
  10. VS添加lib库文件步骤
  11. 外包IT运维面临的问题及挑战
  12. bodymovin导出没有html5,Bodymovin导出Json文件避坑指南
  13. 项目管理十大知识领域之项目范围管理
  14. python关键字保留字
  15. PT1000 电桥测温
  16. 【数据分析】销售案例分析——分解目标
  17. php 微信多客服系统,如何使用微信公众平台开发模式实现多客服
  18. CDN(内容分发网络)
  19. edk2中的fdf文件简介
  20. 无线传感器网络路由协议

热门文章

  1. 请求被挂起导致页面加载缓慢
  2. 直播软件源码开发,直播间内消息系统的实现
  3. 批量修改文件名中的一部分,图文教程
  4. Conrad Spirit Of Innovation Challenge康莱德创业挑战赛详细介绍
  5. 简单题-不用库函数,求解一个数字的平方根
  6. 题目:海滩上有一堆桃子,五只猴子来分。第一只猴子把这堆桃子凭据分为五份,多了一个,这只猴子把多的一个扔入海中,拿走了一份。第二只猴子把剩下的桃子又平均分成五份,又多了一个,它同样把多的一个扔入海中,拿
  7. 小程序setdata优化_支付宝小程序扩展能力 附录 1:优化 setData 逻辑方案明细
  8. 信号与电源完整性4:网络间的串扰分析及解决方案
  9. 灰蓝色商务数据图表合集PPT模板
  10. 电子标签芯片的组成及功能