Eyl 30, 2014 - X++    4 Yorumlar

Axaptadan CSV’ye Aktarım

Bazı durumlarda axaptadaki veriyi dışarıya dosya olarak veri bloğu halinde vermemiz gerekir. Bu gibi durumlarda genellikle excel veya csv gibi çıktılar kullanır. Bu dışa aktarım (export) işlerinden excele aktarıma bir önceki konumuzda (Axaptadan excele aktarım) bahsetmiştim. Bu konumuzda da csv ye aktarma işleminden bahsedeceğim.

Örnek olarak girilen iki tarih arasındaki fatura satırlarını dönerek bir csv dosyası oluşturan bir örnek yapalım. Bu örnekte masaüstüne bir klasör oluşturma işleminden de bahsedeceğiz.

static void Erkn_CSVyeAktarim(Args _args)
{
    #WinApi
    #File
    TextIo                                  commaTextIo;
    FileIOPermission                        permission;
    str                                     fileName;
    str                                     pathMain;
    Dialog                                  dialog;
    dialogfield                             dfStarDate;
    dialogfield                             dfendDate;
    TransDate                               startDate;
    TransDate                               endDate;
    Str                                     fName;
    CustInvoiceTrans                        custInvoiceTrans;
    CustInvoiceJour                         custInvoiceJour;
    ;

    pathMain = strfmt("%1\\CSVDosyasi",WinAPI::getFolderPath(#CSIDL_DESKTOP)); //Masaüstüne klasör oluşturmak için kullanılır
    if(!WinAPI::fileExists(pathMain)) //Aynı isimde klasör yoksa
        WinAPI::createDirectory(pathMain); //Oluşturur

    Dialog = new dialog("Tarih aralığı giriniz!");
    dfStarDate  = dialog.addField(extendedTypeStr(TransDate),"Başlangıç tarihi");
    dfendDate   = dialog.addField(extendedTypeStr(TransDate),"Bitiş tarihi");

    dfStarDate.value(today());
    dfendDate.value(today());

    if(dialog.run())
    {
        ttsBegin;
        startDate = dfStarDate.value();
        endDate = dfendDate.value();

        fName = date2str(startDate,123,2,2,2,2,4) + "-" + date2str(endDate,123,2,2,2,2,4);
        fileName = strfmt(@"%1\\%2.csv",pathMain,fName); //Dosya ismi
        if(WinAPI::fileExists(fileName))
           throw error(strFmt("%1 dosya zaten var önce dosyayı silin!",fileName));
        permission = new FileIOPermission(fileName,#io_write);
        permission.assert();
        commaTextIo = new TextIo(fileName,#io_write);
        commaTextIo.outFieldDelimiter(' ; '); //CSV ayracı

        //Başlık
        commaTextIo.write("Fatura No",
                        "Fatura Tarihi",
                        "Sipariş No",
                        "Ürün Kodu",
                        "Ürün Adı",
                        "Satış Fiyatı",
                        "Miktar",
                        "Satır Tutarı");

        while select custInvoiceJour
            where custInvoiceJour.InvoiceDate >= startDate &&
                  custInvoiceJour.InvoiceDate <= endDate
            join custInvoiceTrans
            where custInvoiceTrans.InvoiceId == custInvoiceJour.InvoiceId
        {
            //Satırlar
            commaTextIo.write(
            custInvoiceJour.InvoiceId,
            custInvoiceJour.InvoiceDate,
            custInvoiceJour.SalesId,
            custInvoiceTrans.ItemId,
            custInvoiceTrans.itemName(),
            custInvoiceTrans.SalesPrice,
            custInvoiceTrans.Qty,
            custInvoiceTrans.LineAmount);
        }
        CodeAccessPermission::revertAssert();
        ttsCommit;
    }
}

ax 2012 den csv ye aktarım
Jobu çalıştırdığınızda masaüstüne CSVDosyası diye bir klasör oluşturarak içerisine girdiğiniz tarih aralığını isim olarak kullanıp csv uzantılı bir dosya oluşturmuş olacaktır. Çıktı sonucu yukarıdaki resimde olduğu gibidir.

Erkan OĞUZ

Önceki Konu->

<- Sonraki Konu

Benzer yazılar

4 Yorumlar

  • Merhaba,

    form range methotlarından da bahsedebilir misiniz?

    • Merhaba Filiz Hanım,

      Form range methodları derken formlar açılırken istediğiniz alana filitre uygulama yöntemlerinimi kastettiniz?

  • evet özellikle seçilen paremetlere göre filtre yapmak hakkında bilgi verebilirseniz çok sevinirim.

    • Araya bayram girmesi ile yazı paylaşma fırsatı bulamadım. İş yoğunluğumu biraz atlattıktan sonra sizin bahsettiğiniz konu ile ön bilgi olarak Query nesneleri hakkında bir konu yayınlayıp ardından Formlar üzerinde datasource üzerinde range uygulama konularıyla ilgili bir paylaşımda bulunacağım bilginiz olsun :)

Yorum Yazın...