8 Ocak 2019 Salı

Müşterinin toplam bakiyesi | Display methods

Müşterinin toplam bakiyesini görmek için aşağıdaki metodu kullanabilirsiniz.


Toplam Bakiye: ( Tüm Borç alacak toplamını alıyor) : Açık Bakiye+ Sipariş Edilen+ Kendi Çekleri + Ciro Çekleri + Karşılıksız Çekler

display AmountMST amountMST() // maa 08.01.2019 // toplam bakiye
{
    return (((ETGCustomerRisk::find(this.AccountNum).GiroCheques) + ((ETGCustomerRisk::find(this.AccountNum).OwnCheques)
           + (ETGCustomerRisk::find(this.AccountNum).OpenBalance) + (ETGCustomerRisk::find(this.AccountNum).ReturnedCheques)
           + (ETGCustomerRisk::find(this.AccountNum).OpenSales) )));
}

Müşteri ayrıntılarındaki risk tutarı sadece çek risklerini gösteriyor.

Risk Tutarı: ( Sadece Çek riskini görüyor) : Kendi çekleri +ciro çekleri +karşılıksız çekler

30 Kasım 2018 Cuma

Enum | Microsoft Dynamics Ax

Aşağıdaki kod Enum'un içerisindeki seçenekleri info'da görmemizi sağlar.

static void Enum2Table(Args _args)
{
    DictEnum enum = new DictEnum(enumName2Id("DRTCompany"));
    int i;
    DRTEnum2Table   Enum2Table;
    ;
    delete_from Enum2Table;
    for (i=0; i < enum.values(); i++)
    {
        info(enum.index2Label(i));
        Enum2Table.value = i;
        Enum2Table.label = enum.index2Label(i);
        Enum2Table.insert();
    }
}

19 Kasım 2018 Pazartesi

Dynamics Ax İş Avansları

Personel iş avansı formu | Dyamics Ax

Personel hesabı üzerinden satınalma siparişinden bağımsız iş avansı girişi yapıp günlük oluşturabilecekleri formu paylaşacağım. Uzun olduğu için ara ara eklemeler yapacağım.
Form'un yapılışı ve kodlarını da paylaşacağım, günlük oluştumak için class'ı incelemek isterseniz aşağıdan ulaşabilirsiniz.

İncelemek için class'a buradan ulaşabilirsiniz > Personel iş avansları Class'ı

Diğer Form Tablo Workflow için hazırlanan dökümana buradan ulaşabilirsiniz. > İş avansları projesi

19 Eylül 2018 Çarşamba

Dynamics Ax displayOption Kulanımı

displayOption


displayOption formdaki satırları istenilen sarta göre renklendirir. kodu datasource'unda bulunan tablonun displayOption methodsuna yazarak bu işlemi yapıyorsunuz. Aşağıdaki örnekte tarihle ilgili bir şart yazıldı ve buna göre bir renkendirme tercih edildi.
public void displayOption(Common _common, FormRowDisplayOption _options)
{
    PurchLine              purchLineLocal;

    int backColor = WinAPI::RGB2int(161,161,255); // buradaki renkleri kendinize göre ayarlayabilirsiniz.
    int textColor = WinAPI::RGB2int(255, 255, 255);
    int backColorRed = WinAPI::RGB2int(255, 50, 50);
    int textColorWhite = WinAPI::RGB2int(255, 255, 255);
    ;

    purchLineLocal = _common;

         if(EtgExImpPurchLineTrans::findLastETA(purchLineLocal.InventTransId) > purchLineLocal.DeliveryDate)
        {
            _options.backColor(backColorRed);
            _options.textColor(textColorWhite);
        }

        else
        {
            _options.clearBackColor();
            _options.clearTextColor();
        }

    super(_common,_options);
}
Renk çeşitlerini aşağıdaki siteden inceleyebilirsiniz.
Renk çeşitleri
 
 
Farklı bir kullanım örneği;
 
public void displayOption(Common _common, FormRowDisplayOption _options)
{
    ETGCollateralTable   collateralTableLocal;
    ;
    collateralTableLocal = _common;
 if(collateralTableLocal.DueDate && (collateralTableLocal.DueDate - systemDateGet()) <= 7)
    {
        _options.backColor(backColor);
        _options.textColor(textColor);
    }
    else
    {
        _options.clearBackColor();
        _options.clearTextColor();
    }

    super(_common,_options);
}
 

SQL case when kullanımı

Aslında yapmak istediğimiz aşağıdaki tarihlere göre excelde bir sutun açıp karşısına uygun yazıyı yazdırmak.






CASE WHEN DATEPHYSICAL BETWEEN '1900 - 01 - 01 00:00:00' AND '1900 - 01 - 01  00:00:00' THEN 'BO' WHEN DATEPHYSICAL BETWEEN '1900 - 01 - 01 00:00:00' AND '2018 - 05 - 01  00:00:00' THEN 'DO' WHEN DATEPHYSICAL BETWEEN '2018 - 05 - 01 00:00:00' AND '2054 - 01 - 01  00:00:00' THEN 'OD' END

Lookup'ta tarih filtresi vermek

Lookup QueryBuildRange


TransDate startDate, EndDate; 

startDate = mkDate(1,9,2017);

