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 kutusu açılır.
ALT + F3
Örneğin fatura hesabının üzerindeyken ALT + F3’e bastığınızda, otomatik olarak aşağıdaki gibi listeleme yapar.
CTRL + F3
Sorgulama ekranı açılır ve kompleks filtreler yapılabilir.
ALT + F9
Bir kaydı siler.
CTRL + F5
Degisiklikleri iptal eder, etkin kaydı geri yükler.
CTRL + Yukarı ok
İmlecin bulunduğu sütunun filtre alanına gider.
CTRL + Shift + F3
Tüm filtreleri temizler.
Arama kutularında yapılabilen sorgular;
- Yalnızca bir kayıt değil de bir kayıt aralığı filtrelenmek isteniyorsa, aynı arama kutusuna sırayla, arama aralığının ilk kaydı, iki nokta ve arama aralığının son kaydı yazılır.
Örneğin 01.01.2018..05.01.2018 bu iki tarih arasındaki kayıtlar listelenir.
Diğer örnek;
01.01.2018..05.01.2018, !02.01.2018..04.01.2018 01.01.2015 ile 05.01.2018 tarihlerinde 02.01.2018, 04.01.2018 tarihleri arasında kalanlar gelmesin şeklinde listelenir.
- Aranacak kaydın sadece birkaç karakteri biliniyorsa, arama kutusuna sırasıyla, bilinen karakterler ve ardından, AX’da joker karakter olarak kullanılan yıldız (*)karakteri yazılır.
Örneğin, müşteriler tablosunda “Müşteri hesabı” 30 ile başlayan kayıtları filtrelemek için ; 30*
30 ile bitenleri filtrelemek için *30
İçerisinde 30 geçenler için *30*
- Verilen değerden farklı olan kayıtları aramak için de “Ünlem”(!) karakteri kullanılır.
Örneğin müşteriler tablosunda “Para Birimi” alanının değeri “EUR” değerinden farklı olanları filtrelemek için !EUR
- Aranacak alanda x karakter uzunluğundaki kayıtların listelenmesini istiyorsanız;
Örneğin, filtre alanına 1?? yazarsanız, 1 ile başlayan 3 haneli kayıtları listeler.
Doküman için tıklayın.
Daha geniş filtrelemeleri görmek için tıklayın.
Doküman 2 için tıklayın.
27 Şubat 2018 Salı
22 Şubat 2018 Perşembe
Örnek Dynamics Ax Projesi | İki tarih arasındaki kayıtları bulup hesaplama yaptırma
Girilen iki tarih arasındaki(Sevk tarihi seçtim siz başka bir tarih seçebilirsiniz) satış siparişlerini süzüp siparişin içerisindeki istenilen alanda hesapla yaptırarak kontrol edebileceğiniz bir örnek üzerine çalışma yaptım.
DRT Sales adında verilerin hesaplanıp ekleneceği bir tablo oluşturdum. Sonrasında hangi alanları istiyorsam bu formda görmek istiyorsak onu ekleyelim.
Daha sonraformun design'ine gelip filter için kullanacağımız tarih alanları ve buton ekleyelim.
Butonun click'ıne hesaplama yapacağımız methodu çağırıyoruz.
Butonun click'ıne hesaplama yapacağımız methodu çağırıyoruz.
DRT Sales adında verilerin hesaplanıp ekleneceği bir tablo oluşturdum. Sonrasında hangi alanları istiyorsam bu formda görmek istiyorsak onu ekleyelim.
Daha sonraformun design'ine gelip filter için kullanacağımız tarih alanları ve buton ekleyelim.
Butonun click'ıne hesaplama yapacağımız methodu çağırıyoruz.
void clicked()
{
delete_from DRTSales where DRTSales.UserId ==curuserid();
element.CalcSales();
}
Çağırdığımız bu method oluşturduğumuz formun methods kısmında yer alacak. Butonun click'ıne hesaplama yapacağımız methodu çağırıyoruz.
void CalcSales()
{
Query q;
QueryBuildDataSource qbdsSalesLine;
QueryBuildDataSource qbdsSalesTable;
QueryRun queryRun;
SalesLine salesLine;
SalesTable salesTable;
DrtSales DrtSls;
InventTable inventTable;
;
q = new Query();
qbdsSalesLine = q.addDataSource(tablenum(SalesLine));
qbdsSalesLine.addRange(fieldNum(SalesLine, ShippingDateRequested)).value(SysQuery::range(StartDate.dateValue(), EndDate.dateValue()));
qbdsSalesLine.addRange(fieldNum(SalesTable, SalesId)).value('SS*');
qbdsSalesLine.addRange(fieldNum(SalesTable, SalesStatus)).value(SysQuery::value(SalesStatus::Backorder));
SalesLine.SalesId = SalesTable.SalesId;
queryRun = new QueryRun(q);
while (queryRun.next())
{
salesLine = queryRun.get(tablenum(SalesLine));
inventTable = InventTable::find(SalesLine.ItemId);
{
DrtSls.clear();
DrtSls.SalesId = salesLine.SalesId;
DrtSls.SalesStatus = salesLine.SalesStatus;
DrtSls.SalesPrice = salesLine.SalesPrice;
DrtSls.SalesQty = salesLine.SalesQty;
DrtSls.ItemId = salesLine.ItemId;
DrtSls.TransDate = salesLine.ShippingDateRequested;
DrtSls.standardPalletQuantity = (SalesLine.SalesQty) * (inventtable::find(salesline.ItemId).NetWeight) ; // siparişin toplam ağırlığını hesaplar
DrtSls.Qty = salesLine.SalesQty * salesLine.SalesPrice;
DrtSls.UserId = curuserid();
DrtSls.insert();
}
}
DrtSales_DS.research();
info("Hesaplandı...");
}
Siz istediğiniz ilişkili bir tablodan alanı elinize alıp hesaplama ya da formda gözükmesini sağlayabilirsiniz.
Projeyi indirmek için tıklayın.
14 Şubat 2018 Çarşamba
Satış siparişi içerisine kontrol ekleme | Dynamics Ax
Örnek olarak yurtiçi satış siparişlerinde Nakliye bedeli zorunlu olsun fakat yurt dışı siparişlerinde olmasın diye bir kontrol ekleyecek olursak aşağıdaki kodu DataSource'un içindeki SalesLine'ın write'ına ekleyebilirsiniz.
Kontrolleri satış siparişinin içerisindeki Havuz alanın ve müşterilerin içerisindeki Müşteri gruplarında bulunan ihracat alanın durumuna göre yapıldı. İhracat tikli ise yurtdışı siparişi değilse yurtiçi siparişidir.

