Eyl 8, 2014 - X++    4 Yorumlar

Excelden Veri Aktarımı

Axapta üzerinde bazen dışarıdan tablolara veri aktarımı yapmak durumunda kalırız. Bunun için Ax 2012 dışarıdan veri aktarımı için bir çok yöntem vardır. Genellikle danışmanların kullandığı yöntem olan Axapta 2009 da içe aktar yöntemi Ax 2012 de yerini Excelin bi aracı olan “Excel Add-İns” e bırakmıştır. Bu araç ile ile tablolara rahat olarak aktarım yapılabilmektedir.

Ancak bazı durumlarda bir şablon yardımıyla son kullanıcı içeri veri almak isteyebilir. Bu gibi durumlar için de Excel veya CSV ile Axapta tablolarına veri aktarmak gerekebilir. Bu konuda Excel ile aktarmayı anlatacağım. Birbirine benzesede bir sonraki konuda da csv ile aktarmadan bahsedeceğim.

Örneğin basit ve anlaşılabilir olması açısından kendi oluşturduğum bir tabloya kayıt atacağım.

excel veri aktarımı

Excel şablonu aşağıdaki gibi olacaktır.

excel veri aktarımı

 

static void Erkn_ExcelVeriAktarimi(Args _args)
{
   SysExcelApplication application;
    SysExcelWorkbooks   workbooks;
    SysExcelWorkbook    workbook;
    SysExcelWorksheets  worksheets;
    SysExcelWorksheet   worksheet;
    SysExcelCells       cells;
    COMVariantType      type;
    int                 row;
    FileName            filename;
    Dialog              dialog;
    dialogfield         dfile;
    TestExcelAktarim    testExcelAktarim;
    ItemId              itemId;
    Name                name;
    Qty                 qty;
    SalesPrice          price;
    TransDate           transDate;
    ;

    application = SysExcelApplication::construct();
    workbooks   = application.workbooks();

    Dialog = new dialog("Dosya seçin");
    dialog.filenameLookupFilter(['xls,xlsx','*.xls;*.xlsx']); //Seçilecek dosyanın uzantıları ayarlanır
    dfile  = dialog.addField(extendedTypeStr(FileNameOpen),"Dosya"); //Dosya seçme dialoğu çıkartır
    if(!dialog.run())
        return;

    filename = dfile.value();
    if(filename == "")
        throw error("Dosya adı belirtilmemiş");
    try
    {
        workbooks.open(filename);
    }
    catch (Exception::Error)
    {
        throw error("File cannot be opened.");
    }
    workbook    = workbooks.item(1);
    worksheets  = workbook.worksheets();
    worksheet   = worksheets.itemFromNum(1);
    cells       = worksheet.cells();
    row = 1; //Baslık satırı
    ttsbegin;
    do
    {
        row++;
        //Degisken = cells.item(satırsırası,sütunsırası).excelden dönentipi belirtilir
        itemId     = cells.item(row, 1).value().bStr();
        name       = cells.item(row, 2).value().bStr();
        qty        = cells.item(row, 3).value().double();
        price      = cells.item(row, 4).value().double();
        transDate  = cells.item(row, 5).value().date();

        testExcelAktarim.clear();
        testExcelAktarim.ItemId    = itemId;
        testExcelAktarim.Name      = name;
        testExcelAktarim.Qty       = qty;
        testExcelAktarim.Price     = price;
        testExcelAktarim.TransDate = transDate;
        testExcelAktarim.insert();

        type = cells.item(row+1, 1).value().variantType();
    }
    while (type != COMVariantType::VT_EMPTY); // kayıtların bitip bitmediğini kontrol ediyor.
    ttscommit;
    application.quit();

    info("Bitti");
}

excel veri aktarımı


Sonuçta gördüğünüz gibi istediğimiz alanları tabloya yazdırmış olduk. Gelen alanları değişkene atamadan direk tablonun alanınada eşitleyebilirdik veya çeşitli manuel kontrollerden geçirebilirdik. Bu şekilde bu Jobu metoda veya classa ekleyerek istediğiniz yerde kullanabileceğiniz bir hale getirebilirsiniz.

Erkan OĞUZ

Önceki Konu->

<- Sonraki Konu

Benzer yazılar

4 Yorumlar

  • Erkan bey merhaba,
    Başta paylaşımlarınız için size teşekkür ediyorum şöyle bir sorunum var
    İşim gereği satın almada ax ı kullanıyoruz paylaşmış olduğunuz sistem tam ihtiyacım olan kısımlar bunları satın alma siparişine eklemek istiyorum bunu yapabilmem için ne gibi adımlar yapılması gerekli ax da tablo kısmında mı oluşturulacak bu kodlar
    anladığım kadarıyla benzer excel i oluşturup seç ten seçince satın alma sipariş formuna aktaracak doğru mudur.bunu nasıl yapabilirim yol gösterirseniz sevinirim

    • Merhaba Akif bey,
      Bu kodu PurchReqTable formuna veye PurchReqLine tablosunun altına method olarak ekleyip bir butonun click yöneteminden çağırabilirsiniz.
      Ancak burada dikkat edilecek kısım satınalma(PurchReqTable) başlığınındamı excelden oluşturulacak yoksa başlık oluşuturulduktan sonramı sadece satırlarmı excelden eklenecek onun anazilinin yapılması lazım.
      Birden fazla sipariş aynı anda atılmayacaksa ikinci yöntem daha uygundur.Daha sonra alanların atamaları yapıldıktan sonra PurchReqLine nin createLine methodu çağrılacak satırların oluşturulmasını sağlayabilirsiniz.

      • Erkan Bey,
        Paylaşımınız için çok teşekkürler.
        Uygulamayı aşama aşama anlatmanız mümkün müdür?

        Teşekkürler.

        • Mehmet Bey aşama aşamadan kastınız nedir tam olarak anlamadım

Yorum Yazın...