这时,我终于知道我应该去做什么。——史蒂夫·乔布斯
本章将给出一个开发案例,以解决在价值链相关企业的异构系统之间如何通过数据接口进行会计信息交换的问题。这一接口系统遵循前述《接口标准》(以下简称《标准》)和现行会计制度与会计准则,面向跨企业的计算机会计信息系统之间的数据交换应用。本章的读者范围主要是开发人员特别是会计软件用户单位的二次开发人员,但是一般会计人员也可从中得到关于跨企业交换会计信息的有益的启示。
第一节 系统调查、分析与总体设计
一系统调查——案例单位会计信息系统基本情况
东都集团是一家服装企业,其价值链关联企业有东都时装设计公司、东都模特经纪公司、东都服装职业技术学院、多家制衣厂以及众多自有品牌加盟店。由于历史原因,制衣厂采用综合企业管理软件Master ERP(一种早期ERP软件),而其他企业使用用友U8 ver8.6管理软件。该公司利用用友U8 ver8.6作为价值链虚拟企业会计信息整合平台,这样就需要从Master ERP系统中转出数据到U8 ver8.6。U8 ver8.6支持《信息技术——会计核算软件数据接口》,即可转入符合该《标准》的会计数据文件,但是Master ERP的输出文档并不符合《标准》的要求。这就需要在这两者之间开发一个中间接口程序,使Master ERP输出的数据文件转化为符合《标准》的数据文件。
Master ERP与U8 ver8.6的数据结构存在较大差异,以记账凭证为例,通过下列数据字典清除反映两者的数据结构
二 数据接口系统的数据流程图
该中间接口的工作流程,自读取Master ERP数据文件开始,经检验和转换,生成标准数据文件,以供U8 ver8.6接收并转入。
三 数据库设计
该接口系统没有自身专门的会计数据,但是由于需要对两个外部系统的数据进行转换,因此系统数据库主要是解决两个外部系统数据接口差异信息的对照存取,如下表中的“对应系统代码”和“对应系统名称”。具体转换时,系统将根据这些差异信息决定如何转换。此外,系统必须访问接口两端的两个系统,因此还要设计系统对两个外部数据库的访问方法和规则的设计。数据库系统平台仍然采用与Master ERP相同的数据库系统即MS SQL server。
(一) 基本信息对照数据表结构
(二) 基本信息数据表的SQL脚本
1.创建机构部门表(fibranch)
CREATE TABLE [dbo].[fibranch] (
[number] [varchar] (10) COLLATE
Chinese_PRC_CI_AS NOT NULL,
[name] [char] (30) COLLATE
Chinese_PRC_CI_AS NULL,
[chief] [char] (8) COLLATE Chinese_PRC_CI_AS NULL,
[address][char] (40) COLLATE Chinese_PRC_CI_AS NULL,
[tel][char] (15) COLLATE Chinese_PRC_CI_AS NULL,
[fax][char] (15) COLLATE Chinese_PRC_CI_AS NULL,
[employee] [int] NULL,
[ufcode] [char] (20) COLLATE Chinese_PRC_CI_AS NULL,
[ufname] [char] (20) COLLATE Chinese_PRC_CI_AS NULL
) ON [PRIMARY]
2.创建往来单位表(ficompany)
CREATE TABLE [dbo].[ficompany] (
[number] [char] (10) COLLATE
Chinese_PRC_CI_AS NOT NULL,
[name] [varchar] (60) COLLATE
Chinese_PRC_CI_AS NOT NULL,
[address] [varchar] (60) COLLATE
Chinese_PRC_CI_AS NULL,
[zp] [varchar] (6) COLLATE Chinese_PRC_CI_AS NULL,
[tel] [varchar] (20) COLLATE Chinese_PRC_CI_AS NULL,
[fax] [varchar] (20) COLLATE Chinese_PRC_CI_AS NULL,
[lxr] [varchar] (8) COLLATE Chinese_PRC_CI_AS NULL,
[account] [varchar] (30) COLLATE
Chinese_PRC_CI_AS NULL,
[bank] [varchar] (24) COLLATE
Chinese_PRC_CI_AS NULL
) ON [PRIMARY]
3.创建费用预算类别表(fiexpense )
CREATE TABLE [dbo].[fiexpense] (
[number] [varchar] (10) COLLATE
Chinese_PRC_CI_AS NOT NULL,
[name] [char] (20) COLLATE
Chinese_PRC_CI_AS NOT NULL,
[layer] [tinyint] NOT NULL,
[ufcode] [char] (20) COLLATE Chinese_PRC_CI_AS NULL,
[ufname] [char] (20) COLLATE Chinese_PRC_CI_AS NULL
) ON [PRIMARY]
4.创建会计科目表(fiitem)
CREATE TABLE [dbo].[fiitem] (
[number] [varchar] (10) COLLATE
Chinese_PRC_CI_AS NOT NULL,
[name] [char] (40) COLLATE
Chinese_PRC_CI_AS NOT NULL,
[type] [char] (1) COLLATE Chinese_PRC_CI_AS NULL,
[jord] [char] (2) COLLATE Chinese_PRC_CI_AS NULL,
[person] [tinyint] NULL,
[company] [tinyint] NULL,
[currency] [tinyint] NULL,
[quantity] [tinyint] NULL,
[expense] [tinyint] NULL,
[unit] [char] (10) COLLATE Chinese_PRC_CI_AS NULL,
[ufcode] [char] (20) COLLATE Chinese_PRC_CI_AS NULL,
[ufname] [char] (20) COLLATE Chinese_PRC_CI_AS NULL
) ON [PRIMARY]
5.创建往来个人表(fiperson )
CREATE TABLE [dbo].[fiperson] (
[number] [char] (10) COLLATE
Chinese_PRC_CI_AS NOT NULL,
[name] [varchar] (10) COLLATE
Chinese_PRC_CI_AS NOT NULL,
[branch] [varchar] (10) COLLATE
Chinese_PRC_CI_AS NULL,
[department] [varchar] (10) COLLATE
Chinese_PRC_CI_AS NULL,
[ufcode] [char] (20) COLLATE
Chinese_PRC_CI_AS NULL,
[ufname] [char] (20) COLLATE Chinese_PRC_CI_AS NULL
) ON [PRIMARY]
6.设置机构部门表主键
ALTER TABLE [dbo].[fibranch] ADD
CONSTRAINT [PK_fibranch] PRIMARY
KEYCLUSTERED ([number]) ON [PRIMARY]
7.设置往来单位表主键
ALTER TABLE [dbo].[ficompany] ADD
CONSTRAINT [PK_ficompany] PRIMARY
KEYCLUSTERED([number]) ON [PRIMARY]
8.设置费用预算类别表主键
ALTER TABLE [dbo].[fiexpense] ADD
CONSTRAINT [PK_fiexpense] PRIMARY
KEYCLUSTERED([number]) ON [PRIMARY]
9.设置会计科目表主键
ALTER TABLE [dbo].[fiitem] ADD
CONSTRAINT [PK_fiitem] PRIMARY
KEYCLUSTERED([number]) ON [PRIMARY]
10.设置往来个人表主键
ALTER TABLE [dbo].[fiperson] ADD
CONSTRAINT [PK_fiperson] PRIMARY
KEYCLUSTERED([number]) ON [PRIMARY]
四 系统功能及其菜单设计
该接口程序的主要功能有:(1)读取Master ERP系统转出的数据文档;(2)校验与转换Master ERP系统转出的数据文档,使之成为U8 ver8.6能直接读取的标准文档。检验主要是检查数据读取的正确性和一致性。只有经检验无误的数据才能进行转换,以确保数据交换的正确。
本接口程序采用PowerBuilder v9.0作开发平台。主界面设计结果,主功能菜单包括:基本信息、读取凭证、数据检验、数据转换和系统服务等。
第二节 系统主要功能的技术实现
一 凭证转换数据库管理程序的设计
程序功能及其界面,可在此窗口建立Master ERP系统与用友U8之间的数据库联系,并控制两者基础数据的一致性。
1.“试连接”按钮的执行代码
if trim(sle_2.text)=″″ then
messagebox(″错误!″,&
"服务器名称错误,请重新输入数据库服务器名称!")
return
end if
//试连接
transaction sqlyear
sqlyear=create transaction
sqlyear.DBMS=″MSS Microsoft SQL Server″
sqlyear.Database=″ufdata_″+trim(sle_1.text)+″_″+currentyear
sqlyear.ServerName=trim(sle_2.text)
sqlyear.LogId=″sa″
sqlyear.LogPass=trim(sle_3.text)
sqlyear.AutoCommit=true
sqlyear.DBParm=″″
connect using sqlyear;
if sqlyear.sqlcode 〈〉 0 then
messagebox(″用友系统数据库连接错误!″,"连接数据库服务器失败!请再试试!~r可能参数错误,或者已断开与服务器的连接!")
else
messagebox(″用友!″,"连接用友数据库服务器成功!")
end if
disconnect using sqlyear;
destroy sqlyear
2.“更新凭证转换相关的数据表”按钮的执行代码
if uf_connectsqlca()=-1 then
messagebox(″错误!″,″数据库连接错误!″)
return
end if
boolean ok[4]
string alter[4]
alter[1]=″ALTER TABLE [fiitem] ADD″+&
″ [ufcode] [char] (20) COLLATE″+&
″Chinese_PRC_CI_AS NULL,[ufname] [char] (20) ″+&
″COLLATE Chinese_PRC_CI_AS NULL ″
alter[2]=″ALTER TABLE [fibranch] ADD ″+&
″ [ufcode] [char] (20) COLLATE″+&
″Chinese_PRC_CI_AS NULL,[ufname] [char] (20) ″+&
″COLLATE Chinese_PRC_CI_AS NULL ″
alter[3]=″ALTER TABLE [fiexpense] ADD ″+&
″ [ufcode] [char] (20) COLLATE″+&
″Chinese_PRC_CI_AS NULL,[ufname] [char] (20) ″+&
″COLLATE Chinese_PRC_CI_AS NULL ″
alter[4]=″ALTER TABLE [fiperson] ADD ″+&
″ [ufcode] [char] (20) COLLATE″+&
″Chinese_PRC_CI_AS NULL,[ufname] [char] (20) ″+&
″COLLATE Chinese_PRC_CI_AS NULL ″
execute immediate :alter[1] using sqlca;
if sqlca.sqlcode=0 then ok[1]=true
execute immediate :alter[2] using sqlca;
if sqlca.sqlcode=0 then ok[2]=true
execute immediate :alter[3] using sqlca;
if sqlca.sqlcode=0 then ok[3]=true
execute immediate :alter[4] using sqlca;
if sqlca.sqlcode=0 then ok[4]=true
if not ok[1] or ok[2] or ok[3] or ok[4] then
messagebox(″提示!″,″数据库更新成功!″)
else
messagebox(″错误!″,″数据库更新失败!″)
end if
disconnect using sqlca;
3.“保存用友数据库连接参数”按钮的执行代码
if trim(sle_2.text)=″″ then
messagebox(″错误!″,&
"服务器名称错误,请重新输入数据库服务器名称!")
return
end if
//试连接
long filepointer
string readstring
string ufservername,ufsapassword,ufdatabasename
transaction sqlyear
sqlyear=create transaction
sqlyear.DBMS=″MSS Microsoft SQL Server″
sqlyear.Database=″ufdata_″+trim(sle_1.text)+&
″_″+currentyear
sqlyear.ServerName=trim(sle_2.text)
sqlyear.LogId=″sa″
sqlyear.LogPass=trim(sle_3.text)
sqlyear.AutoCommit=true
sqlyear.DBParm=″″
connect using sqlyear;
if sqlyear.sqlcode 〈〉 0 then
messagebox(″用友系统数据库连接错误!″,&
"连接数据库服务器失败!请再试试!~r可能+&
参数错误,或者已断开与服务器的连接!")
else
//保存