8 Eylül 2014 Pazartesi

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ı
?
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");
}
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.

Hiç yorum yok:

Yorum Gönder