22 Nisan 2019 Pazartesi

Brüt ağırlık hesaplama | Dynamics Ax

Ağırlık hesaplama

Madde ayrıntılarındaki bir ürünün net ağırlık + dara ağırlığını satış siparişinde miktarıyla çarpıp brüt ağırlığını aşağıdaki kod ile hesaplatabilirsiniz.

Aşağıdaki kod madde kartının üzerindeki net ağırlık + dara ağırlığını hesaplar:
display ItemGrossWeight grossWeight()
{
    return this.NetWeight + this.TaraWeight;
}

Herhangi bir satış raporunda kullanabilirsiniz.

display ItemGrossWeight grossWeight() //maa 22.04.2019
{
    return InventTable::find(this.ItemId).grossWeight() * this.SalesQty / 1000; // 1000'e böldüğümüzde ton olarak sonucu alırız.
}

4 Nisan 2019 Perşembe

Kayıt düzeyi güvenliği kodla ekleme yapma | Dynamics Axapta

Kayıt düzeyi güvenliği


Kayıt düzeyi güvenliğine excel ile kayıtları ekleyebilirsiniz. Aşağıdaki formdaki gibi kayıtlar eklenmiş olacak.



void MAA_SysRecordLevelSecurity_Excel()
{
    #Excel
    #AviFiles

    Dialog              dialog = new Dialog("Veri Aktarma");
    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;

    SysRecordLevelSecurity   SysRecordLevelSecurity;

    SysExcelRange range;

    void findLastRow(SysExcelWorkSheet _workSheet)
    {
        #define.Star('*')
        #define.Space(' ')

        ;

        range = _workSheet.cells().range(#ExcelTotalRange);

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

                          //  SoftwareTable.clear();
                            cells = workSheet.cells();

                            SysRecordLevelSecurity.tabId       = cells.item(sn,1).value().double();
                            SysRecordLevelSecurity.groupId     = cells.item(sn,2).value().bStr();
                            SysRecordLevelSecurity.companyId   = cells.item(sn,3).value().bStr();

                            info("Aktarma tamamlandı");
                            SysRecordLevelSecurity.insert();

                            ttscommit;
                        }
                    }
                }
            }
            catch
            {
                ttsabort;
                application.quit();
            }
        }
    }
}

Eşlemede "LimitKrediLimiti" Değer Bulunamadı | İş akışının durdurulması

İş akışı hatası


Eşlemede "LimitKrediLimiti" Değer Bulunamadı! hatası iş akışları kurulurken hiyearşik olarak devam eden adımın durdurma koşulunda kullanıcının pozisyonunun onay sınırı için ayarlanacak veri girilmemiştir.



Temel > Kurulum > Limit tipleri(HRPLimitTypeTable) Bu tabloya verileri girdiğinizde problem gidecektir.

21 Ocak 2019 Pazartesi

İş akışlarının ilerlememesi | Dynamics Ax

İş akışlarınız ilerlemiyorsa muhtemelen gereksiz kayıtlar kalmış ve ilgili tablolar şişmiş olabilir(gönderilmiş formdan silinmiş vs.). Aşağıdaki kod oluşan bu gereksiz kayıtları siler. İş akışlarınız çalışmaya devam eder.


