Posts Tagged ‘ MainAccount

How to modify MainAccount Lookup in Segmented Entry Control

Hi

One of my friend asked me  “How can i modify MainAccount lookup in Segmented entry control?”. I did not know how to do that. After some research i found LedgerDimensionAccountController class which controls Segmented Entry Control.  After some working i found a method named restrictQueryForMainAccounts() .


public static void restrictQueryForMainAccounts(QueryBuildDataSource
                                             _queryBuildDataSource)
{
    QueryBuildRange qbr;
    //--> FD
    QueryBuildRange qbrFD;
    // <-- FD

    str evalCriteria = strFmt('(%1.Type != %2)',
        _queryBuildDataSource.name(),
        queryValue(enum2int(DimensionLedgerAccountType::Reporting)));
    ;

    qbr = _queryBuildDataSource.addRange(fieldNum(DimAttributeMainAccount, Type));
    qbr.value(evalCriteria);
    qbr.status(RangeStatus::Hidden);

    //--> FD
    qbrFD = _queryBuildDataSource.addRange(fieldNum(DimAttributeMainAccount, value));
    qbrFD.value("3*");
    // <-- FD
}

If you open segmented entry control and lookup mainAccount before modification of this method you can see all MainAccounts .

If you modify the method you can see only data starts with “3″ as you can see blow image.

It may not be the correct way to do this but it works. I dont recommend to do such a modification at framework classes. If you have to, be very careful.

Until next time.

Dynamics Ax 2012 DimensionStorage sınıfı

Merhaba

Ax 2012 muhasebe yapısında işimizi kolaylaştıracak bir sınıftan bahsetmek istiyorum. DimensionStorage sınıfı. Bu sınıf bir çok işlemi bizim için yapacak statik metotlara sahip. Özellikle genel muhasebe hesabı ve boyutların birbirleriyle olan ilişkilerinde çok işe yarıyor. Bir job ile bazı statik metotlarını anlatmaya çalışacağım.


static void FD_DimensionStorage(Args _args)
{
    DimensionAttributeValueCombination  dimAttrValueCombDefaultAccount;
    DimensionAttributeValueCombination  dimAttrValueComb;
    DimensionAttributeValueCombination  dimAttrValueCombCompare;
    DimensionAttributeValueCombination  dimAttrValueCombCust;
    DimensionAttributeValueSet          dimAttrValueSet;
    MainAccount                         mainAccount;
    CustTable                           custTable;
    LedgerJournalACType                 ledgerJournalACType;
    DimensionHierarchy                  dimHierarchy;
    ;
    // Örneklerde kullanmak için bazı kayıtları buluyorum
    dimAttrValueCombDefaultAccount  = DimensionAttributeValueCombination::find(5637159810);
    dimAttrValueComb                = DimensionAttributeValueCombination::find(5747268059);
    dimAttrValueCombCompare         = DimensionAttributeValueCombination::find(5747267556);
    mainAccount                     = MainAccount::find(5637146572);
    dimAttrValueSet                 = DimensionAttributeValueSet::find(5747251227);
    custTable                       = CustTable::find("1101");

    // Bir hesap ve tip alarak size LedgerDimension'da kayıt varsa getirir yoksa oluşturur.
    dimAttrValueCombCust = DimensionAttributeValueCombination::find(
          DimensionStorage::accountNum2LedgerDimension(custTable.AccountNum , LedgerJournalACType::Cust));
    info(strfmt("LedgerDimension RecId = %1" , dimAttrValueCombCust.RecId));

    // İki LedgerDimension'nın MainAccount'larının eşit olup olmadığını kontrol eder.
    info(strfmt("MainAccount'lar aynı mı?  %1" ,
       DimensionStorage::compareMainAccounts(dimAttrValueComb.RecId , dimAttrValueCombCompare.RecId)));

    // LedgerDimension' a ait hiyerarşi kaydını verir.
    info(strfmt("DimHierarchy Name = %1" ,
        DimensionStorage::getAccountStructureFromLedgerDimension(dimAttrValueComb.RecId).Name));

    // Bir MainAccount ait defaultAccount varsa getirir yoksa oluşturur.
    info(strfmt("DafaultAccount RecId = %1" ,
       DimensionStorage::getDefaultAccount(mainAccount.RecId)));

    // Bir MainAccount ait defaultAccount varsa getirir yoksa oluşturur.
    info(strfmt("DafaultAccount RecId = %1" ,
       DimensionStorage::getDefaultAccountForMainAccountNum(mainAccount.MainAccountId)));

    // Bir LedgerDimension'daki boyutları yanzı DimensionAttributeValueSet recId sini veriri.
    info(strfmt("DafaultDimension RecId = %1" ,
       DimensionStorage::getDefaultDimensionFromLedgerDimension(dimAttrValueComb.RecId)));

    // LedgerDimension' a ait hiyerarşi kaydını verir.
    info(strfmt("DimHierarchy Name = %1" ,
       DimensionStorage::getFirstDimHierarchyFromLedgerDimension(dimAttrValueComb.RecId).Name));

    // LedgerDimension'a ait DefaultAccount'u verir.
    info(strfmt("DefaultAccount  RecId = %1" ,
       DimensionStorage::getLedgerDefaultAccountFromLedgerDim(dimAttrValueComb.RecId)));

    // LedgerDimension'a ait MainAccount'u verir.
    info(strfmt("MainAccount  Name = %1" ,
       DimensionStorage::getMainAccountFromLedgerDimension(dimAttrValueComb.RecId).Name));

    // LedgerDimension'a ait MainAccount'u verir.
    info(strfmt("MainAccount  RecId = %1" ,
       DimensionStorage::getMainAccountIdFromLedgerDimension(dimAttrValueComb.RecId)));

    // LedgerDimension'a ait MainAccount'u verir.
    info(strfmt("MainAccount  Num = %1" ,
       DimensionStorage::getMainAccountNumFromLedgerDimension(dimAttrValueComb.RecId)));

    // LedgerDimension'a ait AccountNum'u verir.
    info(strfmt("CustTable AccountNum = %1" ,
       DimensionStorage::ledgerDimension2AccountNum(dimAttrValueCombCust.RecId)));

}

