我在AX 2012工作。 我尝试制作代码,我计算每个月的所有销售额,并将它们插入表格中的字段中。 这些字段称为Sales1,Sales2,Sales3等......表示一年中的月份。
有没有办法我可以选择这些字段并插入一段时间,如下面这个例子?
while select myTable where myTable.date >= startDate && myTable.date <= endDate
{
MyTable.("Sales" +MthOfYear(MyTable.Date)) += MyTable.SalesQty;
}
myTable.insert();
这是一个愚蠢的例子,但它应该显示我想要实现的......任何想法?
此致 肯特
答案 0 :(得分: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
如果您有任何问题或疑问,请不要犹豫,通过评论提问。
答案 1 :(得分:3)
虽然fieldName2Id可能会节省您的一天,但是AX反模式包含名为Sales1
,Sales2
... 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枚举,您可以按月,周,季度或其支持的任何内容进行分组。