存档

2011年2月 的存档

经常日记账之余额法分配金额 & 修复Navision Bug

2011年2月13日 没有评论

在Navision中, 对于一些费用类科目, 我们可以在日常业务中, 计入公共科目.
然后在月结时, 采用经常日记账(Recurring Journal)中 Recurring Method = Balance 方式进行余额分配. 实现自动将余额全部分配完毕.

但, 在标准Navision中, 计算Balance方式是采用科目的Balance方式, 代码位于codeunit 13的UpdateRecurringAmt方法:


UpdateRecurringAmt(VAR GenJnlLine2 : Record “Gen. Journal Line”)
WITH GenJnlLine2 DO BEGIN
  IF (“Account No.” <> ”) AND
     (“Recurring Method” IN
       [“Recurring Method”::”B  Balance”,”Recurring Method”::”RB Reversing Balance”])
  THEN BEGIN
    GLEntry.LOCKTABLE;
    IF NOT RECORDLEVELLOCKING THEN BEGIN
      GenJnlAlloc.LOCKTABLE(TRUE,TRUE);
      LOCKTABLE(TRUE,TRUE);
    END;
    IF “Account Type” = “Account Type”::”G/L Account” THEN BEGIN
      GLAcc.”No.” := “Account No.”;
      GLAcc.SETRANGE(“Date Filter”,0D,”Posting Date”);
      IF GLSetup.”Additional Reporting Currency” <> ” THEN BEGIN
        “Source Currency Code” := GLSetup.”Additional Reporting Currency”;
        GLAcc.CALCFIELDS(GLAcc.”Additional-Currency Net Change”);
        “Source Currency Amount” := -GLAcc.”Additional-Currency Net Change”;
        GenJnlAlloc.UpdateAllocationsAddCurr(GenJnlLine2,”Source Currency Amount”);
      END;

      GLAcc.CALCFIELDS(“Net Change”);
      VALIDATE(Amount,-GLAcc.”Net Change”);
    END ELSE
      ERROR(
        Text022);
  END;
END;

上面代码中
GLAcc.SETRANGE(“Date Filter”,0D,”Posting Date”); 表示计算科目余额的时间段为0D至当前过账日期。
GLAcc.CALCFIELDS(“Net Change”);  表示获取科目在此期间的发生额。

而我们的科目做帐时,如果这个科目不仅仅公共部门有余额,在其他部门也有余额,那么就无法实现仅针对公共部门的余额。

所以在GLAcc.CALCFIELDS(“Net Change”); 前增加代码,增加对Dimension的过滤条件,就可以实现按照指定部门做余额分配了。