Posts Tagged ‘ LedgerDimension

Dynamics 365 Finance and Operations Cross-company Data Sharing.

Cross-company data sharing kavramı, ERP içindeki şirketler arasında şirket özel ana, referans ve kurulum verilerini paylaşmanızı sağlar.

İki veri paylaşımı kavramı mevcuttur:

Duplicate record sharing (DRS), bir politikada herhangi bir şirket için kayıtların oluşturulması, güncellenmesi veya silinmesinin, politikadaki tüm şirketlere kopyalanması/çoğaltılması kavramıdır. Alanların güncellemeleri, politikada paylaşılmak üzere seçilmişse çoğaltılır. DRS, ilk olarak sunulan paylaşım türüydü.

Single record sharing (SRS), bir ana şirkete ait tek bir fiziksel kaydın sanal olarak tüm alt şirketler arasında paylaşıldığı bir kavramdır. Herhangi bir şirkette oluşturma, güncelleme veya silme, tüm şirketler arasında kullanılan tek ortak kayıtta işlem yapar. Ana şirket paylaşımı şu anda ön izlemede ama kısa sürede buda aktif edilecektir. Biraz eski sanal şirket mantığı gibi düşünebilirsiniz.

Basit bir kurulumla DRS için bir örnek yapalım. Cross-company Data Sharing özelliği açık olmayabilir. Feature management kullanarak aktif edebilirsiniz. Sonrasında aşağıdaki formu açalım. Yeni bir kayıt oluşturup Tablo olarak CustGroup ekleyelim. Tablo listesi burada mevcut. Veri paylaşma istediğimiz iki şirketi seçtim.

Resim-1

USMF te veri mevcut.

Resim-2

SIR şirketinde hiç veri yok.

Resim-3

Kaydettikten sonra Enable edip senkronizasyonu başlatıyoruz.

Resim-4

Veri kopyalama devam ediyor.

Resim-5

İşlem tamamlandıktan sonra SIR şirketini yenilediğinizde verilerin oluştuğunu göreceksiniz. Resim1 de görüldüğü gibi PeymTermId seçmediğimiz için verileri kopyalanmadı. Bu şekilde istediğimiz alanı seçebiliriz. Tabi Ana tablolu bir alansa onun tablosunundu paylaşılması gerekecektir.

Resim-6

Ana veri paylaşımı çok sık karşımıza çıkan bir konu benzer kodları çok defa yazmak zorunda kalmışımdır. Bu özellik benzer ihtiyaçları sistem içinden çözmek için çok iyi olmuş. Hala geliştirilmeye devam ediyor. Tam olgunlaştığında özellikle danışmanlar tarafından yoğun kullanılacak bir fonksiyon olacaktır.

Selamlar.

www.fatihdemirci.net

TAGs: Microsoft Life Cycle Services, LCS, Azure, Azure DevOps, DefaultAccount, LedgerDimension, Microsoft Dynamics 365, MsDyn365FO, MsDyn365CE, MsDyn365, Segmented Entry, Power Automate, Power Apss, Power Virtual Agents, Dynamics 365 nedir, Dynamics 365 ERP, Dynamics 365 CRM

Dynamics 365 Finance and Operations LedgerDimension ve Segmented Entry nasıl eklenir?

Bu yazıda Dynamics 365 Finance and Operations içinde bir tabloya LedgerDimension nasıl eklenir ve bu alanı formda Segmented entry control ile nasıl kullanıcıya kullandırabiliriz anlatmaya çalışacağım.

LedgerDimension aslında DimensionAttributeValueCombination kaydıdır. LedgerDimension MainAccount ve DefaultDimension’ın bileşimidir.

Öncelikle Tabloya LedgerDimensionAccount EDT sini kullanarak bir alan ekleyelim. Eğer sürükle bırak ile eklerseniz otomatik ilişkiyi oluşturacak. Yoksa elle eklemeniz gerekir.

Resim-1

Sonrasında forma gelip eklediğimiz alanı tasarımda istediğimiz bir yere sürükleyip bırakıyoruz. Segmented Entry oluşuyor. Özelliklerinde resimde görünen tanımları yapmalıyız. Özellikle Controller Class çok önemli.

