AX 本地化SP2 中国式凭证系统 学习笔记

AX 本地化SP2重写了中国式凭证系统,采取了更加松耦合的方式,尽可能地少修改代码,避免了因过多地修改SYS层代码而产生的bug。本文从使用SP2中国式凭证系统和学习代码的角度说一下使用AX 本地化SP2中国式凭证系统的感受。
一.使用
我们知道在SP1中,各个业务模块使用哪个编码规则生成凭证号是通过  总帐->设置->日志->凭证类型设置->凭证类型->关系,里面有很多过账类型,通过设置很多很多个过账类型来实现的,这样不是一般的繁琐,其实本地化只是要把凭证类型按照 收 付 转分 一下类而已,如果与各个过账类型联系起来,以后自己开发一些模块,也要放到这里来设一把有些不合时宜。
SP2使用会计科目来决定过账采用的凭证类型,这也比较切合国内的实际情况,国内的涉及现金和银行科目的才用收付凭证,其余的都用转账凭证,所以通过科目来决定过账采用的凭证类型也比较容易设置。


这个界面的前几个字段一眼就看出来了,后面的两个字段优先级和默认值需要测试一下才能知道它们的含义。先看一下规则,等说完规则再介绍这两个字段的含义。


我们可以看出上面有八个规则可用,对于收款凭证,我们可以设定借方必有 现金和银行类科目,对于付款凭证,我们可以设定贷方必有 现金和银行类科目。OK,这样就存在一个问题如果是从银行提现
借:现金 
贷:银行存款
这个既满足 收款凭证(借方必有 现金和银行类科目),又满足付款凭证(贷方必有 现金和银行类科目)。一般情况下从银行提现或者将现金存入银行都当作付款处理,那么如何将这类业务处理成使用付款凭证那?前面提到的优先级就有大显身手的机会了,嗯,是的,将付款凭证的优先级设得比收款凭证高就OK了。
其余的类型的交易应该都使用转账类型的凭证,如何处理那?将转账凭证勾上默认值,如果收款和付款凭证的条件(借贷方都没有现金或者银行存款类科目)都不满足,就会使用勾了默认值的转账凭证了。
当然这里只是说了一些简单的情况,如果还有其他情况,可以根据具体情况去设置。
二.代码学习:
1.在数据存储方面,AX SP2在LedgerTrans里添加了Voucher_CN和VoucherTypeId_CN这两个字段,使用这两个字段来存储本地化凭证号,原来SYS层的凭证号采用自己的逻辑生成,你走你的阳关道,我走我的独木桥,两者互不影响。
2.在业务逻辑层方面,完善了类NumberSeq_Voucher,增加了newGetVoucherFromCode,release和used等方法,用于处理编码的分配和释放以及使用。业务模块的中国式凭证的生成是通过LedgerVoucherObject的post方法中增加一段代码来实现的,另外该类还增加了getVoucherType_CN方法来获取当前交易应该使用何种凭证类型生成凭证号。
这样在系统中就会看到两套凭证号,一套是SYS层的凭证号,一套是GLS层本地化的凭证号,两者并行,互不影响。


你可以把凭证那个字段当成一个流水号,中国式凭证当作真正的凭证号,当然如果你觉得一山不能容二虎,欲处之而后快,完全可以把LedgerTrans的voucher隐藏掉,眼不见心不烦。
另外,SP2的凭证系统使凭证名称里的 过账时分配编号 的功能生效,在创建财务日志的时候不生成凭证号,因此已经可以做到保证过账后的凭证号连续了。
本文只是大略的介绍了一下自己使用SP2中国式凭证系统的感觉,如有错误还望指正。
感谢MBSCN网友lxw6的指教。

原文地址:https://www.cnblogs.com/Farseer1215/p/883408.html