【问题描述】

专业版付款单选择源单采购发票保存时提示:付款单中包含核销金额大于未核销金额的采购发票,不允许保存!

专业版付款单选择源单采购发票保存时提示:付款单中包含核销金额大于未核销金额的采购发票,不允许保存!-编程日记

【原因分析】

原因:所选采购发票表头的已核销金额及未核销金额与发票的实际核销金额不符,系统判定单据不允许保存;

【解决方案】

可参考以下脚本执行处理:

update ICPurchase set FPayAmountFor = rp.ftotal

from ICPurchase icc inner join

(

select ic.FInterID,ic.fbillno,ic.FPayAmountFor,isnull(ftotal,0) ftotal –,FPayAmountFor-FTotal ‘差异’ 

–ic.FInterID ‘发票内码’,ic.fbillno ‘发票编码’,ic.FPayAmountFor ‘账面已付金额’,FTotal ‘实际发生付款金额’

from ICPurchase ic

left join (

 Select FInterID, sum(FAmount) as FTotal From ( 

 Select e.FInterID as FInterID,ISNull(e.FBillSettleAmountFor,0) as FAmount –‘付款单’

 from t_RP_PBill t  Inner Join t_RP_PBillEntry e On t.FBillID=e.FBillID 

 Left Join t_Account a ON a.FAccountID=t.FAcctId 

 Left Join t_Currency c ON e.FBillCurrencyID=c.FCurrencyID 

 Where e.FClassID_SRC IN (1000003,1000004) 

 Union All 

 Select u.FInterID as FInterID,-1*isnull(e.FBillSettleAmountFor,0) as FAmount –‘退款单’

 from t_RP_PBill t 

 inner join t_RP_PBillEntry e On t.FBillID=e.FBillID 

 inner join (Select * from t_RP_PBillEntry Where FClassID_SRC IN (1000003,1000004)) u On e.FEntryID_SRC=u.FEntryID and u.FBillID=e.FInterID 

 Left Join t_Currency c ON e.FBillCurrencyID=c.FCurrencyID 

 Inner Join t_Account a ON a.FAccountID=t.FAcctId 

 Where t.FPayTypeid = 1010 

 Union All 

 select FContactID as FInterID,isnull(e.FCheckAmountFor,0) as FAmount –‘核销单’

 from T_RP_CheckInfo t  Inner Join T_RP_CheckInfoEntry e ON t.FInterID=e.FInterID 

 Left Join t_Currency c ON e.FCurrencyID=c.FCurrencyID 

 Where ((t.FCheckType = 0 And e.FEntryType = 1) Or (t.FCheckType = 1 And e.FEntryType = 0) Or (t.FCheckType = 3 And e.FEntryType = 1)) 

 And FContactType IN (75,76) 

 Union All

 Select v1.FInvoiceID as FInterID,isnull(e.FBillSettleAmountFor,0) as FAmount –‘付款单’

 from t_RP_PBill t Inner Join t_RP_PBillEntry e On t.FBillID=e.FBillID 

 Left Join t_RP_CheckInfoEntry v1 on v1.FInterID=e.FInterID and v1.FNo=e.FEntryID_HXD_SRC 

 Left Join t_RP_CheckInfo v2 on v1.FInterID=v2.FInterID 

 Left Join t_Currency c ON e.FBillCurrencyID=c.FCurrencyID 

 Inner Join t_Account a ON a.FAccountID=t.FAcctId 

 Where e.FClassID_SRC = 1000093 and v1.FInvoiceType IN (75,76) And v2.FCheckType=5 

 Union All 

 Select v1.FInvoiceID as FInterID,-1*isnull(e.FBillSettleAmountFor,0) as FAmount –‘退款单’

 from t_RP_PBill t Inner Join t_RP_PBillEntry e On t.FBillID=e.FBillID 

 Inner Join t_RP_PBillEntry u On  e.FEntryID_SRC=u.FEntryID 

 Left Join t_RP_CheckInfoEntry v1 on v1.FInterID=u.FInterID and v1.FNo=u.FEntryID_HXD_SRC 

 Left Join t_RP_CheckInfo v2 on v1.FInterID=v2.FInterID 

 Left Join t_Currency c ON e.FBillCurrencyID=c.FCurrencyID 

 Inner Join t_Account a ON a.FAccountID=t.FAcctId 

 Where t.FPayTypeid =1010  AND u.FClassID_SRC=1000093 AND v1.FInvoiceType IN (75,76) And v2.FCheckType=5 

 Union All 

 select v1.FInvoiceID as FInterID,isnull(v1.FCheckAmountFor,0) as FAmount –‘核销单’ 

 from T_RP_CheckInfo t  Inner Join T_RP_CheckInfoEntry e ON t.FInterID=e.FInterID 

 Inner Join T_RP_CheckInfoEntry v1 on v1.FContactID=e.FInterID and v1.FHeIndex=e.FNo 

 Inner Join T_RP_CheckInfo v2 on v2.FInterID=v1.FInterID 

 Inner Join t_Currency c ON e.FCurrencyID=c.FCurrencyID 

 Where ((v2.FCheckType = 0 And v1.FEntryType = 1) Or (v2.FCheckType = 1 And v1.FEntryType = 0) Or (v2.FCheckType = 3 And v1.FEntryType = 1)) 

 And v1.FInvoiceType IN (75,76) And v1.FContactType=1006 AND t.FCheckType=5 

 Union All

 SELECT b.FInvoiceID as FInterID,isnull(b.FCheckAmountFor, 0) – isnull(b.FMeCheckAmountFor, 0) as FAmount  –应付转应付(未核销金额不为0的)上面没有包含未核销金额

 FROM T_RP_CheckInfo a LEFT JOIN

      T_RP_CheckInfoEntry b ON a.FInterID = b.FInterID 

 WHERE a.FCheckType = 5  AND b.FInvoiceType IN (75,76) and isnull(b.FCheckAmountFor, 0) – isnull(b.FMeCheckAmountFor, 0) <> 0

 ) as pp

group by FInterID ) t on t.FInterID=ic.FInterID

where ic.FPayAmountFor-isnull(t.ftotal,0)<>0

 ) rp on rp.FInterId=icc.FInterId

 where rp.FPayAmountFor-isnull(rp.ftotal,0)<>0 and icc.FPOStyle<>251 

go

 update ICPurchase set FUnPayAmountFor = FPurchaseAmountFor – FPayAmountFor 

go

【注意事项】

正式账套执行脚本前请先做好备份,建议待在测试账套中核实无误后再在正式账套中执行。