第1章采集模板XML结构.docx

上传人:李司机 文档编号:6466370 上传时间:2023-11-02 格式:DOCX 页数:13 大小:57.07KB
返回 下载 相关 举报
第1章采集模板XML结构.docx_第1页
第1页 / 共13页
第1章采集模板XML结构.docx_第2页
第2页 / 共13页
第1章采集模板XML结构.docx_第3页
第3页 / 共13页
第1章采集模板XML结构.docx_第4页
第4页 / 共13页
第1章采集模板XML结构.docx_第5页
第5页 / 共13页
点击查看更多>>
资源描述

《第1章采集模板XML结构.docx》由会员分享,可在线阅读,更多相关《第1章采集模板XML结构.docx(13页珍藏版)》请在三一办公上搜索。

1、第1章采集模板XML结构1.l变量VariableTyPe=sqlVarName=Q年度Value=/)VariableTyPe=sqlVarName=单彳立名称Value=/VariableType=wSqlVarwName=龟子数搪编号Value=/VariableTyPe=sqlVar“Name=电子数据卷称Value=/VariableTyPe=sqlVarName=临时龟子数据编号Value=/Variables这六个变量是每个模板都必须要有的,可直接CoPy。第一个变量DbSoUrCeFilePath表示的是数据源路径。由用户选择数据源时赋值。若对源数据进行了预处理,则在预处理代码

2、中需要对该变量进行重新赋值。变量年度、单位名称、电子数据编号、电子数据名称表示的是会计数据的基本信息。由AO2011建立会计数据时赋值。变量临时电子数据编号,用于多套会计数据从AOExtract数据库采集到AoFinanCe数据库时,用于标识具体的每套会计数据。1.2数据库连接SourceDbConnection表示源数据的连接。如果源数据是SQLServer,那么ConnectionType就是SqlConnection;如果源数据是Access或者是TXt文本,那么ConnectionType就是OleDbConnectionoAoExtractTempConnection表示AO采集模块

3、临时库的连接,也就是AOExtract数据库的连接。AOFinanceConnection表示AO财务数据库的连接,即AOFinance数据库的连接。PreProccessOaskName=*xsi:type=*yDllIportTask*DeSCriPtiOn=预处理数据.Taskskxxityp*三*SqlTsk*vConntc11onNm三*AOExtrtctTtmpCoxmtction*D”CriPtiOn=*11空临时除数据Ntnmcattable会计科自裘j;0SqlSqlDeSCriPtig=房空凭证库UsedVariable=truncatetable凭证库:SqlSqlDeS

4、CriPtiOn=碧空科目余额期初表UsedVariable=false4rXrxmcatetable科目余额期初表:truncatetable辅助信息表:SqlXCnPug=情至聊余额期初夷UWwablg-XnmCMtabk辆助余额初初表.truncatttable谑证次助旗初知:trmcatetable科目设置:如图所示,对源数据进行预处理,或者清空临时数据库等操作,放到PreProccesss该元素下。1.4 批量建账接口DllAccoutList表示批量建账的接口,其中,TypeName为反射的类名,FileName表示动态链接库DLL的名称。1.5 Tasks和UpdateTask1

5、.5.1 TasksTasks元素中主要是针对AOExtract数据库的操作,如数据从源数据中批量采集到AOExtract数据库。由于有多套会计数据采集的情况,AO是循环执行Tasks中的任务,所以BulkCopy中的SrcSql元素,SQL语句中都要有“电子数据编号as电子数据编号”这句,并且针对源数据的预处理操作不能够放在Tasks中,而要放到PreProccesss元素下。1.5.2 UpdateTaskUpdateTask元素主要是针对AOFinance数据库的操作,如数据从AOExtract数据库批量采集到AOFinance数据库,或数据从源数据中批量采集到AOFinance数据库。

