//MAA 30.07.2018 display utcDatetime dispCreateDate() { InventTrans InventTrans; if (InventTrans::findTransId(this.InventTransId).TransType == InventTransType::Sales) { return salestable::find(SalesLine::findInventTransId(this.InventTransId).SalesId).createdDateTime; } else if (InventTrans::findTransId(this.InventTransId).TransType == InventTransType::ProdLine) { return ProdTable::find(this.TransRefId).createdDateTime; } else if (InventTrans::findTransId(this.InventTransId).TransType == InventTransType::Production) { return ProdTable::find(this.TransRefId).createdDateTime; } else if (InventTrans::findTransId(this.InventTransId).TransType == InventTransType::Purch) { return PurchTable::find(PurchLine::findInventTransId(this.InventTransId).PurchId).createdDateTime; } else { return InventTrans.createdDateTime; } }
30 Temmuz 2018 Pazartesi
Stok Yönetimi > Hareketler'e referansına göre oluşturma tarihi getirme
Stok yönetimindeki Hareketler'e referansına göre ilgili tablolardan oluşturma tarihi ve saatini almak için aşağıdaki şekilde bir display method yazabilirsiniz.
Deftere nakil problemi | Dynamics Ax
Deftere nakil problemi
Satınalma siparişlerinde, bir cariye ait birden fazla siparişi faturalarken, aşağıdaki alanda kaç sipariş birleşecekse o kadar satır oluşuyor. Eğer siz düzenle demeden tamam butonuna basarsanız Ax siparişini bekleyeni de aşıyor direk faturalıyor ve bu çok riskli bir durum.Muhasebenin fatura kontrolü olmuyor bu durumda. Düzenle denildiğinde ise burada bulunan satırları birleştirip tek fatura olarak işlemlerinizi yapabiliyorsunuz.
Bunun önüne geçmek için şöyle bir çözüm düşündüm, birden fazla satır varsa, kullanıcı Tamam butonuna dalgınlıkla da olsa basamasın, ancak düzenle deyip tek satırda birleştirince Tamam diyebilsin şeklinde düzenlersek bunu engellemiş oluruz.
Bu kayıtlar Ax'ta PurchParmTable'da tutuluyor, burada ilgili siparişin satır sayısını elime alırsam buna göre bir kural yazıp istediğimi yapmış olurum.
int numberOfLinesPurchParm() // MAA 26.07.2018 { return any2int((select count(RecId) from PurchParmTable where PurchParmTable.OrderAccount == this.OrderAccount && PurchParmTable.ParmId == this.ParmId).RecId); }
Daha sonra formun datasource'unda bulunan PurchParmTable'ın active'ıne aşağıdaki şekilde şartları yazdığımda istediğimizi yapmış oluruz.
if (PurchParmTable.numberOfLinesPurchParm() == 1) //MAA 26.07.2018 { OkButton.enabled(true); } else if (PurchParmTable.numberOfLinesPurchParm() > 1) { OkButton.enabled(false); }
Daha önce yazdığım yazıyı da inceleyebilirsiniz.
24 Temmuz 2018 Salı
Forma field'ı getirme
Tablodaki alanlardan hangi satır üzerindeyseniz ilgili field'ın değerini aşağıdaki şekilde getirebilirsiniz. Sadece TittleField1'i seçebilirsiniz. Ya da her ikisi de (TittleField1, TittleField2) seçip formun üst tarafınfa görebilirsiniz.
Aşağıdaki gibi karşınıza çıkacaktır.
Aşağıdaki gibi karşınıza çıkacaktır.
23 Temmuz 2018 Pazartesi
View'e kodsuz range verme
View Range
Oluşturduğunuz bir view'e kod eklemeden range verebilirsiniz.Örneğin satış siparişlerinde durumu iptal edil olanları listelemek için aşağıdaki yöntem sizin işinizi çözecektir.
16 Temmuz 2018 Pazartesi
Satış siparişlerinde örnek rapor | Dynamics Ax
Sizden ekrandaki gibi satış siparişiyle, müşteri hesabıyla vs. filtreleme yapabilecekleri bir rapor istenirse şu adımları izleyerek yapabilirsiniz;
Raporda kullacağımız tabloları oluşturacağımız formun datasource'una ekliyoruz.
Sonrasında form oluşturuyoruz, formun classDecleration'una kullanacağımız fieldların tanımlamalarını yapıyoruz, filtrelemeleri de eklediğimiz formun methodsuna aşağıdaki şekilde kodlarımızı ekliyoruz;
satış siparişi için:
müşteri hesabı için:
Filtreleri sıfırlamak için :
Filtrelerde ilgili işlemleri bu şekilde yapıyoruz. Siparişin toplam miktarı için SalesTable'ın methods'una şu kodu ekliyoruz :
Raporumuz bu şekilde tamamlanmış oluyor. Yararlı olması dileğiyle :)
Raporda kullacağımız tabloları oluşturacağımız formun datasource'una ekliyoruz.
Sonrasında form oluşturuyoruz, formun classDecleration'una kullanacağımız fieldların tanımlamalarını yapıyoruz, filtrelemeleri de eklediğimiz formun methodsuna aşağıdaki şekilde kodlarımızı ekliyoruz;
public class FormRun extends ObjectRun { SalesId Salesid; ItemId itemid; CustAccount custAccount; }
satış siparişi için:
edit CustAccount custAccount(boolean set, CustAccount _custAccount = custAccount) { if (set) { custAccount = _custAccount; SalesTable_ds.executeQuery(); } return salesid; }
müşteri hesabı için:
edit SalesId Salesid(boolean set, SalesId _salesid = salesid) { if (set) { salesid = _salesid; SalesTable_ds.executeQuery(); } return salesid; }
Filtreleri sıfırlamak için :
void clearRange() { QueryBuildDataSource qbds; ; if(SalesCustTxt.text() != '' || SalesIdtxt.text() != '' ) { qbds = SalesLine_ds.query().dataSourceTable(tablenum(SalesLine)); qbds.clearRanges(); this.Salesid(true, ''); this.custAccount(true, ''); SalesLine_ds.executeQuery(); } }
Filtrelerde ilgili işlemleri bu şekilde yapıyoruz. Siparişin toplam miktarı için SalesTable'ın methods'una şu kodu ekliyoruz :
display real TotalSales()//MAA 19.03.2018 { return (select sum(SalesQty) from SalesLine where SalesLine.SalesId == this.SalesId).SalesQty; }Satış siparişlerinde filtreleme yaparken eklediğimiz field'e bütün siparişler geliyor olacaktır. Bütün siparişlerin raporda gelmesi istenmeyebilir. Örneğin iptal edilenler ya da ihracat siparişlerinin görünmesini engellemek için eklediğimiz fieldlerin lookup'ını eziyoruz.
public void lookup() { Query query = new Query(); QueryBuildDataSource queryBuildDataSource; QueryBuildRange queryBuildRange; SysTableLookup sysTableLookup; ; sysTableLookup = SysTableLookup::newParameters(tablenum(SalesTable), this); sysTableLookup.addLookupfield(fieldnum(SalesTable, SalesId)); sysTableLookup.addLookupfield(fieldnum(SalesTable, SalesName)); sysTableLookup.addLookupfield(fieldnum(SalesTable, CustAccount)); queryBuildDataSource = query.addDataSource(tablenum(SalesTable)); if(SalesIdtxt.text()) queryBuildDataSource.addRange(fieldnum(SalesTable, SalesId)).value(SalesIdtxt.text()); queryBuildRange = queryBuildDataSource.addRange(fieldnum(SalesTable, SalesPoolId)); queryBuildRange.value('!IHRACAT'); queryBuildRange = queryBuildDataSource.addRange(fieldnum(SalesTable, TaxGroup)); queryBuildRange.value('!YURTDISI'); queryBuildRange = queryBuildDataSource.addRange(fieldnum(SalesTable, SalesStatus)); queryBuildRange.value('!İptal edildi'); sysTableLookup.parmQuery(query); sysTableLookup.performFormLookup(); }
Raporumuz bu şekilde tamamlanmış oluyor. Yararlı olması dileğiyle :)
Kaydol:
Kayıtlar (Atom)
Total ciro
static void MAA_SalesTableTotal(Args _args) { SalesTable SalesTable; utcDateTime dateTime; dateTime ...
-
Dynamics Ax Microsoft’un orta ve büyük ölçekli işletmelerin ihtiyaçlarını karşılamak için tasarladığı temel iş çözümüdür. Veritabanı yöne...
-
Veri Filtreleme CTRL+F Geçerli alanı filtrelemek için kullanılır. Ekran açılır. Hangi alan üzerine tıklandı ise o alan için filtreleme k...