Dynamics AX 2012 R2 The Inventory module

Created at 2015-02-25 Updated at 2018-05-01 Category Microsoft Dynamics AX Tag Microsoft Dynamics AX

理解主要的类层次结构

InventMovement类

InventMovement类用于验证和准备数据,这些数据用于生成库存交易记录。在这个层次结构中,Super类是叫做InventMovement的抽象类。在这个层次结构中的所有其他类,都以InventMov_前缀开头。

例如,在处理Sales line transactions时,InventMov_Sales类用于验证和准备库存。在处理库存转移日记账时,使用InventMov_Transfer

InventUpdate类

InventUpdate类用于插入和更新库存交易。每当一个交易应该被过账时,InventUpdate相应的子类的updateNow()方法都会执行。在这个层次结构中,Super类是InventUpdate类,这个结构中的其他类是以InventUpd_前缀开头。

例如,每当在系统中输入一个物料行,代表着将来会生成一个物理交易,都会使用InventUpd_Estimated类。它可以是,例如,一个销售订单行,有在单销售状态。当一个这样的行在AX中被输入或生成,InventUpd_Estimated类会被触发,库存交易。。。

InventAdj类

每当库存交易调整时,会使用InventAdj类。典型的调整发生在,你关闭库存时。

InventSum类

InventSum类用于查看特定物料在特定日期的现有量信息。InventOnHand类用于查看当前的现有量信息。InventSum类不像之前的类,它没有在一个层次结构中。

使用Inventory dimensions

你马上不得不学的,是库存维度如何工作。基本的,InventDim表持有与一个物料相关联的所有不同维度的信息。这些维度可以被派生为三个类型:ItemStorage,和Tracking维度。默认地,AX有下面的维度:

  • 四个Item维度:这些维度是Color,Size,StyleConfiguration
  • 六个Storage维度:这些维度是Size,Warehouse,Location,Pallet(托盘),Inventory status,和License plate(号码牌,车辆的牌照)。
  • 五个Tracking维度:分别是Batch,Serial,Owner,Inventory Profile,和GTD号码。

基于配置键的启用,系统中会看到大量的维度编号。

查找库存维度

当在日记账中或交易中需要这些维度的结合时,我们总是查看是否已经存在该结合。如果有,我们将该日记账或交易记录连接到InventDim表。如果它不存在,就在InventDim新建一个,接着,我们连接到新纪录。这是通过使用InventDim表中的一个叫做findOrCreate的方法做的。你可以看看在下面的代码中是如何使用它的:

1
2
3
4
5
6
7
8
static void MSDynAX.Net_ReinhardTestJob1(Args _args)
{
InventDim inventDim;
inventDim.InventLocationId='01';
inventDim.InventColorId='02';
inventDim=InventDim::findOrCreate(inventDim);
info(inventDim.inventDimId);
}

查找当前现有量信息

你要知道的另一个事情,是如何查找在一个特定InventDim范围里,有多少物料可用。你可以通过将InventDim字段转换成一个InventDim变量,然后指定要使用哪个维度字段或维度字段的结合,用于获取现有量信息。在下面的例子中,我们搜索一个特定颜色的物料的现有量信息。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
static void MSDynAX.Net_ReinhardTestJob1(Args _args)
{
ItemId          itemId;
InventDim       inventDimCriteria;
InventDimParm   inventDimParm;
InventOnhand    inventOnhand;
itemId='10001';
//inventdimcriteria.InventColorId=’02’;
//inventdimparm.initFromInventDim(inventDimCriteria);
inventOnhand=inventOnhand::newItemId(itemId);
inventOnhand.parmInventDim(inventDimCriteria);
//inventOnhand.parmInventDimParm(inventDimParm);
inventOnhand.parmItemId(itemId);
info(strfmt('Available Physical:%1',inventOnhand.availPhysical()));
info(strfmt('On order:%1',inventonhand.onOrder()));
}

你也可以在inventDimCriteriaInventLocationId指定仓库。

查找特定日期的现有量信息

下面的例子让你可以查看特定颜色的特定物料,在特定日期的现有量信息。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
static void MSDynAX.Net_ReinhardTestJob1(Args _args)
{
ItemId          itemId;
InventDim       inventDimCriteria;
InventDimParm   inventDimParm;
InventSumDateDim    inventSumDateDim;

itemId='10001’;
//inventdimcriteria.InventColorId=’02’;
//inventdimparm.initFromInventDim(inventDimCriteria);
inventSumDateDim = InventSumDateDim::newParameters(mkDate(01,01,2015),
itemId,
inventDimCriteria,
inventDimParm);
info(strfmt('PostedQty:%1',inventSumDateDim.postedQty()));
info(strfmt('DeductedQty:%1',inventSumDateDim.deductedQty()));
info(strfmt('ReceivedQty:%1',inventSumDateDim.receivedQty()));
}

从代码中创建并过账一个库存日记账

下面,要学习如何自动创建并过账日记账。典型的,当执行数据迁移时,可以使用该方法。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
static void MSDynAX.Net_ReinhardTestJob1(Args _args)
{
InventJournalName  inventJournalName;
InventJournalTable inventJournalTable;
InventJournalTrans inventJournalTrans;
InventJournalTableData inventJournalTableData;
inventJournalTransData inventJournalTransData;
InventTable            inventTable;
InventDim              inventDim;

select firstonly inventTable;
select firstOnly inventJournalName
where inventJournalName.JournalType==InventJournalType::Movement;

inventJournalTable.clear();
inventJournalTable.initValue();
inventJournalTable.initFromInventJournalName(inventJournalName);
inventJournalTable.insert();
inventJournalTableData=JournalTableData::newTable(inventJournalTable);
inventJournalTrans.clear();
inventJournalTrans.initFromInventJournalTable(inventJournalTable);
inventJournalTrans.TransDate=systemDateGet();
inventJournalTrans.initFromInventTable(inventTable);
inventJournalTrans.Qty=3;
inventDim.initFromInventTable(inventJournalTrans.inventMovement()
.inventTable(),
InventItemOrderSetupType::Invent,inventDim);
inventDim=InventDim::findOrCreate(inventDim);
inventJournalTrans.InventDimId=inventDim.inventDimId;
inventJournalTransData=inventJournalTableData.journalStatic()
.newJournalTransData(inventJournalTrans,inventJournalTableData);
inventJournalTransData.create();
if(InventJournalCheckPost::newPostJournal(inventJournalTable).validate())
InventJournalCheckPost::newPostJournal(inventJournalTable).run();
}
Site by Reinhard Hsu using Hexo & Random

Hide