6、由于有多套会计数据采集的情况,Ac)是循环执行UPdateTaSk中的任务,所以若是数据从AOExtract数据库批量采集到AOFinance数据库,BulkCopy中的SrCSql元素,SQL语句中都要增加一个Where条件where电子数据编号=临时电子数据编号”。另外,在UPdateTaSk元素的最后,要增加一个Task。用于将临时的电子数据编号,更新为创建会计数据时实际的电子数据编号。如下图所示:Update科目余额意初袤】“t电子数据名称=Q电子数据名称,单位名称”单位名称,年度二Q年度,电子数据牖号=Q电子数据漏号三RE电子数据编导=临时电子数据编号;UPdate凭证库set电子数

7、据名称或电子数据筋,单位名称=Q单位名称,年度二Q年度,电子数据编号=Q电子数据编号WHERE电子数据编号=Q临时电子数据编号;SqlDeSCriPtiOn=更新辅助信息表USedyariabIe=true)UPdate辅助信息表set电子数据名称/电子数据名称,单位名称/单位名称,年度一年度,电子数据编号/电子数据编号WHERE电子数据斓号=Q临B寸电子数据编号;6qlDrcription=更新辅助余额期初整UXedywble=trueUPdate辅助余额期初赛】set电子数据名称/电子数据名称,单位名称=Q单位名称,年度=Q年度,电子数据编号=Q电子数据编号WHERE电子数据编号临时电子数

8、据编号;Update凭证辅助明细表set电子额据名称=Q电子数据名称,单位名称W单位名称,年度=Q年度电子数据编号=电子数据编号WKERE电子数据编号=Q临时电子数据编号;&qlDeSCriPtiOn=更新科目设置UsedVariable=*trueUpdate科目设置set电子数据名称=色电子数据名称,单位名称=Q单位名称,年度=0年度,电子数据编号=?电子数据编号WHERE电子数据斓号=Q临时电子数据端号;&qlDeSCriPtion=即新会计期间定义USedyariabIe=trueUpdate会计期间定义】“t电子数据名称电子数据名称,单位名称单位名称,年度=Q年度,电子数据编号=电子

9、数据编号WHERE电子数据编号=Q临时电子数据编号;1.6 任务TaskTask元素包括三种类型,分别是SqlTask,SqlBulkCopyTask和DllImportTasko1.6.1 SqlTaskSqlTaSk用于执行SQL语句,例如InSert、UpdateDeleteTnmCate等。如下图所示:truncatetable会计科自表:GqlD”CriPtion=*4空凭证库”Us*dVariabl三*fls*trunctmncatetable科目余额期初表:truncattable辅助信息表:/SqlSSqlDeSCnPtIg=清空辅助余凝期初裹Usedvariableifals

10、JXrscatetable辅前余熬期初裹;tmncatetable凭i辎助丽细美;,SqlGqlD”CriPtion=*空科目设置UstdVtri*bl三*fls*truncttabi.科目设置;SqlSqlDeSCriPtiOn=碧空科目层级表“UsedVariable=*false-Xruncatetable科自层级表:1.6.2 SqlBuIkCopyTaskGUlkCoPyIsAutoCreateTable=*false*USedyariable=trueSrcSqlselecta,ccodeas科目编码,b.ccodeas第父级科目编码,Q电子数据编号as电子数据编号fromcode

11、asaleftjoincodeasbOna.ccodlikeb.ccode+%QeSTabIeName湘目层级表OOIMnMappingsOappingSrCColUmnName=科目编码DeSCOIUmnName=科目编码”COIumnMappingsTaskSqlBulkCopyTask用于批量拷贝数据。该元素下可以有多个BulkCopy元素。BulkCopy表示批量拷贝的SQL查询语句。其中,ColumnMappings中的字段要与查询语句中的字段数相对应,字段的顺序要一致。并且,SQL语句中的字段类型和目标字段类型要一致。如果SQL语句中的查询结果,与目标表完全一致,那么可以去掉COl

