2014-03-07 34 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枚舉你可以按月,周,季度或任何它支持的組。

相關問題