Author Archive

Proje ücret günlüğü oluşturmak

Merhaba

Bu yazımda proje modulunde bulunan ücret günlüğünün kodla nasıl oluşturulacağını anlatacağım. Bu örnekte bir temp tablom var. Tablonun yapısı aşağıdaki gibi.

Bu tablonun içerisine tipi ücret olan proje kategorilerini otomatik oluşturuyorum ve kullanıcının miktar ve fiyat girmesinden sonra bu tabloyu kullanarak bir sınıf yardımıyla proje günlüğünü oluşturuyorum.

Günlüğü oluşturduğum metot;


void fdCreateProjJournal()
{
    ProjJournalTableData    JournalTableData;
    ProjJournalTransData    journalTransData;
    ProjJournalTable        journalTable;
    ProjJournalTrans        journalTrans;
    DmrProjInvoiceTmp       tmp;       // Parm metotla sınıfa aktarıldı
    TransDate               transDate; // Parm metotla sınıfı aktarıldı
    ProjTable               projTable; // Parm metotla sınıfa aktarıldı

;
    ttsBegin;

    journalTableData = JournalTableData::newTable(journalTable);
    journalTransData = journalTableData.journalStatic().newJournalTransData(
       journalTrans,journalTableData);
    journalTable.clear();
    journalTable.JournalId      = journalTableData.nextJournalId();
    journalTable.JournalType    = ProjJournalType::Revenue;
    journalTable.JournalNameId  = ProjParameters::find().RevenueJournalNameId;

    while select tmp
        where tmp.Amount != 0
    {
        journalTableData.initFromJournalName(
         journalTableData.journalStatic().findJournalName(journalTable.JournalNameId));

        journalTrans.clear();
        journalTransData.initFromJournalTable();
        journalTrans.TransDate          = transDate;
        journalTrans.ProjTransDate      = transDate;
        journalTrans.ProjId             = projTable.ProjId;
        journalTrans.Qty                = tmp.Qty;
        journalTrans.SalesPrice         = tmp.Amount;
        journalTrans.CostPrice          =  1;
        journalTrans.Txt                = projTable.psaRetainageBillingDesc();
        journalTrans.CurrencyId         = ProjInvoiceTable::find(
                     projTable.ProjInvoiceProjId).CurrencyId;
        journalTrans.Worker             = HcmWorker::userId2Worker(curUserId());
        journalTrans.CategoryId         = tmp.ProjCategoryId;
        journalTrans.LinePropertyId     = ProjCategory::find(
                   tmp.ProjCategoryId).projLinePropertyId();
        journalTrans.DefaultDimension   = projTable.DefaultDimension;

        journalTransData.create();
    }
    journalTable.insert();

    info(strFmt("%1 nolu günlük oluşturuldu.", journalTable.JournalId));

    this.projJournalPost();
    ttsCommit;

}

Günlüğü defetere nakletmek için yazdığım metot:

void projJournalPost( )
{
    ProjJournalCheckPost jourPost;
    jourPost = ProjJournalCheckPost::newJournalCheckPost(true,true,
                JournalCheckPostType::Post, tableNum(ProjJournalTable),
                journalTable.JournalId);
    jourPost.run();
}

Bu sayede günlüğü oluşturup deftere nakil işlemini de yapmış oluyoruz. Oluşan günlüğü Proje modülü altında günlükler ücret günlüğünden görebilirsiniz.

Selamlar.

Microsoft Dynamics AX 2012 R3 Development Cookbook yayımlandı

Merhaba,

2014 yılı sonlarından PACKT Publishing’ten Cookbook’un yeni versiyonu için gözden geçirme (Review) teklifi aldım . İstenen öncelikle teknik bir sorun veya eksiklik olup olmadığının kontrol etmek ve yenilikler konusunda hem teknik hemde içerik açısından katkı sağlamaktı.Yazar her bir bölümü bitirdiğinde bir proje yöneticisi aracılığıyla kodları ve metni bana gönderdi.  Bölüm bölüm ayrıntılı bir şekilde okuyup inceledim, kodları tek tek çalıştırdım. Özellikle Ax 2012 ile alakalı bazı yeniliklerle ilgili tavsiyelerim oldu.

