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.

Dynamics Ax’ta bir metni başlık formatına (Title Case) çevirmek

Merhaba,

Basit bir hata sonucu axa aktarılan büyük bir verinin tamamen büyük harfle oluştuğunu gördüm. İlgili departman bu verinin başlık formatında olmasını istedi. Veriyi tekrar aktarmaktansa güncellemeyi daha doğru buldum . Ax’ta büyük ve küçük harfe çeviren metotlar var ancak başlık formatına (Title Case) çeviren bir metot yok . Bu yüzden .Net’ten yararlanarak bu işlemi yaptım. Örnek kod şu şekilde:

static void FD_ChangeCase(Args _args)
{
    System.String                       myString ;
    System.Globalization.TextInfo       TextInfo ;
    System.Globalization.CultureInfo    CultureInfo ;

    myString    = "PERAkeNDE SATIŞ TEksTİL SEgmENTİ";
    CultureInfo = new System.Globalization.CultureInfo("tr");
    TextInfo    = CultureInfo.get_TextInfo();

    info(  TextInfo.ToTitleCase(TextInfo.ToLower( myString ))) ;
    info(  TextInfo.ToLower( myString )) ;
   // info(strLwr("PERAkeNDE SATIŞ TEksTİL SEgmENTİ"));
    info(  TextInfo.ToUpper( myString )) ;
   // info(strUpr("PERAkeNDE SATIŞ TEksTİL SEgmENTİ"));

}

Selamlar.

Dynamics Ax’ta Regular expression kullanımına örnekler

Merhaba

Birinci örnekte metoda gönderilen metinin nokta(). ve tire(-)  haricinde özel karakter içerip içermediğini kontrol ediyoruz.

static boolean isProductNumberValid(EcoResProductNumber _ecoResProductNumber )
{
    Str MatchPattern ="[^a-zA-Z0-9\-.]";
    System.Text.RegularExpressions.Match myMatch;
    ;

    myMatch = System.Text.RegularExpressions.Regex::Match(_ecoResProductNumber,
                                 MatchPattern);

    return !myMatch.get_Success();

}

İkinci örnekte ise gönderilen metindeki özel karakterleri tire(-) ile değiştiriyoruz. Regex ile köşeli parantez “[ ]” ve ters sılaş “\” karakterlerini değiştiremedim. Bu yüzden ax’ın strReplace() metodunu kullanarak değiştirmek zorunda kaldım.

static EcoResProductNumber clearProductNumber(EcoResProductNumber _EcoResProductNumber)
{
    Str                 Pattern =  "[ :;,/+*'@_#!|$½%&(){}^~<> ]";
    EcoResProductNumber ecoResProductNumber;
    ;
ecoResProductNumber =System.Text.RegularExpressions.Regex::Replace(_EcoResProductNumber,
                                                        Pattern, "-");
    ecoResProductNumber = strReplace(ecoResProductNumber ,'[',"-");
    ecoResProductNumber = strReplace(ecoResProductNumber ,']',"-");
    ecoResProductNumber = strReplace(ecoResProductNumber ,'\\',"-");

    return  ecoResProductNumber;
}

Bu metodları Global sınıfına ekledim. Kullanımı çok basit.

static void SEC_FD_RegEx(Args _args)
{
    ;

    if(Global::isProductNumberValid("SEC.s-f.sdf."))
    {
        info("Kod doğru.");
    }

    info(Global::clearProductNumber("SEC D:;,/+*'@_#!|%&(){}^~[] "));
}

Selamlar.

Plan data import, export, and migration [AX 2012]

Merhaba.

