Author Archive

Dynamics 365 Finance and Operations On-hand List(Eldeki) formunun boyut değerlerine nasıl ulaşılır?

Bu yazıda Dynamics 365 Finance and Operations içinde bir eldeki stokları gösteren On-hand List formunun biraz karışık yapısı var. Formun veri kaynağında InventDim var ancak form direk bu veri kaynağından verileri göstermiyor. Aslında bir sınıf boyut değerlerini yönetiyor. Eğer boyut değerlerine ulaşmanız gerekirse ufak bir kodla düzenleme yapmak gerekiyor.

Bu örnekte eldeki formundan kendi yaptığım bir formu açmak ve InventSum ve belli boyut değerlerini aktarmak istiyorum.

Resim-1

Formun Extension’nını oluşturup bir buton ekliyorum. Bu butonun onClicked eventine kod yazacağız.

Resim-2

Yeni bir sınıf oluşturup aşağıdaki kodu yazıyorum.

class DmrInventOnhandItemFormEventHandler

{

[FormControlEventHandler(formControlStr(InventOnhandItem, DmrSwellShrink), FormControlEventType::Clicked)]

public static void DmrSwellShrink_OnClicked(FormControl sender, FormControlEventArgs e)

{

InventDim               inventDimFrom , dimValues;

InventSum               InventSum       = sender.formRun().dataSource(formDataSourceStr(InventOnhandItem, InventSum)).cursor();

dimValues.data(InventSum.joinChild( )); // Asıl işi yapan kod bu. Boyut değerlerini almamızı sağlıyor.

inventDimFrom.clear();

inventDimFrom.initValue();

inventDimFrom.InventSiteId      = dimValues.InventSiteId;

inventDimFrom.InventLocationId  = dimValues.InventLocationId;

inventDimFrom.InventSizeId      = dimValues.InventSizeId;

inventDimFrom.inventBatchId     = dimValues.inventBatchId;

inventDimFrom = inventDim::findOrCreate(inventDimFrom);

Args                args            = new Args();

Form                formToCall      = new Form(‘DmrSwellShrink’);

FormButtonControl   callerButton    = sender as FormButtonControl;

FormRun             form            = callerButton.formRun();

args.caller(form);

args.object(formToCall );

args.record(InventSum);

args.parm(inventDimFrom.inventDimId);

form = ClassFactory.formRunClass(args);

form.init();

form.run();

form.wait();

}

}

Açılan formun init metodunda aşağıdaki kodla gerekli bilgileri alıyorum.

inventSum       = element.args().record();

inventDimId     = element.args().parm();

inventDimArgs   = InventDim::find(InventDimId);

Bu yazıda eldeki formun boyut değerlerine nasıl ulaşırız bir örnekle göstermeye çalıştım.

Selamlar.

www.fatihdemirci.net

TAGs: Microsoft Life Cycle Services, LCS, Azure, Azure DevOps, InventSum, InventDim, InventOnHandItem, Microsoft Dynamics 365, MsDyn365FO, MsDyn365CE, MsDyn365, X++

Dynamics 365 Finance and Operations: HTML Editor Kullanımı.

Bu yazıda Dynamics 365 Finance and Operations içinde HTML Editor nesnesi nasıl kullanılır anlatamaya çalışacağım.

Standart bir form ve tablo üzerinden nasıl oluşturulduğuna bakalım. SmmActivities formunda Identification sekmesinden HTML Editor örneği mevcut. Buradan istediğiniz gibi bir metin oluşturabilirsiniz. Source butonu ile oluşan Html kodunu görebilirsiniz. Nasıl oluşturulduğuna bakalım.

Resim-1

Öncelikle Memo tipinde bir tablonuzda bir alan açmalısınız. EDT önemli değil yeni bir tane oluşturup kullanabilirsiniz.

Resim-2

Sonra formda yeni bir nesne oluşturma kısmından HTML Editor u seçip oluşturuyoruz.

Resim-3

Oluşan Html Editor için ekteki tanımları yapabilirsiniz. Width kısmını formunuza göre ayarlayabilirsiniz.

Resim-4

Bu aşamaları uygularsanız HTML Editor kullanıma hazır olacak. Bu nesne bize özellikle tasarım ihtiyacı olan işlerde kolaylık sağlıyor. Burada oluşan metni direk SSRS raporlarınızda kullanabiliyorsunuz.

Selamlar.

www.fatihdemirci.net

TAGs: Microsoft Life Cycle Services, LCS, Azure, Azure DevOps, HTML Editor, Microsoft Dynamics 365, MsDyn365FO, MsDyn365CE, MsDyn365

