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.
Axaptada txt dosya okuyup SalesLine’ a kayıt atmak