Kitabın ilk sayfalarının birinde gözden geçirenlerin kısa bir öz geçmişi bulunuyor. Ayrıca kitabın bir kopyası ve seçtiğimiz başka bir kitabı hediye ettiler. Ben  Implementing Microsoft Dynamics AX 2012 with Sure Step 2012 kitabını seçtim.

Benim için farklı bir tecrübe oldu ayrıca kitap yazmanın çokta kolay bir iş olmadığını iyice anlamış oldum.

Kitap içerik olarak çok iyi  ve faydalı mutlaka okumalısınız.

Cookbook:  https://www.packtpub.com/application-development/microsoft-dynamics-ax-2012-r3-development-cookbook

Sure Step: https://www.packtpub.com/application-development/implementing-microsoft-dynamics-ax-2012-sure-step-2012

Selamlar.

Dynamics AX’ta BCC (Gizli) mail nasıl gönderilir?

Merhaba

Ax içinden Bcc mail göndermek için SYSMailer sınıfına bazı eklemeler yapmak gerekiyor.

Aşağıdaki metotları SYSMailer sınıfına ekleyelim.

//DMR FD
SysMailerAddressField bccs()
{
    InteropPermission permission = new InteropPermission(InteropKind::ComInterop);

    permission.assert();

    //BP Deviation Documented
    return SysMailerAddressField::create(_com,SysmailerAddressFieldType::Bcc);
}

.

// DMR FD
SysMailerAddressField tosBCC()
{
    ;
    return SysMailerAddressField::create(_com,SysmailerAddressFieldType::Bcc);
}

.

// DMR FD
public void quickSendBcc(str fromAddr, str toAddr, str subject,
 str body, str cc='',str bcc='', str attachments='')
{
    SysMailerAddressField tos;
    SysMailerAddressField ccs;
    SysMailerAddressField bccs;
    SysMailerAttachments mailAttachments;
    SysEmailParameters parameters;

    List emailAddresses;
    ListEnumerator enum;
    ;

    this.fromAddress(fromAddr);

    tos = this.tos();
    emailAddresses = SysEmailDistributor::splitEmail(toAddr);
    enum = emailAddresses.getEnumerator();
    while(enum.moveNext())
    {
        tos.appendAddress(enum.current());
    }

    this.subject(subject);
    this.htmlBody(body);

    if (!prmisdefault(cc))
    {
        ccs = this.ccs();
        ccs.appendAddress(cc);
    }

    if (!prmisdefault(bcc))
    {
        bccs = this.bccs();
        bccs.appendAddress(bcc);
    }

    if (!prmisdefault(attachments))
    {
        mailAttachments = this.attachments();
        mailAttachments.add(attachments);
    }

    this.priority(1);

    parameters = SysEmailParameters::find();

    if (parameters.smtpRelayServerName)
    {
        this.SMTPRelayServer(parameters.smtpRelayServerName,parameters.smtpPortNumber,
              parameters.smtpUserName,SysEmailParameters::password(),parameters.ntlm);
    }

    this.sendMail();

}

Bu eklemelerde sonra şöyle bir örnekle mail gönderimini test edebiliriz.

static void FD_SendMailSampleCcandBcc(Args _args)
{
    SysMailer   mailer;
    str         toEmail     = "fatih.demirci@aaaa.com";
    str         fromEmail   = "iletisim@aaaa.com";
    str         cc          = "aaaaa@aaaa.com";
    str         bcc         = "bbbb@aaaa.com";
    str         subject     = "Email konusu";
    str         body        = "Email içeriği";

    ;
    mailer = new SysMailer();
    mailer.quickSendBcc( fromEmail, toEmail, subject, body, cc , bcc);

}

Selamlar.

