28 Haziran 2018 Perşembe

İlişkili tablodan verileri otomatik çekme | Dynamics Ax

Sizden tablonuzda sicil numarasını seçip persoenelin adı ve departmanı otomatik olarak gelmesi istenirse, aşağıdaki şekilde tablonuzun methodsunda modifiedField'ına yazabilirsiniz.

public void modifiedField(fieldId _fieldId)
{
     super(_fieldId);
     switch (_fieldId)
    {
        case (fieldnum(DRT_EnvanterTransTable,EmplID)) :
            this.EmplName     = EmplTable::find(this.EmplID).Name;
            this.Dimension[1] = EmplTable::find(this.EmplID).Dimension[1];
        break;
    }
}

27 Haziran 2018 Çarşamba

Bir tablodaki alanın adını kodla bulma | Dynamics Ax


static void FieldName(Args _args)
{
    SysDictField dict;
    str label;
    ;

    dict = new SysDictField(tablenum(CustTrans), fieldNum(CustTrans,PostingProfile));
    label = dict.label();
    info(strfmt("%1", label));
}

26 Haziran 2018 Salı

Display bir alana ilişkili bir tablodan alan getirme | Dynamics Ax

Bir tabloya, viewe vs. display olarak bir alan eklediniz ve bu alanla ilişkili bir alanı çekmek istiyorsanız aşağıdaki gibi yapabilirsiniz. 

Eklediğiniz display alan;


display VendAccount ETGExImpVendAccount()
{;
 return PurchTable::find(this.PurchId).OrderAccount;
}


İlişkili tablodan çekmek istediğiniz farklı bir alan;


display VendName ETGExImpVendName()
{;
 return VendTable::find(this.ETGExImpVendAccount()).Name;
}

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

Total ciro

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