http://blogs.msdn.com/b/axinthefield/archive/2011/03/01/dynamics-ax-event-ids.aspx
vrijdag 20 september 2013
woensdag 21 augustus 2013
Reference the field added in LedgerJournalTrans to LedgerTrans in Ax 2009
maandag 8 juli 2013
Dimension (Field Value) Search Utility in Dynamics Ax
Source: http://paruvellas.wordpress.com/2012/03/15/dimension-field-value-search-utility-in-dynamics-ax/
In recent days, I got a specific requirement…
At our place, finance controller has decided to close one dimension value and need to replace the same with new dimension value.
To support this, we need to update all the transactions which have old dimension value, to new one.
Assume all the transactions, which are created Dimension [10] – Business unit with value 201, need to update as 203
{
TreeNode tn,fn;
TreeNodeIterator tni,fni,_tni;
Str objName;
SysDictField sysDictField;
Common common;
Query query = new Query();
QueryBuildDataSource qbs;
QueryBuildRange qbr;
TableId mTableId;
QueryRun qr;
;
tn = TreeNode::findNode(“\\Data Dictionary\\Tables”);
tni = tn.AOTiterator();
tn = tni.next();
while (tn)
{
objName = tn.treeNodeName();
tn = tni.next();
mTableId = tableName2id(objName);
sysDictField = new SysDictField(mTableId, fieldname2id(mTableId, “Dimension”)); // Finding table object which have Dimension field
if (sysDictField && Global::hasTableAccess(mTableId))
{
//info(objname);
try
{
qbs = query.addDataSource(mTableId);
qbr = qbs.addRange(fieldId2Ext(fieldname2id(mTableId, “Dimension”),10)); // using Dimension[10] in query range
qbr.value(“201?);
qr = new QueryRun(query);
while (qr.next())
{
common = qr.get(mTableId);
if (common.RecId)
{
common.selectForUpdate(true);
ttsbegin;
common.(fieldId2Ext(fieldname2id(mTableId, “Dimension”),10)) = “203?; //assigning the Dimension[10] value by using Common
common.update();
ttscommit;
info(strfmt(“%1 %2?,objName, int2str(common.RecId)));
}
}
}
catch(Exception::Error)
{
continue;
}
}
}
}
donderdag 4 juli 2013
Force delete inventtrans
Source: http://agusriyadi.blogspot.be/2009/08/force-delete-inventtrans.html
Below is sample job to force delete inventtrans, which will take care of invent on hand update.
static void DeleteInventTrans(Args _args)
{
Dialog dlg = new Dialog("Delete inventtrans ?");
DialogField dlgFld;
InventMovement inventMovement;
PurchLine purchLine;
PurchLineRefRecId recId;
;
dlgFld = dlg.addField(typeid(PurchLineRefRecId));
if(dlg.run())
{
recId = dlgFld.value();
purchLine = PurchLine::findRecId(recId);
if(purchLine)
{
InventMovement = InventMovement::construct(purchLine);
InventUpd_DeleteMovement::newMovement(
inventMovement,true).updateNow();
info("done");
}
}
}
On Hand Inventory fields explained
MS Dynamics AX 2009 has a very detailed information about inventory items; it gives a comprehensive information regarding stock which gives a clear vision about what in stock, what is reserved for customer or to be issued out, what is ordered from vendor or received in, and what have been posted or still in open transaction.
The below table descript the information in Items On hand form under Inventory Management->Common Forms->Item details->On hand button
Or it could be accessed through Sales Order/ Purchase Order/Inventory Movement/Production Order under Inventory button->On Hand
#
|
Label
|
Description
|
Comment
|
1
|
Physical inventory
|
Total available quantities
| |
2
|
Physical reserved
|
Quantities reserved in Sales Order
| |
3
|
Available Physical
|
Available physical quantities for transactions
|
3 = 1 – 2
|
4
|
Ordered in total
|
Total quantities in open
Purchase Order (did not received yet) | |
5
|
Ordered reserved
|
Quantities reserved from Purchase Order (did not received yet)
| |
6
|
Available for reservation
|
Quantities in open Purchase Orders
(did not received yet) available for reservation |
6 = 3 + (4 – 5)
|
7
|
On order in total
|
Quantity in open Sales Order
(did not delivered yet) | |
8
|
Total Available
|
Net available physical quantities for transaction
|
8 = 6 – 7
|
9
|
Posted quantity
|
Quantities posted financially
| |
10
|
Deducted
|
Quantities have physical packing list
updates in Sales Order | |
11
|
Picked
|
Quantities have picking list
update in Sales Order | |
12
|
Received
|
Quantities have physical updates
in Purchase Order | |
13
|
Registered
|
Quantities have registered
in Purchase Order | |
14
|
Physical cost amount
|
Amount posted in ledger physically
| |
15
|
Financial cost amount
|
Amount posted in leader financially
| |
16
|
Cost price
|
Item average cost
|
dinsdag 11 juni 2013
donderdag 7 maart 2013
Barcode reader/generator online
Barcode generator = http://www.morovia.com/free-online-barcode-generator/
Barcode reader = http://www.onlinebarcodereader.com/
vrijdag 25 januari 2013
Call Non-Static Method Dynamically
http://stackoverflow.com/questions/9098704/dynamics-ax-call-non-static-method-dynamically
public static anytype callMethod(str _className, str _methodName, container _parameters, Object _object = null)
{
DictClass dictClass;
anytype returnValue;
Object object;
ExecutePermission permission;
// Grants permission to execute the DictClass.callObject method.
// DictClass.callObject runs under code access security.
permission = new ExecutePermission();
permission.assert();
if (_object != null)
{
dictClass = new DictClass(classidget(_object));
object = _object;
}
else
{
dictClass = new DictClass(className2Id(_className));
object = dictClass.makeObject();
}
if (dictClass != null)
{
switch (conLen(_parameters))
{
case 0:
returnValue = dictClass.callObject(_methodName, object);
break;
case 1:
returnValue = dictClass.callObject(_methodName, object, conPeek(_parameters, 1));
break;
case 2:
returnValue = dictClass.callObject(_methodName, object, conPeek(_parameters, 1), conPeek(_parameters, 2));
break;
//... Continue this pattern for the number of parameters you need to support.
}
}
// Closes the code access permission scope.
CodeAccessPermission::revertAssert();
return returnValue;
}
woensdag 2 januari 2013
Custom Lookup - company id
{
SysTableLookup sysTableLookup;
Query query;
;
sysTableLookup = SysTableLookup::newParameters(tablenum(DataArea),this, false);
sysTableLookup.addLookupfield(fieldnum(DataArea, Id), true);
sysTableLookup.addLookupfield(fieldnum(DataArea, Name));
query = new Query();
query.addDataSource(tablenum(DataArea));
query.dataSourceTable(tablenum(DataArea)).addRange(fieldnum(DataArea,IsVirtual)).value(int2str(0));
sysTableLookup.parmQuery(query);
sysTableLookup.performFormLookup();
}