如何实现用友政务软件辅助核算组向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_辅助核算论文
如何使用“老友记”政府软件协助会计小组导入AO2011_辅助核算论文
下载Doc文档