Resim-2

Derleyip çalıştırdığımızda formda alanımızı göreceğiz. DefaultAccount ile aradaki farkı görebilirsiniz. Sadece Main Account değil boyutlarda geliyor ve bir kombinasyon oluşturuluyor.

Resim-3

Oluşan verileri Sql üzerinden incelediğimizde aradaki fark çok net bir şekilde ortaya çıkıyor.

Resim-4

Bu yazıda LedgerDimension nedir ve nasıl eklenir anlatmaya çalıştım. Sonraki yazılarımda bunları kodda nasıl kullanıp birbirlerine çeviriyoruz anlatmaya devam edeceğim.

Selamlar.

www.fatihdemirci.net

TAGs: Microsoft Life Cycle Services, LCS, Azure, Azure DevOps, DefaultAccount, LedgerDimension, Microsoft Dynamics 365, MsDyn365FO, MsDyn365CE, MsDyn365, Segmented Entry, Power Automate, Power Apss, Power Virtual Agents, Dynamics 365 nedir, Dynamics 365 ERP, Dynamics 365 CRM

Dynamics 365 Finance and Operations LedgerDimension Yeni Bir Finansal Boyut Nasıl Eklenir?

Bu yazıda Dynamics 365 Finance and Operations için yeni bir finansal boyut nasıl eklenir anlatmaya çalışacağım.

Hazırda olan boyut seçeneklerini görmek için General ledger-> Chart of accounts -> Dimensions -> Financial dimensions formunu açıyoruz.

Resim-1

Bu formda hazırda kurulmuş boyutlar geliyor. New ile yeni boyut oluşturuyoruz. Açılan listeden istediğimizi seçebiliriz. Bu yazıda ben bu listeye nasıl ekleme yaptığımızı anlatacağım.

Resim-2

Bu örnekte standart bir tabloyu boyut haline getirmeyi göstereceğim. Örnek olarak BankGroup tablosunu seçtim. Tamamen yeni bir tablo da kullanabilirsiniz.

Öncelikle bir View oluşturmak gerekiyor. Aşağıdaki yapının aynı olmalı yazım hataları bile listede görünmesini engelleyecektir. İsmi DimAttribute ile başlamalı. DataSoruce’a kendi tablomuzu ekleyip ismini BackingEntity yapmalısınız.

3 alana ihtiyaç var.

  1. Key     : RecId
  2. Value : BankGroupId
  3. Name : Name

Resim-3

Yeni bir metot ekleyip View ismini yazıyoruz.

Resim-4

Bu haliyle derleme ve eşitleme yaptığınızda listede göremeyeceksiniz. Eğer Debug modda açarsanız hatayı görebilirsiniz. Boyut olacak tablo için mutlaka RecId nin bir tekil index’te ilk sırada olmasını bekliyor.

VendGroup tablosunda RecId Index oluşturulmamış. Entension ile de değiştiremiyoruz. Bu yüzden yeni bir index oluşturdum. Burada sorun tek başına RecId ye izin vermiyor. Mecbur başka bir alanla eklemem gerekti.

Resim-5

Bu işlemlerden sonra derleme ve eşitleme yaparsanız listeye geldiğini görebilirsiniz. Eğer listeye gelmiyorsa mutlaka Debug modda çalıştırın sorunlu View de hatayı gösterecektir.

Selamlar.

www.fatihdemirci.net

TAGs: Microsoft Life Cycle Services, LCS, Azure, Azure DevOps, DefaultAccount, LedgerDimension, Microsoft Dynamics 365, MsDyn365FO, MsDyn365CE, MsDyn365, Segmented Entry, Power Automate, Power Apss, Power Virtual Agents, Dynamics 365 nedir, Dynamics 365 ERP, Dynamics 365 CRM

Muhasebe günlüklerinden mahsup hesap boyutunun hesap boyutundan gelmesi nasıl engellenir?

