如何使用“老友记”政府软件协助会计小组导入AO2011_辅助核算论文

如何实现用友政务软件辅助核算组向AO2011导入,本文主要内容关键词为:用友论文,如何实现论文,政务论文,软件论文,此文献不代表本站观点,内容供学术参考,文章仅供参考阅读下载。

      由用友政务软件公司开发的用友政务A++5.2是一款基于Oracle平台的财务管理软件产品。该软件对辅助账以“组”的方式存储,即对会计科目指定辅助核算项,每项之间以“/”分隔,其中每个部分代表一个辅助核算。通过ODBC将数据导入到SQL Server后,下面以凭证表(VOUCHER)、余额表(BALANCE)为例,详细讲解如何拆分辅助核算项,并将凭证表、余额表转换为“单表横排”、“单表竖排”格式,以实现向A02011现场审计实施系统的导入。

      一、科目表(ACCOUNT)、余额表(BALANCE)及凭证表(VOUCHER)结构

      1.科目表数据示例如下:

      

      科目表定义了每个科目的辅助核算内容,如500102020101科目(事业支出-非财政补助支出-项目支出-工资福利支出-基本工资)分别按资金来源、功能分类及项目信息内容进行辅助核算。

      2.凭证表数据示例如下:

      

      凭证表按科目表定义的辅助核算组,在辅助核算组列存储了各类辅助核算编码,并以正斜杠分割,编码顺序与科目表辅助核算项内容一一对应。

      3.余额表数据示例如下:

      

      余额表存储了每个科目各月的期初余额,辅助核算组列同样按科目表定义的辅助核算项内容、顺序反映各科目辅助余额。

      为了能详细反映单位往来、个人往来、部门核算、资金来源、功能分类、项目信息、专项核算等辅助核算内容,导入辅助凭证表及辅助余额表必须对上述凭证表、余额表进行适当处理,加工成符合AO2011格式。下面将凭证表、余额表分别按“单表横排”、“单表竖排”两种方式处理为例,详细介绍辅助凭证表、辅助余额表生成方法。

      二、数据处理方法

      1.辅助凭证表

      凭证表包含了辅助核算组,因此,它也是一张辅助凭证表。按辅助凭证表导入AO2011要求,各辅助核算内容应按辅助内容分列存储,即单位往来、个人往来、资金来源、专项核算等辅助项各占一列。为了实现上述要求,需要从凭证表中的辅助核算组中依次提取出每个辅助核算代码,普通的SQL语句较难实现,以下通过在SQL Server中编写一个UDF(用户自定义函数)实现提取功能。代码如下:

      CREATE FUNCTION get_new_str

      @v_str VARCHAR(4000),

      @v_sp CHAR(1),

      @n INT

      RETURNS VARCHAR(100)

      BEGIN

      DECIARE @new_str1 VARCHAR(100),@new_str2VARCHAR (4000),@s INT=1,@e INT,@count INT=1,@num INT,@chacter VARCHAR(100);

      DECLARE @tb AS TABLE (c INT,string VARCHAR(100));

      IF RIGHT(@v_str,1)<>@v_sp

      SET @new_str2=CONCAT(@v_str,@v_sp);

      SET @new_str2=@v_str;

      SET @num=LEN (@new_str2)-LEN (REPLACE(@new_str2,@v_sp,’’));

      WHILE @count<=@num

      BEGIN

      SELECT @e=CHARINDEX(@v_sp,@new_str2,@s);

      SELECT @new_str1=SUBSTRING(@new_str2,@s,@e-@s);

      INSERT INTO @tb(c,string)VALUES(@count,@new_str1);

      SELECT @s=@e+1;

      SELECT @count=@count+1;

      SET @chacter=(SELECT string FROM @tb WHERE c=@n);

      RETURN @chacter,

      函数dbo.get_new_str有三个参数,第一个参数是要处理的字符串,第二个参数是字符串中的分隔符号,第三个参数指定需要提取哪部分字符。如:dbo.get_new_str(‘501-3201-02’,’-‘,2)是将以“-”分隔的字符串“501-3201-02”第2部分提取出来,返回字符“3201”。如果分隔符输入错误或者截取的数字无效,将返回空值。

      因为该软件定义了单位往来、个人往来、部门核算、功能分类、资金来源等7个辅助核算,故辅助凭证表中要产生单位往来、个人往来、部门核算、功能分类、资金来源、项目信息、专项核算7列,分别存储各辅助核算代码。以下是将凭证表与科目表关联,调用dbo.get_new_str函数,并利用CASE语句判断,将从辅助核算组中提取的代码依次存入对应列中,示例中只对单位往来进行了拆分,其他辅助核算内容拆分原理相同,SQL语句如下:

      WITH v

      SELECT CONVERT(DATE,p.凭证日期,112)凭证日期

      ,p.科目编号

      ,p.凭证种类

      ,p.凭证编号

      ,p.行号

      ,p.摘要

      ,p.借方金额

      ,p.贷方金额

      ,p.辅助核算组

      ,a.辅助核算项

      ,p.制单

      ,p.审核

      ,p.记账

      ,p.出纳

      ,IIF(p.记账标志=1,‘已记账’,‘未记账’)AS记账标志

      ,p.附件数

      FROM VOUCHER p

      JOIN ACCOUNT a

      ON p.科目编号=a.科目编号

      WHERE p.作废标志=0

      SELECT凭证日期,凭证种类,凭证编号,科目编号,摘要,借方金额,贷方金额

      ,CASE

      WHEN dbo.get_new_str(辅助核算项,‘/’,1)=‘单位往来’THEN dbo.get_new_str(辅助核算组,‘/’,1)

      WHEN dbo.get_new_str(辅助核算项,‘/’,2)=‘单位往来’THEN dbo.get_new_str(辅助核算组,‘/’,2)

      WHEN dbo.get_new_str(辅助核算项,‘/’,3)=‘单位往来’THEN dbo.get_new_str(辅助核算组,‘/’,3)

      WHEN dbo.get_new_str(辅助核算项,‘/’,4)=‘单位往来’THEN dbo.get_new_str(辅助核算组,‘/’,4)

      WHEN dbo.get_new_str(辅助核算项,‘/’,5)=‘单位往来’THEN dbo.get_new_str(辅助核算组,‘/’,5)

      WHEN dbo.get_new_str(辅助核算项,‘/’,6)=‘单位往来’THEN dbo.get_new_str(辅助核算组,‘/’,6)

      WHEN dbo.get_new_str(辅助核算项,‘/’,7)=‘单位往来’THEN dbo.get_new_str(辅助核算组,‘/’,7)

      END AS单位往来

      (为节省篇幅,此处省略其他辅助核算内容,读者可根据实际需要自行添加个人往来、部门核算、功能分类、项目信息、专项核算,值得注意的是,“WHEN”与“THEN”关键词部分调用函数的第三个参数一定要一致!)

      ,制单,审核,记账,附件数,记账标志

      FROM v

      ORDER BY MONTH(凭证日期),凭证编号,行号;

      运行上述代码,结果如下:

      

      需要注意的是,IIF是SQL SERVER 2012新增的函数,如果在2012以下版本运行,需使用CASE表达式。

      2.辅助余额表

      生成辅助余额表同样要对余额表的辅助核算组进行拆分,为了生成“单表竖排”格式,首先要生成“单表横排”格式,然后利用逆透视技术,转化为“单表竖排”格式。由于导入AO2011单表竖排余额表中必须包括辅助核算名称,还需要将分割出的每个辅助核算项关联到名称。因该软件定义的辅助核算内容较多,笔者按辅助核算内容定义7个自定义函数,分别根据输入的辅助核算编号,返回对应的辅助核算项名称,从而避免了复杂的表连接。为了讲解方便,以编写dbo.get_dwwlmc(获取往来单位名称)函数为例说明,代码如下:

      CREATE FUNCTION dbo.get_dwwlmc(@dwwlbh VARCHAR(20)

      RETURNS VARCHAR(255)

      BEGIN

      DECLARE @dwwlmc VARCHAR(255);

      SET @dwwlmc=(SELECT往来核算名称FROM dbo.DWWL WHERE往来核算编号=@dwwlbh);

      RETURN @dwwlmc;

      上述代码根据输入往来单位编号,返回往来单位名称。其他函数编写方法相同,只是更换函数名、表名即可,读者可自行尝试,不再一一赘述。

      WITH i1

      SELECT b.科目编号

      ,b.辅助核算组

      ,b.期初余额

      ,a1.辅助核算项

      ,a1.余额方向

      FROM ACCOUNT AS a1 INNER JOIN BALANCE AS b ON a1.科目编号=b.科目编号

      WHERE b.会计月度='1'

      AND NOT EXISTS(SELECT 1 FROM ACCOUNT a2 WHERE LEN(a2.科目编号)LEN(a1.科目编号)AND LEFT(a2.科目编号,LEN(a1.科目编号))=a1.科目编号)

      AND a1.辅助核算项IS NOT NULL

      SELECT科目编号

      ,CASE

      WHEN dbo.get_new_str(辅助核算项,‘/’,1)=‘单位往来’THEN dbo.get_new_str(辅助核算组,‘/’,1)

      WHEN dbo.get_new_str(辅助核算项,‘/’,2)=‘’单位往来’THEN dbo.get_new_str(辅助核算组,‘/’,2)

      WHEN dbo.get_new_str(辅助核算项,‘/’,3)=‘单位往来’THEN dbo.get_new_str(辅助核算组,‘/’,3)

      WHEN dbo.get_new_str(辅助核算项,‘/’,4)=‘单位往来’THEN dbo.get_new_str(辅助核算组,‘/’,4)

      WHEN dbo.get_new_str(辅助核算项,‘/’,5)=‘单位往来’THEN dbo.get_new_str(辅助核算组,‘/’,5)

      WHEN dbo.get_new_str(辅助核算项,‘/’,6)=‘单位往来’THEN dbo.get_new_str(辅助核算组,‘/’,6)

      WHEN dbo.get_new_str(辅助核算项,‘/’,7)=‘单位往来’THEN dbo.get_new_str(辅助核算组,‘/’,7)

      END AS单位往来

      (为节省篇幅,省略其他辅助核算内容,读者可根据实际需要自行添加个人往来、部门核算、功能分类、项目信息、专项核算,值得注意的是,“WHEN”与“THEN”部分调用函数的第三个参数要保持一致。)

      ,期初余额

      ,余额方向

      FROM i1

      SELECT科目编号,辅助类型,辅助编码

      ,CASE辅助类型

      WHEN‘单位往来’THEN dbo.get_dwwlmc(辅助编码)

      WHEN‘部门核算’THEN dbo.get_bmmc(辅助编码)

      WHEN‘资金来源’THEN dbo.get_zjlymc(辅助编码)

      WHEN‘功能分类’THEN dbo.get_gnmc(辅助编码)

      WHEN‘项目信息’THEN dbo.get_xmmc(辅助编码)

      WHEN‘专项核算’THEN dbo.get_zxhsmc(辅助编码)

      END AS辅助名称

      ,期初余额

      ,余额方向

      FROM i2

      UNPIVOT

      (辅助编码FOR辅助类型IN([单位往来],[个人往来],[部门核算],[资金来源],[功能分类],[项目信息],[专项核算]))UP;

      运行结果如下:

      

      代码“WITH i”表达式中使用“NOT EXISTS”仅对最末级科目的辅助核算组进行处理。dbo.get_bmmc、dbo.get_zjlymc、dbo.get_gnmc、dbo.get_xmmc、dbo.get_zxhsmc为自定义函数,根据输入编号,分别从bmhs、zjly、gnfl、xmxx、zxhs表中提取相应名称。

标签:;  ;  ;  ;  ;  

如何使用“老友记”政府软件协助会计小组导入AO2011_辅助核算论文
下载Doc文档

猜你喜欢