Satış Siparişi İadesi AX 2012

Merhaba,

Danışmanlarımızdan Mehmet Yunus ÖZKORKMAZ’nın bir yazısını sizinle paylaşıyorum.

Satış siparişi iadesi girmek için aşağıdaki adımları takip edebilirsiniz.

Satış ve pazarlama-ortak-iade siparişleri-tüm iade siparişleri

Buradan iade siparişine tıklayıp müşterimizi seçiyoruz. Daha sonra elle  giriş yapabiliriz. Ama eğer faturalanmış satış siparişi içerinden maddeyi ya da maddeleri çekmek istersek; yukarıda SATIŞ SİPARİŞLERİNİ BUL butonuna tıklarız.

Tüm siparişi iade edeceksek satış siparişinin başında TÜMÜNÜ SEÇ kutucuğunu işaretleyin eğer birkaç satır alacaksak alacağımız satırları seçeriz.

Satırları tamamladıktan sonra yukarıda GÖNDER tabının altında İADE SİPARİŞİ ne tıklayıp onaylıyoruz.

Daha sonra her bir satır için SATIR GÜNCELLEŞTİR seçeneğinin altındaki KAYIT butonuna tıklıyoruz. Elden çıkarma kodunu seçiyoruz.

Sonra gelen ekrandan OTOMATİK OLUŞTUR u işaretliyoruz. ŞİMDİ KAYDET bölümünün altında DEFTERE NAKLET seçeneğine tıklıyoruz. (Bu adımdan sonra TÜM SATIŞ SİPARİŞLERİNE AÇIK SİPARİŞ olarak düşüyor siparişimiz. İstersek oradan irsaliyelendirip faturalandırabiliriz. İstersek İADE SİPARİŞ ekranından irsaliyelendirip daha sonra TÜM SATIŞ SİPARİŞLERİ’nden faturalandırabiliriz.)

Daha sonra satırların sonunda iade durumunun BEKLENİYOR dan KAYITLI durumuna geçtiğini göreceksiniz.

Son olarak; sevk irsaliyemizi kesiyoruz. Faturalama işlemini de; alacak hesaplarından bu iade satış siparişimizi bulup yapıyoruz.

Mehmet Yunus ÖZKORKMAZ

Selamlar.

Proje teklif satırından otomatik WBS kaydı oluşturmak (AX 2012)

Merhaba

Ax 2012′de proje tekliflerini girerken teklif satırından otomatik WBS satırlarının oluşturulması için yazdığım metodu sizinle paylaşıyorum.

Bu metot sayesinden wbs ve teklif arasından etkileşimi sağlamış oluyoruz.

void addItemToWBS()
{
    PSAActivityEstimates    estimates;
    Hierarchy               hierarchy;
    HierarchyIdBase         hierarchyId;
    HierarchyTreeTable      hierarchyTreeTable;
    ;
    hierarchyId = HierarchyLinkTable::findRefTableRecId(tablenum(SalesQuotationTable),
                SalesQuotationTable.RecId).HierarchyId;
    hierarchyTreeTable   = HierarchyTreeTable::findbyNameonHierarchy(hierarchyId ,
           "FD_AnaKategori"); // Hangi kategoriye bağlanacak
    smmActivities      = smmActivities::find(hierarchyTreeTable.activityNumber());

    estimates.clear();
    estimates.ActivityNumber     = smmActivities.ActivityNumber;
    estimates.initFromInventTable(InventTable);
    estimates.InventDimId        = SalesQuotationLine.inventDimId;
    estimates.ItemId             = SalesQuotationLine.ItemId;
    estimates.ProjCategoryId     = SalesQuotationLine.ProjCategoryId;
    estimates.Quantity           = SalesQuotationLine.SalesQty;
    estimates.ProjTransType      = SalesQuotationLine.ProjTransType;
    estimates.Worker             = SalesQuotationLine.ProjectWorker;
    estimates.UnitSalesPrice     = SalesQuotationLine.SalesPrice;
    estimates.UnitCostPrice      = SalesQuotationLine.CostPrice;
    estimates.TotalSalesPrice    = SalesQuotationLine.LineAmount;
    estimates.TotalCostPrice     = SalesQuotationLine.SalesQty * SalesQuotationLine.CostPrice;
    estimates.LinePropertyId     = SalesQuotationLine.LinePropertyId;
    estimates.Description        = SalesQuotationLine.ProjDescription;
    estimates.PRGSalesUnit       = SalesQuotationLine.SalesUnit;
    estimates.insert();

    ttsBegin;
    SalesQuotationLine.selectForUpdate(true);
    SalesQuotationLine.PSARefRecId  = estimates.RecId;
    SalesQuotationLine.doUpdate();
    ttsCommit;

}