12、UmnMaPPingS元素。如下图所示:QuIkCoPyIsAutoCreateTable=*fal三e*UsedVariable=*true*select*from会计科目表where电子数据编号=Q临时电子数据编号;QeSTabIeNae治计科目表ilesfableNameGBUlkCopy若目标数据库中没有DesTableName元素中的表名,那么需要自动创建目标表,ISAUtOCreateTabIe属性变为TrUe,并增加DeSCreateTabIeSqI元素,XmI如下图所示:QUIkCoPyIsAutoCreateTable=*trueaUsedVriable=*true*sele

13、ctAccount.StrACCoimtCOdeas科目编码,sum(AccountDaily.dblPostedDebit)as借方期初,SWi(ccOuntDaily.(IblPostedCredit)as货方期初,Q电子数据编号as电子数据编号fromAccountDailyINNERJOINAccountONAccoimtDaily.IngAccouxitID=Account.IngAccountIDWHEREyear(AccountDaily.strdat)Alt;年度GROUPBYAccount.StrAccountCode,Account.StrAccountName;OSrCS

14、q1GesCreateTableSqDCREATETABLEdbo.科目余额期初袤JemP(科目编码varchar(255)COLLATEChineseePRCeCIeASNOTNULLzt借方朝jmoneyNULL,货方期初moneyNULL,电子敦博编号v=char(255)ONPRIMARYOaPPingSrCColUinnName=货方期初DeSCoIUmnName=货方期初/tappingSrCColWnnName=电子数据编号DeSCoIUmnName=龟字数据编号”/OColumnMappingsOBulkCopQ1.6.3DllImportTaskTaskName=xsi:ty

15、pe=DllImportTask“DeSCriPtion=子员处理数据“4ODllInportTyPeNwne=cnaoA02011Ufo8Sqlbak.DealVithUFOffFileName=*cnaoA02011Ufo8sqlbak,dll*DlllmPOrtTaSk表示通过DLL处理的任务。其中,TyPeName为反射的类名,FileName表示动态链接库DLL的名称。第2章数据采集转换2.1 财务表采集参照中TBConvertWay表,根据字段对应关系和数据存储方式,编写SQL语句。其中,年度、单位名称、电子数据编号和电子数据名称这四个字段是每张表都必填的。1 .1.1会计科目表会

16、计科目表必填的字段有科目编码、科目名称、科目级别以及四个变量字段,余额方向不为必填字段,原始数据中有则填,没有的话账表重建时会根据AO基础库中的标准会计科目表自动生成。若中,TBConvertWay表的ISACCOUrHBaIDireCtion字段为1,那么表示源数据中会计科目表里有余额方向的字段。ACCoUmBaIDebit和AccountBalCredit字段分别表示借方和贷方对应的值。例如,AccountBalDebit的值为LAccoumBalCredit的值为D,那么余额方向的SQL语句应为:CaSeWhen余额方向字段=JthenIwhen余额方向字段=D,then-1else0e

17、ndas余额方向。ACCeSS中为iif(余额方向字段=J,l,iif(余额方向字段=tD,-l,0)as余额方向。中,通过SourceFieldNameasCNTargetFieldName的方式,编写出SQL语句,AccountTableName表示会计科目表的表名。如果IsAccountFilter为1,则要加上AccountFilter中的过滤条件(where.)例如:selectccodeas科目编码,ccode_nameas科目名称,igradeas科目级别,casewhenbproperty=-1then1whenbproperty=Othen-1elseOendas余额方向,年

18、度as年度,单位名称as单位名称,电子数据编号as电子数据编号,电子数据名称as电子数据名称fromcode;若没有科目级别字段,则根据科目编码生成科目级别。例如:selectccodeas科目编码,ccode_nameas科目名称,(selectcount(*)fromcodebwherea.ccodelikeb.ccode+%)as科目级别,casewhenbproperty=-1then1whenbproperty=0then-1else0endas余额方向,年度as年度,单位名称as单位名称,电子数据编号as电子数据编号,电子数据名称as电子数据名称fromcodeasa;2 .L2科

19、目余额期初表科目余额期初表必填的字段有科目编码、本币期初余额、余额方向、会计月份以及四个变量字段。通过SourceFieldNameasCNTargetFieldName的方式,编写出SQL语句,BalTableName表示科目余额表的表名。如果IsBalFilter为1,则要加上BalFilter中的过滤条件(where.)例如:selectccodeas科目编码,mbas本币期初余额,casewhencbegind_c-借,then1whencbegind_c-贷,then-1else0endas余额方向,年度as会计年份,1 as会计月份,年度as年度,单位名称as单位名称,电子数据编号

20、as电子数据编号,电子数据名称as电子数据名称fromGL_accsumwhereiperiod=(selectmin(iperiod)fromGL_accsum)andcbegind_c<>平;若BalTyPe为1,则需要对上级科目的本币期初余额进行汇总,例如:select科目编码,abs(isnull(本币期初余额,0)本币期初余额,casewhenisnull(本币期初余额,0)0then0when本币期初余额0then1else-1end余额方向,年度as会计年份,1会计月份,年度as年度,单位名称单位名称,电子数据编号电子数据编号,电子数据名称电子数据名称from(sel

21、ecta.科目编码,(selectSUm(本币期初余额*余额方向)本币期初余额from科目余额期初表_Tempbwherea.科目编码-SUbString(b.科目编码,1zIen(a.科目编码)andb.电子数据编号=临时电子数据编号)本币期初余额from会计科目表a)aBalDirCtionTyPe表示余额方向的存储类型,0表示字段显示借贷,1表示金额字段正负显示借贷,2表示根据科目类型显示借贷,3表示根据借余额和贷余额字段显示借贷。0:若BaIDebitSign字段为丁,BalCreditSign字段为D,那么SQL语句为casewhen余额方向字段=Jthen1when余额方向字段=D

22、then-1else0endas余额方向。1:SeleetabS(金额字段)as期初余额,casewhen金额字段0Ihen1,when金额字段0then-1,else0endas余额方向。2:casewhen科目编码like4I%,or科目编码liket5%,then1,else-1endas余额方向。3:SeIeCtCaSeWhen借方期初-贷方期初0Ihen1when借方期初-贷方期初0then-1elseOendas余额方向,abs(借方期初-贷方期初)as本币期初余额2.1.3 凭证库凭证库必填的字段有分录序号,凭证类型名称,借方金额,贷方金额,科目编码,摘要,凭证号,凭证日期和四个

23、变量字段。若数据库的TBConvertWay表的ISHaVeDebitereditSign字段为1,表示凭证库中金额的存储方式为金额和借贷方向。例如DebitSign为iiJff,CreditSign为iiDff0那么SQL语句应为CaSeWhen借贷方向字段=Tthen金额字段elseendas借方金额,casewhen借贷方向字段=4D,then金额字段elseOendas贷方金额。通过SourceFieldNameasCNTargetFieldName的方式,编写出SQL语句,VoucherTableName表示凭证库的表名。如果ISVoUCherFilter为1,则要加上Voucher

24、Filter中的过滤条件(where.)例如:selectconvert(varcharzi_id)as分录序号,ccodeas科目编码,mdas借方金额,meas贷方金额,Ccashieras出纳人,convert(varcharzidoc)as附件数,ebookas记账人,csignas凭证类型名称,convert(varcharzino_id)as凭证号,dbill_dateas凭证日期,ccheckas审核人,cdigestas摘要,cbillas制单人,年度as年度,单位名称as单位名称,电子数据编号as电子数据编号,电子数据名称as电子数据名称fromGL_accvouchwher

25、eiperiod<13andiperiod>OandYEAR(GL_date)年度andiflagisnull;若凭证库由主从表构成,则需要关联为一个表,用从表IeftjOin主表。若凭证库中,没有唯一标识字段作为分录序号,那么需要在AOEXtraCt库中建一个临时的凭证库表(凭证库emp)。这张临时表需要创建一个自增长字段,作为分录序号。最后从这张表中采集凭证库。若凭证库中不包含凭证辅助明细,那么必然有一个或几个关联字段,关联凭证库和凭证辅助明细这两张表。这一个或几个关联字段的值,合并起来作为分录序号。2.1.4 科目设置先在临时库(AOEXtraCt库)中插入科目层级表数据,然

26、后根据科目层级表在Ao财务库(AOFinanCe库)中插入科目设置数据。SQL语句应为:科目层级表:selecta.ccodeas科目编码,b.ccodeas第父级科目编码,电子数据编号as电子数据编号fromcodeasaleftjoincodeasbona.ccodelikeb.(ccode+%科目设置:selectsum(casewhen级别1then1elseOend)*本级长度)第一级科目长度,sum(casewhen级别-2then1else0end)*本级长度)第二级科目长度,sum(casewhen级别-3then1else0end)*本级长度)第三级科目长度,sum(case

27、when级别-4then1else0end)*本级长度)第四级科目长度,sum(casewhen级别-5then1else0end)*本级长度)第五级科目长度,sum(casewhen级别-6then1else0end)*本级长度)第六级科目长度,sum(casewhen级别-7then1else0end)*本级长度)第七级科目长度,sum(casewhen级别-8then1else0end)*本级长度)第八级科目长度,sum(casewhen级别-9then1else0end)*本级长度)第九级科目长度,sum(casewhen级别-10then1else0end)*本级长度)第十级科目长度

