25 Haziran 2018 Pazartesi

Tümünü seç, kaldır | Dynamics Ax

Formda kayıtların tümünü seçmek ya kaldırmak istiyorsanız, öncelikle iki adet buton ekleyip ve click methoduna aşağıdaki gibi kodları yazarak yapabilirsiniz.


Tümünü seç yapmak için;

 



void clicked()
{
  AtmSalesPickingListJournalTable atmtable;
  AtmSalesPickingListJournalLine  atmDetail;
  ;
  super();
  ttsbegin;

  while select AtmTable where atmtable.PickingListId ==  AtmSalesPickingListJournalTable.PickingListId
  {

    while select  forupdate atmDetail where atmdetail.PickingListDate == atmTable.PickingListDate &&
                                            atmdetail.PickingListId   == atmTable.PickingListId

    {
        atmdetail.DIIB = Noyes::Yes ;
        atmDetail.update();

    }

 }
  ttscommit;

   AtmSalesPickingListJournalLine_ds.executeQuery();


}

Tümünü kaldır için;



void clicked()
{
  AtmSalesPickingListJournalTable atmtable;
  AtmSalesPickingListJournalLine  atmDetail;
  ;
  super();
  ttsbegin;

  while select AtmTable where atmtable.PickingListId ==  AtmSalesPickingListJournalTable.PickingListId
  {

    while select  forupdate atmDetail where atmdetail.PickingListDate == atmTable.PickingListDate &&
                                            atmdetail.PickingListId   == atmTable.PickingListId

    {
        atmdetail.DIIB = Noyes::No ;
        atmDetail.update();

    }

 }
  ttscommit;

   AtmSalesPickingListJournalLine_ds.executeQuery();

} 

17 Mayıs 2018 Perşembe

Boyutları güncelleme(Dimension1,2,3,4) | Dynamics Ax

Örneğin satınalma siparişleri formunda boyutları buton yardımı ile güncellemek istediler. Dimension(1,2,3,4,5) Extended'lerde yok. Bunun için öncelikle ilişkili olarak exdended data type'lerin içine hangi boyutların güncellenmesi isteniyorsa tanımlama yapmamız gerekiyor.
Örneğin Dimension3 için resimdeki gibi bir tanımlama yapabilirsiniz;


Aşağıdaki kodu formun methods kısmına yazdıktan sonra istenilen forma bir buton ekleyip, butonun click'ınde bu methodu çağırabilirsiniz.

void updateDims()

{

    //  Dimensions Değiştirme

    Dialog                  d = new Dialog(strfmt("%1 için boyutları düzenle", PurchLine.ETGInventDimCombinationName));

    DialogField             dlgDimDepartment, dlgDimPerson, dlgDimVehicle, dlgDimPurpose;

    DialogGroup             dlgGroup;

    InventTrans             inventTrans;

    InventTransPosting      inventTransPosting;

    ;



    // Dimensions

    dlgGroup = d.addGroup("@SYS80374");

    dlgGroup.widthMode(FormWidth::ColumnWidth);

    dlgDimDepartment    = d.addFieldValue(typeid(DepartmentDimension),  PurchLine.Dimension[1], "Departman");

    dlgDimPerson        = d.addFieldValue(typeid(PersonDimension),      PurchLine.Dimension[4], "Personel");

    dlgDimVehicle       = d.addFieldValue(typeid(VehicleDimension),     PurchLine.Dimension[5], "Araç");

    dlgDimPurpose       = d.addFieldValue(typeid(PurposeDimension),     PurchLine.Dimension[3], "Amaç");



    if(PurchLine)

    {

        d.run();

        if (d.closedOk())

        {

            ttsbegin;

            PurchLine.selectForUpdate(true);

            PurchLine.Dimension[1] = dlgDimDepartment.value();

            PurchLine.Dimension[4] = dlgDimPerson.value();

            PurchLine.Dimension[5] = dlgDimVehicle.value();

            PurchLine.Dimension[3] = dlgDimPurpose.value();

            PurchLine.doupdate();

            inventTrans = InventTrans::findTransId(PurchLine.InventTransId);

            while select forupdate inventTransPosting

                where inventTransPosting.TransDate      == inventTrans.DateFinancial &&

                      inventTransPosting.Voucher        == inventTrans.Voucher &&

                      inventTransPosting.InventTransId  == inventTrans.InventTransId

            {

                inventTransPosting.Dimension[1] = PurchLine.Dimension[1];

                inventTransPosting.Dimension[4] = PurchLine.Dimension[4];

                inventTransPosting.Dimension[5] = PurchLine.Dimension[5];

                inventTransPosting.Dimension[3] = PurchLine.Dimension[3];

                inventTransPosting.doupdate();

            }

            ttscommit;

            PurchLine_ds.research(true);

        }

    }

    else

        throw warning ("Öncelikle bir satır girmelisiniz!");

}

Siparişlerde -(eksi) fiyat atması | Dynamics Ax

Siparişlerde girilen birim fiyatın sistem tarafında -(eksi) olarak gelmesini madde kartında bulunan
Fiyata esas alınan miktar alanından yapabilirsiniz.


Bu alan -(eksi) olarak seçildiğinde sipariş satırlarına birim fiyatı -(eksi) olarak gelecektir.

3 Mayıs 2018 Perşembe

Toplu İş | Dynamics Ax

Hergün kayıtlarınızın otomatik olarak hesaplanması, güncellenmesi vs. istenilirse;
Toplu işlerden(Temel > Sorgulamalar > Toplu iş) bunu yapabilirsiniz.

Bunun için öncelikle bir class yazmanız gerekecek. Classta yapmak hergün yapılmasını istediğiniz işin kodunu da aşağıdaki gibi yazabilirsiniz. Bu şartlara göre belirlediğim saatte DRTUserGroupList tablosuna insert etmesini istiyorum.

public void run()
{
      UserGroupInfo       UserGroupInfo;
      UserGroupList       UserGroupList;
      DRT_UserGroupList   DrtUserGroupList;
      UserInfo            UserInfo;
      ;

    ttsbegin;

   delete_from DrtUserGroupList;
    while select UserGroupInfo join UserGroupList
        where UserGroupInfo.Id == UserGroupList.groupId
         {
            select  UserInfo
                where  UserInfo.id == UserGroupList.userId;
                    {
                         DrtUserGroupList.clear();
                         DrtUserGroupList.groupId   =  UserGroupList.groupId;
                         DrtUserGroupList.userId    =  UserGroupList.userId;
                         DrtUserGroupList.GroupName =  UserGroupInfo.name;
                         DrtUserGroupList.company   =  UserInfo.company;
                         DrtUserGroupList.UserName  =  UserInfo.name;
                         DrtUserGroupList.insert();
                     }

          }

    ttscommit;
}

Class'ın içerisinde aşağıdaki şekilde bir method oluşturuyoruz ve burda çalıştırıyoruz. Aşağıdaki gibi bir ekran karşımıza çıkıyor. Tamam dedikten sonra Toplu işlere eklemiş oluyoruz.

static void main(Args _args)
{
    DRTUserGroupList DRTUserGroupList = new DRTUserGroupList();
    ;
    if(DRTUserGroupList.prompt())
    {
        DRTUserGroupList.run();
    }
}



Toplu işler'den de gerekli ayarları yapınca; belirttiğimiz sıktıkta Ax otomatik olarak çalıştıracaktır.



Class'ı indirmek için tıklayın.



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.

Total ciro

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