วิธีนี้จะเอาไว้แสดงตอนที่สร้างรายการครับว่าเลขของเอกสารที่ได้จะเป็นหมายเลขอะไร แต่ถ้าทำแบบนี้โปรแกรมจะทำงานซับซ้อนหน่อยหนึ่งครับ คือเราจะต้องเช็คตอนที่บันทึกรายการอีกครับว่าหน้าจอกับ last no ใน record profile เท่ากันหรือน้อยกว่าหรือไม่ถ้ามีค่าเท่ากันหรือน้อยกว่าแสดงว่ามีคนอื่นได้หมายเลขนี้ไปแล้ว เพราะฉะนั้นถ้าไม่จำเป็นต้องแสดงหมายเลข runno ตอนที่สร้างรายการเอกสารครั้งแรกก็ทำแค่ LotusScript ตอนที่บันทึกรายการก็พอครับ
ขั้นตอนการทำแบบซับซ้อนหน่อยสามารถทำได้ดังนี้ครับ
1. ระบุสูตรนี้ในฟิลด์ DocNo ที่เป็น runno ของเอกสารครับ
LastNo := @Subset(@DbLookup("":"Nocache" ; ThisServer : ThisDB ;
"lookupReceiveNo" ; DocNo ; 2) ; 1);
Runno := @If(@IsError(LastNo); ""; @Right(@Text(LastNo); "-"));
NewCurrentYear := @Text(@Year(@Today));
CurrentYear := @If(@Left(@Text(LastNo); "-") = ""; NewCurrentYear;
@Left(@Text(LastNo); "-"));
OldRunning := @If(RunNo = ""; 0; @TextToNumber(RunNo));
NewRunning := OldRunning + 1;
NewPartNo := @Repeat("0" ; 5 - @Length(@Text(NewRunning))) + @Text(NewRunning);
NewCurrentYear + "-" + @If(CurrentYear = NewCurrentYear; NewPartNo;"00001")
2. ใน event querysave ให้ระบุตามนี้ครับ
Dim w,x,y,z As Variant
Dim NewRunning As Long
Dim db As NotesDatabase
Dim w As New NotesUIWorkspace
Dim s As New NotesSession
Dim doc As Notesdocument
Dim note As NotesDocument
Dim uidoc As NotesUIDocument
Set db = s.CurrentDatabase
Set uidoc = w.CurrentDocument
Set note = uidoc.Document
If Uidoc.IsNewdoc Then
x=Evaluate(|@DbLookup("":"Nocache"; ThisServer:ThisDB; "lookupReceiveNo"; DocNo; 2)|, Curdoc)
If Isarray(x) Then
If x(0) = "" Or Instr(1, x(0), "-") = 0 Then
Runno = "0"
Else
Runno = Right(x(0), Instr(1, x(0), "-")-1)
End If
NewCurrentYear = Cstr(Year(Today))
If Instr(1, x(0), "-") = 0 Then
CurrentYear = NewCurrentYear
Else
CurrentYear = Left(Cstr(x(0)), Instr(1, x(0), "-")-1)
End If
NewRunning = Clng(RunNo) + 1
NewLastNo = Repeat("0", NewRunning, 5)
If Clng(NewLastNo) >Clng(Right(note.DocNo(0), Instr(1, Curdoc.DocNo(0), "-")-1)) Then
If CurrentYear = NewCurrentYear Then
LastNo = NewCurrentYear + "-" + NewPartNo
Else
LastNo = NewCurrentYear + "-" + "00001"
End If
note.DocNo = LastNo
Messagebox "เลขที่รับเอกสารซ้ำกัน ดังนั้นระบบจะทำการเปลี่ยนแปลงลำดับเอกสารอัตโนมัติไปเป็นเลขที่ " & Cstr(LastNo), 0, "เปลี่ยนแปลง "
End If
End If
End If
หมายเหตุ
ในสูตรของ program ผมไม่ได้ไป update ใน record profile ดังนั้นในส่วนนี้อาจจะต้องไปเช็คเพิ่มเติมเอาครับ และในส่วนนี้เราสามารถเช็คเวลาขึ้นปีใหม่สามารถ reset no ให้เป็น 1 ใหม่ได้ด้วยครับ
:yellow_cool.gif:
[quote]เมื่อสร้าง ฟอร์ม กับ วิว ทำตามที่พี่สอนใช่ไหมค่ะ โค๊ดนี้ไปปรับในไหนค่ะ ในฟอร์ม
หรือ วิวค่ะ
LastNo := @Subset(@DbLookup("":"Nocache" ; ThisServer : ThisDB ;
"lookupReceiveNo" ; DocTo ; 2) ; 1);
Runno := @If(@IsError(LastNo); ""; @Right(@Text(LastNo); "-"));
NewCurrentYear := @Text(@Year(@Today));
CurrentYear := @If(@Left(@Text(LastNo); "-") = ""; NewCurrentYear;
@Left(@Text(LastNo); "-"));
OldRunning := @If(RunNo = ""; 0; @TextToNumber(RunNo));
NewRunning := OldRunning + 1;
NewPartNo := @Repeat("0" ; 5 - @Length(@Text(NewRunning))) + @Text(NewRunning);
NewCurrentYear + "-" + @If(CurrentYear = NewCurrentYear; NewPartNo;"00001")
[/quote] |