星空数据库后台——关于后台修改科目核算维度的猜想

这是关于后台修改科目核算维度的猜想,小伙伴么有兴趣看看就可以了。如果真的有调整需求,记得购买金选成功服务-基础数据调整服务,原厂支持给您最专业的保障。此内容仅用作交流学习,自行后台修改数据后果自负!!!![]()
![]()
![]()
此猜想想要实现批量后台修改科目的核算维度信息,由于目前我的项目仅涉及到可选必录的修改,以及添加核算维度(好像标准产品就支持这样修改),所以以下内容基于上面两个场景考虑。
第一步:先将需要调整的科目内码收集到,支持多个科目同时修改,这里以修改科目内码4025的科目为例,编码1511

--drop table #accounttmp create table #accounttmp(faccountid int primary key,fnewitemdetailid int,fnewgroupnumber varchar(200),fnewgroupname varchar(200)) insert into #accounttmp(faccountid) values(4025)
第二步:收集科目当前的核算维度下挂情况到临时表#tmp_ACCOUNTFLEXENTRY
--DROP TABLE #tmp_ACCOUNTFLEXENTRY select * ,CONVERT(INT,0) FNEWID,identity(int,1,1) fidentity into #tmp_ACCOUNTFLEXENTRY from T_BD_ACCOUNTFLEXENTRY where FACCTID in (select faccountid from #accounttmp) create unique index u_tmp_accpuntflex on #tmp_ACCOUNTFLEXENTRY(FACCTID,FFLEXITEMPROPERTYID)
第三步:根据需求进行修改
这里演示的是内码为4025的科目,将下挂组织机构从必录修改为可选,同时追加一个核算维度编码为ZDY0002的可选核算维度。其他科目有其他维度调整需求也是类似的更新方式

--以上查询结果100003 对应FFLEXITEMPROPERTYID,'FF100003' 对应FDATAFIELDNAME,FFLEXITEMPROPERTYID=8 表示组织机构 update #tmp_ACCOUNTFLEXENTRY set FINPUTTYPE='2' where FINPUTTYPE='1' and FACCTID=4025 and FFLEXITEMPROPERTYID=8 insert into #tmp_ACCOUNTFLEXENTRY(FENTRYID,FACCTID,FFLEXITEMPROPERTYID,FACCTITEMISVALID,FINPUTTYPE,FDATAFIELDNAME,FSEQ,FMASTERID,FNEWID) SELECT 0,faccountid,100003 FFLEXITEMPROPERTYID,1 FACCTITEMISVALID,2 FINPUTTYPE,'FF100003' FDATAFIELDNAME,isnull(b.fseq,1) FSEQ,0 FMASTERID,ROW_NUMBER() over (order by faccountid)+(select isnull(max(FNEWID),0) from #tmp_ACCOUNTFLEXENTRY ) FNEWID from #accounttmp a left join (select FACCTID,max(FSEQ)+1 fseq from #tmp_ACCOUNTFLEXENTRY b group by FACCTID) b on a.faccountid=b.FACCTID where a.faccountid=4025
第四步:重构核算维度组合
不写游标了,通过循环脚本来实现 --拼接核算维度组合 declare @maxseq int; declare @curseq int; select @maxseq=max(fseq),@curseq=1 from #tmp_ACCOUNTFLEXENTRY update #accounttmp set fnewgroupnumber='',fnewitemdetailid=0,fnewgroupname='' while @curseq<=@maxseq begin update a set a.fnewgroupnumber=isnull(a.fnewgroupnumber,'')+ CONVERT(varchar(10),b.FFLEXITEMPROPERTYID)+'_'+CONVERT(varchar(10),b.FACCTITEMISVALID)+'_'+CONVERT(varchar(10),b.FINPUTTYPE)+'/', a.fnewgroupname=isnull(a.fnewgroupname,'')+ CONVERT(varchar(10),c.FNAME)+'/' from #accounttmp a join #tmp_ACCOUNTFLEXENTRY b on a.faccountid=b.FACCTID and b.FSEQ=@curseq join T_BD_FLEXITEMPROPERTY_L c on b.FFLEXITEMPROPERTYID=c.FID and c.FLOCALEID=2052 set @curseq=@curseq+1 end --修正末尾的'/' update #accounttmp set fnewgroupnumber=SUBSTRING(fnewgroupnumber,1,len(fnewgroupnumber)-1), fnewgroupname=SUBSTRING(fnewgroupname,1,len(fnewgroupname)-1)
第五步:匹配一下调整后的核算维度组合是否存在,不存在的才需要插入数据
--判断拼接后的组合是否存在,存在的情况下更新为新的id update a set a.fnewitemdetailid=b.FID from #accounttmp a join T_BD_FLEXITEMGROUP b on a.fnewgroupnumber=b.FNUMBER --不存在的情况下生成新的组合,往T_BD_FLEXITEMGROUP、T_BD_FLEXITEMGROUP_L、T_BD_FLEXITEMGRPENTRY select count(distinct fnewgroupnumber) from #accounttmp where fnewitemdetailid=0
第六步:插入核算维度组合数据
--生成内码 delete from Z_BAS_ITEM insert into Z_BAS_ITEM(Column1) select max(faccountid) faccountid from #accounttmp where fnewitemdetailid=0 --生成内码 delete from Z_BD_FLEXITEMGRPENTRY insert into Z_BD_FLEXITEMGRPENTRY(Column1) select fidentity from #tmp_ACCOUNTFLEXENTRY where FACCTID in (select max(faccountid) faccountid from #accounttmp where fnewitemdetailid=0 group by fnewgroupnumber ) --插入数据 insert into T_BD_FLEXITEMGRPENTRY(FID,FENTRYID,FFLEXITEMPROPERTYID,FACCTITEMISVALID,FINPUTTYPE,FFILTER,FDATAFIELDNAME,FSEQ,FMASTERID) select c.id,b.Id,FFLEXITEMPROPERTYID,FACCTITEMISVALID,FINPUTTYPE,'' FFILTER,FDATAFIELDNAME,FSEQ,FMASTERID from #tmp_ACCOUNTFLEXENTRY a join Z_BD_FLEXITEMGRPENTRY b on a.fidentity=b.Column1 join Z_BAS_ITEM c on a.FACCTID=c.Column1 ---插入数据 insert into T_BD_FLEXI
星空数据库后台——关于后台修改科目核算维度的猜想
这是关于后台修改科目核算维度的猜想,小伙伴么有兴趣看看就可以了。如果真的有调整需求,记得购买金选成功服务-基础数据调整服务,原厂支...
点击下载文档文档为doc格式
声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。如若本站内容侵犯了原著者的合法权益,可联系本站删除。
上一篇
已经是第一篇



