应收单补收款计划SQL参考原创
金蝶云社区-jessie_w
jessie_w
71人赞赏了该文章 505次浏览 未经作者许可,禁止转载编辑于2024年10月12日 17:30:51
summary-icon摘要由AI智能服务提供

本文介绍了在历史单据处理中,针对收款计划分录为空或收款条件修改后的修复方案。文本详细说明了修复过程中需要注意的事项,如适用于单到期日情况、禁止对已下推收款单或已收款核销过的单据修改收款计划分录和条件,并提供了详细的SQL语句操作步骤,包括备份原收款计划表、删除原收款计划、查询并插入新收款计划分录,并特别强调了重置种子表以避免主键冲突的重要性。最后,提供了应付单补付款计划的SQL语句参考。

业务场景:

历史单据引入时收款计划分录为空,无法正常参与核销,需要补收款计划分录;

或者是单据修改过收款条件,比如从按到期日收款修改为按物料明细收款的收款条件,希望重新生成收款计划。

(不过不太建议历史单据修改收款条件,如果和订单不一致,会影响预收自动核销)


注意事项:

适用于单到期日的情况,如果收款条件设置了多到期日不适用!!!

已下推收款单或已收款核销过的单据绝对不允许修改收款计划分录也不允许修改收款条件!!!

否则导致数据问题总部不予处理!!!


修复方案:

