销售发票携带应收单单据头字段SQL语句参考原创
金蝶云社区-jessie_w
jessie_w
60人赞赏了该文章 254次浏览 未经作者许可,禁止转载编辑于2024年03月22日 15:24:31

业务场景:销售发票新增字段,历史单据的该字段需要进行数据库更新

适用于销售发票新增字段在明细,应收单字段在单据头,且SQL SERVER数据库

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


语句核心:

上下游单据通过下游单据的_LK表进行关联,下游单据的_LK表名可通过BOS-单据-单据关联配置-关联表名得到。

重点需要说明下LK表中几个重要字段的含义(几乎所有关联关系表这几个字段含义都一样):

LK表中的FSBILLID代表上游单据的单据头内码,FSID代表上游单据分录行内码,

FSTABLENAME代表来源表名,FRULEID代表单据转换规则内码,FENTRYID代表下游单据的分录行内码。


注释:销售普通发票和销售增值税专用发票共用有一个数据表,可通过单据头的FFORMID字段来区分是普票还是专票

值为IV_SALESOC为普票,IV_SALESIC为专票


携带明细字段请参考:应收单新增字段,历史数据更新的SQL语句参考


示例:销售发票明细源单编号携带应收单单据头编号

明细一对一下推情况:

--销售普通发票明细携带应收单单据头字段
select a.fbillno 销售发票单据编号,b.fseq 发票明细序号,e.fbillno 应收单号,d.fseq 应收单明细序号,b.fsrcbillno 发票明细字段,e.fbillno 应收单单据头字段
--update b set b.fsrcbillno=e.fbillno
from T_IV_SALESIC a
left join T_IV_SALESICENTRY b on a.fid=b.fid
inner join T_IV_SALESICENTRY_LK c on c.fentryid=b.fentryid and FSTABLENAME='t_AR_receivableEntry'
left join T_AR_RECEIVABLEENTRY d on c.fsid=d.fentryid and c.fsbillid=d.fid
left join T_AR_RECEIVABLE e on d.fid=e.fid
where a.FFORMID='IV_SALESOC' and b.fsrcbillno<>e.fbillno 

--销售增值税专用发票明细携带应收单单据头字段
select a.fbillno 销售发票单据编号,b.fseq 发票明细序号,e.fbillno 应收单号,d.fseq 应收单明细序号,b.fsrcbillno 发票明细字段,e.fbillno 应收单单据头字段
--update b set b.fsrcbillno=e.fbillno
from T_IV_SALESIC a
left join T_IV_SALESICENTRY b on a.fid=b.fid
inner join T_IV_SALESICENTRY_LK c on c.fentryid=b.fentryid and FSTABLENAME='t_AR_receivableEntry'
left join T_AR_RECEIVABLEENTRY d on c.fsid=d.fentryid and c.fsbillid=d.fid
left join T_AR_RECEIVABLE e on d.fid=e.fid
where a.FFORMID='IV_SALESIC' and b.fsrcbillno<>e.fbillno


存在分录合并下推情况的:

select a.fbillno 销售发票单据编号,b.fseq 发票明细序号,b.fsrcbillno 发票明细字段,c.farbillno 应收单号
from T_IV_SALESIC a
left join T_IV_SALESICENTRY b on a.fid=b.fid
inner join (
	select distinct a.fbillno 销售发票单据编号,b.fentryid,b.fseq 发票明细序号,b.fsrcbillno 发票明细字段,stuff((SELECT ',' + t3.fbillno 
	FROM T_IV_SALESICENTRY_LK t1 
	left join T_AR_RECEIVABLEENTRY t2 on t1.fsid=t2.fentryid and t1.fsbillid=t2.fid 
	left join T_AR_RECEIVABLE t3 on t2.fid=t3.fid 
	where upper(t1.fstablename)='T_AR_RECEIVABLEENTRY' and t1.fentryid = b.fentryid FOR xml path('') ),  1, 1, ''  ) AS farbillno
	from T_IV_SALESIC a
	left join T_IV_SALESICENTRY b on a.fid=b.fid
	inner join T_IV_SALESICENTRY_LK c on b.fentryid=c.fentryid and upper(c.fstablename)='T_AR_RECEIVABLEENTRY' 
) c on b.fentryid=c.fentryid
where a.FFORMID='IV_SALESIC' and b.fsrcbillno<>farbillno


赞 60