Ax 2012′de ana veri, şirket ayarları ve geliştirmelerin ortamlar arasından nasıl aktarılacağı konusunda benim kafam karışıktı. Bir çok alternatif yöntem var. Hangi durumda hangisi kullanmak gerektiğini anlamamıştım. Microsoft’ta bu karışıklığın farkına varmış olmalı ki aşağıdaki yazıyı yazmış. Bu makalede hangi senaryo için hangi yöntemin uygun olduğunu tablo şeklinde gösteriyor ve karşılaştırıyor. Buradan benim anladığım bu işlemin netleşmesi için biraz zaman alacak ancak bir çok alternatifimiz var. Denemeden önce mutlaka sağlam yedek almak lazım. Bu araçları kullandıkça tecrübelerimi yazacağım.

TechNet – Plan data import, export, and migration

Selamlar.

Toefl IBT

Merhaba

Bir kaç hafta önce Bakırköy’de Toefl sınavına girdim. Gerçekten yorucu bir sınav. 4 saat sürüyor ve sadece 10 dakika ara var. İlk etapla almam gereken notu aldım bir sonraki hedefim 90′ı geçmek. Sınav kesinlikle zor. Çalışmadan iyi bir not almak mümkün değil. Özellikle soru tiplerine çalışmak ve bol bol pratik yapmak lazım.  NoteFull adında bir site var mutlaka incelenmeli. Ücretsiz eğitimler bile çok işinize yarıyor.

Sınav merkezine biraz erken gitmekte fayda var. Form doldurtuyorlar. Daha sonra sınav odasına tek tek çıkıyorsunuz. Resim çekiliyor ve bir numara veriliyor. Her numaraya ait bir kilitli dolay var üzerinizde ne varsa oraya bırakıyorsunuz. Telefon, bilgisayar, saat vs. Masanıza geçtikten sonra öncelikle mikrofon testi yapıyorsunuz.  sonra sınav başlıyor. Reading’de 4 makale geldi hepside gerçekten zordu  çok fazla bilmediğim kelime vardı. Daha sonra Listening başladı. Benim için en kolay kısım burasıydı. En yüksek notu da burada aldım.Dinlerken kafayı benim gibi kağıda gömmeyin ekranda bazı terimler ve resimler oluyor. Gözünüz ekranda olsun. Listeningten sonra 10 dakika ara var. Bir şeyler atıştırmakta gerekiyorsa lavaboya gitmekte fayda var. Daha Sonra Speaking başlıyor. Süreler çok kısa 45 saniye hemen doluyor. Ekrana bakarak konuşmakta fayda. Daha sonra Writing başlıyor birinci soru önce bir makale okuyorsunuz daha sonra bir sınıfta hoca makaledeki fikirlere itiraz ediyor. Size de hocanın makaleye nasıl itiraz ettiği ve ne gerekçeler sunduğunu soruyor. Son soru makale sorusu 300-400 kelimelik bir makale yazmanız gerekiyor. Benim en zayıf olduğum konu bu oldu. Yazma konusunda çok fazla pratiğe ihtiyacım var.

Sonuçlar bir haftada açıklandı.

Selamlar.

Dynamics Ax 2012′de bir boyut nasıl zorunlu hale getirilir.

Merhaba

Ax 2012 ile değişen mali boyut yapısında herhangi bir boyutun nasıl zorunlu hale getirilebileceğine değineceğim.  Öncelikle General Ledger / Seturp /Configure account structures formunu açtığınızda aşağıda resimde göründüğü gibi alanın boş bırakılmasıyla ilgi parametre mevcut.

Bu parametre sadece deftere nakil işleminde çalışıyor. Örneğin yeni bir müşteri tanımlıyorsunuz ve departman boyutunun zorunlu olmasını istiyorsanız bu tanım bu işlemi yapmıyor.  Standartta böyle bir tanım yapılabiliyor mu diye araştırdım bulamadım. Validasyon yazmaktan başka bir çözüm bulamadım. Alanlarında boyut (DefaultDimension ) olan herhangi bir tablonun ValidateWrite() metodunu aşağıdaki gibi değiştirelim.