通过明细按对应的收款条件生成计划分录并插入到收款计划表(原来有收款计划分录的情况下需要先删除涉及单据的收款计划分录行重新插入

(新收款计划的到期日和单据头到期日保持一致


如下SQL语句仅供参考!!!更新前建议做全表备份!!!

--1. 备份语句参考
SELECT * INTO T_AR_RECEIVABLEPLAN_SQLBAK_20230517 FROM T_AR_RECEIVABLEPLAN

--(1.5) 修改过收款条件的单据需要先将原来的收款计划删除然后再插入新的收款计划
DELETE T_AR_RECEIVABLEPLAN
WHERE FID IN (SELECT FID FROM T_AR_RECEIVABLE WHERE FBILLNO IN ('单据编号1','单据编号2'))

--2. 查询价税合计不为0,且无计划分录的应收单并插入临时表
--字段说明:FBILLNO单据编号,FPAYCONDITON收款条件,FRECMETHOD收款方式
SELECT DISTINCT A.FBILLNO,A.FID,A.FENDDATE,A.FPAYCONDITON,B.FRECMETHOD INTO #TEMPALL
FROM T_AR_RECEIVABLE A
LEFT JOIN T_BD_RECCONDITION B ON A.FPAYCONDITON=B.FID
WHERE FALLAMOUNTFOR<>0 AND NOT EXISTS (SELECT 1 FROM T_AR_RECEIVABLEPLAN WHERE FID=A.FID)

--3. 查询并记录下当前计划分录表最大的分录内码
SELECT MAX(FENTRYID) FROM T_AR_RECEIVABLEPLAN  --比如为100001

--4. 查询并记录下当前分录种子表的值
SELECT IDENT_CURRENT('Z_AR_RECEIVABLEPLAN')  --比如为100001,一般情况下大于等于第3步的最大分录内码

--5. 插入记录前重置种子表  重要!!!!!!
--此步目的是不影响后续单据正常保存。
--新单据的分录内码都是从种子表取数,如果不重置种子表后续可能出现主键冲突,前台就无法正常保存单据。
--重置的值=第4步种子表当前值+需要插入记录的行数+1
DBCC CHECKIDENT (Z_AR_RECEIVABLEPLAN, RESEED, 100030)  --将种子表重置为100030


--6. 补收款计划分录  如下语句中SELECT 后面有一个100001 记得需要按实际情况修改为和第4步种子表的当前值一致  重要!!!!!!
--如下是按标准产品字段插入,如存在二开字段携带到计划请按需修改语句
--6.1 收款条件的收款方式为按物料明细收款
INSERT INTO T_AR_RECEIVABLEPLAN 
(FENTRYID,FID,FSEQ,FENDDATE,FPAYRATE,FPAYAMOUNTFOR,FPAYAMOUNT,FWRITTENOFFSTATUS,FWRITTENOFFAMOUNTFOR,FWRITTENOFFAMOUNT,FNOTWRITTENOFFAMOUNTFOR,FNOTWRITTENOFFAMOUNT,FRELATEHADPAYAMOUNT,FAPPLYAMOUNT,FORDERBILLNO,FRECEIVABLEENTRYID,FMATERIALID,FMATERIALSEQ,FSALEORDERID,FMOBRECAMOUNTFOR,FNOTVERIFICATEAMOUNT,FPRICE,FQTY,FPRICEUNITID,FCOSTID_P,FREMARK)
SELECT 
100001+ROW_NUMBER() OVER(ORDER BY A.FID) FENTRYID,C.FID,ROW_NUMBER() OVER(PARTITION BY A.FID ORDER BY A.FID) FSEQ,C.FENDDATE,100 FPAYRATE,
B.FALLAMOUNTFOR FPAYAMOUNTFOR, B.FALLAMOUNT FPAYAMOUNT,'A' FWRITTENOFFSTATUS,0 FWRITTENOFFAMOUNTFOR,0 FWRITTENOFFAMOUNT,
B.FALLAMOUNTFOR FNOTWRITTENOFFAMOUNTFOR,B.FALLAMOUNT FNOTWRITTENOFFAMOUNT,0 FRELATEHADPAYAMOUNT,0 FAPPLYAMOUNT,FORDERNUMBER FORDERBILLNO,
FORDERENTRYID FRECEIVABLEENTRYID,B.FMATERIALID FMATERIALID,0 FMATERIALSEQ,0 FSALEORDERID,0 FMOBRECAMOUNTFOR,
B.FALLAMOUNTFOR FNOTVERIFICATEAMOUNT,0 FPRICE,B.FPRICEQTY FQTY,0 FPRICEUNITID,0 FCOSTID_P,'' FREMARK
FROM #TEMPALL A
LEFT JOIN (
	SELECT FID,FORDERNUMBER,FORDERENTRYID,FMATERIALID,SUM(FALLAMOUNTFOR) FALLAMOUNTFOR,SUM(FALLAMOUNT)  FALLAMOUNT,SUM(FPRICEQTY)  FPRICEQTY
	FROM T_AR_RECEIVABLEENTRY 
	GROUP BY FORDERNUMBER,FORDERENTRYID,FMATERIALID,FID
) B ON A.FID=B.FID
LEFT JOIN T_AR_RECEIVABLE C ON B.FID=C.FID
WHERE A.FRECMETHOD=3


--6.2 收款条件的收款方式为按订单收款
INSERT INTO T_AR_RECEIVABLEPLAN 
(FENTRYID,FID,FSEQ,FENDDATE,FPAYRATE,FPAYAMOUNTFOR,FPAYAMOUNT,FWRITTENOFFSTATUS,FWRITTENOFFAMOUNTFOR,FWRITTENOFFAMOUNT,FNOTWRITTENOFFAMOUNTFOR,FNOTWRITTENOFFAMOUNT,FRELATEHADPAYAMOUNT,FAPPLYAMOUNT,FORDERBILLNO,FRECEIVABLEENTRYID,FMATERIALID,FMATERIALSEQ,FSALEORDERID,FMOBRECAMOUNTFOR,FNOTVERIFICATEAMOUNT,FPRICE,FQTY,FPRICEUNITID,FCOSTID_P,FREMARK)
SELECT 
100001+ROW_NUMBER() OVER(ORDER BY A.FID) FENTRYID,A.FID,ROW_NUMBER() OVER(PARTITION BY A.FID ORDER BY A.FID) FSEQ,A.FENDDATE,100 FPAYRATE,
B.FALLAMOUNTFOR FPAYAMOUNTFOR, B.FALLAMOUNT FPAYAMOUNT,'A' FWRITTENOFFSTATUS,0 FWRITTENOFFAMOUNTFOR,0 FWRITTENOFFAMOUNT,
B.FALLAMOUNTFOR FNOTWRITTENOFFAMOUNTFOR,B.FALLAMOUNT FNOTWRITTENOFFAMOUNT,0 FRELATEHADPAYAMOUNT,0 FAPPLYAMOUNT,B.FORDERNUMBER FORDERBILLNO,
0 FRECEIVABLEENTRYID,0 FMATERIALID,0 FMATERIALSEQ,0 FSALEORDERID,0 FMOBRECAMOUNTFOR,
B.FALLAMOUNTFOR FNOTVERIFICATEAMOUNT,0 FPRICE,0 FQTY,0 FPRICEUNITID,0 FCOSTID_P,'' FREMARK
FROM #TEMPALL A
LEFT JOIN (
	SELECT FID,FORDERNUMBER,SUM(FALLAMOUNTFOR) FALLAMOUNTFOR,SUM(FALLAMOUNT)  FALLAMOUNT
	FROM T_AR_RECEIVABLEENTRY 
	GROUP BY FORDERNUMBER,FID
) B ON A.FID=B.FID
--LEFT JOIN T_AR_RECEIVABLE C ON B.FID=C.FID
WHERE A.FRECMETHOD=2

--6.3 收款条件的收款方式为按到期日收款或收款条件为空
INSERT INTO T_AR_RECEIVABLEPLAN 
(FENTRYID,FID,FSEQ,FENDDATE,FPAYRATE,FPAYAMOUNTFOR,FPAYAMOUNT,FWRITTENOFFSTATUS,FWRITTENOFFAMOUNTFOR,FWRITTENOFFAMOUNT,FNOTWRITTENOFFAMOUNTFOR,FNOTWRITTENOFFAMOUNT,FRELATEHADPAYAMOUNT,FAPPLYAMOUNT,FORDERBILLNO,FRECEIVABLEENTRYID,FMATERIALID,FMATERIALSEQ,FSALEORDERID,FMOBRECAMOUNTFOR,FNOTVERIFICATEAMOUNT,FPRICE,FQTY,FPRICEUNITID,FCOSTID_P,FREMARK)
SELECT 
100001+ROW_NUMBER() OVER(ORDER BY A.FID) FENTRYID,C.FID,ROW_NUMBER() OVER(PARTITION BY A.FID ORDER BY A.FID) FSEQ,C.FENDDATE,100 FPAYRATE,
B.FALLAMOUNTFOR FPAYAMOUNTFOR, B.FALLAMOUNT FPAYAMOUNT,'A' FWRITTENOFFSTATUS,0 FWRITTENOFFAMOUNTFOR,0 FWRITTENOFFAMOUNT,
B.FALLAMOUNTFOR FNOTWRITTENOFFAMOUNTFOR,B.FALLAMOUNT FNOTWRITTENOFFAMOUNT,0 FRELATEHADPAYAMOUNT,0 FAPPLYAMOUNT,'' FORDERBILLNO,
0 FRECEIVABLEENTRYID,0 FMATERIALID,0 FMATERIALSEQ,0 FSALEORDERID,0 FMOBRECAMOUNTFOR,
B.FALLAMOUNTFOR FNOTVERIFICATEAMOUNT,0 FPRICE,0 FQTY,0 FPRICEUNITID,0 FCOSTID_P,'' FREMARK
FROM #TEMPALL A
LEFT JOIN (
	SELECT FID,SUM(FALLAMOUNTFOR) FALLAMOUNTFOR,SUM(FALLAMOUNT)  FALLAMOUNT
	FROM T_AR_RECEIVABLEENTRY 
	GROUP BY FID
) B ON A.FID=B.FID
LEFT JOIN T_AR_RECEIVABLE C ON B.FID=C.FID
WHERE A.FRECMETHOD=1 OR A.FPAYCONDITON =0


至此收款计划分录就插入完成了,请客户端检查是否存在异常。


应付单补付款计划参考:应付单补付款计划SQL参考

图标赞 71
71人点赞
还没有人点赞,快来当第一个点赞的人吧!
图标打赏
0人打赏
还没有人打赏,快来当第一个打赏的人吧!