Bu yazıda Türkiye muhasebe ekiplerince mutlaka istenen bir geliştirmeyi D365 te nasıl yaptık anlatmaya çalışacağım. Talep aslında çok basit belki de parametrik olması gerekiyor. Şöyle bir örnek olsun. Bir günlük açtınız ve hesap tipi banka seçip Bnk0001 seçtiniz. Otomatik olarak bu bankanın boyutları hesap boyutlarına atandı. Mahsup tarafa gelip orada da tipi banka ve hesabı Bnk0002 seçtiniz. Bu durumda mahsup boyutunu hesap üzerinden alıyor Mahsup banka boyutlarını getirmiyor. Talep mahsup tarafta ne seçersem onun boyutları gelsin hesaptan direk almasın.

Ax2012’de bu çok basit bir işlemdi burayı dolduran kısmı bulup değiştirmek yeterliydi ancak D365 te işler biraz değişti.

Önce Ax2012’de ne yapıyorduk ona bakalım. LedgerJournalEngine sınıfında initOffsetDefaultDimensionServer metodunun boyadığım satırı kapatmak boyutun hesap boyutundan alınmasını engelliyordu. Tek satır işlemle aşağı yukarı istediğimiz oluyor. Ancak D365’te buna müdahale şansımız yok. Bu metot private ve sınıfta AplicationSuit’te dolayısıyla bize değiştirme imkânı vermiyor.

Resim-1

Bu talebin nasıl yapılacağını incelerken initOffsetDefaultDimension metodunun Extension için uygun olduğunu gördüm.

Resim-2

İşimi halledebilmek için Bir Extension sınıfı oluşturup iki metot ekledim. Birincisi initOffsetDefaultDimension metodunun Extension ile öncesi ve sonrasına kod yazma imkânı veren hali. İkincisi ise mahsup hesaba göre boyutu getiren, standarttan kopyaladığım ve içeriğini mahsup boyuta göre düzenlediğim boyut bulma metodu.

Resim-3

Derleyip çalıştırdığımızda test edebilirsiniz. Aşağıdaki gibi bir günlükte Mahsup banka boyutunu hesap banka boyutundan farklı gelmesi gerekiyor.

Resim-4

Financial dimensions’a tıklayarak mahsup boyutları açabilirsiniz.

Resim-5

Bu yazıda Extension kullanımına örnek olacak bir talebi nasıl yaptığımı anlatmaya çalıştım. Eskiye nazaran işler biraz daha zor görünmekle birlikte genelde çözümsüz değil. Sadece daha çok zaman alıyor ama getirileri düşünüldüğünde kesinlikle buna değer.

Selamlar.

www.fatihdemirci.net

TAGs: Microsoft Life Cycle Services, LCS, Azure, Azure DevOps, DefaultAccount, LedgerDimension, Microsoft Dynamics 365, MsDyn365FO, MsDyn365CE, MsDyn365, Segmented Entry, Power Automate, Power Apss, Power Virtual Agents, Dynamics 365 nedir, Dynamics 365 ERP, Dynamics 365 CRM

Dynamics 365 Finance and Operations LedgerDimension ve Segmented Entry nasıl eklenir?

Bu yazıda Dynamics 365 Finance and Operations içinde bir tabloya LedgerDimension nasıl eklenir ve bu alanı formda Segmented entry control ile nasıl kullanıcıya kullandırabiliriz anlatmaya çalışacağım.

LedgerDimension aslında DimensionAttributeValueCombination kaydıdır. LedgerDimension MainAccount ve DefaultDimension’ın bileşimidir.

Öncelikle Tabloya LedgerDimensionAccount EDT sini kullanarak bir alan ekleyelim. Eğer sürükle bırak ile eklerseniz otomatik ilişkiyi oluşturacak. Yoksa elle eklemeniz gerekir.

Resim-1

Sonrasında forma gelip eklediğimiz alanı tasarımda istediğimiz bir yere sürükleyip bırakıyoruz. Segmented Entry oluşuyor. Özelliklerinde resimde görünen tanımları yapmalıyız. Özellikle Controller Class çok önemli.

Resim-2

