电脑桌面
添加蚂蚁七词文库到电脑桌面
安装后可以在桌面快捷访问

金蝶EAS Cloud EAS8.5发票云二开文档2021.03.doc

金蝶EAS Cloud EAS8.5发票云二开文档2021.03.doc_第1页
1/23
金蝶EAS Cloud EAS8.5发票云二开文档2021.03.doc_第2页
2/23
金蝶EAS Cloud EAS8.5发票云二开文档2021.03.doc_第3页
3/23
DOCID:KPSP_RM01_10_T01_需求规格说明书_V1.1③秘密信息严禁泄露报销与发票云集成的改造需求产品版本EASV8.5系统名称财务会计模块名称费用管理修订记录补丁号:PT156913(2021.03补丁)及更新版本补丁第1页/共23页Ver.No日期编制/修订审核批准修改的章节号V1.02021-03-20陈俊昌初始版本DOCID:KPSP_RM01_10_T01_需求规格说明书_V1.1③秘密信息严禁泄露1.导读1.以下对于方法的介绍全部以费用报销单为例子,所以对应的固定key对于其他单据来说会有修改2.熟悉流程后,如果是想对整个流程进行修改,需要对saveIniceXXXHandler及InvoiceFaçadeControllerBean中对应的方法修改,以获得自己需要的逻辑3.对某一种功能的修改需要在InvoiceFaçadeControllerBeanEX覆写对应的方法,然后将InvoiceFaçadeControllerBeanEX导出为jar包,以私包的形式加载4.对应的例子请参照10后台二开例子5.Biz:费用报销单bizOut:对公费用报销单pur:物品采购报销单tra:差旅费报销单6.环境:jdk1.6...7.现在eas会获得发票的所有信息,即全票信息,在InvoiceUtil.convertToBaseInvoiceData中组装,客户可根据自己需求自己取数据然后设置到二开字段中2.发票业务流程2.1.选择发票点击选择发票后,访问前台saveInvoice方法,然后再去访问后台selectCloudInvoiceHandler获取请求发票云的userkey,拿到这个userkey后,打开发票云选择发票界面,选完发票后,调用saveInvoiceHandler,访问发票云获得这些发票的详细信息,将发票信息转换成费用分录明细,然后刷新至前台,至此,选择发票流程结束2.2.查看发票点击查看发票后,访问前台showCLoudInvoice方法,然后会再去此方法访问后台showCloudInvoiceHandler判断,是否是苍穹生成的单据,如果是苍穹生成的单据,则拿苍第2页/共23页DOCID:KPSP_RM01_10_T01_需求规格说明书_V1.1③秘密信息严禁泄露穹的信息去打开查看发票界面。如果是eas单据,则获取此单关联的所有发票流水号,根据发票流水号访问发票云,获取查看发票所需的userkey,然后返回前台打开查看发票面2.3.分录查看与单头查看发票一样,只是传递给发票云的流水号是此条分录关联的发票,而不是整单的2.4.按行导入按行导入,其实调用的也是前台的保存saveInvoice(单头选择发票)方法,只是做了判断,如果是分录导入,则会访问另外一个后台changeInvoiceHandler,获得导入的所有发票发票流水号,与单据本身已经存在的发票做差值,得到本次导入的发票,访问发票云得到发票详细信息,将这些信息设置到所选分录上,返回前台,刷新界面2.5.费用分录合并费用分录合并,访问后台mergeEntryHandler,获得选中的这些费用分录中第一条的费用分录,获得这些费用分录关联的所有发票分录,将这些发票分录的bizEntryBill字段(发票分录与费用分录的关联关系字段)设置为第一条费用分录id。把选中的这些费用分录金额相加,设置到第一条费用分录上,将数据返回至前天,刷新界面2.6.费用分录删行费用分分录删行支持多选删除,访问后台delInvoiceHandler,找到选中的这些费用分录关联的所有发票,调用删除发票分录方法第3页/共23页DOCID:KPSP_RM01_10_T01_需求规格说明书_V1.1③秘密信息严禁泄露2.7.发票分录删行发票分录删行,调用后台delTicketEntryHandler,找到这些待删除发票分录生成的费用分录,如果是多张票生成一条费用分录的单据,直接删发票,删费用分录,如果是新版本,则支持一张票生成多个费用分录,所以需要额外处理,有一个多明细发票分录会存储这些发票明细的金额等字段,用于判断哪条费用分录减多少金额,删除时会找到这张票生成的费用明细,然后删除后,此条费用分录减去发票对应的明细金额,发票数量-1,发票号码字段去掉此张发票,返回前台刷新界面2.8.刷新前台界面刷新方法在每个编辑界面js的InvoiceClose方法中,如果存在分录id,则说明是分录导入,只用调用刷新分录的方法,否则为单头导入,调用刷新单头的方法客户最终看到的界面就是由此方法构造的,该方法分为以下三个节点:1.刷新费用明细分录。2.刷新发票明细分录3.刷新多收款人分录每个节点又分为两个小功能:1.删除原有分录(有的标准没有用到,但是预留给了二开)2.将根据发票信息生成的新分录刷新上去第4页/共23页DOCID:KPSP_RM01_10_T01_需求规格说明书_V1.1③秘密信息严禁泄露3.发票云导入流程第5页/共23页DOCID:KPSP_RM01_10_T01_需求规格说明书_V1.1③秘密信息严禁泄露3.1.导入发票在弹出的发票界面点击导入发票后,经由前台的saveInvoice方法,访问值后台Handler,发票处理逻辑在saveInvoiceXXXhandler中进行,具体可反编译/eas/server/deploy/easweb.ear/eas_web.war/WEB-INF/lib/cp_bc_waf2.jar进行查看3.2.SaveInvoiceHandler中的处理逻辑进入handler后,先处理从界面获得单据的信息baseInfo,具体为:1.访问发票云,获取此次导入发票的详细信息(getInvoiceData方法)此方法会组装发票的全票面信息,二开有需要可以直接取2.远程调用buildBillEntryAndTicketEntry(根据发票信息生成费用分录与发票分录)3.返回前台,刷新界面4.根据发票信息生成费用分录与发票分录此方法中,主要分为三个部分1._buildBillEntry根据发票信息生成费用分录(4.1)2._buildTicketEntry根据发票信息生成发票分录(4.2)3._buildVatInvoiceEntry根据发票信息生成多明细发票分录(4.3)4.1.根据发票信息生成费用分录此方法中共分为两个部分1.invoiceCloudGrouByBiz将发票信息分组(4.1.1.14.1.1.2)2.invoiceCloudBuildEntryByBiz将分组后的信息组装成费用分录(4.1.2)其中,重要的就是分组,分组后,有多少个分组就会生成多少条分录,我们可以通过控制分第6页/共23页DOCID:KPSP_RM01_10_T01_需求规格说明书_V1.1③秘密信息严禁泄露组,来控制此发票生成的费用分录4.1.1.将发票信息分组参数:InvoiceDataArray:票面信息数组spareMap:备用字段可以放二开需要的东西此方法中,采用linkedHashMap来存储发票信息,保证费用分录的发票号码顺序与发票分录保持一致。调用buildGroupMap返回一个map,里面存储了已经分组之后的发票信息buildGroupMap中调用groupVatInvoice,用于多明细发票分组map(一般为增值税和有多明细的非增值税发票)调用groupNoVatInvoice用于生成单明细发票分组map(一般为非增值税发票)4.1.1.1.生成多明细发票分组参数:invoiceData:一条发票的详细数据items:发票上的明细,有几条明细,这里面有多少数据spareMap:备用字段可以放二开需要的东西目前来讲,只要有税收分类编码的票,那么一定会放在多明细发票分组中,其中非增值税发票通用机打/通用机打电子发票也会走这个方法方法实现:相同税收分类编码,发票类型,税率的发票会合并至一行费用分录中,如果是差旅单,则还要加上相同的归类(室内,长途,住宿,其他分类)会合并至一行费用分录中,生成的费用分录信息会放在groupMap中,而多明细发票分录(用于多税率票生成不同的费用明细后删除扣减某一条明细的具体金额,而不是此票的全票金额)的数据会放在valueMap的vatEntryInfoCollection中一般来讲,增值税发票才会有不同的发票明细,所以需要生成多明细发票分录,在删除时用到第7页/共23页DOCID:KPSP_RM01_10_T01_需求规格说明书_V1.1③秘密信息严禁泄露4.1.1.2.生成单明细发票分组参数:invoiceData:一条发票的详细数据spareMap:备用字段可以放二开需要的东西非增值税发票,无税收分类编码,多明细的发票会走此归类算法方法实现:相同发票类型,税率的发票会合并至一行费用明细分录,如果是差旅单,则还要加上相同的归类(室内,长途,住宿,其他分类)会合并至一行费用分录中,同时,因为差旅单会二次归类,所以差旅单的发票将会全部设置到多明细发票分录中,因为合并后,需要记录此发票有多少金额,合并至此分录的哪个归类(室内,长途,住宿,其他分类)中,删除时需要去扣减此条发票的金额,其他金额不变4.1.2.将分组后的信息组装成费用分录参数:groupMap:发票分组后的信息baseInfo:单据信息spareMap:备用字段可以放二开需要的东西方法实现:循环分组后的groupMap,此map中有多少key就说明会生成多少费用明细分录第8页/共23页DOCID:KPSP_RM01_10_T01_需求规格说明书_V1.1③秘密信息严禁泄露4.2.根据发票信息生成发票分录参数:ticketDataArray:发票信息entryLinkInvoice:分录与发票分录的关联关系,key为费用分录id,value为发票流水号,多个发票流水号以逗号分隔spareMap:备用字段可以放二开需要的东西方法实现:根据发票信息生成对应单据的发票分录,同时需要记录生成的多明细发票分录的明细对应了发票分录的哪条分录4.3.根据发票信息生成多明细发票分录参数:vatInvoiceEntryList:多明细发票数据spareMap:备用字段可以放二开需要的东西方法实现:多明细发票分录第9页/共23页DOCID:KPSP_RM01_10_T01_需求规格说明书_V1.1③秘密信息严禁泄露4.4.将后台生成的数据刷新至前台方法实现:调用前台invoiceClose方法,其中单头导入与按行导入会走不同的刷新,目前来讲,费用报销现在导入发票只会做增量,即只添加发票,不在先删在添加,方法如下,这些方法都是public方法,可供客户二开,其中有些是空实现,如果客户有二开需求,可以直接覆写,如费用报销单的刷新收款人方法即是空实现,客户有想根据发票信息生成收款人分录的需求时,即可以二开复写refreshBillAccountEntry方法进行实现refreshBillEntry刷新费用明细分录refreshBillTicketEntry刷新发票明细分录refreshVATTicketEntry刷新多明细发票分录refreshBillAccountEntry刷新收款人分录至此导入发票的流程就已经完了,后台前台都将方法分为每一块,想要控制发票生成多少条费用明细,在InvoiceFacadeControllerBeanEx中覆写4.1.1方法即可,控制费用分录明细的内容,覆写4.1.2方法,控制发票分录的生成,则覆写4.2方法,生成多名发票分录的方法不建议覆写,这是标准才用到的第10页/共23页DOCID:KPSP_RM01_10_T01_需求规格说明书_V1.1③秘密信息严禁泄露5.按行导入发票按行导入分为两个部分,第一个是前台处理,在saveInvoice方法中判断,如果是属于按行导入,则进入changeInvoiceInfoAndEntry方法,访问后台changeInvoiceHander方法5.1.前台处理逻辑如果是分录导入的发票则进入changeInvoiceInfoAndEntry方法进行处理在此方法中会访问后台方法,后台处理完毕后,前台刷新界面需要注意的是,分录导入的刷新方法同样在invoiceClose中,只不过会走refreshChangeInvoice方法,而单头导入,刷新界面则会走另外一个分支5.2.后台处理逻辑changeInvoiceHandler方法用发票信息生成费用分录发票分录,然后返回至前台刷新。方法实现:因为单头导入和分录导入都是调用的单头选择发票方法,所以此时需要找到本次导入新导入的发票,然后去请求发票云获得这些发票的详细信息,通过远程调用第11页/共23页DOCID:KPSP_RM01_10_T01_需求规格说明书_V1.1③秘密信息严禁泄露InvoiceFacadeControllerBean中的buildChangeInvoiceAndEntry方法,去处理这些发票信息5.2.1.buildChangeInvoiceAndEntry处理逻辑参数:ticketDataArr:本次导入发票的信息baseInfo:单据信息spareMap:备用字段可以放二开需要的东西方法实现:1.清空单据所有费用分录,只留需要添加发票的那一条分录2.处理发票信息,用发票信息生成发票分录,生成的发票分录会存放在bizTicketEntries里面,需要注意的是,因为是分录导入,所以多税率的票,我们不在额外生成费用分录,会将金额合并,加在此条分录中,此处处理逻辑在items分支中3.然后是对此费用分录做修改,首先要判断这条数据是否是老数据,老数据的entrySerialNo分录关联发票流水号字段为空,所以只需要循环发票分录找到此条费用分录关联的发票分录,然后与此次导入的发票金额相加即可,如果entrySerialNo字段不为空,说明是新数据,新数据的金额直接加上此次导入的发票总金额即可4.处理分录中其他与发票相关字段,然后返回至changeInvoiceHandler6.费用分录合并业务实现:第12页/共23页DOCID:KPSP_RM01_10_T01_需求规格说明书_V1.1③秘密信息严禁泄露1.多选点击合并后,将保留最上面的一条费用分录,剩下的费用分录金额相加2.这些费用分类关联的发票,全部设置到第一条分录上3.重置金额,发票数量,发票号码等字段代码实现:访问前台mergeEntryRow方法,去请求后台mergeEntryHandler方法,经过后台处理后,返回前台,将需要修改的费用分录,删除的费用分录,发票分录,多明细发票分录刷新到前台6.1.合并后台方法处理参数:serialNoSet存储这些需要合并的费用分录关联的所有发票流水号enTicNumberList存储这些需要合并的费用分录关联发票的发票号码首先,循环这些选中的费用分录,找到这些费用分录关联的发票流水号,存储serialNoSet中,将这些费用分录关联的发票的发票号码放入enTicNumberList中,将金额相加,存储这些费用分录的公司,部门等信息第13页/共23页DOCID:KPSP_RM01_10_T01_需求规格说明书_V1.1③秘密信息严禁泄露然后,将这些发票分录,多明细发票分录中,关联的费用分录id,改为合并后的那条费用分录id,构建合并后的费用分录的币别,公司,部门等信息,而后返回前台刷新7.费用分录删行业务实现:前台访问entryGridDelRowById方法,在此方法中请求后台DelInoviceHandler然后找到这些需要删除的费用分录关联的发票分录id,然后调用删除发票分录的方法第14页/共23页DOCID:KPSP_RM01_10_T01_需求规格说明书_V1.1③秘密信息严禁泄露8.发票分录删除行参数:selectTicketIds:需要删除的发票分录id集合baseInfo:单据信息业务实现:1.找到需要删除发票分录的发票流水号,存起来2.如果是老数据,即一条费用分录对应一到多条发票分录的数据,发票分录与费用分录关联关系存储在发票分录中,直接删除这些发票分录即可3.如果是新数据,即一条发票对应一到多条费用分录,关系存储在费用分录的entrySerialNo中,则需要找到(多明细发票分录中存有发票明细对应的金额)这条发票生成的费用分录,然后删除4.如果是几张多明细的发票生成的费用分录合并了,删除某一张发票时,只删除这条明细对应的金额,不在删除全票金额代码实现:首先找到需要用的数据循环费用分录,如果是老数据(entrySerialNo为空),则删除此条费用分录,且联动删除这条分录关联的发票第15页/共23页DOCID:KPSP_RM01_10_T01_需求规格说明书_V1.1③秘密信息严禁泄露新数据(entrySerialNo不为空):1.分录没有关联此次要被删除的发票,跳过2.分录关联了需要被删除的发票循环此分录关联的发票流水号,如果这个发票流水号是要被删除的那张发票,则在entrySerialNo中删掉这个流水号,在entryTicNumber(费用分录的发票号码字段)中去掉这个发票号码。如果此分录删掉发票后,已经没有其他发票关联了,则删除这条分录3.删除时对差旅单和物品单的特殊处理第16页/共23页DOCID:KPSP_RM01_10_T01_需求规格说明书_V1.1③秘密信息严禁泄露vatEntryInfoMap中存储了多明细发票分录的数据,多明细发票分录中会以发票流水号加此发票关联的费用分录id为key,对应的多明细分录为value存储起来,删除的时候,会按照coseType删除对应的明细金额4.物品单的特殊处理同差旅单一样,只不过在物品单中需要注意的是num,而不是coseType,如果vatEntryColl为空,说明在多明细分录中不存在此条记录,这张票是单明细发票,删除时只用减去全票金额即可,否则,就循环多明细发票数据,找到对应的多明细记录,删除金额和num5.费用报销单和对公单第17页/共23页DOCID:KPSP_RM01_10_T01_需求规格说明书_V1.1③秘密信息严禁泄露如果vatEntryColl为空,说明在多明细分录中不存在此条记录,这张票是单明细发票,删除时只用减去全票金额即可,否则,就循环多明细发票数据,找到对应的多明细记录,删除金额6.删除完费用分录关联的发票后,重置此条分录关联的发票流水号和发票号码字段7.返回前台的数据第18页/共23页DOCID:KPSP_RM01_10_T01_需求规格说明书_V1.1③秘密信息严禁泄露delEntryies:需要删除的费用分录iddelTicketEntries:需要删除的发票分录iddelVatTicketEntries:需要删除的多明细发票分录ideditEntries:需要修改的费用分录8.前台刷新数据在bizCollBillBase.entryGridBatchDel方法中,我们会将后台返回的数据刷新至前台界面9.基于web端的二开例子以下只是告诉你怎么二开,千万别按照我这样来,费用分录导入发票后是一定要刷新的9.1.导入发票后不想刷新费用分录在二开文件中,写入如下方法,该方法代表了覆盖标准方法,不在执行标准同名方法,只执行二开js文件中定义的(deleteBizEntry为标准方法名称)BizAccountBill_Edit_Open.deleteBizEntry=function(){console.log("不在删除费用明细分录了");第19页/共23页DOCID:KPSP_RM01_10_T01_需求规格说明书_V1.1③秘密信息严禁泄露}此图可以看到,导入发票后,原有的费用分录不在进行删除操作,而是直接执行了第二步,将发票生成的费用明细分录刷新至前台9.2.导入发票后,想对费用分录做些处理首先,保证复写的方法名称,参数与标准产品相同BizAccountBill_Edit_Open.refreshBizEntry=function(result){}刷新方法,需要先执行标准方法,将发票生成的信息刷新到界面后,而后二开根据自己需求,在对数据进行处理执行标准方法注意事项:1.命名规范super_开头,下划线后跟标准方法名称2.调用标准方法请写在二开js文件的pulic中,方法不带参数,不带参数,不带参数例:重写标准刷新分录方法super_refreshBizEntry:_self.refreshBizEntry3.调用时,调用本js的public方法中定义的方法即可,此时要带上标准方法需要的参数,例如:_public.super_refreshBizEntry(result);4.复写完标准方法后,就可以进行自己的二开操作了,以下例子仅介绍一个改字段内容,后续会在标准方法中进行优化,使更改内容更加简便,后续更新时,同时会更新文档5.复杂的比如根据某中发票类型做客户定制化业务操作是,判断result就可以了,在刷新费用费用分录方法中,result为后台传递至前台的新费用分录信息,在刷新发票分录方法中,result为后台传递至前台的新发票分录信息第20页/共23页DOCID:KPSP_RM01_10_T01_需求规格说明书_V1.1③秘密信息严禁泄露10.后台二开例子10.1.所有发票合并一行根据4.1讲解来说,有多少个分组就会生成多少条分录,保证分组groupMap只有一条数据,所以我们只需要在InvoiceFacadeControllerBeanEx中,覆写InvoiceCloudGroupByBiz方法即可类似下图所示:10.2.发票分录或费用分录添加二开字段比如说我们想要在发票分录添加此条发票的警告或拦截信息,此时,我们需要在发票分录二开一个字段,来存储这个警告信息,然后在InvoiceFacadeControllerBeanEx中覆写InvoiceCloudBuildTicketEntryByBiz方法即可,因为现在已经获得了全票信息,后续有想加的字段直接取就行,这个在3.2中已经讲过了类似下图所示:第21页/共23页DOCID:KPSP_RM01_10_T01_需求规格说明书_V1.1③秘密信息严禁泄露10.3.根据发票信息生成收款人分录如果费用报销单想根据发票信息生成收款人分录,此时,我们需要在InvoiceFacadeControllerBeanEx中覆写InvoiceCloudBuildAccountEntryByBiz方法即可。类似下图所示:然后在saveInvoiceHandler中添加这个收款人分录,返回至前台第22页/共23页DOCID:KPSP_RM01_10_T01_需求规格说明书_V1.1③秘密信息严禁泄露前台刷新覆写refreshAccountEntry即可11.注意,必看发票二开已经拆分为一个一个的模块,想二开什么对着对应的模块进行方法的复写即可,禁止二开人员直接修改标准文件,修改标准文件会导致客户无法安装后续补丁,安装补丁就会刷新标准文件,那么在标准文件上进行的二开会是无用功,发票所有功能都预留有二开接口,所以禁止二开标准文件,包括后台及前台js文件,二开标准引发的一系列问题由二开人员承担第23页/共23页

1、当您付费下载文档后,您只拥有了使用权限,并不意味着购买了版权,文档只能用于自身使用,不得用于其他商业用途(如 [转卖]进行直接盈利或[编辑后售卖]进行间接盈利)。
2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。
3、如文档内容存在违规,或者侵犯商业秘密、侵犯著作权等,请点击“违规举报”。

碎片内容

金蝶EAS Cloud EAS8.5发票云二开文档2021.03.doc

确认删除?
回到顶部
客服QQ
  • 客服QQ点击这里给我发消息
QQ群
  • 答案:my7c点击这里加入QQ群
支持邮箱
微信
  • 微信