本周有用户提到一个特殊的业务场景,比较有代表性,在此分享。
问题
“如果在一张JE中,某个科目既有借又有贷,金额相同。那么在General Ledger Report中此JE的借贷都显示为0。这与事实不符,所以是不对的。”
JE 155,660101科目借贷金额相同999.00。
在General Ledger上的借贷显示为0。
毫无疑问,这是错误的。
原因分析
由于General Ledger Report这个报表的数据源中,没有分离的Debit、Credit字段,而只有一个Amount(Gross)Debit/Credit字段,导致无法直接利用系统的原生功能进行借贷分别取数。在报表上只能呈现此科目的Gross Amount,就是0。这就是错误的原因所在。
老顾问都知道,在NetSuite的数据库中JE中“每行”的发生额实际是单独存储的,只是在原始的General Ledger Report中,被按“科目”给汇总了。
如果我们把General Ledger Report当作是一个View的话,其SQL表达大致为:
select account,type, date,document number,name, sum(gross amount)
from transaction_accounting_line
where transaction date in {date range} and subsidiary in {sub range}
group by account, type, date,document number,name,
假如一个JE中的科目相同,那么发生额加总,就是Sum(Gross Amount)后,就等于0。这就是错误所在。
解决办法
解决方法思路也很简单,就是引入一个JE行上的特征值,进入到Group By中,那么就能够把JE的每一行单独列示。例如,针对这个案例,我们的方法是:
在JE上增加辅助字段,来将相同科目的两行进行差异化标示。例如,在JE中增加一个“Line”的辅助字段,在JE中手工或自动填入不同的Line值。然后将此字段应用到General Ledger Report中,从而实现借贷发生额的分行显示。
如上图,问题解决。
启示
1. NetSuite的几个报表工具的数据源是不尽相同,但是大的差异是没有的。我们在处理Report、Saved Search、Workbook时,如果能够想想其背后的数据结构,那么碰到此类问题的思路就会清晰了。
2. NetSuite“财务报表”,有Financial Statement和Financial Report之分。由于具有强烈的用途区别,所以存在一些差异。我们需要搞清楚其差别所在,所谓大异小同,学问之道。
如果有任何关于NetSuite的问题,欢迎来谈。我的邮箱:rick.mao@truston.group