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.

 
  1. No comments yet.

  1. No trackbacks yet.