Job’ı çalıştırdığınızda şöyle bir çıktı alacaksınız.

Selamlar.

Genel muhasebe yapısındaki değişiklikler

Merhaba

Ax 2012′den önceki versiyonlarda muhasebe iki ana tablodan oluşuyordu. Birincisi hesap planının tutulduğu LedgerTable . İkincisi muhasebe hareketlerinin tutulduğu LedgerTrans. Bu iki tablo muhasebe için en temel tablolardı. Bütün hareketler bu tabloda tutulur ve bir hesabın bakiye toplamı gibi işlemler için LedgerTrans üzerinde işlem yapmak yeterli olurdu. Ayrıca LedgerTrans’ın özeti olan bir toplam tablomuz vardı buda  LedgerBalancesDimTrans tablosuydu. Bunlara ek olarak boyut yapısı vardı. Boyut bir diziydi. Dimensions alanından yönetiliyordu. Firmanın ihtiyacına göre kaç boyut kullanacağı tespit edilir ve tanımlanırdı. Boyut sayısı lisansa bağlıydı.

Bu yapı ax 2012 ile tamamen değişmiş durumda. LedgerTable ve LedgerTrans tabloları yok.  LedgerTable yerine MainAccount tablosu var. Eskiden bir şirket için tek bir hesap planı tanımlanırken şimdi birden çok hesap planı tanımlamak mümkün. LedgerChartOfAccounts tablosu hesap planlarının tanımlandığı ana tablo. Bir hesap için select yazarken hangi ChartofAccount olduğunu da belirtmek gerekiyor.

Gelelim LedgerTrans tablosunun yapısına. Eski versiyonlarda  110110 hesabının 02.03.2012 tarihindeki deki hareketlerini bulmak için şöyle bir sorgu yeterliydi.


while select ledgerTrans

where ledgerTrans.AccountNum == “110110”  &&

ledgerTrans.TransDate       == 02\03\2012 &&

ledgerTrans.OperationsTax == OperationsTax::Current

{

İnfo(“...”)

}

Ax 2012 de ise şöyle bir sorgu yazmak gerekiyor.


static void FD_LedgerTrans1(Args _args)
{
MainAccount                         mainAccount;
GeneralJournalEntry                 generalJournalEntry;
GeneralJournalAccountEntry          generalJournalAccountEntry;
DimensionAttributeValueCombination  dimAttrValueComb;
SubledgerVoucherGeneralJournalEntry subledgerVoucherGeneralJournalEntry;

while select AccountingCurrencyAmount, TransactionCurrencyAmount,
TransactionCurrencyCode

from generalJournalAccountEntry

join dimAttrValueComb
where dimAttrValueComb.RecId == generalJournalAccountEntry.LedgerDimension
join AccountingDate, JournalNumber from generalJournalEntry
where generalJournalAccountEntry.GeneralJournalEntry == generalJournalEntry.RecId
&& generalJournalEntry.AccountingDate == 02\03\2012
&& generalJournalEntry.PostingLayer == OperationsTax::Current
&& generalJournalEntry.Ledger == Ledger::current()
join MainAccountId, Name from mainAccount
where mainAccount.RecId == dimAttrValueComb.MainAccount
&& mainAccount.MainAccountId == '110110'
join subledgerVoucherGeneralJournalEntry
where subledgerVoucherGeneralJournalEntry.GeneralJournalEntry == GeneralJournalEntry.RecId
{
info(strFmt("%1-%2 - %3 - %4 - %5 - %6 - %7 - %8 - %9",
mainAccount.MainAccountId, mainAccount.Name,
generalJournalEntry.AccountingDate,
subledgerVoucherGeneralJournalEntry.Voucher,
generalJournalAccountEntry.TransactionCurrencyCode,
generalJournalAccountEntry.TransactionCurrencyAmount,
generalJournalAccountEntry.AccountingCurrencyAmount,
generalJournalEntry.JournalNumber,
dimAttrValueComb.DisplayValue ));
}

}

Sorguda görüldüğü gibi LedgerTrans tablosu 5 tabloya bölünmüş durumda. Günlükler için  bir kaç tabloya daha ihtiyaç olduğunu ve onlarında bu sorguya duruma göre ilave edilmese gerektiğini unutmadan söyleyeyim.

Aşağıdaki resimde  ax 2012′deki muhasebe veri yapısı mevcut. Bu yapıyı iyi kavramak üzerinde yeni gelen boyut yapısını öğrenmek geliştirme yapabilmek için şart.

Selamlar.