销售发票携带应收单单据头字段SQL语句参考原创
60人赞赏了该文章
376次浏览
编辑于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
推荐阅读