Update ve Delete kodları SalesQuotationLine içinde psaUpdateActivityEstimates() ve psaDeleteActivityEstimates() adiyla mevcut. Sistem bunları kullanıyor.

Selamlar.

AX2012 R3 kurulum ve yenilikler

Merhaba

Geçtiğimiz günlerde AX2012 R3 kurulum dosyası yayınlandı. Ben hemen indirip kurdum. Kurulumda çok büyük değişiklik yok ancak eklenen yeni seçenekler var.  Yeri geldikçe bu seçeneklerden ayrıntılı bir şekilde bahsedeceğim.

Kurulum bittikten sonra derlemesi ve eşitlemesi R2′ye göre biraz daha uzun sürdü.

Demo veri için Test Data Transfer Tool’lu kullanmanız gerekiyor. InformationSource‘tan indirebilirsiniz. Test Data Transfer Tool’lu SQL olan bir makineye kurmalısınız.  İndirdiğiniz DynamicsAX2012R3DemoData.exe’yi bir klasöre açıp aşağıdaki komutu çalıştırdığınızda kurulum başlıyor. Bu komutu çalıştırmadan önce mutlaka AOS durdurmalısınız. Daha ayrıntılı bilgi için buraya bakabilirsiniz.

DP.exe Import Klasör DB

Ax2012 R3 ile gelen bir çok yenilik var. Buradan ayrıntılarına bakabilirsiniz. Aşağıdaki  AX2012 R3 menusu var. Benim gözüme çarpan Call Center oldu. Bir projemizde ihtiyaç olmuştu.  Ayrıntılarını bilmiyorum ama incelemek lazım.

Her geçen gün yenilenen ve gelişen ax bizi de peşinden sürüklüyor.  Bu yenilenme ve gelişmeler bizi de yeniliyor ve geliştiriyor. Ürünün bir kaç yıl içinde çok daha iyi yerlerde olacağını düşünüyorum. Ancak buna ayak uydurmak için bizimde çok çalışmamız gerekiyor.

Happy DAXing.

Selamlar.

Microsoft Dynamics AX 2012 R3

Merhaba

10 nisan 2014′de Microsoft Dynamics AX 2012 R3 çıktı. Bu sürümde bir çok yenilik var. Özellikle depo yönetimi, bütçe planlama, mobil uygulamalar ve bulut desteği en göze çarpanları. Aşağıdaki makalelerden ayrıntıları okuyabilirsiniz.

Yazı 1

Yazı 2

Ayrıca channel9′a R3 ile ilgili iki tane eğitim videosu eklenmiş. Bunları da izlemekte fayda var.

Microsoft Dynamics AX 2012 R3 Training: (01) Transportation Management

Video 1

Microsoft Dynamics AX 2012 R3 Training: (02) Warehouse Management

Video 2

Selamlar.

Stok hareketine kodla rezervasyon koymak

Merhaba

Uzun zamandır fırsat bulup yeni yazı yazamıyordum. Canlıya geçiş yoğunlu sonra iş değişikliği derken zaman çok hızlı geçti. Yeni işimle birlikte farklı konularda da yazılar yazmayı planlıyorum.