28、,sum(casewhen级别-11then1else0end)*本级长度)第十一级科目长度,sum(casewhen级别-12then1else0end)*本级长度)第十二级科目长度,sum(casewhen级别-13then1else0end)*本级长度)第十三级科目长度,sum(casewhen级别-14then1else0end)*本级长度)第十四级科目长度,sum(casewhen级别-15then1else0end)*本级长度)第十五级科目长度,sum(casewhen级别-16then1else0end)*本级长度)第十六级科目长度,sum(casewhen级别-17then1e

29、lse0end)*本级长度)第十七级科目长度,sum(casewhen级别-18then1else0end)*本级长度)第十八级科目长度,sum(casewhen级别-19then1else0end)*本级长度)第十九级科目长度,sum(casewhen级别-20then1else0end)*本级长度)第二十级科目长度,as编码分隔符,a.科目编码,年度as年度,单位名称as单位名称,电子数据编号as电子数据编号,电子数据名称as电子数据名称from(selecta.科目编码,a.第父级科目编码,c.级别,c.本级长度,a.电子数据编号from科目层级表aleftjoin(selecta.科目

30、编码,count(*)级别,Ien(科目编码)-isnull(selectmax(len(第父级科目编码)from科目层级表bwherea.科目编码-b.科目编码anda.科目编码>b.第父级科目编码),0)本级长度from科目层级表awhere电子数据编号临时电子数据编号groupbya.科目编码)cona.第父级科目编码-c.科目编码)awhere电子数据编号临时电子数据编号groupbya.科目编码Orderbya.科目编码2.1.5 辅助账若数据库的TBConvertWay表的AidFlag字段为1,表示数据中有辅助账。需要处理辅助信息表、辅助余额期初表和凭证辅助明细表。2.1.

