LOD ile yapılan uyarlamalarda, ek bilgi sistemi dediğimiz ve kod yazmadan ana tabloya (örneğin malzeme kartları tablosu ITEMS'a veya sipariş fişleri tablosu ORFICHE'e) bağlı bir tablo oluşturulup ek alanların buraya kaydedilmesine yönelik bir sistem mevcuttur. Ancak bu sistem sadece ana tabloya bağlı çalışmaktadır.
Dolayısıyla, eğer amacımız fiş satırına veya bağlı başka bir tabloya ek alan oluşturmak ise bu alanların yazma-değiştirme-okuma ve silme işlemlerini LOD'un script dilini kullanarak biz yönetmeliyiz.
Aşağıda yaratılan ek kolona nasıl veri yazılacağına dair basit bir örnek paylaşıyorum. Bu örnein çalışabilmesi için LOD içerisinden ORFLINE tablosuna bağlı 876 numaralı bir custom tablonun bulunması gerekir.
Sipariş Fişi için "Data Entry Form" üzerindeki event'larda yazılması gerekenler;
Sub FormShow()
Call GetData()
End Sub
Sub BeforeSave(proceed as Integer)
Call SetLineArray()
End Sub
Sub AfterSave()
AppTables[12].GetIntFieldR(RecHandle,"LOGICALREF",gSETLOGREF)
Call SetData(gSETLOGREF)
End Sub
Yukarıda adı geçen metodları GLOBAL module içerisinde tanımlıyoruz;
Dim LineDataArr(128) as string
gSETLOGREF=0
Sub GetData()
MaxGridLine=MGridLines("OrderLineGrid")
for i=0 to MaxGridLine-1
GetGridRowHandle("OrderLineGrid",i,recH)
AppTables[13].GetIntFieldR(recH,"LOGICALREF",intLineRef)
CustTables[876].Search(2,2,intLineRef)
if not (DBErr <>0) then
CustTables[876].GetTxtField("A_STR",txtDummy)
SetCellText("OrderLineGrid",i,10001,txtDummy)
end if
next i
End Sub
Sub SetData(intLogref as Long)
i=0
_breakpoint
CreateQuery(Qry)
tblName = Application.GetTableName(13, Application.CompanyId, Application.FiscPerdId)
Qry.AddTable("A", tblName)
Qry.AddSelField("A", "LOGICALREF,")
Qry.AddSelField("A", "LINENO_")
Str(gSETLOGREF,LogRefTxt)
MyWhereCond = "ORDFICHEREF = " + LogRefTxt
Qry.AddWhereCond(MyWhereCond,1)
Qry.Execute()
if Qry.Ready = 1 then
res = Qry.First()
Do while res = 1
Qry.GetFieldValue(1, 1, MyLineRef)
Qry.GetFieldValue(2, 1, MyLineNo)
if MyLineRef<>0 then
CustTables[876].Search(2,2,MyLineRef)
if (DBErr <>0) then
CustTables[876].NewRecord()
CustTables[876].SetIntField("PARLOGREF",MyLineRef)
CustTables[876].SetTxtField("A_STR",LineDataArr[MyLineNo-1])
else
CustTables[876].SetTxtField("A_STR",LineDataArr[MyLineNo-1])
end if
CustTables[876].UpdateRecord()
end if
res = Qry.Next()
Loop
end if
End Sub
Sub SetLineArray()
MaxGridLine=MGridLines("OrderLineGrid")
i=0
for i=0 to MaxGridLine-1
GetCellText("OrderLineGrid",i,10001,LineDataArr[i])
next i
End Sub
Merhaba,
Eklenen sütun float tipinde ise ve ön taraftan değer girişi olmadan kaydediliyor ise LineDataArr text olduğu için 0 yerine boş tutuyor ve Tiger hata vererek kapanıyor. Aşağıdaki gibi boş olma durumunu kontrol edip 0'a manuel set etmeniz gerekli. Bir satır dolu bir satır boş olma ihtimali için LineDataArr[i] yerine LineDataArr[MyLineNo-1] kontrol edilmeli.
if MyLineRef<>0 then
CustTables[12].Search(2,2,MyLineRef)
if LineDataArr3[MyLineNo-1] = "" then
LineDataArr3[MyLineNo-1] = 0
end if
if LineDataArr4[MyLineNo-1] = "" then
LineDataArr4[MyLineNo-1] = 0
end if
if LineDataArr5[MyLineNo-1] = "" then
LineDataArr5[MyLineNo-1] = 0
end if
if (DBErr <>0) then
CustTables[12].NewRecord()
CustTables[12].SetIntField("PARLOGREF",MyLineRef)
CustTables[12].SetFltField("LME",LineDataArr3[MyLineNo-1])
CustTables[12].SetFltField("PRIM",LineDataArr4[MyLineNo-1])
CustTables[12].SetTxtField("DVZTURU",LineDataArr5[MyLineNo-1])
else
CustTables[12].SetFltField("LME",LineDataArr3[MyLineNo-1])
CustTables[12].SetFltField("PRIM",LineDataArr4[MyLineNo-1])
CustTables[12].SetTxtField("DVZTURU",LineDataArr5[MyLineNo-1])
end if
CustTables[12].UpdateRecord()
end if
Cevap vermek için giriş yapmanız gerekmektedir.
Soru sormak için lütfen oturum açınız.
Sipariş fişinin satırlarına eklenen bir kolona nasıl veri yazıp okuyabilirim?
29/04/15 08:44   Tiger/Logo Object Designer (LOD)Sipariş fişinin satırlarına eklenen bir kolona nasıl veri yazıp okuyabilirim?
uyarlama LOD Grid