Bu yazımda koddan bir stok hareketine nasıl rezervasyon koyulabileceğini anlatacağım.  Bu örnekte SalesLine’nın stok hareketi var ancak SalesQoutationLine gibi farklı tablolar da olabilir. Rezervasyonu eldeki stoğa veya satın almaya koyabilirsiniz. Formdan rezervasyon koymak için satış formunu açıp satırlardan / Stok/ Rezervasyon menüsünden açılan formda, Rezervasyon sütununa istediğiniz miktarı yazarak yapabilirsiniz.

Eğer bu işlemi koddan yapmak istersek aşağıdaki gibi bir kod işimizi görecektir.

  DMRSalesQuotationControl::inventReservation(Salesline.InventTransId ,
        "", SalesLine.SalesQty , false ,true);

Server Static void inventReservation(   InventTransId   _inventTransId,
                                           InventSerialId  _inventSerialId,
                                           Qty             _qty ,
                                           boolean         _unreserve = false ,
                                           boolean         _allowReserveOrdered = false)
{
    InventUpd_Reservation   inventUpd_Reservation;
    inventMovement          inventMovement;
    InventSerial            invserial;
    inventdim               inventDim,iDimNew;
    SalesLine               salesLine;
    ;
    ttsbegin;
    salesLine = SalesLine::findInventTransId(_inventTransId);
    if (!salesline)
    {
        throw error("Sales order line could not be found !");
    }
    inventDim                = salesLine.inventDim();
    inventdim.inventSerialId = _inventSerialId;
    iDimNew                  = inventDim::findOrCreate(inventDim);

inventMovement =InventTrans::findTransId(salesLine.InventTransId).inventMovement(true);
    if(inventMovement)
    {
        inventUpd_Reservation = InventUpd_Reservation::newInventDim(inventMovement,
               iDimNew, _unreserve ? _qty : -_qty);
        // if there is not enough inventory make rezervation from Purchase order.
        inventUpd_Reservation.parmAllowReserveOrdered(_allowReserveOrdered);
        inventUpd_Reservation.updateNow();
    }
    ttscommit;

}

Ax 2009 ve Ax 2012 aynı kod çalışıyor.

Selamlar.

DMR Danışmanlık

Merhaba

Hayatımda yeni bir aşama başlıyor. Uzun zamandır farklı firmalarda çalıştığım yazılım ve danışmanlık işini artık kendi firmamda yapacağım. Dört ortaklı DMR danışmanlık özellikle ax konusunda çok tecrübeli arkadaşların bir araya gelmesiyle ortaya çıktı. Bu tecrübeyi projelerimize yansıtıp başarılı projeler yapmayı hedefliyoruz. İnşallah başarılı bir girişim olur.

Gönderme panosunda çalışan ismini göstermek.

Merhaba

AX 2012′de Hizmet yönetimi/ Gönderme panosu (SMADispatchBoard) formunda sadece çalışan kodu gösteriliyor. Kod üzerinde bir süre durursanız çalışanın adını da gösteriyor. Buradan iş ataması yapacak kişilerin bütün kodları bilmesi mümkün değil. Altyapı olarak ActiveX kullanıldığı için direk değiştiremiyoruz. Çalışan ismini göstermek için veriyi dolduran sınıfta ufak bir değişiklik yapmak gerekiyor.

GanttVcDataTable sınıfının  createUserDefinedRecord() metoduna  // FD aralığındaki kodu eklemek yeterli olacaktır.

        else
        {
            if(_mapInsertedFields && _mapInsertedFields.exists(ganttVcDataTableField.parmFieldName()))
            {
                strFieldValue = _mapInsertedFields.lookup(ganttVcDataTableField.parmFieldName());
                // FD
                if(HcmWorker::findByPersonnelNumber(strFieldValue))
                {
                    strFieldValue = HcmWorker::findByPersonnelNumber(strFieldValue).name() ;
                }
                // FD
            }
        }

Selamlar.

Page 20 of 40« First...1018192021223040...Last »