• D365 FO创建总账日记账


    AX在D365 FO之前的版本创建总账日记账每个人都有自己的做法,最终的目的都是写入表LedgerJournalTable和LedgerJournalTrans,AX2012之前相对简单,AX2012的财务维度变得很复杂,处理起来相对麻烦一些,AX也尝试用Ax*类来处理与第三方系统的交互。
    到了D365 FO引入了DataEntity的概念,具体DataEntity的概念和使用方法可以参见下文。
    https://docs.microsoft.com/en-us/dynamics365/fin-ops-core/dev-itpro/data-entities/data-entities
    按照文中的介绍,DataEntity主要用来做数据导入导出或者通过oData对外提供Restful接口,把D365 FO层次化的表结构变成扁平的Entity,以更自然的方式提供给用户,用DataEntity框架处理后台复杂的数据表关系。
    既然外部可以用,内部调用应该更没问题了。

    这里介绍一下如何通过LedgerJournalEntity创建日记账,代码如下:

     1 //Ledger           
     2             journalEntity.initValue();
     3             journalEntity.JournalBatchNumber = "CNMF-10002";
     4             journalEntity.JournalName = "Allocation";            
     5             journalEntity.TransDate = systemDateGet();            
     6             journalEntity.CurrencyCode = "CNY";
     7             journalEntity.AccountType = LedgerJournalACType::Ledger;
     8             journalEntity.AccountDisplayValue = "530198--001-1010-080";
     9             journalEntity.DebitAmount = 100;
    10             journalEntity.Text = "Hello Text";
    11             journalEntity.ChineseVoucherType = "Pay";            
    12             journalEntity.LineNumber++;       
    13             journalEntity.defaultRow();
    14             journalEntity.insert();
    15             
    16             //Cust
    17             journalEntity.initValue();
    18             journalEntity.JournalBatchNumber = "CNMF-10002";
    19             journalEntity.JournalName = "Allocation";
    20             journalEntity.TransDate = systemDateGet();
    21             journalEntity.CurrencyCode = "CNY";
    22             journalEntity.AccountType = LedgerJournalACType::Cust;
    23             journalEntity.AccountDisplayValue = strReplace("CNMF-000001", "-", "\-");
    24             journalEntity.DefaultDimensionDisplayValue = "-001-1010-080";
    25 ;           journalEntity.CreditAmount = 100;
    26             journalEntity.Text = "Hello Text";
    27             journalEntity.ChineseVoucherType = "Pay";            
    28             journalEntity.LineNumber++;                       
    29             journalEntity.defaultRow();
    30             journalEntity.insert();

    其他字段赋值都很简单,没什么好说的,主要说一下AccountDisplayValue和DefaultDimensionDisplayValue,在AX2012里创建过,特别是用代码创建过总账日记账的都很清楚,AX2012做账的时候其实分两大类
    1.分类账类型
    2.其他类型,其他类型包括客户,供应商,项目,固定资产和银行。
    这两大类日记账,无论是界面操作还是代码创建都是截然不同的。
    界面操作来说,分类账类型的日记账,是在一个输入框里输入科目和维度的,而其他类型,是先选客户,供应商,项目,固定资产和银行,再设置默认维度。

     其他类型的输入界面

    对应数据库表的字段:
    分类账类型的,会计科目和财务维度组成一个字段,写入LedgerDimension字段
    其他类型的是把客户,供应商,项目,固定资产和银行主表里的记录对应的RecId写入LedgerDimension字段,财务维度的组合写入DefaultDimension字段。
    了解了这个背景以后,就知道为什么Ledger的那一行只需要赋值AccountDisplayValue,而Cust那一行要赋值AccountDisplayValue字段和DefaultDimensionDisplayValue两个字段了。
    接下来一个问题就是,AccountDisplayValue和DefaultDimensionDisplayValue的值是用-分割的,DataEntity框架怎么知道每个-对应的是什么维度?
    这个需要在总账模块设置,路径:总账->会计科目表->维度->用于集成应用程序的财务维度配置

     其中默认维度格式对应DefaultDimension,分类账维度格式对应LedgerDimension,分类账维度格式必须选MainAccount。
    对于第三方集成,以上两种维度格式只能分别生效一个,分别用于生成DefaultDimension和LedgerDimension。
    所以这个维度格式要好好规划,要包含所有要用到的维度,要不然有些维度就导入不进来了。
    给AccountDisplayValue和DefaultDimensionDefaultValue赋值的时候,一定要按照上面格式定义的顺序来,要不然会报错,或者导入的数值不对。
    最后一个问题

    journalEntity.AccountDisplayValue = strReplace("CNMF-000001", "-", "\-");

    为什么要把-,加上一个转义符,因为 - 默认是维度段落的分隔符,而客户编码里包含了 - ,会导致框架在分析段落数的时候产生错误,所以要转义一下。
    当然也可以用其他段落的分隔符,在总账参数里可以设置。

  • 相关阅读:
    WebForm——浏览器兼容、旋转、缩放、倾斜、移动
    System.Thread.TImer控件——http://www.360doc.com/content/11/0812/11/1039473_139824496.shtml
    U8API——向U8数据库表导入数据
    Grid++Report——打印功能
    Winform—C#读写config配置文件
    WinForm—控制文本框只能输入整数(包括小数)
    WinForm—串口通讯
    SQL Server 数据库存储过程实例
    SQL Server数据库——数据库的数据导出与数据导入
    FlowPortal-BPM——功能:判断数据库表中字段是否重复并阻止提交或保存
  • 原文地址:https://www.cnblogs.com/Farseer1215/p/12810071.html
Copyright © 2020-2023  润新知