Dynamics 365 Finance and Operations Yeni Bir Adres Alanı Nasıl Eklenir?

Dynamics 365 Finance and Operations Yeni Bir Adres Alanı Nasıl Eklenir?
Bu yazıda Dynamics 365 Finance and Operations içinde oluşturulan yeni bir tabloya adres alanı nasıl eklenir anlatmaya çalışacağım.
Öncelikle yeni bir tablo oluşturup Location alanı oluşturuyoruz. EDT olarak LogisticsLocationRecId kullanıyoruz. Relation ve Mapping’i resimdeki gibi tanımlayalım.


Resim-1
Relation özelliklerini aşağıdaki gibi tanımlıyoruz.

Resim-2
Bu aşamada sonra formunuza veri kaynağı olarak LogisticPostalAddress tablosunu ekliyoruz ve resimdeki özellikleri tanımlıyoruz. Standart Form olan CustBankAccount formundan tasarım sekmesini kopyalayabilirsiniz.

Resim-3
Aşağıdaki kodları ekliyoruz.
[Form]
public class DmrAddressTable extends FormRun
{
LogisticsPostalAddressFormHandler addressController;
public void init()
{
super();
addressController = LogisticsPostalAddressFormHandler::newParameters(DmrAddressTable_ds,LogisticsPostalAddress_ds);
addressController.callerUpdateQuery(fieldNum(DmrAddressTable,Location));
}
public LogisticsPostalAddressFormHandler getAddressController()
{
return addressController;
}
[DataSource]
class DmrAddressTable
{
public int active()
{
int ret;
ret = super();
addressController.callerActive();
addressController.callerUpdateButtons(newAddress,editAddress,clearAddress,mapButton);
return ret;
}
public void write()
{
super();
addressController.callerResearch();
}
}
[DataSource]
class LogisticsPostalAddress
{
public void write()
{
// The call to super is commented out to prevent the need to require a LogisticsPostalAddress record. This is a
// framework limitation that needs to be worked around in this manner.
// super();
}
public boolean validateWrite()
{
// The call to super is commented out to prevent the need to require a LogisticsPostalAddress record. This is a
// framework limitation that needs to be worked around in this manner.
//ret = super();
return true;
}
}
}

Derleyip formumuzu açabiliriz.

Resim-4
Bu yazıda yeni bir adres alanı nasıl eklenir anlatmaya çalıştım. Burada benim karşılaştığım bir sorun bu yapı bir tabloda bir adres alanını yönetebiliyor. İki adres alnınız varsa bu haliyle ben çalıştırmadım. Yöneten sınıflara direk alan adını yazmışlar her şeyi çoğaltım ikinci bir alanı destekleyen bir yapı kurmak gerekiyor. Astarı yüzünden pahalı oluyor.
Selamlar.
Bu konuyla ilgili sorularınızı https://forum.mshowto.org linkini kullanarak ulaşacağınız forum sayfamızda sorabilirsiniz.
Referanslar:
www.mshowto.org
www.fatihdemirci.net
TAGs: Microsoft Life Cycle Services, LCS, Azure, Azure DevOps, Microsoft Dynamics 365, MsDyn365FO, MsDyn365CE, MsDyn365, X++

Dynamics 365 Finance and Operations OnClicked Event Handler?

Bu yazıda Dynamics 365 Finance and Operations’da Event Handler nasıl kullanılır bir örnekle anlatmaya çalışacağım.

Şöyle bir örnek olsun. Standart bir forma bir CheckBox eklemek istiyoruz. Bu CheckBox işaretlendiğinde bir filtre çalışacak. Bunun için formdan bir Extension oluşturup CheckBox eklemek gerekiyor. Bu kısımları geçiyorum daha önce anlatmıştım. Burada asıl bu işaretleme olduğunda yazacağımız koda odaklanacağım.

Öncelikle bir Class oluşturmamız gerekiyor. Adının sonuna EventHandler eklemekte fayda var.

class CustInvoiceJournalEventHandler

