13 Nisan 2018 Cuma

Oluşturan ve Değişiklik yapanı display olarak getirme | Dynamics Ax

Tablodaki bir kaydı oluşturan(CreatedBy) ya da değiştiren(ModifiedBy) kişinin tam adını görmek istediğinizde aşağıdaki kodlar size yardımcı olacaktır.


display Name dispCreatedByName()
{;
    return  EmplTable::find(SysCompanyUserInfo::find(this.createdBy).EmplId).Name;
}



display Name dispModifiedByName()
{;
    return  EmplTable::find(SysCompanyUserInfo::find(this.modifiedBy).EmplId).Name;
}

5 Nisan 2018 Perşembe

Formu kullanıcıya göre düzenleme yetkisi (Form Kişiselleştirme)

Ax'ta herhangi bir form üzerinde sağ tık > Kurulum yetkisini vermek için;



Yetkilerden Güvenlik > Yönetim > Çeşitli > Form Kişiselleştirme 
Buradan yetkiyi verebilirsiniz.

3 Nisan 2018 Salı

Kayıtları excelden içeri aktarma | Dynamics Ax

Exceldeki verilerinizi direk olarak kendiniz seçebileceğiniz aşağıdaki job örneği işinizi kolaylaştırabilir.


void CreateLedgerBudgetFromExcel()
{
    #Excel
    #AviFiles

    Dialog              dialog = new Dialog("@ETG83");
    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;
    Int                 NoofSheet,i,lastRow,sn;

    LedgerTable         ledgerTable;
    LedgerBudget        ledgerBudget;

    SysExcelRange range;

    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("Vendor Importing");
            progress.setTotal(lastRow);
            progress.setAnimation(#AviTransfer);
            setprefix("Vendor Import");

            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();

                            ledgerBudget.clear();
                            cells = workSheet.cells();

                            ledgerBudget.ModelNum           = cells.item(sn,1).value().bStr();
                         //   ledgerBudget.RevisionDate       = cells.item(sn,2).value().date();
                            ledgerBudget.AccountNum         = cells.item(sn,2).value().bStr();

                            ledgerTable = LedgerTable::find(cells.item(sn,3).value().bStr());
                            if(ledgerTable)
                            {
                                ledgerBudget.TaxGroup       = ledgerTable.TaxGroup;
                                ledgerBudget.Comment        = ledgerTable.AccountName;
                            }

                            ledgerBudget.Dimension[1]       = cells.item(sn,4).value().bStr();
                            ledgerBudget.Dimension[4]       = cells.item(sn,5).value().bStr();
                            ledgerBudget.Dimension[5]       = cells.item(sn,6).value().bStr();

                            ledgerBudget.StartDate          = cells.item(sn,7).value().date();
                            ledgerBudget.Currency           = cells.item(sn,8).value().bStr();
                            ledgerBudget.Amount             = cells.item(sn,9).value().double();//cells.item(sn,9).value().currency();
                            ledgerBudget.DRTBudgetResponsible = cells.item(sn,10).value().bStr();
                            ledgerBudget.insert();

                            ttscommit;
                        }
                    }
                    //LedgerBudget_ds.executeQuery();
                }
            }
            catch
            {
                ttsabort;
                application.quit();
            }
        }
    }
}

30 Mart 2018 Cuma

Dynamics Ax Yığın izleme ' dat şirketi yok hatası

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 kullanıcının bulunacağı şirket hesabını seçip tekrar giriş yaptıktan sonra çıkan ekranda Hayır'ı seçip tamam deyin.

Problem gitmezse ikinci olarak şunu deyeneyebilirsiniz;
Kullanıcılar > Kullanıcı seçenekleri > Kullanım verileri 'ni silip, sıfırlayıp, varsayılan'dan da sıfırlama yaptıktan sonra kullanıcının şirketi otomatik olarak DAT oluyor.
Kullanıcı DAT şirketindeyken kendi hesabından Ax'ını açıp kapatmanız gerekiyor. Sonrasında kullanıcının şirket hesabını seçin tekrar Ax'ını açın gelen ekrandaki hayır seçeneğini seçin, problem gidecektir.


Tablonun içersindeki alanlarda hesaplama yaptırma

Örneğin SalesLine tablosunda iki alanda matematiksel işlem yapmanızı istendi. Aşağıdaki kodla bunu yapabilirsiniz. Farklı ilişkili bir formda da bu alanı gösterebilirsiniz.
//MAA 30.03.2018
server display InventQty  ETGExportedQty()
{
    SalesLine       salesLine;
    InventQty       inventQty = 0;
    ;

    while select salesLine
            index hint SalesLineIdx
            where salesLine.InventTransId     == this.InventTransId
    {
        inventQty = salesLine.SalesQty - salesline.ETGExportedQty;
    }

    return inventQty;
}

5 Mart 2018 Pazartesi

Dynamics Ax Tablo Özellikleri

Şirketlerden bağımsız şekilde kayıtlarınızı gireceğiniz bir form hazırlıyorsanız; tablonuzun özelliklerinden SaveDataPerCompanyalanını kapattığınızda DataAreaid'sini devre dışı bırakmış oluyorsunuz. Böylelikle hangi şirketten girerseniz girin kayda kaldığınız yerden devam edebileceksiniz.

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