31、5.1 辅助信息表辅助信息表需要参考Delphi的数据预处理代码。代码中会创建一个aidinfo表,包括AidType,AidCode,AidName,AidDec,AidvbuSourceFiledName,AidBaISoUrCeFiledName这几个字段。其中只需要用前三个字段。AidType对应辅助类型,AidCode对应辅助编码,AidName对应辅助名称。SQL语句应为:select,部门,as辅助类型,CDepCodeas辅助编码,CDepNameas辅助名称,年度as年度,单位名称as单位名称,电子数据编号as电子数据编号,电子数据名称as电子数据名称fromDepartme

32、ntunionselect,人员,as辅助类型,CPersonCodeas辅助编码,CPersonNameas辅助名称,年度as年度,单位名称as单位名称,电子数据编号as电子数据编号,电子数据名称as电子数据名称fromPerSon若数据包含多级辅助账,则还需要加入上级辅助编码和辅助级别两个字段,SQL语句例子:selecttl.辅助类型,tl.辅助编码,tl.辅助名称,tl.辅助级别,t2辅助编码as上级辅助编码,年度as年度,单位名称as单位名称,电子数据编号as电子数据编号,电子数据名称as电子数据名称from(select,部门,as辅助类型,a.StrDepartmentCodea

33、s辅助编码,a.StrDepartmentNameas辅助名称,(selectcount(*)fromDepartmentascwherea.StrDepartmentCodelikec.StrDepartmentCode+,%,)as辅助级别fromDepartmentasa)astlleftjoin(select,部门,as辅助类型,a.StrDepartmentCodeas辅助编码,a.StrDepartmentNameas辅助名称,(selectcount(*)fromDepartmentascwherea.StrDepartmentCodelikec.StrDepartmentCod

34、e+,%,)as辅助级别fromDepartmentasa)ast2ontl.辅助级别-12.辅助级别+1andtl.辅助编码Iiket2.辅助编码+,%,unionselecttl.辅助类型,tl.辅助编码,tl.辅助名称,tl.辅助级别,t2辅助编码as上级辅助编码,年度as年度,单位名称as单位名称,电子数据编号as电子数据编号,电子数据名称as电子数据名称from(select,人员,as辅助类型,a.StrEmployeeCodeas辅助编码,a.StrEmployeeNameas辅助名称,(selectcount(*)fromEmployeeascwherea.StrEmploye

35、eCodelikec.StrEmployeeCode+,%,)as辅助级别fromEmployeeasa)astlleftjoin(select,人员,as辅助类型,a.StrEmployeeCodeas辅助编码,a.StrEmployeeNameas辅助名称,(selectcount(*)fromEmployeeascwherea.StrEmployeeCoclelikec.StrEmployeeCode+%)as辅助级别fromEmployeeasa)ast2ontl.辅助级别-12.辅助级别+1andtl.辅助编码Iiket2.辅助编码-2.1.5.2 辅助余额期初表辅助余额期初表需要有