{

/// <summary>

///

/// </summary>

/// <param></param>

/// <param name=”e”></param>

[FormControlEventHandler(formControlStr(CustInvoiceJournal, DmrShowAllRecord), FormControlEventType::Clicked)]

public static void DmrShowAllRecord_OnClicked(FormControl sender, FormControlEventArgs e)

{

QueryBuildDataSource    custInvoiceJourDS;

QueryBuildDataSource    eInvoicePoolTableDS;

FormRun                 elementForm         = sender.formRun(); // DataSource için gerekecek

FormCheckBoxControl     showAllRecord      ;

FormDataSource          custInvoiceJour_ds  = elementForm.dataSource(formDataSourceStr(CustInvoiceJournal, CustInvoiceJour)) as FormDataSource;

#IsoCountryRegionCodes

if (SysCountryRegionCode::isLegalEntityInCountryRegion([#isoTR]))

{

showAllRecord       = elementForm.design().controlName(formControlStr(CustInvoiceJournal, DmrShowAllRecord)); // CheckBox ‘a ulaşıyoruz.

custInvoiceJourDS   = custInvoiceJour_ds.query().dataSourceTable(tableNum(custInvoiceJour));

eInvoicePoolTableDS = custInvoiceJour_ds.query().dataSourceTable(tableNum(FDEInvoicePoolTable));

if(showAllRecord.checked())

{

eInvoicePoolTableDS.enabled(false);

}

else

{

eInvoicePoolTableDS.enabled(true);

}

custInvoiceJour_ds.executeQuery();

}

}

}

Bu yazıda EventHandler nasıl kullanılır anlatmaya çalıştım. Birçok durumda Extension yerine EventHandler kullanmak daha pratik oluyor.

Selamlar.

www.fatihdemirci.net

TAGs: Microsoft Life Cycle Services, LCS, Azure, Azure DevOps, EventHandler,Microsoft Dynamics 365, MsDyn365FO, MsDyn365CE, MsDyn365, X++

Dynamics 365 Finance and Operations Yeni Bir SSRS Raporu Nasıl Yapılır?

Bu yazıda Dynamics 365 Finance and Operations içinde yeni bir SSRS raporu nasıl yapılır anlatamaya çalışacağım.

Öncelikle bu örnekte ben Query base bir format değil, Data Provider tipinde bir rapor yapacağım. Raporda PurchLine üzerinden bir çıktı tasarımı yapacağız.

Bu yüzden 3 tane sınıfı ve bir temp tabloya ihtiyaç var.

Olan bir temp tabloda kullanabilirsiniz ama ben bu rapor için DmrPurchConTmp isminde bir tablo oluşturdum. Alanları ihtiyacınıza göre ekleyebilirsiniz.

[DataContractAttribute]

class DmrPurchLinePrintContract

{

RecId  purchLineRecId;

[

DataMemberAttribute('purchLineRecId'),

SysOperationLabelAttribute(literalStr("Purchase Contract")),

SysOperationControlVisibilityAttribute(false)

]

public RecId parmpurchLineRecId(RecId _purchLineRecId = purchLineRecId)

{

purchLineRecId = _purchLineRecId;

return purchLineRecId;

}

}

class DmrPurchLinePrintController extends SrsReportRunController

{

public static DmrPurchLinePrintController construct()

{

return new DmrPurchLinePrintController ();

}

public static void main(Args _args)

{

PurchLine legalProceed;

DmrPurchLinePrintContract  contract;

DmrPurchLinePrintContract  controller = new DmrPurchLinePrintContract  ();

if (_args.record() && _args.dataset() == tableNum(PurchLine))

{

legalProceed = _args.record();

controller.parmReportName(ssrsReportStr(DmrPurchLinePrint,Report));

controller.parmDialogCaption(“Purch Cont “);

controller.parmArgs(_args);

contract = controller.parmReportContract().parmRdpContract();

contract.parmpurchLineRecId(legalProceed.RecId);

controller.parmShowDialog(false);

controller.startOperation();

}

}

}

[SRSReportParameterAttribute(classStr(DmrPurchLinePrintContract))]

class DmrPurchContLayoutPrintDP extends  SrsReportDataProviderPreProcess

{

DmrPurchConTmp  DmrPurchConTmp;

[SRSReportDataSetAttribute(tablestr(DmrPurchConTmp))]

public DmrPurchConTmp getDmrPurchConTmp()

{

select DmrPurchConTmp;

return DmrPurchConTmp;

}

public void processReport()

{

DmrPurchContLayoutPrintContract contract;

purchLine                       purchLine;

contract = this.parmDataContract() as DmrPurchLinePrintContract;

DmrPurchConTmp.setConnection(this.parmUserConnection());

purchLine = purchLine::findRecId(contract.parmpurchLineRecId());

if (purchLine)

{

this.populateDmrPurchConTmp(purchLine);

}

}

void populateDmrPurchConTmp(purchLine _purchLine)

{

DmrPurchContQuantity    purchContQuantity;

PurchLine               purchLine;

;

select firstonly purchContQuantity

where purchContQuantity.InventTransId == _purchLine.InventTransId;

DmrPurchConTmp.InventTransId  = _purchLine.InventTransId;

DmrPurchConTmp.insert();

}

}

Bu sınıfları oluşturduktan sonra raporu tasarlamaya geçebiliriz. Öncelikle yeni bir rapor oluşturuyoruz.

Resim-1

Yeni bir rapor tasarımı oluşturuyoruz. Burada çıktı olacağı için Precision Design kullandım. Ayrıca sayfa özelliklerinde A4 seçtim. Bu arada isim önemli kodumuzda bunu kullandık.

Resim-2

Çift tıklayıp tasarım ekranını açabilirsiniz. Ben basitçe eklemler yaptım. Çıktı olacağı için sabit yerler var.

Resim-3

Tasarımdan sonra bir Menu Item oluşturup Controller sınıfına bağlıyoruz.

Resim-4

Artık raporu almak istediğimiz forma ekleyip Deploy edebiliriz. Derlem ve eşitleme yapmayı unutmayın.

Resim-5

İlgili forma gelip raporu çalıştırıyorum.

Resim-6

Rapor çıktısını görebiliyorum.

Resim-7

Bu yazıda bir çıktı tasarımı için SSRS raporu nasıl yapılır anlatmaya çalıştım. 3 sayfalık bir çıktı tasarlamam gerekiyor. Sayfa sayfa yapmak pek mükün olmadı siz 3 sayfa uzunluğunu ayarlarsanız otomatik bölüyor.

Selamlar.

www.fatihdemirci.net

TAGs: Microsoft Life Cycle Services, LCS, Azure, Azure DevOps, SSRS, Microsoft Dynamics 365, MsDyn365FO, MsDyn365CE, MsDyn365

Dynamics 365 Finance and Operations Event Handler Kullanımı?

Bu yazıda Dynamics 365 Finance and Operations içinde standart bir formda Event Handler kullanarak nasıl işlemler yapabilirsiniz göstermeye çalışacağım.

Bir önceki yazımda Form DataSource metotlarına Extension ile ekleme yapmayı anlatmıştım. CustInvoiceJournal formuna E-Fatura filtresi için bir DataSource eklemiştim. Şimdi orada eklenen filtreyi kullanıcının kaldırabilmesi için bir CustInvoiceJournal formuna CheckBox ekledim. Bu CheckBox’ın işaretlenmesi ile tüm kayıtları göstereceğim.

Events kısmından OnClicked’e sağ tıklayıp Copy event handler method diyorum.

Resim-1

Yeni bir class oluşturup kodu yapıştırıyorum.

class CustInvoiceJournal_FD_EventHandler // Class isimlendirmede hala bazen karışıyor ama ekip içinde bir standart oturtmak lazım.

{

/// <summary>

///

/// </summary>

/// <param></param>

/// <param></param>

[FormControlEventHandler(formControlStr(CustInvoiceJournal, DmrShowAllRecord), FormControlEventType::Clicked)] // Kopyalama sonucu bu geliyor zaten.

public static void DmrShowAllRecord_OnClicked(FormControl sender, FormControlEventArgs e)

{

QueryBuildDataSource    custInvoiceJourDS;

QueryBuildDataSource    eInvoicePoolTableDS;

FormRun                 elementForm         = sender.formRun();

FormCheckBoxControl     showAllRecord      ;

FormDataSource          custInvoiceJour_ds  = elementForm.dataSource(formDataSourceStr(CustInvoiceJournal, CustInvoiceJour)) as FormDataSource;

#IsoCountryRegionCodes

if (SysCountryRegionCode::isLegalEntityInCountryRegion([#isoTR]))

{

showAllRecord       = elementForm.design().controlName(formControlStr(CustInvoiceJournal, DmrShowAllRecord));

custInvoiceJourDS   = custInvoiceJour_ds.query().dataSourceTable(tableNum(custInvoiceJour));

eInvoicePoolTableDS = custInvoiceJour_ds.query().dataSourceTable(tableNum(FDEInvoicePoolTable));

if(showAllRecord.checked())

{

eInvoicePoolTableDS.enabled(false);

}

else

{

eInvoicePoolTableDS.enabled(true);

}

custInvoiceJour_ds.executeQuery();

}

}

}

Bu yazıda form kontrolleri için EventHandler kullanımını anlatmaya çalıştım.

Selamlar.

www.fatihdemirci.net

TAGs: Dynamics 365 Finance and Operations, MsDyn365FO, OnClicked (), DataSource, Microsoft Dynamics 365, MsDyn365FO, MsDyn365CE, MsDyn365, Dynamics 365 ERP, X++

Dynamics 365 Finance and Operations Form DataSource Metotlarında Extension Kullanımı.

Bu yazıda Dynamics 365 Finance and Operations içinde standart bir formun DataSource metotlarına Extension ile nasıl ekleme yapabiliriz anlatmaya çalışacağım. Eski versiyonlarda bu işlem çok kolay ve hızlı yapılabiliyordu. Artık direk müdahale edemediğimiz için Extension mantığıyla ulaşmak zorundayız.

Bir örnek kodla DataSource metotlarına nasıl ulaştığımızı görelim. Bu örnekte CustInvoiceJournal formuna E-Fatura havuzuna gönderilenler ilk açılırken gelmesin diye bir filtre eklemek istiyorum. Bunun için CustInvoiceJour veri kaynağının init() metoduna ulaşıp bir join yapmam gerekiyor.  Yeni bir class oluşturuyorum.

[ExtensionOf(formDataSourceStr(CustInvoiceJournal,CustInvoiceJour))] // Bu satır asıl işi yapan hangi DataSource ise onu seçiyorum.

final class CustInvoiceJournalDS_FD_Extension // final eklemeyi unutmayın.

{

public void init()

{

FormDataSource          formDS = this; // DataSource metodunda olduğum için This direk DataSource u veriyor.

QueryBuildDataSource    custInvoiceJourDS;

QueryBuildDataSource    eInvoicePoolTableDS;

#IsoCountryRegionCodes

next init();  // asıl metodu çağıran kısım.

if (SysCountryRegionCode::isLegalEntityInCountryRegion([#isoTR]) //

{

custInvoiceJourDS = formDS.query().dataSourceTable(tableNum(custInvoiceJour));

// FormDS form dataSource olduğu için ona ekleme yapamazsınız. Aslında bize QueryBuildDataSource nesnesi lazım FormDS üzerinden ulaşıyorum.

eInvoicePoolTableDS = custInvoiceJourDS.addDataSource(tableNum(FDEInvoicePoolTable)); // Eklemeyi yapıyorum.

eInvoicePoolTableDS.addLink(fieldNum(custInvoiceJour , recId), fieldNum(FDEInvoicePoolTable ,RefRecId ));

eInvoicePoolTableDS.addLink(fieldNum(custInvoiceJour , TableId), fieldNum(FDEInvoicePoolTable,RefTableId ));

eInvoicePoolTableDS.joinMode(JoinMode::NoExistsJoin);

}

}

}

Bu yazıda standart bir formun herhangi bir DataSource metoduna Extension ile nasıl ekleme yapılır anlatmaya çalıştım.

Selamlar.

www.fatihdemirci.net

TAGs: Dynamics 365 Finance and Operations, MsDyn365FO, init(), DataSource, Microsoft Dynamics 365, MsDyn365FO, MsDyn365CE, MsDyn365, Dynamics 365 ERP, X++

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

Standart Tabloların initFrom…() Metodlarına Extension ile Nasıl Ekleme Yapılır?

Bu yazıda Extension kullanımını faklı bir örnek vereceğim. Bir örnekle açıklayayım. SalesTable ve CustInvoiceJour’a bir alan açtım ve fatura oluştuğunda bu alan SalesTable’dan CustInvoiceJour’a taşınsın istiyorum.

Eski versiyonda bu çok kolaydı CustInvoiceJour-> initFromSalesTable() metoduna bir satır ekleyip işi çözebilirdiniz. Yeni mantıkla birlikte bir Extension sınıfı yazıp onun içinde halletmek zorundasınız.

Resim-1

Sınıfı oluşturup aşağıdaki gibi bir iki metot yazdım. Ben iki faklı metodu aynı sınıfta düzenledim. Burada dikkat etmeniz gereken iki konu var. Birincisi PostHandlerFor kullanımı. Bu standart metot bitince buraya girecek demek. İkincisi getArgs() ile aldığım salesTable değişkeni. Burada standart metottaki değişkenle aynı isimde olmalı yoksa çalışmaz. Ben direk _ kullanılmıştır diye düşünüp ekledim çalışmadı sonra bakınca fark ettim standart metot kullanmamış.

Resim-2

Bu yazıda initFrom metotlarına Extension ile nasıl ekleme yapabileceğinizi anlatmaya çalıştım. Eskiye nazaran biraz daha uzun bir işlem buda geliştirme sürelerini arttırıyor.

Selamlar.

www.fatihdemirci.net

TAGs: Microsoft Life Cycle Services, LCS, Azure, Azure DevOps,  initFrom, 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

Page 3 of 4012345102030...Last »