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; } }
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.
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 :)