27 Şubat 2018 Salı

Dynamics Ax Kısa yollar(Filtreleme)

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.

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.

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.
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)

display String50 dispStateCounty()
{
    return strfmt("%1 / %2", SalesLine::findInventTransId(this.inventTransId).DeliveryState, SalesLine::findInventTransId(this.inventTransId).DeliveryCounty);
}

Total ciro

static void MAA_SalesTableTotal(Args _args) { SalesTable SalesTable; utcDateTime dateTime; dateTime ...