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.
Ö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.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
| </span></span> <pre><pre> 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.
Hiç yorum yok:
Yorum Gönder