Derleyip çalıştırdığımızda formda alanımızı göreceğiz. DefaultAccount ile aradaki farkı görebilirsiniz. Sadece Main Account değil boyutlarda geliyor ve bir kombinasyon oluşturuluyor.

Resim-3

Oluşan verileri Sql üzerinden incelediğimizde aradaki fark çok net bir şekilde ortaya çıkıyor.

Resim-4

Bu yazıda LedgerDimension nedir ve nasıl eklenir anlatmaya çalıştım. Sonraki yazılarımda bunları kodda nasıl kullanıp birbirlerine çeviriyoruz anlatmaya devam edeceğim.

Selamlar.

www.fatihdemirci.net

TAGs: Microsoft Life Cycle Services, LCS, Azure, Azure DevOps, DefaultAccount, LedgerDimension, Microsoft Dynamics 365, MsDyn365FO, MsDyn365CE, MsDyn365, Segmented Entry, Power Automate, Power Apss, Power Virtual Agents, Dynamics 365 nedir, Dynamics 365 ERP, Dynamics 365 CRM

Dynamics 365 Finance and Operations Boyut işlemleri?

Bu yazıda Dynamics 365 Finance and Operations için boyut işlemlerini nasıl yapabiliriz bir job ile anlatmaya çalışacağım. Ax2012 DimensionStore sınıfı birçok metodu barındırıyordu ancak MsDyn365FO ile helper sınıfları kullanılır oldu bu yüzden birçok metot bu sınıflara taşındı. Ax2012 için hazırladığım yazıya buradan ulaşabilirsiniz. Birkaç metot eksik olmakla birlikte genel manada 3 tane sınıf işimizi görüyor.

class FDDimJob1

{

public static void main(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(22565427296);

dimAttrValueComb                = DimensionAttributeValueCombination::find(22565428050);

dimAttrValueCombCompare         = DimensionAttributeValueCombination::find(22565428053);

mainAccount                     = MainAccount::find(22565425069);

custTable                       = CustTable::find(“US-006″);

// Bir hesap ve tip alarak size LedgerDimension’da kayıt varsa getirir yoksa oluşturur.

dimAttrValueCombCust = DimensionAttributeValueCombination::find(

LedgerDynamicAccountHelper::getDynamicAccountFromAccountNumber(custTable.AccountNum , LedgerJournalACType::Cust));

info(strfmt(“LedgerDimension RecId = %1″ , dimAttrValueCombCust.RecId));

// Bir MainAccount ait defaultAccount varsa getirir yoksa oluşturur.

info(strfmt(“DafaultAccount RecId = %1″ ,

LedgerDefaultAccountHelper::getDefaultAccountFromMainAccountRecId(mainAccount.RecId)));

// Bir MainAccount ait defaultAccount varsa getirir yoksa oluşturur.

info(strfmt(“DafaultAccount RecId = %1″ ,

LedgerDefaultAccountHelper::getDefaultAccountFromMainAccountId(mainAccount.MainAccountId)));

// Bir LedgerDimension’daki boyutları yanzı DimensionAttributeValueSet recId sini veriri.

info(strfmt(“DafaultDimension RecId = %1″ ,

LedgerDimensionFacade::getDefaultDimensionFromLedgerDimension(dimAttrValueComb.RecId)));

// LedgerDimension’a ait DefaultAccount’u verir.

info(strfmt(“DefaultAccount  RecId = %1″ ,

LedgerDefaultAccountHelper::getDefaultAccountFromLedgerDimension(dimAttrValueComb.RecId)));

// LedgerDimension’a ait MainAccount’u verir.

info(strfmt(“MainAccount  Name = %1″ ,

LedgerDimensionFacade::getMainAccountFromLedgerDimension(dimAttrValueComb.RecId).Name));

// LedgerDimension’a ait MainAccount’u verir.

info(strfmt(“MainAccount  RecId = %1″ ,

LedgerDimensionFacade::getMainAccountRecIdFromLedgerDimension(dimAttrValueComb.RecId)));

// LedgerDimension’a ait AccountNum’u verir.

info(strfmt(“CustTable AccountNum = %1″ ,

LedgerDynamicAccountHelper::getAccountNumberFromDynamicAccount( dimAttrValueCombDefaultAccount.RecId)));

}

}