if((SalesPool::find(SalesTable.SalesPoolId).ihracat == NoYes::No || CustGroup::find(SalesTable.CustGroup).EtgExImpIsExport == NoYes::No) && (!SalesLine.ETGFreightPaymMode)) // MAA 14.02.2018
{
throw error ("@ETG448");
}
}
Kontrolleri satış siparişinin içerisindeki Havuz alanın ve müşterilerin içerisindeki Müşteri gruplarında bulunan ihracat alanın durumuna göre yapıldı. İhracat tikli ise yurtdışı siparişi değilse yurtiçi siparişidir.
13 Şubat 2018 Salı
Formda bir buton yardımıyla istenilen alanlarda güncelleme yapma | Dynamics Ax
void clicked()
{
switch (Box::okCancel(strfmt("'%1, %2 %3' sevk edilebilir olarak işaretlenecek!\n\nEmin misiniz?", SalesLine.itemName(), SalesLine.SalesQty, SalesLine.SalesUnit), DialogButton::Cancel))
{
case DialogButton::Ok:
ttsbegin;
SalesLine.DrtCanBeDelivered = NoYes::Yes;
SalesLine.ReceiptDateConfirmed = systemdateget();// Sistemden bugünün tarihini alır
SalesLine.doUpdate();
if (SalesLine.ReceiptDateConfirmed > SalesLine.ShippingDateRequested) // MAA 13.02.2018
{
SalesLine.ShippingDateRequested = datenull();
warning ("Talep edilen sevk tarihi Teyit edilen giriş tarihinden önce olamaz!");
SalesLine.doUpdate();
}
ttscommit;
SalesLine_DS.research();
break;
}
//super();
}
}
12 Şubat 2018 Pazartesi
İki alanın tek alanda gösterilmesi(Display)
25 Ocak 2018 Perşembe
Kodla bir gruba menuye ve tabloya yetki verme
Ax'ta bir kullanıcı grubuna, istediğiniz forma ya da tabloya yetki vermek için aşağıdaki kodu çalıştırabilirsiniz.
// sadece bir gruba yetki verirken kullanılır.
static void MAA_ChangeAccess_OneGroup(Args _args)
{
SecurityKeySet swSysSecurity;
UserGroupList userGroupList;
DomainInfo domainInfo;
#admin
ttsbegin;
while select domainInfo
//where domainInfo.id == #AdminDomain //sadece belirli domainler için çalıştırmak istersen
{
while select userGroupList
where userGroupList.groupId == "10-03"
{
swSysSecurity = SysSecurity::constructSecurityKeySet();
swSysSecurity.loadGroupRights(userGroupList.groupId, domainInfo.id);
swSysSecurity.tableAccess(tablenum(VENDBANKACCOUNT), AccessType::View); // tabloya yetki
swSysSecurity.menuItemAccess("ETGCustRiskLimitUpdateAppApproval", AccessRecordType::MenuItemAction, AccessType::View); // menuye yetki
xAccessRightsList::saveSecurityRights(swSysSecurity.packTouched(), userGroupList.groupId, domainInfo.id);
}
}
ttscommit;
info("tamamlandı");
}
Verileri Excelle Aktarma
Verilerinizi excelle aktarmak için. bir buton ekleyip click'ine aşağıdaki kodu eklededikten sonra;
void clicked()
{
super();
element.updateFromExcel();
DRTCreateProdDemandsTable_ds.query().dataSourceTable(tablenum(DRTCreateProdDemandsTable)).sortClear();
DRTCreateProdDemandsTable_ds.query().dataSourceTable(tablenum(DRTCreateProdDemandsTable)).addSortField(fieldNum(DRTCreateProdDemandsTable,Qty),SortOrder::Descending);
DRTCreateProdDemandsTable_ds.executeQuery();
}
Formun methods kısmına kodları eklediyip excelinizdeki verileri aktarabilirsiniz.
void updateFromExcel()
{
#Excel
#AviFiles
Dialog dialog = new Dialog("Excel veri aktarma");
DialogField dialogPath;
FilenameFilter filter = ['Excel files 2010','*.xlsx','Excel files 2003', '*.xls' ];
FilenameOpen filePath;
SysExcelApplication application;
SysExcelWorkBooks workBooks;
SysExcelWorkBook workBook;
SysExcelWorkSheets workSheets;
SysExcelWorkSheet workSheet;
SysExcelCells cells;
SysOperationProgress progress;
SysExcelRange range;
Int NoofSheet,i,lastRow,sn;
DRTCreateProdDemandsTable ProdDemandsTable;
void findLastRow(SysExcelWorkSheet _workSheet)
{
#define.Star('*')
#define.Space(' ')
;
range = _workSheet.cells().range(#ExcelTotalRange);
try
{
// Finds the row where the first contents is found.
range = range.find(#Star, null, #xlFormulas, #xlWhole, #xlByRows, #xlPrevious);
}
catch (Exception::Error)
{
error("@SYS59926");
}
if (range)
{
lastRow = range.row();
}
else
{
lastRow = 0;
}
}
;
dialog.filenameLookupFilter(filter);
dialogPath = dialog.addField(typeid(FilenameOpen));
if (dialog.run())
{
if(dialog.closedOk())
{
filePath = dialogPath.value();
application = SysExcelApplication::construct();
application.visible(false);
workBooks = application.workbooks();
workBooks.open(filePath,0,true);
workSheets = workBooks.item(1).worksheets();
noOfSheet = worksheets.count();
progress = new SysOperationProgress();
progress.setCaption("Plan aktarılıyor");
progress.setTotal(lastRow);
progress.setAnimation(#AviTransfer);
setprefix("Plan aktarımı başladı");
try
{
For( i = 1; i <= noOfSheet; i++)
{
workSheet = workSheets.itemFromNum(i);
if(workSheet)
{
findLastRow(workSheet);
for(sn = 2;sn <= lastRow;sn++)
{
ttsbegin;
cells = workSheet.cells();
ProdDemandsTable.clear();
select forupdate ProdDemandsTable
where ProdDemandsTable.itemid == cells.item(sn,1).value().bStr();
if ( ProdDemandsTable.RecId )
{
ProdDemandsTable.Qty = cells.item(sn,2).value().double();
ProdDemandsTable.Notes = cells.item(sn,3).value().bStr();
ProdDemandsTable.ConfigId = cells.item(sn,4).value().bStr();
ProdDemandsTable.InventSizeId = cells.item(sn,5).value().bStr();
ProdDemandsTable.InventColorId = cells.item(sn,6).value().bStr();
ProdDemandsTable.InventDimId = cells.item(sn,7).value().bStr(); // MAA
ProdDemandsTable.ETGGroupId2 = cells.item(sn,8).value().bStr();
ProdDemandsTable.InventDimCombinationName = cells.item(sn,9).value().bStr();
ProdDemandsTable.InventSizeName = cells.item(sn,10).value().bStr();
ProdDemandsTable.doupdate();
}
else
info(strfmt("%1 bulunamadı.", cells.item(sn,1).value().bStr()));
ttscommit;
}
}
}
}
catch
{
ttsabort;
application.quit();
}
}
}
}
exceli görmek için tıklayın.
Oluşturma tarihini display olarak farklı bir forma ekleme
Örneğin sizden satış siparişinin oluşturma tarihini farklı bir formda isteniyorsa display olarak aşağıdaki şekilde ekleyebilirsiniz.
display utcDatetime dispSalesCreateDate()
{
return salestable::find(SalesLine::findInventTransId(this.InventTransId).SalesId).createdDateTime;
}
18 Ocak 2018 Perşembe
Dynamics Ax | Deftere nakli kontrollü hale getirebilirsiniz.
Kullanıcılar girdikleri siparişleri Deftere naklederken yetkisi varsa farkında olmadan PurchParmTable'da beklemede tikini kaldırmaya yetkisi varsa;
farkında olmadan bu alanı tikleyip faturalaştırabilirler. Bu da muhasebesel açıdan çok büyük bir probleme yol açabilir.
Bir tablodaki alanın yetkisini yönetmek daha zor olduğu için tablodan düzenlemeye kapattıktan sonra, beklemede alanın görevini bir butona verip yetkisini de ilgili departmana verirseniz yönetmeniz daha kolay olabilir.
Beklemede butonunun click method'una kodları yazdığınızda tikleme görevini buton yapacaktır.
Butonun yetkilerini de aşağıdaki gibi SecurityKey ve ConfigurationKey'den verebilirsiniz.
Bu konuyla ilgili farklı bir önlemi daha inceleyebilirsiniz.
void clicked()
{
super();
element.hold();
}
void hold() //MAA 10.01.2017
{
PurchTable purchTbl;
if ((PurchTable::find(PurchParmTable.PurchId).PurchId == PurchParmTable.PurchId) && PurchParmTable.ETGHold == NoYes::Yes)
{
PurchParmTable.ETGHold =NoYes::No;
PurchParmTable.doUpdate();
}
}
Butonun yetkilerini de aşağıdaki gibi SecurityKey ve ConfigurationKey'den verebilirsiniz.
Bu konuyla ilgili farklı bir önlemi daha inceleyebilirsiniz.
8 Aralık 2017 Cuma
ilişkili tablolardan bilgi alma
Örnek;
İade sipariş aynrınlarında, İnventTable'dan kontrolünü yapacağımız madde tipi HİZMET olmayanlar için bir kontrol eklemek istiyoruz.
DataSource'da bulunan SalesLine'ın methods'unda validateWrite'ına aşağıdaki şekilde kod yazarak İnventTable'ı elimize alıp istediğimiz gibi bilgiyi alabiliriz.
if (InventTable::find(salesLine.ItemId).ItemType != ItemType::Service )
{
if(!salesLine.InventTransIdReturn)
return checkfailed("İade lot kodunu doldurunuz!");
}
ilişkili tablolardan bilgi alma 2
Örnek üzerinden gidecek olursak;
Bir formunuz var ve formda kayıt girerken CustTable'daki bir alanın durumuyla ilgili bilgi vermek istiyorsunuz,
Bunun için bilgi vermek istediğiniz formun Data Sources'ında buluan ilgili alanın(CustAccount) validete'ına aşağıdaki gibi bir kontrol eklerseniz CustTable'daki bütün alanlar için bilgiyi forma çekebilirsiniz.
public boolean validate() // maakbulut 18.10.2017
{
boolean ret;
CustTable custTable;
ETGTradePaymentJour TradePaymentJour;
ret = super();
while select CustTable
if (ETGTradePaymentJour.CustAccount == CustTable.AccountNum && CustTable.DRT_CzechSignature == DRT_CzechSignature::JointSignature)
{
info("Cari Müşterek İmzalı!");
}
while select CustTable
if (ETGTradePaymentJour.CustAccount == CustTable.AccountNum && CustTable.DRTCzechCondition == DRTCzechCondition::Zavala)
{
info("Cari Avalim!");
}
return ret;
}
Kaydol:
Kayıtlar (Atom)
Total ciro
static void MAA_SalesTableTotal(Args _args) { SalesTable SalesTable; utcDateTime dateTime; dateTime ...
-
Dynamic Ax 2009'da Kullanıcı Grupları ve Kullanıcıları Bir Forma Çekip Kullanma Dynamics Axapta 2009'da kullanıcı grupları ve iç...
-
Aşağıdaki hatayı aldığınızda, İlk olarak kullanıcının şirketini DAT olarak değiştirin, kullanıcının hesabından giriş yapın, sonrasında k...









