2014-03-07 31 views
2

我在AX 2012工作。 我尝试制作代码,我计算每个月的所有销售额并将它们插入到表中的字段中。 这些字段被称为Sales1,Sales2,Sales3等...代表一年中的月份。如何使用动态字符串插入表格字段?

有没有一种方法可以选择这些字段并在一段时间内插入到它们中选择下面的示例?

while select myTable where myTable.date >= startDate && myTable.date <= endDate 
{ 
    MyTable.("Sales" +MthOfYear(MyTable.Date)) += MyTable.SalesQty; 
} 

myTable.insert(); 

这是一个愚蠢的例子,但它应该表现出什么,我想达到...任何想法?

问候 肯特

回答

3

我觉得你的主要问题是如何在一个字符串变量有其名访问一个字段? 如果是这样的话,那么请看看以下两个链接:

How to convert field name to its ID

How to access a table field by ID

简而言之:你必须使用fieldName2Id到您的字段名称转换为相应的字段ID的第一位。之后,您可以使用语法myTable.(fieldId)访问此字段。

为了把它一起为您的情况:

myTable.(fieldName2Id(myTable.TableId, strfmt("%1%2", "Sales", mthofyr(myTable.Date)))) += myTable.SalesQty 

如果您有任何问题或疑问,不要犹豫,请通过评论问。

+0

这工作!正是我想要的。谢谢一堆! – Heygar

+0

这让我很高兴。请接受它作为答案。谢谢 – DAXaholic

3

虽然fieldName2Id可以节约你的时间,这是一个AX反模式有一个名为Sales1Sales2 ... Sales17领域。为什么?因为AX支持表中的数组(尽管只有固定大小)。

要使用它,请定义一个新的扩展数据类型SalesAmountMonth,执行SalesAmount(或其他)。 将它标记为“1月”。然后在节点“数组元素”中为“二月”,“市场”添加一个新的数组元素,直到“十二月”。见How to Define an Extended Data Type as an Array

然后将扩展数据类型添加到您的表中。

你的字段访问是那么很简单:

myTable.Sales[mthofyr(myTable.Date)] += myTable.SalesQty; 

我更喜欢使用日期索引这样的intvNo功能,因为它有更多的灵活性:

myTable.Sales[intvNo(myTable.date, startDate, IntvScale::YearMonth) + 1] += myTable.SalesQty; 

通过改变IntvScale枚举你可以按月,周,季度或任何它支持的组。

相关问题