Resim-1

İlerleyen yazılarda Ax2012 ile aradaki farkları açıklayan yazılar yazmaya devam edeceğim.

Selamlar.

www.fatihdemirci.net

TAGs: Microsoft Life Cycle Services, LCS, Azure, Azure DevOps, DefaultAccount, LedgerDimension, Microsoft Dynamics 365, MsDyn365FO, MsDyn365CE, MsDyn365, Dynamics 365 ERP, Dynamics 365 CRM

Dynamics 365 Finance and Operations LedgerDimension ve Segmented Entry nasıl eklenir?

Bu yazıda Dynamics 365 Finance and Operations içinde bir tabloya LedgerDimension nasıl eklenir ve bu alanı formda Segmented entry control ile nasıl kullanıcıya kullandırabiliriz anlatmaya çalışacağım.

LedgerDimension aslında DimensionAttributeValueCombination kaydıdır. LedgerDimension MainAccount ve DefaultDimension’ın bileşimidir.

Öncelikle Tabloya LedgerDimensionAccount EDT sini kullanarak bir alan ekleyelim. Eğer sürükle bırak ile eklerseniz otomatik ilişkiyi oluşturacak. Yoksa elle eklemeniz gerekir.

Resim-1

Sonrasında forma gelip eklediğimiz alanı tasarımda istediğimiz bir yere sürükleyip bırakıyoruz. Segmented Entry oluşuyor. Özelliklerinde resimde görünen tanımları yapmalıyız. Özellikle Controller Class çok önemli.

Resim-2

Derleyip çalıştırdığımızda formda alanımızı göreceğiz. DefaultAccount ile aradaki farkı görebilirsiniz. Sadece Main Account değil boyutlarda geliyor ve bir kombinasyon oluşturuluyor.

Resim-3

Oluşan verileri Sql üzerinden incelediğimizde aradaki fark çok net bir şekilde ortaya çıkıyor.

Resim-4

Bu yazıda LedgerDimension nedir ve nasıl eklenir anlatmaya çalıştım. Sonraki yazılarımda bunları kodda nasıl kullanıp birbirlerine çeviriyoruz anlatmaya devam edeceğim.

Selamlar.

www.fatihdemirci.net

TAGs: Microsoft Life Cycle Services, LCS, Azure, Azure DevOps, DefaultAccount, LedgerDimension, Microsoft Dynamics 365, MsDyn365FO, MsDyn365CE, MsDyn365, Segmented Entry, Power Automate, Power Apss, Power Virtual Agents, Dynamics 365 nedir, Dynamics 365 ERP, Dynamics 365 CRM

How to display only one attribute value from LedgerDimension

In this post, I will explain how to display only one attribute value from LedgerDimension. I will use CostCenter attribute for my example. As you know LedgerDimension table are DimensionAttributeValueCombination , DimensionAttributeValueGroupCombination and DimensionAttributeLevelValue . This tables holds the related data. Instead of this tables I wil use only DimensionAttributeLevelValueAllView view. This view is very simple and useful.
I have a LedgerDimension’s RecId end i want to display only CostCenter value. I will join DimensionAttributeValue to DimensionAttributeLevelValueAllView and give the ranges.

Here is the method displays costCenter values.


// FD: Display CostCenter Value from LedgerDimension
display num dispFinancialDisplayValue()
{
    DimensionAttributeValue             dimAttrValue;
    DimensionAttributeLevelValueAllView dimAttrLevelValueAllView;
    ;

    select firstonly dimAttrLevelValueAllView
    where dimAttrLevelValueAllView.ValueCombinationRecId == this.LedgerDimension
    join dimAttrValue
        where dimAttrValue.RecId == dimAttrLevelValueAllView.AttributeValueRecId
        &&    dimAttrValue.DimensionAttribute   == 5637144851;
        // CostCenter RecId. Must be parametric.

    return dimAttrLevelValueAllView.DisplayValue;
}

