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 şablonu aşağıdaki gibi olacaktır.
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"); }
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 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