static void workflowUndefinedRecords(Args args)
{
    Common                      buffer;
    SysDictTable                dictTable;
    SysWorkflowTable            workflowTable;
    WorkflowMessageTable        workflowMessageTable;
    WorkflowWorkItemTable       workflowWorkItemTable;
    WorkflowTrackingStatusTable trackingStatus;
    boolean                     deleteifNotExist = true;
    ;
    ttsbegin;
    deleteifNotExist = Box::yesNo('Hatalı bulunan iş akış kayıtları silinsin mi?',DialogButton::No) == DialogButton::Yes ? true : false;

    setPrefix('SysWorkflowTable');
    while select forupdate workflowTable
    {
        changecompany(workflowTable.ContextCompanyId)
        {
            dictTable = new SysDictTable(workflowTable.ContextTableId);
            buffer = dictTable.makeRecord();
            select buffer where buffer.RecId == workflowTable.ContextRecId;

            if (!buffer)
            {
                 info(strfmt('%1 tablosunda %2 kaydı yok. Şirket:%3',tableId2pname(workflowTable.ContextTableId),workflowTable.ContextRecId,workflowTable.ContextCompanyId));

                if(deleteifNotExist)
                {
                    trackingStatus = WorkflowTrackingStatusTable::findByCorrelation(workflowTable.RootCorrelationId,true);
                    trackingStatus.delete();

                    workflowTable.delete();
                    info(strfmt('%1 iş akış öğesi silindi',workflowTable.RootCorrelationId));
                }
            }

        }
   }
   setPrefix('WorkflowMessageTable');
   while select forupdate workflowMessageTable
    where workflowMessageTable.MessageLifeCycleState == WorkflowMessageLifeCycleState::Queued
    {
        changecompany(workflowMessageTable.WorkflowContextCompanyId)
        {
            dictTable = new SysDictTable(workflowMessageTable.WorkflowContextTableId);
            buffer = dictTable.makeRecord();
            select buffer where buffer.RecId == workflowMessageTable.WorkflowContextRecId;

            if (!buffer)
            {
                 info(strfmt('%1 tablosunda %2 kaydı yok. Şirket:%3',tableId2pname(workflowMessageTable.workflowContextTableId),workflowMessageTable.workflowContextRecId,workflowMessageTable.workflowContextCompanyId));

                if(deleteifNotExist)
                {
                    trackingStatus = WorkflowTrackingStatusTable::findByCorrelation(workflowMessageTable.RootCorrelationId,true);
                    trackingStatus.delete();

                    workflowMessageTable.delete();
                    info(strfmt('%1 iş akış öğesi silindi',workflowMessageTable.RootCorrelationId));
                }
            }

        }

    }
   setPrefix('WorkflowMessageTable&StatusTable');
   while select forupdate workflowMessageTable
   // where workflowMessageTable.MessageLifeCycleState == WorkflowMessageLifeCycleState::Queued
         notexists join trackingStatus
            where trackingStatus.CorrelationId == workflowMessageTable.WorkflowCorrelationId
    {
        changecompany(workflowMessageTable.WorkflowContextCompanyId)
        {

            info(strfmt('WorkMessage %1 için TrackingStatus kaydı yok. statü:%2',workflowMessageTable.WorkflowCorrelationId,workflowMessageTable.MessageLifeCycleState));

                if(deleteifNotExist)
                {
                    workflowMessageTable.delete();
                    info(strfmt('%1 iş akış öğesi silindi',workflowMessageTable.WorkflowCorrelationId));
                }
        }
   }
   setPrefix('WorkflowWorkItemTable');
   while select forupdate workflowWorkItemTable
    {
        changecompany(workflowWorkItemTable.CompanyId)
        {
            dictTable = new SysDictTable(workflowWorkItemTable.RefTableId);
            buffer = dictTable.makeRecord();
            select buffer where buffer.RecId == workflowWorkItemTable.RefRecId;
            if (!buffer)
            {
                 info(strfmt('%1 tablosunda %2 kaydı yok. Şirket:%3',tableId2pname(workflowWorkItemTable.refTableId),workflowWorkItemTable.refRecId,workflowWorkItemTable.CompanyId));

                if(deleteifNotExist)
                {
                    trackingStatus = WorkflowTrackingStatusTable::findByCorrelation(workflowWorkItemTable.CorrelationId,true);
                    trackingStatus.delete();

                    workflowWorkItemTable.delete();
                    info(strfmt('%1 iş akış öğesi silindi',workflowWorkItemTable.CorrelationId));
                }
            }

        }
   }
   setPrefix('WorkflowWorkItemTable&StatusTable');
   while select forupdate workflowWorkItemTable
        notexists join trackingStatus
            where trackingStatus.CorrelationId == workflowWorkItemTable.CorrelationId
    {
        changecompany(workflowWorkItemTable.CompanyId)
        {

            info(strfmt('WorkItem %1 için TrackingStatus kaydı yok. statü:%2',workflowWorkItemTable.CorrelationId,workflowWorkItemTable.Status));

                if(deleteifNotExist)
                {
                    workflowWorkItemTable.delete();
                    info(strfmt('%1 iş akış öğesi silindi',workflowWorkItemTable.CorrelationId));
                }
        }
   }
   setPrefix('WorkflowtrackingStatusTable');
    while select forupdate trackingStatus
    {
        changecompany(trackingStatus.ContextCompanyId)
        {
            dictTable = new SysDictTable(trackingStatus.ContextTableId);
            buffer = dictTable.makeRecord();
            select buffer where buffer.RecId == trackingStatus.ContextRecId;

            if (!buffer)
            {
                 info(strfmt('%1 tablosunda %2 kaydı yok. Şirket:%3',tableId2pname(trackingStatus.ContextTableId),trackingStatus.ContextRecId,trackingStatus.ContextCompanyId));

                if(deleteifNotExist)
                {
                   trackingStatus.delete();
                   info(strfmt('%1 iş akış öğesi silindi',trackingStatus.RootCorrelationId));
                }
            }

        }
   }

   ttscommit;
}


8 Ocak 2019 Salı

JumpRef kullanımı | Dynamics Ax

Aşağıdaki kodla ana tablo formuna git dediğimizde direkt olarak ilgili kayda gider.

public void jumpRef() // ilgili kayda gider
{
    DRT_EnvanterTable EnvanterTable;
    Args            args;
    MenuFunction    menuFunction;
    Common rec;
    ;

    rec = DRT_EnvanterTable::find(this.valueStr());
    args = new Args();
    args.record(rec);
    args.caller(element);
    menuFunction = new     MenuFunction(menuitemdisplaystr(DRT_EnvanterTable),MenuItemType::Display);
    menuFunction.run(args);
}

Serbest metin fatura iptali | Ters kayıt


Sebest metin faturasından fatura iptali yapılamıyor.İptal etmeye çalıştığınızda;
"Sadece Satış Siparişlerinden yapılanlara otomatik ters kayıt atabilirsiniz.." Şeklinde hata alırsınız.

Bu işlemi gerçekleştirmek için: 

Serbest metin faturası > Sorgulamalar > Fatura > Hareketler > Ters hareket
Ya da kısa yolu > Müşterinin hareketlerinden ilgili hareketi bulup Ters hareket yapabilirsiniz.

Yapıldığında ilgili kayıt, ilişkili formlara ters kaydını atıyor.


Alınan hata!









Total ciro

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