I wrote this method to a table that have LedgerDimension field.

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.

Dynamics AX 2012 Segmented Entry Control

Merhaba

Segmented Entry Control ax 2012 ile değişen finansal boyut yapısında hesap ve boyutları birlikte girebilme imkanı sağlayan bir yapıdır. Genel muhasebe günlüklerinde girişler bu şekilde yapılıyor. Bu yazımda yeni bir tablo ve form oluşturup bu kontrolün nasıl eklenebileceğini anlatacağım. Adım adım ilerleyelim.

  1. Öncelikle bir tablo yapalım ve EDT ‘si LedgerDimensionAccount olan  LedgerDimension isminde bir alan açalım. Bu işlemde EDT’yi tabloya sürüklediğinizde DimensionAttributeValueCombination tablosuyla ilişki kurmak için soru soracaktır. Bu ilişkinin kurulması şart. Eğer EDT ile ilgili bir sıkıntı çıkarsa elle de ekleyebilirsiniz.
  2. Bir form yapalım ve veri kaynağına oluşturduğumuz tabloyu ekleyelim.
  3. Tasarım kısmına bir Grid ekleyelim ve veri kaynağından LedgerDimension alanını sürükleyip Grid’e bırakalım. Otomatik olarak Segmented Entry Control oluşturulacaktır.
  4. Kontrolün çalışabilmesi için biraz kod yazmamız gerekiyor. Formun ClassDecleration ve init metodlarına aşağıdaki kodları ekleyelim.
  5. public class FormRun extends ObjectRun
    {
        LedgerDimensionAccountController ledgerDimensionAccountController;
    }
    
    public void init()
    {
        super();
        // hangi veri kaynağının hangi alanı için çalışacağını belirtiyoruz
        ledgerDimensionAccountController =  LedgerDimensionAccountController::construct(
                                            FDSegmentSEmple_ds,
                                            fieldStr(FDSegmentSEmple,LedgerDimension));
    }
    
  6. Veri kaynağındaki LedgerDimension alanına şu kodları ekleyelim
  7. public boolean validate()
    {
        boolean ret;
        ret = super();
        ret = ledgerDimensionAccountController.validate() && ret;
        return ret;
    }
    
    public void jumpRef()
    {
        super();
        ledgerDimensionAccountController.jumpRef();
    }
    
    public Common resolveReference(FormReferenceControl _formReferenceControl)
    {
        return ledgerDimensionAccountController.resolveReference();
    }
    
  8. Grid altında oluşan Segmented Entry Control’e de şu kodları ekleyelim.
  9. public void loadAutoCompleteData(LoadAutoCompleteDataEventArgs _e)
    {
        super(_e);
        ledgerDimensionAccountController.loadAutoCompleteData(_e);
    }
    
    public void loadSegments()
    {
        super();
        ledgerDimensionAccountController.parmControl(this);
        ledgerDimensionAccountController.loadSegments();
    }
    
    public void segmentValueChanged(SegmentValueChangedEventArgs _e)
    {
        super(_e);
        ledgerDimensionAccountController.segmentValueChanged(_e);
    }
    
  10. Şu anda kontrol hazır formu açtığınızda aşağıdaki gibi bir görüntü göreceksiniz.

Üsteki oka tıkladığınızda ana hesap ve boyut yapısını görebilirsiniz.

Ana hesabı ve boyutları bir arada girebileceğiniz bir yapı oluştu. Burada girdiğiniz verilerden DimensionAttributeValueCombination tablosunda bir kayıt oluşturulur ve o kaydın RecId si oluşturduğumuz tablodaki LedgerDimension alanına yazılır. Tablodan baktığınızda sadece RecId görürsünüz ancak formdan baktığınızda bu kontrol sayesinde bütün veriyi görebilirsiniz. Bütün bu işlemleri LedgerDimensionAccountConroller sınıfı sizin için yapar.

Eski alışkanlıklara biraz ters ancak yeni boyut yapısında veri girişini kolaylaştırması açısında bence kullanışlı bir yapı olmuş.

Selamlar.