应收单应付单到期日修改数据处理SQL原创
金蝶云社区-jessie_w
jessie_w
6人赞赏了该文章 490次浏览 未经作者许可,禁止转载编辑于2024年01月29日 22:45:44

应用场景:部分历史单据的到期日需要修改,但已审核状态的单据无法修改,则可选择从数据库修改。

涉及数据表:

    应收单单据头:T_AR_RECEIVABLE

    应收单收款计划:T_AR_RECEIVABLEPLAN

    应付单单据头:T_AP_PAYABLE

    应付单付款计划:T_AP_PAYABLEPLAN

涉及字段:(表头和计划字段名相同

    到期日字段名:FENDDATE

以下SQL是以应收单为例,应付单将对应表名换一下即可。

--根据指定的资料更新应收单到期日
--1.创建临时表 字段名:单据编号、新到期日
select a.fbillno,a.FENDDATE into #temp1
from T_AR_RECEIVABLE a
where 1=0

--2.将要修改的单据编号以如下的格式插入临时表 单据编号不要重复,日期格式没要求
insert into #temp1 values
('AR00000505','2023/3/31'),
('AR00000504','2023/2/2'),
('AR00000500','2023/2/2')

--3.修复前全表备份
select * into T_AR_RECEIVABLEPLAN_sqlbak_20230207 from T_AR_RECEIVABLEPLAN
select * into T_AR_RECEIVABLE_sqlbak_20230207 from T_AR_RECEIVABLE

--4.更新单据头及付款计划的到期日字段
--4.1.更新单据头的到期日字段
merge into T_AR_RECEIVABLE t1 using(
	select a.fbillno,a.fid,a.fdate,a.FENDDATE,c.fenddate newdate
	from #temp1 c 
	inner join T_AR_RECEIVABLE a on c.FBILLNO=a.fbillno 
	where c.fenddate<>a.fenddate
) t2 on (t1.fid=t2.fid)
when matched then update set t1.fenddate=t2.newdate;

--4.2.更新收款计划的到期日字段
merge into T_AR_RECEIVABLEPLAN t1 using(
	select a.fbillno,a.fid,a.fdate,b.fentryid,b.FENDDATE,c.fenddate newdate
	from #temp1 c 
	inner join T_AR_RECEIVABLE a on c.FBILLNO=a.fbillno 
	left join T_AR_RECEIVABLEPLAN b on a.fid=b.fid 
	where c.fenddate<>b.fenddate
) t2 on (t1.fentryid=t2.fentryid)
when matched then update set t1.fenddate=t2.newdate;


赞 6