endtDate = mkDate(1,10,2017);

queryBuildRange.value(queryRange(StartDate, EndDate));

(ya da)

queryBuildRange.value(queryRange(mkDate(1,9,2017), mkDate(1,10,2017)));

Başka bir örnek;
public void lookup()
{
    Query query = new Query();
    QueryBuildDataSource queryBuildDataSource;
    QueryBuildRange queryBuildRange;
     QueryBuildRange queryBuildRange2;
     QueryBuildRange queryBuildRange3;

    SysTableLookup sysTableLookup = SysTableLookup::newParameters(tableNum(SalesTable), this);

    if(DateFrom.dateValue() && DateTo.dateValue())
    {
        sysTableLookup.addLookupfield(fieldNum(SalesTable, CustAccount));

        queryBuildDataSource = query.addDataSource(tableNum(SalesTable));

        queryBuildDataSource.addGroupByField(fieldNum(SalesTable, CustAccount));

        queryBuildRange = queryBuildDataSource.addRange(fieldNum(SalesTable, createdDateTime));
        queryBuildRange.value(SysQuery::range(this.dboConvertDateToDateTime(DateFrom.DateValue()), dateNull()));

        queryBuildRange = queryBuildDataSource.addRange(fieldNum(SalesTable, createdDateTime));
        queryBuildRange.value(SysQuery::range(dateNull(), this.dboConvertDateToDateTime(DateTo.dateValue())));

        queryBuildRange = queryBuildDataSource.addRange(fieldNum(SalesTable, InventSiteId));
        queryBuildRange.value(editInventSiteId.text());

        sysTableLookup.parmQuery(query);

        sysTableLookup.performFormLookup();

    }

28 Ağustos 2018 Salı

Validate | Dynamics Ax

Belirlediğimiz tarihi ilişkili farklı tablodan kontrol edilerek kontrol ekleyebilirsiniz.

Örnek olarak ilişkisinin müşteri hesabı olduğu iki farklı tablodan birinin formunda datasource'daki ilgili alanın validate'ine aşağıdaki kodu yazarak işlem yaptırabilirsiniz.

public boolean validate() // MAA 27.08.2018
{
    boolean ret;

    ETGCustRiskLimitUpdate  CustRiskLimitUpdate;
    utcDateTime             dateTime;
    dateTime         = DateTimeUtil::addDays(DateTimeUtil::getSystemDateTime(), -90);// bugünden itibaren geçtiğimiz 90 günün tarihini alır.
  //   DRT_CustExplainTable    CustExplainTable = DRT_CustExplainTable::find(CustRiskLimitUpdate.AccountNum);

    ret = super();

      if(DRT_CustExplainTable::find(ETGCustRiskLimitUpdate.AccountNum).modifiedDateTime < dateTime // maa 27.08.2018
        &&  ETGCustomerRisk::find(ETGCustRiskLimitUpdate.AccountNum).CreditLimit < ETGCustRiskLimitUpdate.NewCreditMax
        &&  CustClassificationGroup::findGroup(CustTable::find(ETGCustRiskLimitUpdate.AccountNum).CustClassificationId).CustRiskLimit == NoYes::No) // müşteri sınıflandırma grubu
            {
                return checkfailed(strfmt("%1 carisinin müşteri detay açıklamaları alanını güncellemeniz gerekmektedir!", ETGCustRiskLimitUpdate.AccountNum));
            }

    return ret;
}
DRT_CustExplainTable tablosuyla ilişkisini kurabilmek için iki tablodaki tekil olan CustAccount'u kullanarak find yazıyoruz.
static DRT_CustExplainTable find(CustAccount   _custAccount,
                      boolean       _forUpdate = false) // MAA 13.08.2018
{
    DRT_CustExplainTable DRT_CustExplainTable;
    ;

    if (_custAccount)
    {
        if (_forUpdate)
            DRT_CustExplainTable.selectForUpdate(_forUpdate);

        select firstonly DRT_CustExplainTable
            where DRT_CustExplainTable.CustAccount == _custAccount;
    }
    return DRT_CustExplainTable;
}

10 Ağustos 2018 Cuma

Satış siparişleri | Dynamics Ax

Satış siparişinde cariye ait borca uyarı verdirme


Örnek: Bir müşteriye ait vadesi geçmiş borcu olduğunda
(Müşteri ayrıntıları > İşlevler > Açık hareket düzenleme);  ilgili cariye  satış siparişi oluştururken aşağıdaki gibi bir bilgi verilmesi isteniyorsa;

SalesTable'ın methods'una aşağıdaki kodu yazdığınızda satış siparişi girerken bu bilgiyi size verecektir.

boolean  checkAccount()
{
    CustTransOpen                    CustTransOpen;
    CustTrans                        CustTrans;
    ;

   while select   CustTransOpen // MAA 10.08.2018
        where CustTransOpen.AccountNum == this.CustAccount
           && CustTransOpen.AmountCur > 0

     while select CustTrans
           where CustTrans.RecId == CustTransOpen.RefRecId

            if (CustTransOpen.DueDate < systemdateget())
                  {
                    info(strfmt("%1 carisinin vadesi geçmiş bakiyesi var!", CustTransOpen.AccountNum));
                  }


    return true;
}


Total ciro

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