We came across an issue recently where the “Default account setup" Lookup form is listing Main Accounts from all Company Accounts. We are using Microsoft Dynamics AX 2012 CU-2. The selection in some queries brought unexpected results. For example: Under Accounts payable > Setup > Vendors > Vendor groups. Then select one Vendor and click “Default account setup”. The look up will then list the Main Accounts from all Company Accounts instead of only the current active Company Account.

The results are derived as a result of the where clause selection in \Data Dictionary\Tables\VendDefaultAccounts\Methods\notSelectedLedgerAccountList method


We worked around the issue by changing one line of code in the notSelectedLedgerAccountList method from

...

outer join RecId from dimAttributeValueCombo where
           dimAttributeValueCombo.DisplayValue == mainAccount.MainAccountId && 
           dimAttributeValueCombo.LedgerDimensionType == LedgerDimensionType::DefaultAccount

...

to:

...

outer join RecId from dimAttributeValueCombo where
           dimAttributeValueCombo.MainAccount == mainAccount.RecId &&
           dimAttributeValueCombo.LedgerDimensionType == LedgerDimensionType::DefaultAccount

 ...

 

For completeness, the full method code and modified line is shown in the highlight below:

 

public server static List notSelectedLedgerAccountList()
{
    MainAccount                         mainAccount;
    DimensionAttributeValue             dimAttributeValue;
    DimensionAttributeValueCombination  dimAttributeValueCombo;
    VendLedgerAccounts                  vendLedgerAccounts;
    List                                notSelectedFieldList    = new List(Types::Container);
    recId                               defaultAccountHierarchyId =
 DimensionHierarchy::getHierarchyIdByHierarchyType(DimensionHierarchyType::DefaultAccount);
    recId                               mainAccountDimAttribute =
 DimensionAttribute::getMainAccountDimensionAttribute();

    // Allow all posting types, so long as they are not closed
    // Only add the combination if it doesn't exist or doesn't exist as a ledger dimension on the
 vendLedgerAccounts table
    while select MainAccountId, Name, Type from mainAccount order by MainAccountId where
        mainAccount.LedgerChartOfAccounts == LedgerChartOfAccounts::current() &&
        mainAccount.Type != DimensionLedgerAccountType::Total
        outer join RecId from dimAttributeValueCombo where
            //dimAttributeValueCombo.DisplayValue == mainAccount.MainAccountId && //original code
            dimAttributeValueCombo.MainAccount == mainAccount.RecId && //modified Code
            dimAttributeValueCombo.LedgerDimensionType == LedgerDimensionType::DefaultAccount
        outer join RecId from vendLedgerAccounts where
            (vendLedgerAccounts.SummaryLedgerDimension == dimAttributeValueCombo.RecId ||
            vendLedgerAccounts.ClearingLedgerDimension == dimAttributeValueCombo.RecId ||
            vendLedgerAccounts.PurchasingLedgerDimension == dimAttributeValueCombo.RecId ||
            vendLedgerAccounts.PurchasingOffsetLedgerDimension == dimAttributeValueCombo.RecId)
        notexists join dimAttributeValue where
            dimAttributeValue.DimensionAttribute == mainAccountDimAttribute &&
            dimAttributeValue.EntityInstance == mainAccount.RecId &&
            (dimAttributeValue.IsSuspended == true ||
             dimAttributeValue.IsBlockedForManualEntry == true)
    {
        if (!vendLedgerAccounts)
        {
            notSelectedFieldList.addEnd([mainAccount.MainAccountId, mainAccount.Name, mainAccount.Type]);
        }
    }
    return notSelectedFieldList;
}

Disclaimer: 
This programming example is for illustration purposes only. Microsoft disclaims all warranties and conditions with regard to use of the programming example for other purposes. Microsoft shall not, at any time, be liable for any special, direct, indirect or consequential damages, whether in an action of contract, negligence or other action arising out of or in connection with the use or performance of the programming example. Nothing herein should be construed as constituting any kind of warranty.

 

--author: Mansour Yahya Mohamad Mansour