36、科目编码、辅助类型、辅助编码、期初余额、余额方向等。写SQL语句时,需要按科目编码、辅助编码、余额方向等字段,汇总期初余额的值。辅助余额表只需采集一月份的数据,SQL语句如下:selectccodeas科目编码,iif(cbegind_c借I1,iif(cbegind_c-,贷,-lzO)as余额方向,部门,as辅助类型,cdept_idas辅助编码,sum(mb)as期初余额,年度as年度,单位名称as单位名称,电子数据编号as电子数据编号,电子数据名称as电子数据名称fromGL_accasswhereiperiod=(selectmin(iperiod)fromGL_accass)and

37、(cdept_id<>,andcbegind_c<>jF,andcdept_idisnotnull)groupbyccode,iif(cbegind_c借Ilziif(cbegind_c-贷,-lzO),CdePjidunionselectccodeas科目编码,iif(cbegind_c借I1,iif(cbegind_c-,贷,-lzO)as余额方向,人员,as辅助类型,cperson_idas辅助编码,sum(mb)as期初余额,年度as年度,单位名称as单位名称,电子数据编号as电子数据编号,电子数据名称as电子数据名称fromGJaccasswhereiperiod=(selectmin(iperiod)fromGL_accass)and(cperson_id<>,andCpersonidisnotnullandcbegindc平)groupbyccode,iif(cbegind_c-借I1,iif(cbegind_c-贷I-1,0),cperson_id2.1.5.3 凭证辅助明细表凭证辅助明细表需要有分录序号、科目编码、借方金额、贷方金额、摘要、辅助类型、辅助编码字段。需要按辅助类型过滤记录。SQL语句如下:selecti_idas分录序号,c

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号