Thursday, October 20, 2016
Run report SSRS SrsReportRunController and passing parameter from form in AX 2012 R3
void clicked()
{
Query query;
LedgerJournalTable dataTable;
SrsReportRunController controller;
;
dataTable = LedgerJournalTable;
//info(strFmt('%1',dataTable.JournalNum));
controller = new SrsReportRunController();
controller.parmReportName('MyCustomReport.PrecisionDesign1');
query = controller.parmReportContract().parmQueryContracts().lookup('MyCustomReport_DynamicParameter');
//Set parameter value;
query.dataSourceNo(1).clearRanges();
query.dataSourceNo(1).addRange(fieldNum(MyCustomReportView, JournalNum)).Value(dataTable.JournalNum);
controller.runReport();
}
Reference:
http://xhellot.blogspot.co.id/
Thursday, October 13, 2016
Reverse Settlement Accout Receivable on AX 2012 R3
static void Update_Reverse_Settlement(Args _args)
{
CustTrans invCustTrans,findCustTrans;
SpecTransManager specTransManager;
DocumentNum invdocnumx,paydocnumx;
CustSettlement custSettlement;
AccountNum accnumx;
date paydatex;
CustTable custTable;
;
invdocnumx = 'PY16100100561';
accnumx = '631331';
select invCustTrans
order by TransDate asc
where invCustTrans.DocumentNum == invdocnumx
&& invCustTrans.AmountMST > 0
&& invCustTrans.AccountNum == accnumx;
while select findCustTrans where findCustTrans.RecId == invCustTrans.RecId
{
custTable = custTable::find(findCustTrans.AccountNum);
if(findCustTrans.TransType != ledgerTransType::Payment)
{
//We must go to the customer settlement table and locate the records that were used to settle the invoice in scope and pass them into the class
// that manages the marking and updating of applied credits and payments to invoices. We remove the credit marking to remove the link between the invoice
//and the credits used to settle the invoice. Then we must reverse the transactions using the reverseTransact method on the customer transaction table
select firstonly custSettlement where custSettlement.TransCompany == findCustTrans.dataAreaId &&
custSettlement.TransRecId == findCustTrans.RecId &&
custSettlement.AccountNum == findCustTrans.AccountNum;
specTransManager = SpecTransManager::newRefTableId(custTable,tablenum(custSettlement), true);
specTransManager.insert(custSettlement.DataAreaId, custSettlement.TableId, custSettlement.RecId, custSettlement.SettleAmountCur, findCustTrans.CurrencyCode);
custSettlement.CustVendSettlement::markOffsets(specTransManager, findCustTrans.CurrencyCode, true);
if (CustTrans::reverseTransact(custTable,null,settleDatePrinc::DateOfPayment,custSettlement.TransDate))
{
specTransManager.deleteAll();
}
}
}
info(strFmt('Done %1',findCustTrans.txt));
}
Reference:
http://www.winfosoft.com/blog/uncategorized/dynamics-ax-how-to-void-an-ar-payment-and-remove-applied-credits-to-invoices-using-code
{
CustTrans invCustTrans,findCustTrans;
SpecTransManager specTransManager;
DocumentNum invdocnumx,paydocnumx;
CustSettlement custSettlement;
AccountNum accnumx;
date paydatex;
CustTable custTable;
;
invdocnumx = 'PY16100100561';
accnumx = '631331';
select invCustTrans
order by TransDate asc
where invCustTrans.DocumentNum == invdocnumx
&& invCustTrans.AmountMST > 0
&& invCustTrans.AccountNum == accnumx;
while select findCustTrans where findCustTrans.RecId == invCustTrans.RecId
{
custTable = custTable::find(findCustTrans.AccountNum);
if(findCustTrans.TransType != ledgerTransType::Payment)
{
//We must go to the customer settlement table and locate the records that were used to settle the invoice in scope and pass them into the class
// that manages the marking and updating of applied credits and payments to invoices. We remove the credit marking to remove the link between the invoice
//and the credits used to settle the invoice. Then we must reverse the transactions using the reverseTransact method on the customer transaction table
select firstonly custSettlement where custSettlement.TransCompany == findCustTrans.dataAreaId &&
custSettlement.TransRecId == findCustTrans.RecId &&
custSettlement.AccountNum == findCustTrans.AccountNum;
specTransManager = SpecTransManager::newRefTableId(custTable,tablenum(custSettlement), true);
specTransManager.insert(custSettlement.DataAreaId, custSettlement.TableId, custSettlement.RecId, custSettlement.SettleAmountCur, findCustTrans.CurrencyCode);
custSettlement.CustVendSettlement::markOffsets(specTransManager, findCustTrans.CurrencyCode, true);
if (CustTrans::reverseTransact(custTable,null,settleDatePrinc::DateOfPayment,custSettlement.TransDate))
{
specTransManager.deleteAll();
}
}
}
info(strFmt('Done %1',findCustTrans.txt));
}
Reference:
http://www.winfosoft.com/blog/uncategorized/dynamics-ax-how-to-void-an-ar-payment-and-remove-applied-credits-to-invoices-using-code
Monday, October 10, 2016
Using jumpref method on PurchReqLine on AX 2012 R3
Override method jumpRef ItemId field on Form DataSources
public void jumpRef()
{
//super();
PurchReqLine _purchRLine;
Args args;
MenuFunction menuFunction;
Common rec;
;
_purchRLine = PurchReqLine;
rec = InventTable::find(_purchRline.ItemId);
args = new Args();
args.caller(element);
args.lookupRecord();
args.record(rec);
args.caller(element);
// Create a new MenuFunction that launches the Reasons Menu Item
menuFunction = new MenuFunction(menuitemdisplaystr(EcoResProductDetailsExtended),MenuItemType::Display);
menuFunction.run(args);
}
public void jumpRef()
{
//super();
PurchReqLine _purchRLine;
Args args;
MenuFunction menuFunction;
Common rec;
;
_purchRLine = PurchReqLine;
rec = InventTable::find(_purchRline.ItemId);
args = new Args();
args.caller(element);
args.lookupRecord();
args.record(rec);
args.caller(element);
// Create a new MenuFunction that launches the Reasons Menu Item
menuFunction = new MenuFunction(menuitemdisplaystr(EcoResProductDetailsExtended),MenuItemType::Display);
menuFunction.run(args);
}
Friday, August 19, 2016
Disable Password Policy on Active Directory (Domain) Win Server 2012
Error System.IO.File::Move when using batch process on AX 2012 R3
Problem:
On syntax
You get this error when using batch process:
"System.IO.IOException: The process cannot access the file because it is being used by another process"
Cause:
Possibility
A. Your AOS services is using user which have less security access to folders.
B. You read or access files but not closed yet.
Solution:
A. Add more security access to user who run the AOS services.
B. Closing File
Step-1
Close the files before
io = new TextIO(filenameOp, "r");
io.read();
On syntax
System.IO.File::Move(fileName, newFileName);
You get this error when using batch process:
"System.IO.IOException: The process cannot access the file because it is being used by another process"
Cause:
Possibility
A. Your AOS services is using user which have less security access to folders.
B. You read or access files but not closed yet.
Solution:
A. Add more security access to user who run the AOS services.
B. Closing File
Step-1
Close the files before
CodeAccessPermission::revertAssert();
Example:
io = new TextIO(filenameOp, "r");
io.read();
.....
io.finalized;
io = null;
CodeAccessPermission::revertAssert();
Step-2
Build Generate Increament CIL
Step-3
Close and Open AX.
Tuesday, July 19, 2016
Error when configuring Management Reporter 2012 for Dynamics AX 2012 R3
Problem:
You get error message when config MR 2012:
"An unexpected error occurred while querying the Metadata service"
System.ServiceModel.FaultException`1[Microsoft.Dynamics.Performance.Deployment.DataProvider.AX.AX2012MetadataService.MetadataFault]: An exception of type MetdataException has occurred while performing the operation. (Fault Detail is equal to Microsoft.Dynamics.Performance.Deployment.DataProvider.AX.AX2012MetadataService.BatchFault).
Cause:
You add custom fields to table which is used as Financial Dimension.
e.g. You add custom fields to InventLocation, and use the table as Custom as Financial Dimension.
Solution:
Add relations to fields on the table.
Every additional fields on the table which is used to Financial Dimension must have relations.
Reference:
a. How to add table to be use on Financial Dimension:
https://dynamicsaxinsight.wordpress.com/2014/07/14/ax-2012-add-financial-dimension-for-your-table/
b. Another same problem
https://community.dynamics.com/ax/f/33/t/123925
Thank's to David Orr
You get error message when config MR 2012:
"An unexpected error occurred while querying the Metadata service"
System.ServiceModel.FaultException`1[Microsoft.Dynamics.Performance.Deployment.DataProvider.AX.AX2012MetadataService.MetadataFault]: An exception of type MetdataException has occurred while performing the operation. (Fault Detail is equal to Microsoft.Dynamics.Performance.Deployment.DataProvider.AX.AX2012MetadataService.BatchFault).
Cause:
You add custom fields to table which is used as Financial Dimension.
e.g. You add custom fields to InventLocation, and use the table as Custom as Financial Dimension.
Solution:
Add relations to fields on the table.
Every additional fields on the table which is used to Financial Dimension must have relations.
Reference:
a. How to add table to be use on Financial Dimension:
https://dynamicsaxinsight.wordpress.com/2014/07/14/ax-2012-add-financial-dimension-for-your-table/
b. Another same problem
https://community.dynamics.com/ax/f/33/t/123925
Thank's to David Orr
Friday, April 22, 2016
Get List of Number Sequence in AX 2012 R3
static void Test_NumberSeqTableRef(Args _args)
{
NumberSequenceTable _nst;
NumberSequenceReference _nsr;
NumberSequenceDataType _nsd;
;
while select _nst
order by _nst.NumberSequence
join _nsr
where _nst.RecId == _nsr.NumberSequenceId
join _nsd
where _nsd.RecId == _nsr.NumberSequenceDatatype
&& _nst.Txt like 'AAA *'
{
info(strFmt('%1 ; %2 ; %3 ; %4 ; %5 ; %6',_nst.NumberSequence,_nst.Txt,_nst.Format,_nst.Highest,
_nsd.referenceLabelForDisplay(), _nsd.referenceModuleLabel() ));
}
}
{
NumberSequenceTable _nst;
NumberSequenceReference _nsr;
NumberSequenceDataType _nsd;
;
while select _nst
order by _nst.NumberSequence
join _nsr
where _nst.RecId == _nsr.NumberSequenceId
join _nsd
where _nsd.RecId == _nsr.NumberSequenceDatatype
&& _nst.Txt like 'AAA *'
{
info(strFmt('%1 ; %2 ; %3 ; %4 ; %5 ; %6',_nst.NumberSequence,_nst.Txt,_nst.Format,_nst.Highest,
_nsd.referenceLabelForDisplay(), _nsd.referenceModuleLabel() ));
}
}
Thursday, April 21, 2016
Class to Create Item Group include Main Account in AX 2012 R3
CreateInventGroup::Create(itemGroupx,itemGroupNamex,inventoryAccx,expenseAccx,revenueAccx,interUnitAccx);
==============
class CreateInventGroup
{
}
public static void Create(
ItemGroupId _itemGroupId,
Name _itemGroupName,
MainAccountNum _inventoryAcc,
MainAccountNum _expenseyAcc,
MainAccountNum _revenueAcc,
MainAccountNum _interUnitAcc,
MainAccountNum _wipAcc=''
)
{
InventPosting _inventPosting;
InventItemGroup _itemGroup0,_itemGroup;
InventItemGroupForm _itemGroupForm;
InventAccountType inventAcctTypeEnum;
InventPostingItemCode inventItemCodeEnum;
container conCOAInventory,conCOAExpense,conCOARevenue,conCOAInterunit,conCOAWIP;
ItemGroupId itemGroupx;
Name itemGroupNamex,invttypex;
MainAccountNum inventoryAccx,expenseAccx,revenueAccx,interUnitAccx,wipAccx;
int i,counterx;
;
itemGroupx = _itemGroupId;
itemGroupNamex = _itemGroupName;
inventoryAccx = _inventoryAcc;
expenseAccx = _expenseyAcc;
revenueAccx = _revenueAcc;
interUnitAccx = _interUnitAcc;
wipAccx = _wipAcc;
conCOAInventory = ['Inventory, issue',
'Inventory, receipt',
'Product receipt',
'Production, issue',
'Production, picking list',
'Production, receipt',
'Production, report as finished',
'Purchase, inventory receipt',
'Sales order, issue',
'Order, packing slip'];
conCOAExpense = ['Inventory, loss',
'Inventory, profit',
'Purchase expenditure for expense',
'Purchase expenditure for product',
'Sales order, consumption',
'Sales, packing slip offset'];
conCOARevenue = ['Sales order, revenue'];
conCOAInterunit = ['Inventory inter-unit payable','Inventory inter-unit receivable'];
conCOAWIP = [ 'Production, issue offset',
'Production, picking list offset',
'Production, receipt offset',
'Production, report as finished offset'];
_itemGroup0 = InventItemGroup::find(itemGroupx);
if(!_itemGroup0)
{
ttsBegin;
_itemGroup.clear();
_itemGroup.ItemGroupId = itemGroupx;
_itemGroup.Name = itemGroupNamex;
_itemGroup.validateWrite();
_itemGroup.insert();
ttsCommit;
if(inventoryAccx)
{
for (i=1; i <= conLen(conCOAInventory); i++)
{
invttypex = conPeek(conCOAInventory, i);
ttsBegin;
_inventPosting.clear();
_inventPosting.initValue();
_inventPosting.InventAccountType = str2enum(inventAcctTypeEnum,invttypex);
_inventPosting.ItemCode = str2enum(inventItemCodeEnum,'Group');
_inventPosting.ItemRelation = itemGroupx;
_inventPosting.CustVendCode = TableGroupAll::All;
_inventPosting.LedgerDimension = DimensionStorage::getDefaultAccountForMainAccountNum(inventoryAccx);
_inventPosting.validateWrite();
_inventPosting.insert();
ttsCommit;
DIP_CreateInventGroup::CreateUpdateGroupForm(itemGroupx,_inventPosting.LedgerDimension,invttypex);
}//for
}// if(inventoryAccx)
if(expenseAccx)
{
for (i=1; i <= conLen(conCOAExpense); i++)
{
invttypex = conPeek(conCOAExpense, i);
ttsBegin;
_inventPosting.clear();
_inventPosting.initValue();
_inventPosting.InventAccountType = str2enum(inventAcctTypeEnum,invttypex);
_inventPosting.ItemCode = str2enum(inventItemCodeEnum,'Group');
_inventPosting.ItemRelation = itemGroupx;
_inventPosting.CustVendCode = TableGroupAll::All;
_inventPosting.LedgerDimension = DimensionStorage::getDefaultAccountForMainAccountNum(expenseAccx);
_inventPosting.validateWrite();
_inventPosting.insert();
ttsCommit;
DIP_CreateInventGroup::CreateUpdateGroupForm(itemGroupx,_inventPosting.LedgerDimension,invttypex);
}//for
}// if(expenseAccx)
if(revenueAccx)
{
for (i=1; i <= conLen(conCOARevenue); i++)
{
invttypex = conPeek(conCOARevenue, i);
ttsBegin;
_inventPosting.clear();
_inventPosting.initValue();
_inventPosting.InventAccountType = str2enum(inventAcctTypeEnum,invttypex);
_inventPosting.ItemCode = str2enum(inventItemCodeEnum,'Group');
_inventPosting.ItemRelation = itemGroupx;
_inventPosting.CustVendCode = TableGroupAll::All;
_inventPosting.LedgerDimension = DimensionStorage::getDefaultAccountForMainAccountNum(revenueAccx);
_inventPosting.validateWrite();
_inventPosting.insert();
ttsCommit;
DIP_CreateInventGroup::CreateUpdateGroupForm(itemGroupx,_inventPosting.LedgerDimension,invttypex);
}//for
}// if(revenueAccx)
if(interUnitAccx)
{
for (i=1; i <= conLen(conCOAInterunit); i++)
{
invttypex = conPeek(conCOAInterunit, i);
ttsBegin;
_inventPosting.clear();
_inventPosting.initValue();
_inventPosting.InventAccountType = str2enum(inventAcctTypeEnum,invttypex);
_inventPosting.ItemCode = str2enum(inventItemCodeEnum,'Group');
_inventPosting.ItemRelation = itemGroupx;
_inventPosting.CustVendCode = TableGroupAll::All;
_inventPosting.LedgerDimension = DimensionStorage::getDefaultAccountForMainAccountNum(interUnitAccx);
_inventPosting.validateWrite();
_inventPosting.insert();
ttsCommit;
DIP_CreateInventGroup::CreateUpdateGroupForm(itemGroupx,_inventPosting.LedgerDimension,invttypex);
}//for
}// if(interUnitAccx)
if(wipAccx)
{
for (i=1; i <= conLen(conCOAWIP); i++)
{
invttypex = conPeek(conCOAWIP, i);
ttsBegin;
_inventPosting.clear();
_inventPosting.initValue();
_inventPosting.InventAccountType = str2enum(inventAcctTypeEnum,invttypex);
_inventPosting.ItemCode = str2enum(inventItemCodeEnum,'Group');
_inventPosting.ItemRelation = itemGroupx;
_inventPosting.CustVendCode = TableGroupAll::All;
_inventPosting.LedgerDimension = DimensionStorage::getDefaultAccountForMainAccountNum(wipAccx);
_inventPosting.validateWrite();
_inventPosting.insert();
ttsCommit;
DIP_CreateInventGroup::CreateUpdateGroupForm(itemGroupx,_inventPosting.LedgerDimension,invttypex);
}//for
}// if(interUnitAccx)
} //if(!_itemGroup0)
}
public static void CreateUpdateGroupForm(
ItemGroupId _itemGroupIdx,
LedgerDimensionDefaultAccount _ledgerDimDefaultx,
Name _inventAcctTypex
)
{
InventItemGroupForm _itemGroupForm,_itemGroupForm1;
InventAccountType inventAcctTypeEnum;
ItemGroupLedgerDimensionGroup itemGroupDimGroup;
;
select * from _itemGroupForm
where _itemGroupForm.ItemGroupId == _itemGroupIdx
&& _itemGroupForm.InventAccountType == str2enum(inventAcctTypeEnum,_inventAcctTypex);
switch(_inventAcctTypex)
{
Case 'Inventory, issue',
'Inventory, receipt',
'Inventory, loss',
'Inventory, profit',
'Inventory inter-unit payable',
'Inventory inter-unit receivable':
itemGroupDimGroup = ItemGroupLedgerDimensionGroup::Inventory;
break;
Case 'Production, issue',
'Production, picking list',
'Production, receipt',
'Production, report as finished',
'Production, issue offset',
'Production, picking list offset',
'Production, receipt offset',
'Production, report as finished offset':
itemGroupDimGroup = ItemGroupLedgerDimensionGroup::Production;
break;
Case 'Sales order, issue',
'Order, packing slip',
'Sales order, consumption',
'Sales, packing slip offset',
'Sales order, revenue':
itemGroupDimGroup = ItemGroupLedgerDimensionGroup::Sales;
break;
Case 'Purchase, inventory receipt',
'Product receipt',
'Purchase expenditure for expense',
'Purchase expenditure for product':
itemGroupDimGroup = ItemGroupLedgerDimensionGroup::Purchase;
break;
}//switch
if(!_itemGroupForm)
{
ttsBegin;
_itemGroupForm.clear();
_itemGroupForm.initValue();
_itemGroupForm.InventAccountType = str2enum(inventAcctTypeEnum,_inventAcctTypex);
_itemGroupForm.ItemGroupId = _itemGroupIdx;
_itemGroupForm.LedgerDimension = _ledgerDimDefaultx;
_itemGroupForm.LedgerDimensionGroup = itemGroupDimGroup;
_itemGroupForm.validateWrite();
_itemGroupForm.insert();
ttsCommit;
}
else
{
while select forupdate _itemGroupForm1
where _itemGroupForm1.ItemGroupId == _itemGroupIdx
&& _itemGroupForm1.InventAccountType == str2enum(inventAcctTypeEnum,_inventAcctTypex)
{
ttsBegin;
_itemGroupForm1.LedgerDimension = _ledgerDimDefaultx;
_itemGroupForm1.LedgerDimensionGroup = itemGroupDimGroup;
_itemGroupForm1.validateWrite();
_itemGroupForm1.update();
ttsCommit;
}
}
}
==============
class CreateInventGroup
{
}
public static void Create(
ItemGroupId _itemGroupId,
Name _itemGroupName,
MainAccountNum _inventoryAcc,
MainAccountNum _expenseyAcc,
MainAccountNum _revenueAcc,
MainAccountNum _interUnitAcc,
MainAccountNum _wipAcc=''
)
{
InventPosting _inventPosting;
InventItemGroup _itemGroup0,_itemGroup;
InventItemGroupForm _itemGroupForm;
InventAccountType inventAcctTypeEnum;
InventPostingItemCode inventItemCodeEnum;
container conCOAInventory,conCOAExpense,conCOARevenue,conCOAInterunit,conCOAWIP;
ItemGroupId itemGroupx;
Name itemGroupNamex,invttypex;
MainAccountNum inventoryAccx,expenseAccx,revenueAccx,interUnitAccx,wipAccx;
int i,counterx;
;
itemGroupx = _itemGroupId;
itemGroupNamex = _itemGroupName;
inventoryAccx = _inventoryAcc;
expenseAccx = _expenseyAcc;
revenueAccx = _revenueAcc;
interUnitAccx = _interUnitAcc;
wipAccx = _wipAcc;
conCOAInventory = ['Inventory, issue',
'Inventory, receipt',
'Product receipt',
'Production, issue',
'Production, picking list',
'Production, receipt',
'Production, report as finished',
'Purchase, inventory receipt',
'Sales order, issue',
'Order, packing slip'];
conCOAExpense = ['Inventory, loss',
'Inventory, profit',
'Purchase expenditure for expense',
'Purchase expenditure for product',
'Sales order, consumption',
'Sales, packing slip offset'];
conCOARevenue = ['Sales order, revenue'];
conCOAInterunit = ['Inventory inter-unit payable','Inventory inter-unit receivable'];
conCOAWIP = [ 'Production, issue offset',
'Production, picking list offset',
'Production, receipt offset',
'Production, report as finished offset'];
_itemGroup0 = InventItemGroup::find(itemGroupx);
if(!_itemGroup0)
{
ttsBegin;
_itemGroup.clear();
_itemGroup.ItemGroupId = itemGroupx;
_itemGroup.Name = itemGroupNamex;
_itemGroup.validateWrite();
_itemGroup.insert();
ttsCommit;
if(inventoryAccx)
{
for (i=1; i <= conLen(conCOAInventory); i++)
{
invttypex = conPeek(conCOAInventory, i);
ttsBegin;
_inventPosting.clear();
_inventPosting.initValue();
_inventPosting.InventAccountType = str2enum(inventAcctTypeEnum,invttypex);
_inventPosting.ItemCode = str2enum(inventItemCodeEnum,'Group');
_inventPosting.ItemRelation = itemGroupx;
_inventPosting.CustVendCode = TableGroupAll::All;
_inventPosting.LedgerDimension = DimensionStorage::getDefaultAccountForMainAccountNum(inventoryAccx);
_inventPosting.validateWrite();
_inventPosting.insert();
ttsCommit;
DIP_CreateInventGroup::CreateUpdateGroupForm(itemGroupx,_inventPosting.LedgerDimension,invttypex);
}//for
}// if(inventoryAccx)
if(expenseAccx)
{
for (i=1; i <= conLen(conCOAExpense); i++)
{
invttypex = conPeek(conCOAExpense, i);
ttsBegin;
_inventPosting.clear();
_inventPosting.initValue();
_inventPosting.InventAccountType = str2enum(inventAcctTypeEnum,invttypex);
_inventPosting.ItemCode = str2enum(inventItemCodeEnum,'Group');
_inventPosting.ItemRelation = itemGroupx;
_inventPosting.CustVendCode = TableGroupAll::All;
_inventPosting.LedgerDimension = DimensionStorage::getDefaultAccountForMainAccountNum(expenseAccx);
_inventPosting.validateWrite();
_inventPosting.insert();
ttsCommit;
DIP_CreateInventGroup::CreateUpdateGroupForm(itemGroupx,_inventPosting.LedgerDimension,invttypex);
}//for
}// if(expenseAccx)
if(revenueAccx)
{
for (i=1; i <= conLen(conCOARevenue); i++)
{
invttypex = conPeek(conCOARevenue, i);
ttsBegin;
_inventPosting.clear();
_inventPosting.initValue();
_inventPosting.InventAccountType = str2enum(inventAcctTypeEnum,invttypex);
_inventPosting.ItemCode = str2enum(inventItemCodeEnum,'Group');
_inventPosting.ItemRelation = itemGroupx;
_inventPosting.CustVendCode = TableGroupAll::All;
_inventPosting.LedgerDimension = DimensionStorage::getDefaultAccountForMainAccountNum(revenueAccx);
_inventPosting.validateWrite();
_inventPosting.insert();
ttsCommit;
DIP_CreateInventGroup::CreateUpdateGroupForm(itemGroupx,_inventPosting.LedgerDimension,invttypex);
}//for
}// if(revenueAccx)
if(interUnitAccx)
{
for (i=1; i <= conLen(conCOAInterunit); i++)
{
invttypex = conPeek(conCOAInterunit, i);
ttsBegin;
_inventPosting.clear();
_inventPosting.initValue();
_inventPosting.InventAccountType = str2enum(inventAcctTypeEnum,invttypex);
_inventPosting.ItemCode = str2enum(inventItemCodeEnum,'Group');
_inventPosting.ItemRelation = itemGroupx;
_inventPosting.CustVendCode = TableGroupAll::All;
_inventPosting.LedgerDimension = DimensionStorage::getDefaultAccountForMainAccountNum(interUnitAccx);
_inventPosting.validateWrite();
_inventPosting.insert();
ttsCommit;
DIP_CreateInventGroup::CreateUpdateGroupForm(itemGroupx,_inventPosting.LedgerDimension,invttypex);
}//for
}// if(interUnitAccx)
if(wipAccx)
{
for (i=1; i <= conLen(conCOAWIP); i++)
{
invttypex = conPeek(conCOAWIP, i);
ttsBegin;
_inventPosting.clear();
_inventPosting.initValue();
_inventPosting.InventAccountType = str2enum(inventAcctTypeEnum,invttypex);
_inventPosting.ItemCode = str2enum(inventItemCodeEnum,'Group');
_inventPosting.ItemRelation = itemGroupx;
_inventPosting.CustVendCode = TableGroupAll::All;
_inventPosting.LedgerDimension = DimensionStorage::getDefaultAccountForMainAccountNum(wipAccx);
_inventPosting.validateWrite();
_inventPosting.insert();
ttsCommit;
DIP_CreateInventGroup::CreateUpdateGroupForm(itemGroupx,_inventPosting.LedgerDimension,invttypex);
}//for
}// if(interUnitAccx)
} //if(!_itemGroup0)
}
public static void CreateUpdateGroupForm(
ItemGroupId _itemGroupIdx,
LedgerDimensionDefaultAccount _ledgerDimDefaultx,
Name _inventAcctTypex
)
{
InventItemGroupForm _itemGroupForm,_itemGroupForm1;
InventAccountType inventAcctTypeEnum;
ItemGroupLedgerDimensionGroup itemGroupDimGroup;
;
select * from _itemGroupForm
where _itemGroupForm.ItemGroupId == _itemGroupIdx
&& _itemGroupForm.InventAccountType == str2enum(inventAcctTypeEnum,_inventAcctTypex);
switch(_inventAcctTypex)
{
Case 'Inventory, issue',
'Inventory, receipt',
'Inventory, loss',
'Inventory, profit',
'Inventory inter-unit payable',
'Inventory inter-unit receivable':
itemGroupDimGroup = ItemGroupLedgerDimensionGroup::Inventory;
break;
Case 'Production, issue',
'Production, picking list',
'Production, receipt',
'Production, report as finished',
'Production, issue offset',
'Production, picking list offset',
'Production, receipt offset',
'Production, report as finished offset':
itemGroupDimGroup = ItemGroupLedgerDimensionGroup::Production;
break;
Case 'Sales order, issue',
'Order, packing slip',
'Sales order, consumption',
'Sales, packing slip offset',
'Sales order, revenue':
itemGroupDimGroup = ItemGroupLedgerDimensionGroup::Sales;
break;
Case 'Purchase, inventory receipt',
'Product receipt',
'Purchase expenditure for expense',
'Purchase expenditure for product':
itemGroupDimGroup = ItemGroupLedgerDimensionGroup::Purchase;
break;
}//switch
if(!_itemGroupForm)
{
ttsBegin;
_itemGroupForm.clear();
_itemGroupForm.initValue();
_itemGroupForm.InventAccountType = str2enum(inventAcctTypeEnum,_inventAcctTypex);
_itemGroupForm.ItemGroupId = _itemGroupIdx;
_itemGroupForm.LedgerDimension = _ledgerDimDefaultx;
_itemGroupForm.LedgerDimensionGroup = itemGroupDimGroup;
_itemGroupForm.validateWrite();
_itemGroupForm.insert();
ttsCommit;
}
else
{
while select forupdate _itemGroupForm1
where _itemGroupForm1.ItemGroupId == _itemGroupIdx
&& _itemGroupForm1.InventAccountType == str2enum(inventAcctTypeEnum,_inventAcctTypex)
{
ttsBegin;
_itemGroupForm1.LedgerDimension = _ledgerDimDefaultx;
_itemGroupForm1.LedgerDimensionGroup = itemGroupDimGroup;
_itemGroupForm1.validateWrite();
_itemGroupForm1.update();
ttsCommit;
}
}
}
Wednesday, January 6, 2016
Can not rename InventTable in AX 2012 R3
"You cannot rename the record because the table (InventTable) has a distribution type Same as parent distribution and not No distribution."
Solution:
Step-1
Menu: Retail > Setup > Parameters > Retail scheduler parameters
Step-2
Menu: Retail > Setup > Retail scheduler > Scheduler subjob
Remove and Add it back.
Solution:
Step-1
Menu: Retail > Setup > Parameters > Retail scheduler parameters
Step-2
Menu: Retail > Setup > Retail scheduler > Scheduler subjob
Remove and Add it back.
Subscribe to:
Posts (Atom)