第1章采集模板XML结构.docx
第1章采集模板XML结构1.l变量<Variables><VariableTyPe="BackFiIePath"Name=WDbSourceFileFath"VaIUe="7><VariableTyPe="sqlVar"Name="Q年度"Value=""/)<VariableTyPe="sqlVar"Name="©单彳立名称"Value="''"/<VariableType=wSqlVarwName="龟子数搪编号"Value="'"/<VariableTyPe="sqlVar“Name=电子数据卷称"Value="''"/<VariableTyPe="sqlVar"Name=临时龟子数据编号"Value="''"/<Variables这六个变量是每个模板都必须要有的,可直接CoPy。第一个变量DbSoUrCeFilePath表示的是数据源路径。由用户选择数据源时赋值。若对源数据进行了预处理,则在预处理代码中需要对该变量进行重新赋值。变量年度、单位名称、电子数据编号、电子数据名称表示的是会计数据的基本信息。由AO2011建立会计数据时赋值。变量临时电子数据编号,用于多套会计数据从AOExtract数据库采集到AoFinanCe数据库时,用于标识具体的每套会计数据。1.2数据库连接<Connections><Conn«ction乂刖="AOExtnCtTQePConn“tion"Connieti11Typ¢=*SqlConnction*ConnQctionString=""Dexription="AO柔簇临时乐连接"ConnectionHMhe="AOFinanceConnection“ConnectionType=4rSqlCoxmectionrCoanectionString=*Description三*ConnectionName=arSourceDbConnection*COnneCtlOnTyPW="OleDbComiection*ConnectionStrng三*rDeSCriPtiOn="源数据连挎"></Connections>SourceDbConnection表示源数据的连接。如果源数据是SQLServer,那么ConnectionType就是SqlConnection;如果源数据是Access或者是TXt文本,那么ConnectionType就是OleDbConnectionoAoExtractTempConnection表示AO采集模块临时库的连接,也就是AOExtract数据库的连接。AOFinanceConnection表示AO财务数据库的连接,即AOFinance数据库的连接。PreProccess>O'askName=*xsi:type=*yDllIportTask*DeSCriPtiOn="预处理数据.><DllImportTyPeName="cnajA02011_u£o_8_sql_bakDealWithUFO"FileName="cnao_A02011_u£o_8_sql_bak.dll*>Task<skxxityp*三*SqlTsk*vConntc11onNm三*AOExtrtctTtmpCoxmtction*D”CriPtiOn=*11空临时除数据"N<三*rcrtDb*><SqlDescription="清空会计科目裘"UsedVariable三*felse*>tnmcattable会计科自裘j;0Sql><SqlDeSCriPtig="房空凭证库"UsedVariable=<false*>truncatetable凭证库:Sql><SqlDeSCriPtiOn="碧空科目余额期初表"UsedVariable=false4rXrxmcatetable科目余额期初表:<Sql><SqlDeSCrIPtiOn="蒲空辅助信息去"UsedVariable=*false*v>truncatetable辅助信息表:<Sql><SqlXCnPug=情至聊余额期初夷"U"Wwablg-XnmCMtabk辆助余额初初表.<Sql><SqlD”CriPCion="清空凭证*鲂曲曲蓑"UsedVarable=*falst*>truncatttable谑证次助旗初知:<Sql><SqlDeSCriPtiOn="清空科目设置"UsedVariable=*false*>trmcatetable科目设置:<Sql><SqlDeSCriPtiOn="着空科目层级表“UsedVariable=*fal三e*vXruncatetable科目层级表;Sql><Task><PrProccss>如图所示,对源数据进行预处理,或者清空临时数据库等操作,放到PreProccesss该元素下。1.4 批量建账接口<AccoutListxsi:type=*DllAccoutList*Name=*DealfithAccount*TypeNjte三l*cnaoA02011ufo-8sqlbak.DealWxthccount*FileName=*cnaoA02011ufo8sql-bak.dll"DeSCribe="用友U8SqlSerger备份">DllAccoutList表示批量建账的接口,其中,TypeName为反射的类名,FileName表示动态链接库DLL的名称。1.5 Tasks和UpdateTask1.5.1 TasksTasks元素中主要是针对AOExtract数据库的操作,如数据从源数据中批量采集到AOExtract数据库。由于有多套会计数据采集的情况,AO是循环执行Tasks中的任务,所以BulkCopy中的SrcSql元素,SQL语句中都要有“电子数据编号as电子数据编号”这句,并且针对源数据的预处理操作不能够放在Tasks中,而要放到PreProccesss元素下。1.5.2 UpdateTaskUpdateTask元素主要是针对AOFinance数据库的操作,如数据从AOExtract数据库批量采集到AOFinance数据库,或数据从源数据中批量采集到AOFinance数据库。由于有多套会计数据采集的情况,Ac)是循环执行UPdateTaSk中的任务,所以若是数据从AOExtract数据库批量采集到AOFinance数据库,BulkCopy中的SrCSql元素,SQL语句中都要增加一个Where条件"where电子数据编号=临时电子数据编号”。另外,在UPdateTaSk元素的最后,要增加一个Task。用于将临时的电子数据编号,更新为创建会计数据时实际的电子数据编号。如下图所示:<?TaSkXSi:type="Sqask“ConrleCtionName="AOFinanceConnection“DeSCriPtiorI="更新目标数据表“Name=wUpdatetask*><SqlDeSCriPtion="更新会计科目表“USedVariabIe="true”Vpdate会计科目表set电子数据名称=0电子数据名称,单位名称一单位名称,年度=年度,电子数据编号电子数据编号WHERE电子数据编号=Q临时电子数据编号;Sql><SqlD”CriPtiOn="星斯科目余额期初表"U"dVnabl=*tru*>Update科目余额意初袤】“t电子数据名称=Q电子数据名称,单位名称”单位名称,年度二Q年度,电子数据牖号=Q电子数据漏号三RE电子数据编导=临时电子数据编号;<Sql><SqlDeSeriPtiOn=”更新凭证库”UsedVariable=*tme*>UPdate凭证库set电子数据名称或电子数据筋,单位名称=Q单位名称,年度二Q年度,电子数据编号=Q电子数据编号WHERE电子数据编号=Q临时电子数据编号;<Sql><SqlDeSCriPtiOn="更新辅助信息表"USedyariabIe="true")UPdate辅助信息表set电子数据名称/电子数据名称,单位名称/单位名称,年度一年度,电子数据编号/电子数据编号WHERE电子数据斓号=Q临B寸电子数据编号;<Sql>6qlDrcription="更新辅助余额期初整"UXedywble="true">UPdate辅助余额期初赛】set电子数据名称/电子数据名称,单位名称=Q单位名称,年度=Q年度,电子数据编号=Q电子数据编号WHERE电子数据编号临时电子数据编号;<Sql><SqlDeSCriPtiOn="更新凭证辅助明细表"UsedVariable="truew>Update凭证辅助明细表set电子额据名称=Q电子数据名称,单位名称W单位名称,年度=Q年度电子数据编号=电子数据编号WKERE电子数据编号=Q临时电子数据编号;<Sql>&qlDeSCriPtiOn="更新科目设置"UsedVariable=*trueUpdate科目设置set电子数据名称=色电子数据名称,单位名称=Q单位名称,年度=0年度,电子数据编号=«?电子数据编号WHERE电子数据斓号=Q临时电子数据端号;<Sql>&qlDeSCriPtion="即新会计期间定义"USedyariabIe="true">Update会计期间定义】“t电子数据名称电子数据名称,单位名称单位名称,年度=Q年度,电子数据编号=电子数据编号WHERE电子数据编号=Q临时电子数据编号;<Sql><Task>1.6 任务TaskTask元素包括三种类型,分别是SqlTask,SqlBulkCopyTask和DllImportTasko1.6.1 SqlTaskSqlTaSk用于执行SQL语句,例如InSert、Update>Delete>TnmCate等。如下图所示:<Taskxsi:type="SqlTask"ConnectionName三*OExtractTempConnection*DeSCriPtion="清空临时库数据“Name三*createDb*><SqlDeSCriPtion="r空会计科目表“UsedVariable=*false">truncatetable会计科自表:<Sql>GqlD”CriPtion=*4空凭证库”Us*dVariabl三*fls*>trunc<ttabi.凭证庵j;,Sql><SqlDeSCriPtiOn="清空科目余额期初表"USedVariabIe="false">tmncatetable科目余额期初表:<Sql><SqlDeSCriPtiQn=信空辅助信息表“VsedVariabl=wfalse*,>truncattable辅助信息表:</SqlS<SqlDeSCnPtIg="清空辅助余凝期初裹"UsedvariableifalsJXrscatetable辅前余熬期初裹;<Sql><SqlDeSCriPtiOn=信空凭在编处!由细夷“USedyariable="false">tmncatetable凭i辎助丽细美;,SqlGqlD”CriPtion=*空科目设置"UstdVtri*bl三*fls*>trunc<ttabi.科目设置;Sql<SqlDeSCriPtiOn="碧空科目层级表“UsedVariable=*false-Xruncatetable科自层级表:<Sql><Task>1.6.2 SqlBuIkCopyTask<Taskxsi.type="SqlBulkCopyTask"Name=wSqlbulkcopytaskl"SrCConneCtionName="SourCeDbConnection"DesCOnneCtiOnNae=*AOExIractTempCOnneCtion*DescriptiOn="采集到临时库”><!一科目层级表一>GUlkCoPyIsAutoCreateTable=*false*USedyariable="true"><SrcSqlselecta,ccodeas科目编码,b.ccodeas第父级科目编码,Q电子数据编号as电子数据编号fromcodeasaleftjoincodeasbOna.ccodlikeb.ccode+'%'<SrcSql>QeSTabIeName湘目层级表<DesTabIeNam>OOIMnMappings>OappingSrCColUmnName="科目编码"DeSCOIUmnName="科目编码”><MappingSrCColUmnName="第父级科目编码"DeSColumnNanIe="第父级科目编码”/><WappingSrCCOIwnnNam电="电子封据编号"DesCoIumnName="电字数据编号"/>COIumnMappings><BulkCopy><!一科目层级表结束一><TaskSqlBulkCopyTask用于批量拷贝数据。该元素下可以有多个BulkCopy元素。BulkCopy表示批量拷贝的SQL查询语句。其中,ColumnMappings中的字段要与查询语句中的字段数相对应,字段的顺序要一致。并且,SQL语句中的字段类型和目标字段类型要一致。如果SQL语句中的查询结果,与目标表完全一致,那么可以去掉COlUmnMaPPingS元素。如下图所示:QuIkCoPyIsAutoCreateTable=*fal三e*UsedVariable=*true*<SrcSql>select*from会计科目表where电子数据编号=Q临时电子数据编号;<SrcSql>QeSTabIeNae治计科目表ilesfableName>GBUlkCopy>若目标数据库中没有DesTableName元素中的表名,那么需要自动创建目标表,ISAUtOCreateTabIe属性变为TrUe,并增加DeSCreateTabIeSqI元素,XmI如下图所示:QUIkCoPyIsAutoCreateTable=*trueaUsedVriable=*true*<SrcSql>selectAccount.StrACCoimtCOdeas科目编码,sum(AccountDaily.dblPostedDebit)as借方期初,SWi(ccOuntDaily.(IblPostedCredit)as货方期初,Q电子数据编号as电子数据编号fromAccountDailyINNERJOINAccountONAccoimtDaily.IngAccouxitID=Account.IngAccountIDWHEREyear(AccountDaily.strdat)Alt;©年度GROUPBYAccount.StrAccountCode,Account.StrAccountName;OSrCSq1>GesCreateTableSqDCREATETABLEdbo.科目余额期初袤JemP(科目编码varchar(255)COLLATEChineseePRCeCIeASNOTNULLzt借方朝jmoneyNULL,货方期初moneyNULL,电子敦博编号v=char(255)ONPRIMARY<DesCreateTableSqlGesTwbleName困目余额期初表Jremj><DesTableNajne><ColumnNappings><appingSrCCOlufflnName="科目编码"DesCoIUmnName="科目编码”><WappingSrCCOlSnName="借方期初"DeSCOIUmnNaJne="借方助初”/>OaPPingSrCColUinnName="货方期初"DeSCoIUmnName="货方期初"/>tappingSrCColWnnName="电子数据编号"DeSCoIUmnName="龟字数据编号”/OColumnMappings>OBulkCopQ1.6.3DllImportTask<TaskName=""xsi:type="DllImportTask“DeSCriPtion="子员处理数据“4ODllInportTyPeNwne="cnaoA02011Ufo8Sqlbak.DealVithUFOffFileName=*cnaoA02011Ufo8sqlbak,dll*<Task>DlllmPOrtTaSk表示通过DLL处理的任务。其中,TyPeName为反射的类名,FileName表示动态链接库DLL的名称。第2章数据采集转换2.1 财务表采集参照中TBConvertWay表,根据字段对应关系和数据存储方式,编写SQL语句。其中,年度、单位名称、电子数据编号和电子数据名称这四个字段是每张表都必填的。1 .1.1会计科目表会计科目表必填的字段有科目编码、科目名称、科目级别以及四个变量字段,余额方向不为必填字段,原始数据中有则填,没有的话账表重建时会根据AO基础库中的标准会计科目表自动生成。若中,TBConvertWay表的ISACCOUrHBaIDireCtion字段为1,那么表示源数据中会计科目表里有余额方向的字段。ACCoUmBaIDebit和AccountBalCredit字段分别表示借方和贷方对应的值。例如,AccountBalDebit的值为LAccoumBalCredit的值为D,那么余额方向的SQL语句应为:CaSeWhen余额方向字段=JthenIwhen余额方向字段=D,then-1else0endas余额方向。ACCeSS中为iif(余额方向字段=J,l,iif(余额方向字段=tD,-l,0)as余额方向。中,通过SourceFieldNameasCNTargetFieldName的方式,编写出SQL语句,AccountTableName表示会计科目表的表名。如果IsAccountFilter为1,则要加上AccountFilter中的过滤条件(where.)例如:selectccodeas科目编码,ccode_nameas科目名称,igradeas科目级别,casewhenbproperty=-1then1whenbproperty=Othen-1elseOendas余额方向,©年度as年度,©单位名称as单位名称,©电子数据编号as电子数据编号,电子数据名称as电子数据名称fromcode;若没有科目级别字段,则根据科目编码生成科目级别。例如:selectccodeas科目编码,ccode_nameas科目名称,(selectcount(*)fromcodebwherea.ccodelikeb.ccode+'%')as科目级别,casewhenbproperty=-1then1whenbproperty=0then-1else0endas余额方向,年度as年度,单位名称as单位名称,©电子数据编号as电子数据编号,©电子数据名称as电子数据名称fromcodeasa;2 .L2科目余额期初表科目余额期初表必填的字段有科目编码、本币期初余额、余额方向、会计月份以及四个变量字段。通过SourceFieldNameasCNTargetFieldName的方式,编写出SQL语句,BalTableName表示科目余额表的表名。如果IsBalFilter为1,则要加上BalFilter中的过滤条件(where.)例如:selectccodeas科目编码,mbas本币期初余额,casewhencbegind_c-'借,then1whencbegind_c-'贷,then-1else0endas余额方向,年度as会计年份,1 as会计月份,©年度as年度,单位名称as单位名称,电子数据编号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(selecta.科目编码,(selectSUm(本币期初余额*余额方向)本币期初余额from科目余额期初表_Tempbwherea.科目编码-SUbString(b.科目编码,1zIen(a.科目编码)andb.电子数据编号=©临时电子数据编号)本币期初余额from会计科目表a)aBalDirCtionTyPe表示余额方向的存储类型,0表示字段显示借贷,1表示金额字段正负显示借贷,2表示根据科目类型显示借贷,3表示根据借余额和贷余额字段显示借贷。0:若BaIDebitSign字段为丁,BalCreditSign字段为D,那么SQL语句为casewhen余额方向字段='J'then1when余额方向字段='D'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 凭证库凭证库必填的字段有分录序号,凭证类型名称,借方金额,贷方金额,科目编码,摘要,凭证号,凭证日期和四个变量字段。若数据库的TBConvertWay表的ISHaVeDebitereditSign字段为1,表示凭证库中金额的存储方式为金额和借贷方向。例如DebitSign为iiJff,CreditSign为iiDff0那么SQL语句应为CaSeWhen借贷方向字段=Tthen金额字段elseendas借方金额,casewhen借贷方向字段=4D,then金额字段elseOendas贷方金额。通过SourceFieldNameasCNTargetFieldName的方式,编写出SQL语句,VoucherTableName表示凭证库的表名。如果ISVoUCherFilter为1,则要加上VoucherFilter中的过滤条件(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_accvouchwhereiperiod<13andiperiod>OandYEAR(GL_date)年度andiflagisnull;若凭证库由主从表构成,则需要关联为一个表,用从表IeftjOin主表。若凭证库中,没有唯一标识字段作为分录序号,那么需要在AOEXtraCt库中建一个临时的凭证库表(凭证库emp)。这张临时表需要创建一个自增长字段,作为分录序号。最后从这张表中采集凭证库。若凭证库中不包含凭证辅助明细,那么必然有一个或几个关联字段,关联凭证库和凭证辅助明细这两张表。这一个或几个关联字段的值,合并起来作为分录序号。2.1.4 科目设置先在临时库(AOEXtraCt库)中插入科目层级表数据,然后根据科目层级表在Ao财务库(AOFinanCe库)中插入科目设置数据。SQL语句应为:科目层级表:selecta.ccodeas科目编码,b.ccodeas第父级科目编码,电子数据编号as电子数据编号fromcodeasaleftjoincodeasbona.ccodelikeb.(ccode+'%'科目设置:selectsum(casewhen级别1then1elseOend)*本级长度)第一级科目长度,sum(casewhen级别-2then1else0end)*本级长度)第二级科目长度,sum(casewhen级别-3then1else0end)*本级长度)第三级科目长度,sum(casewhen级别-4then1else0end)*本级长度)第四级科目长度,sum(casewhen级别-5then1else0end)*本级长度)第五级科目长度,sum(casewhen级别-6then1else0end)*本级长度)第六级科目长度,sum(casewhen级别-7then1else0end)*本级长度)第七级科目长度,sum(casewhen级别-8then1else0end)*本级长度)第八级科目长度,sum(casewhen级别-9then1else0end)*本级长度)第九级科目长度,sum(casewhen级别-10then1else0end)*本级长度)第十级科目长度,sum(casewhen级别-11then1else0end)*本级长度)第十一级科目长度,sum(casewhen级别-12then1else0end)*本级长度)第十二级科目长度,sum(casewhen级别-13then1else0end)*本级长度)第十三级科目长度,sum(casewhen级别-14then1else0end)*本级长度)第十四级科目长度,sum(casewhen级别-15then1else0end)*本级长度)第十五级科目长度,sum(casewhen级别-16then1else0end)*本级长度)第十六级科目长度,sum(casewhen级别-17then1else0end)*本级长度)第十七级科目长度,sum(casewhen级别-18then1else0end)*本级长度)第十八级科目长度,sum(casewhen级别-19then1else0end)*本级长度)第十九级科目长度,sum(casewhen级别-20then1else0end)*本级长度)第二十级科目长度,''as编码分隔符,a.科目编码,©年度as年度,©单位名称as单位名称,电子数据编号as电子数据编号,©电子数据名称as电子数据名称from(selecta.科目编码,a.第父级科目编码,c.级别,c.本级长度,a.电子数据编号from科目层级表aleftjoin(selecta.科目编码,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.5.1 辅助信息表辅助信息表需要参考Delphi的数据预处理代码。代码中会创建一个aidinfo表,包括AidType,AidCode,AidName,AidDec,AidvbuSourceFiledName,AidBaISoUrCeFiledName这几个字段。其中只需要用前三个字段。AidType对应辅助类型,AidCode对应辅助编码,AidName对应辅助名称。SQL语句应为:select,部门,as辅助类型,CDepCodeas辅助编码,CDepNameas辅助名称,年度as年度,©单位名称as单位名称,电子数据编号as电子数据编号,电子数据名称as电子数据名称fromDepartmentunionselect,人员,as辅助类型,CPersonCodeas辅助编码,CPersonNameas辅助名称,©年度as年度,©单位名称as单位名称,电子数据编号as电子数据编号,电子数据名称as电子数据名称fromPerSon若数据包含多级辅助账,则还需要加入上级辅助编码和辅助级别两个字段,SQL语句例子:selecttl.辅助类型,tl.辅助编码,tl.辅助名称,tl.辅助级别,t2辅助编码as上级辅助编码,年度as年度,单位名称as单位名称,电子数据编号as电子数据编号,电子数据名称as电子数据名称from(select,部门,as辅助类型,a.StrDepartmentCodeas辅助编码,a.StrDepartmentNameas辅助名称,(selectcount(*)fromDepartmentascwherea.StrDepartmentCodelikec.StrDepartmentCode+,%,)as辅助级别fromDepartmentasa)astlleftjoin(select,部门,as辅助类型,a.StrDepartmentCodeas辅助编码,a.StrDepartmentNameas辅助名称,(selectcount(*)fromDepartmentascwherea.StrDepartmentCodelikec.StrDepartmentCode+,%,)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.StrEmployeeCodelikec.StrEmployeeCode+,%,)as辅助级别fromEmployeeasa)astlleftjoin(select,人员,as辅助类型,a.StrEmployeeCodeas辅助编码,a.StrEmployeeNameas辅助名称,(selectcount(*)fromEmployeeascwherea.StrEmployeeCoclelikec.StrEmployeeCode+'%')as辅助级别fromEmployeeasa)ast2ontl.辅助级别-12.辅助级别+1andtl.辅助编码Iiket2.辅助编码-2.1.5.2 辅助余额期初表辅助余额期初表需要有科目编码、辅助类型、辅助编码、期初余额、余额方向等。写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(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