NC|科目表调整

一个朋友最近又碰到了关于用友NC系统科目表变更的问题,上次忘了记录过程,后悔莫及~ 这次完整的记录下来,以备后用。

问题背景

XX集团使用用友 NC Cloud 产品,下属多个业务单元,采用集团管控,系统中各业务单元均使用的是集团科目表。后因各业务单元主营业务差异,需改为集团+分级管控(即允许各业务单元会计科目的差异化管理)。

环境现状

  1. 业务单元:
    33个业务单元(含集团虚拟组织及4个工会组织),最多三级,其中一家启用了资金模块。
  2. 账簿类型:
    默认基准账簿,另增加一个工会账簿(用于工会组织使用)。
  3. 财务核算账簿:
    14个业务单元基准账簿(均使用集团科目表),四个工会账簿。
  4. 科目体系:
    基准账簿引用“XX集团科目体系”。工会引用“工会科目体系”。
  5. 会计科目: 【会计科目-财务组织】中没有维护科目表,会计科目未使用多版本。
  6. 总账: 2020-12启用。

调整思路

  1. 【会计科目-财务组织】中为对应的财务组织增加组织级科目表。
  2. 后台更新对应财务组织的财务核算账簿所引用的科目表。
  3. 后台调整bd_account、bd_accasoa等科目相关基础数据表。
  4. 后台调整gl_detail等凭证相关数据表。
  5. 总账期初余额、凭证、科目余额表等功能验证。
  6. 会计平台梳理。

调整步骤

下述调整以财务组织=AJJT0101 为例。

科目表调整

【会计科目-全局】节点下,修改全局科目表,根据实际管控需要将“科目控制级次”修改为“不控制”或其他具体的级次。若暂时需要控制财务组织不允许增加科目,则无需修改。
【会计科目-集团】节点下,修改集团科目表,根据实际管控需要将“科目控制级次”修改为“不控制”或其他具体的级次。
【会计科目-财务组织】节点下,选择财务组织、科目体系,点击[科目表维护],增加科目表。

财务核算账簿调整

1
2
3
4
5
6
7
8
-- 查询集团科目表主键  1001A510000000000EQO
select pk_accchart,* from bd_accchart where code='AJ';
-- 查询AJJT0101新建立的组织级科目表主键 1001B310000000007HEW
select pk_accchart,* from bd_accchart where code='AJJT0101';
-- 查询AJJT0101当前对应财务核算账簿的科目表 1001A510000000000EQO
select pk_curraccchart,pk_accountingbook from org_accountingbook where code='AJJT0101-0001';
/*逐个更新财务帐簿的科目表(由集团级改为组织级)*/
update org_accountingbook set pk_curraccchart=(select pk_accchart from bd_accchart where code='AJJT0101') where pk_relorg=(select pk_org from org_orgs where code='AJJT0101');

会计科目相关基础表整理

因会计科目未使用多版本,可以在2022-12-31前完成调整,这样 bd_account 、 bd_accasoa 可不用调整。若先创建新版本再调整,会涉及 bd_account 、 bd_accasoa 及 bd_accasoahistory 、 bd_accasshistory 等历史表的调整。
关于 bd_account 和 bd_accasoa 的一些补充:
bd_accasoa 不具备科目的继承性,即每一个科目表下都会生成具体的全量的科目明细,生成新的 pk_accasoa 。但 bd_accasoa 却继承了集团管控科目的 pk_account ,同一会计科目,集团和组织级的 pk_account 值一样;
bd_account 具备科目的继承性,集团管控下的会计科目在组织级不再新增,组织级仅记录新增的会计科目(pk_account)。

凭证相关数据表整理

1
2
3
4
/*创建视图case_accasoaVo体现集团科目体系和财务组织(AJJT0101)的pk_accasoa对应关系。*/
select a.pk_accasoa as old_accasoa,b.pk_accasoa as new_accasoa from bd_accasoa a left join bd_accasoa b on a.pk_account=b.pk_account
where a.pk_accchart =(select pk_accchart from bd_accchart where code='AJ') -- 固定集团
and b.pk_accchart=(select pk_accchart from bd_accchart where code='AJJT0101') -- 此次调整的财务组织
1
2
/*修改凭证明细表中科目表主键。*/
update gl_detail set pk_accchart=( select pk_accchart from bd_accchart where code='AJJT0101') where pk_org=(select pk_org from org_orgs where code='AJJT0101' )
1
2
/*修改凭证明细表中会计科目主键。*/
update gl_detail set pk_accasoa=(select new_accasoa from case_accasoaVo where old_accasoa=pk_accasoa) where pk_org=(select pk_org from org_orgs where code='AJJT0101' );
1
2
/*修改凭证余额表中会计科目主键。*/
update gl_balance set pk_accasoa=(select new_accasoa from case_accasoaVo where old_accasoa=pk_accasoa) where pk_org=(select pk_org from org_orgs where code='AJJT0101' );
1
2
/*修改凭证明细表中对方科目主键。该步操作通过游标遍历所有科目,较为耗时。存储过程代码见下方附件。*/
exec gldetail_oppositesubj_update @p_org_code='AJJT0101'

重建期初凭证、重建余额表

【动态建模平台】-【财务会计】-【总账】-【期初余额】节点重建期初凭证;
【动态建模平台】-【财务会计】-【总账】-【结账】节点重建余额表。
清缓存,重新登录后再验证数据。

会计平台梳理(如有)

因pk_accasoa发生了变化,若使用了会计平台,业务单元级相关科目映射建议重新指定一遍。

附:存储过程

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
/*
创建存储过程 gldetail_oppositesubj_update ,更新凭证明细表中的对方科目
*/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author: chendi
-- Create date: 2022-11-04
-- Description: XX集团凭证明细表对方科目更新
-- =============================================
CREATE PROCEDURE [dbo].[gldetail_oppositesubj_update ]
(
@p_org_code varchar(100)
)
AS
BEGIN
SET NOCOUNT ON;
if exists (select old_accasoa,new_accasoa from case_accasoaVo)
begin
--声明变量
declare @old_accasoa varchar(max)
declare @new_accasoa varchar(max)
declare @pk_org varchar(max)
set @pk_org = (select pk_org from org_orgs where code=@p_org_code );
--将SQL语句设置为游标,游标名new_cursor
declare new_cursor cursor for select old_accasoa,new_accasoa from case_accasoaVo;
open new_cursor

--获取查询数据赋值给变量
fetch next from new_cursor into @old_accasoa,@new_accasoa
--若检索到数据继续执行
while @@FETCH_STATUS=0
BEGIN
print @old_accasoa +'_'+@new_accasoa+'_'+@pk_org
update gl_detail set oppositesubj=REPLACE(oppositesubj,@old_accasoa,@new_accasoa) where pk_org=@pk_org;
--获取下一条数据并赋值给变量
fetch next from new_cursor into @old_accasoa,@new_accasoa
END
close new_cursor
deallocate new_cursor
END
END
GO

商业转载请联系作者获得授权,非商业转载请注明出处。

支付宝打赏 微信打赏

如果文章对你有帮助,欢迎点击上方按钮打赏作者

NC|科目表调整
http://hncd1024.github.io/2022/11/04/yonyouNC_account/
作者
CHEN DI
发布于
2022-11-04
许可协议