Axaptada txt dosya okuyup SalesLine’ a kayıt atmak
Merhaba
Daha önce txt formatında bir dosyayı okumakla ilgili bir makale yazmıştım. Buradan okuyabilirsiniz.
Aynı örneği biraz geliştirdim. Öncelikle dosyayı diyalogtan alıyoruz ve tab ile ayrılmış halini pars edip container a atıyoruz. Daha sonra burdaki satırlardan SalesLine oluşturuyoruz.
Örnek text dosyamız böyle olsun boşluklar tab. Editorden dolayı burada net anlaşılamıyor.
NameAlias Name Vergi Adet Fiyat
40306445    DAVIDOFF GOLD      0     2.00     14.00
40318523     KENT WHITE              0    1.00       7.00
40329055    CAMEL KISA BOX     8    7.00      18.00
Örenğimiz şöye :
void TxtTransfer()
{
    FileName            fileName  ;
    container           c;
    FileIOPermission    permission;
    TextBuffer          textBuffer;
    str                 readText;
    str                 readLine , strlineamount;
    int                 etgline  ;
    int                 i = 0;
    Dialog              dialog = new Dialog(“Dosya seçiniz.”);
    DialogField         dfFileName;
    SalesLine           txtSalesLine;
    InventTable         inventTable;
    InventItemSalesSetup InventItemSalesSetup;
    InventDim           txtinventDim;
    Amount              lAmount,KDV;
    ;
    #File
    dfFileName = dialog.addField(typeId(FileNameOpen));
    dialog.filenameLookupFilter(["All files", #AllFiles]);
    if (dialog.run())
    {
        fileName = dfFileName.value();
        permission = new FileIOPermission(fileName, ‘r’);
        permission.assert();
        textBuffer = new TextBuffer();
        textBuffer.fromFile(fileName);
        readText = textBuffer.getText();
        etgline = textBuffer.numLines();
        while(i < etgline)
        {
            readLine    = strLine(readText, i); // bir satırı  okuyoruz
            c = str2con(readLine,”\t”); // tab a göre ayırıp container a atiyoruz
         //   info(strFmt(“%1  %2 %3 %4  %5″, conPeek(c, 1), conPeek(c, 2),conPeek(c, 3),conPeek(c, 4) ,conPeek(c, 5)));
inventTable = InventTable::findbyNameAlias(conPeek(c, 1));
// text dosyasındaki ilk alan InventTableNameAlias alanına denk geliyor bu yüzden findbyNameAlias adında bir metod yazdım sizinde bunu yazmanız gerekmekte
            if(inventTable.RecId)
            {
                txtSalesLine.clear();
                txtSalesLine.SalesId            =SalesTable.SalesId;
                txtSalesLine.initFromInventTable(inventTable);
                txtSalesLine.initFromSalesTable(salesTable);
                txtSalesLine.ItemId             = inventTable.ItemId;
                InventItemSalesSetup            = InventItemSalesSetup::findNotDefault(inventTable.ItemId);
                txtinventDim.clear(); // inventdim oluşturacağız
                txtinventDim.InventSiteId       = inventDim::find(InventItemSalesSetup.InventDimId).InventSiteId;
                txtinventDim.InventLocationId   = inventDim::find(InventItemSalesSetup.InventDimIdDefault).InventLocationId;
                txtinventDim = InventDim::findOrCreate(txtinventDim);
                txtSalesLine.InventDimId = txtinventDim.inventDimId;
                if(conPeek(c, 3) ==  8 )  // vergi grubunu elle girmek zorunda kaldık siz kendi kodunuza göre değiştirmelisiniz
                    txtSalesLine.TaxItemGroup   = “% 8″;
                else if(conPeek(c, 3) == 18)
                    txtSalesLine.TaxItemGroup   = “% 18″;
                else
                    txtSalesLine.TaxItemGroup   = “”;
lAmount = conPeek(c, 5);
                KDV             = conPeek(c, 3);
                strlineamount   =  conPeek(c, 5);
                strReplace(strlineamount, “.”, “,”);
                if(KDV != 0)
                    lAmount = any2real(strlineamount) /((KDV / 100) + 1 ) ;
// txt dosyasındaki fiyatar kdv li olduğu için kdv siz fiyatı bulup onu yazıyoruz
                else
                    lAmount = any2real(strlineamount);
                txtSalesLine.QtyOrdered         = conPeek(c, 4) ;
                txtSalesLine.LineAmount         = lAmount ;
                txtSalesLine.createLine();
            }
            i++;
        }
info(“Aktarım tamamlanmıştır.”);
      salesLine_ds.executeQuery();
   }
}
Selamlar.















