Ax 2012′de sabit muhasebe boyut değerleri nasıl tanımlanır (Fixed Dimensions)

Merhaba,

Bu yazımda muhasebe boyut yapısında hesaplar için sabit boyut değerlerinin nasıl tanımlandığından bahsedeceğim. Ax2012′de muhasebe hesapları MainAccount tablosunda şirketler üstü tutuluyor. Birden çok hesap planı tanımlayabiliyorsunuz. Şirketler için bazı özel tanımlar mevcut bunları yapmak istediğinizde aşağıdaki resimde olduğu gibi istediğiniz şirketleri eklemeniz gerekiyor.

Görüntülenecek ana hesap düzeyi seçin kısmından Şirketler’i seçtiğinizde istediğiniz şirketi ekleyebileceğiniz ve daha önce eklediğiniz şirketleri görebileceğiniz kısımlar açılıyor.

Herhangi bir şirketin üzerine geldiğinizde Mali boyutlar (Default Dimension) sekmesi açılır.

Burada görüldüğü gibi mali boyutlar seçilebilir. Ayrıca her bir boyutun karşısında bu boyut değerinin Sabit mi değil mi olduğunu belirleyebildiğimiz kısım açılır. Burada yapılan tanımlamanın ne manaya geldiğini şöyle özetleyebilirim. Örneğin 112120 hesabı için USMF şirketinde GiderGrupları mali boyut her zaman  G001 olmak zorundadır. Eğer muhasebeye kayıt oluşurken G001 haricinde bir değer gelirse sistem G001 ile güncelleyip muhasebe kaydını öyle oluşturur. Proje ve ürün tipi boyutlarında ise farklı bir değer  bile gelse bir değişiklik yapmaz.

Şimdi bu tanımların veri yapısının nasıl olduğunu inceleyelim.

Kullanılan BaseEnum.

Bu tablo muhasebe hesaplarını şirket bazında farklılaşan verilerini tutar. Yukarıda anlatıldığı gibi şirket eklendiğinde burada kayıt oluşur.

Görüldüğü gibi bir DefaultDimension birde FixedDimension alanı mevcut. DefaultDimension bildiğimiz muhasebe boyutlarıdır. FixedDimension ise bu boyutların Sabit mi değil mi olduğunu tutan yapıdır. DefaultDimension DimensionAttributeValueSet tablosuna bağlıyken FixedDimension ise DimensionAttributeSet bağlıdır.

Sabit boyut değerlerini tutan tablodur.

Sabit boyut değerlerinin satırları tutan tablodur. EnumerationValue alanında yukarıda bahsi geçen DimensionFixed enum değeri tutulur. 1 sabit değer manasına gelmektedir.

Hangi mali boyut olduğunu tutan tablodur.

Bu yapıyı kavradıktan şöyle bir örnek yapalım. Hesap planında Gider grupları diye bir alanımız olsun. Bu alandan bir değer seçilip kaydedildiğinde o muhasebe hesabı için her bir aktif şirket  ile ilişkili bir kayıt oluşturup GiderGrupları muhasebe boyutuna bu kodu yazsın ve bu değeri de sabit değer olarak işaretlesin.

Öncelikle MainAccountLegalEntity kayıtlarını oluşturacak metodu yazalım.

public static void dmrCreateMainAccountLegalEntity(MainAccount _mainAccount )
{
    CompanyInfo                         companyInfoList;
    Ledger                              ledgerList;
    MainAccountLegalEntity              mainAccountLegalEntityList;
    DimensionAttrValueLedgerOverride    dimensionAttrValueLedgerOverride;
    MainAccountLegalEntity              MainAccountLegalEntity;
    container   conDimAtr;
    container   conValue;
    ;
    // Todo FD Boyutları parametrik yapmalıyız.
    conDimAtr = ["GiderGruplari","Project","ÜrünTipi"];
    conValue  = [1,0,0];

     while select DataArea from companyInfoList
        join RecId from ledgerList
            where ledgerList.PrimaryForLegalEntity == companyInfoList.RecId &&
                ledgerList.ChartOfAccounts == _mainAccount.LedgerChartOfAccounts
        notexists join RecId from mainAccountLegalEntityList
            where mainAccountLegalEntityList.LegalEntity == companyInfoList.RecId &&
                mainAccountLegalEntityList.MainAccount == _mainAccount.RecId
    {
        MainAccountLegalEntity.clear();
        MainAccountLegalEntity.MainAccount          = _mainAccount.RecId;
        MainAccountLegalEntity.LegalEntity          = companyInfoList.RecId;
        MainAccountLegalEntity.DefaultDimension     = AxdDimensionUtil::DmrGetNewDefaultDimension(0
                                                    , "GiderGruplari" , _mainAccount.DmrExpsGroupId);
        MainAccountLegalEntity.FixedDimensions      = AxdDimensionUtil::DmrFindOrCreateFixedDimension(
                                                        conDimAtr, conValue);

        MainAccountLegalEntity.insert();
    }
}

DimensionAttributeSet kayıtlarını oluşturmak için sistemde bulunan DimensionAttributeSetStorage sınıfından faydalanıyoruz.

public static DimensionDefault DmrFindOrCreateFixedDimension( container   _conAttr
                                                             ,container   _conValue)
{
    DimensionAttributeSetStorage   valueSetStorage = new DimensionAttributeSetStorage();
    DimensionDefault               result;
    int                     i;
    DimensionAttribute      dimensionAttribute;
    boolean                 dimValue;
    ;

    for (i = 1; i <= conLen(_conAttr); i++)
    {
        dimensionAttribute = dimensionAttribute::findByName(conPeek(_conAttr,i));

        if (dimensionAttribute.RecId == 0)
        {
            continue;
        }

        dimValue = conPeek(_conValue,i);
        valueSetStorage.addItem(dimensionAttribute.RecId
                        ,dimensionAttribute.HashKey ,dimValue);
    }
    result = valueSetStorage.save();
    return result;
}

Her farklı kombinasyon için DimensionAttributeSet tablosunda yeni bir kayıt oluşmaktadır. Eğer aynı kombinasyon varsa o kaydı geri döndürür.

Selamlar.

 
  • Trackback are closed
  • Comments (1)
    • Ferhat Hançer
    • Ağustos 22nd, 2016 6:18pm

    Fatih Hocam ellerine sağlık, tam ihtiyacım olan kodu türkçe kaynaktan buldum :)

Comment are closed.