public boolean validateWrite()
{
    boolean ret;
    ;
    ret = super();

    if(!this.checkDimValue(5637144850)) // Must be parametric
    {
        ret =  checkFailed("Departman boyutu boş bırakılamaz.") && ret;
    }
    return ret;
}

Tabloya gerekli metodu ekleyelim.

Boolean checkDimValue(RefRecId _refRecId)
{
    DimensionAttributeValue             dimAttrValue;
    DimensionAttributeValueSetItem      dimAttrValueSetItem;

    ;

    select firstonly dimAttrValueSetItem
    where dimAttrValueSetItem.DimensionAttributeValueSet == this.DimensionDefault
    join dimAttrValue
        where dimAttrValue.RecId == dimAttrValueSetItem.DimensionAttributeValue
        &&    dimAttrValue.DimensionAttribute   == _refRecId ;

    if(dimAttrValueSetItem.DisplayValue)
        return true;
    else
        return false;

}

Selamlar.

Microsoft Dynamics AX 2012 Test Data Transfer Tool (beta)

Merhaba

Ax 2012′de değişen yapıyla birlikte ortamlar arasında veri transferi biraz sıkıntılı bir durum oldu. Örneğin canlı ortamın veri tabanı yedeğini alıp test ortamına yüklerseniz tamamen eşitlemiş oluyorsunuz. Geliştirmeler temel  ayarlar dahil. Bazen bunu da yapmak isteyebiliriz ama genelde sadece işle alakalı verilerin aktarılmasını isteriz. Bunu yapabilmek için InformationSource’ ta  Test Data Transfer Tool (beta) adında bir araç yayınlandı. Bu araçla ilgili ayrıntılı bilgiyi TechNet‘te bulabilirsiniz. Microsoft bu aracı sadece canlı ortamdan veri aktarmak için kullanmayı tavsiye ediyor. Canlı ortamın kendisine bu aracı kullanarak veri aktarmayı tavsiye etmiyor.

The Test Data Transfer Tool (beta) aşağıdaki durumlar için uygundur.

  • Büyük verileri veya birden çok şirketi içeren verileri içeri aktarmak veye dışarı aktarmak için.
  • Birbirinden çok farklı olmayan ax ortamları arasında veri aktarımı için.
  • Versiyon kontrol sistemi kullanıldığında.
  • Microsoft Dynamics AX Application Object Server (AOS) çalışmadan aktarım yapmak gerektiğinde.

The Test Data Transfer Tool (beta) veri aktarımı için Microsoft SQL Server bulk copy tool (bcp)’yi kullanıyor. Bu sayede işlemler SQL server üzerinden daha hızlı yapılabiliyor ve AOS’a ihtiyaç duymuyor. SQL üzerinde bu aktarım yaptığımız için veri bütünlüğü korunur. Örneğin RecID’lerde değişiklik yapmaz aynısını oluşturur.Hangi verinin dışarı aktarılacağı filtrelenebilir.

Aşağıda dışarı aktarım ve içeri aktarım işlemini özetleyen bir grafik var. Burada da görüleceği gibi 3 tane farklı dosya dışarı aktarılıyor. Bu dosyalar text bazlı olduğu için versiyon kontrolü bile yapılabilir.

İçeri aktarım işine mutlaka SQL Server’ın kurulu olduğu makinede admin yetkisiyle yapmak gerekiyor.

Ax 2012 ile veri aktarımı için bir çok alternatif geldi. Bunların hangisi hangi durum için en uygun çözüm olduğunu anlatan bir makaleyi ilerde yazacağım.

Selamlar.

What makes a good Dynamics AX Project Manager?

Source : http://www.cognitive-group.com

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

Türkiye'nin en doğru, dolu dolu ve hatasız anlatımları ile teknik yazılarına, makalelerine, video'larına, seminerlerine, forum sayfasına ve sektörün önde gelenlerine ulaşabileceğiniz teknik topluluğu, MSHOWTO