แสดงกระทู้

This section allows you to view all posts made by this member. Note that you can only see posts made in areas you currently have access to.


Messages - nutto2456

หน้า: [1]
1
จากกระทู้ใหม่ อ.OddyWriter นั้นจะทำงานอัตโนมัติครับ
https://www.thai-access.com/index.php?topic=416.msg1892#msg1892

หรือจะนำโค้ดไปใส่ใว้ที่ปุ่มเมื่อกดแล้วจึงค่อยส่งค่าไปที่ Text Box ก็ได้ครับขึ้นอยู่กับการออกแบบ
Private Sub Command1_Click()
............
End Sub

กระทู้ท่าน NAT ใส่ใว้ที่ปุ่มครับ
พอดีมือใหม่นะครับ
สอบถามหน่อยครับ
จากกระทู้ที่ถามโคด รันเลขที่ใบเสร็จ แบบ ปี+เดือน+ลำดับ
https://www.thai-access.com/yeadram_view.php?topic_id=5760

คำถามคือ
ผมต้องไปใส่โคดที่เมนูไหน(มือใหม่นะครับ) กำลัง งงๆ :question:
ขอบคุณครับ

โพสต์นี้ได้รับคำขอบคุณจาก: nutto2456

2
ขอแชร์ฟังก์ชันที่ผมเอาไว้สร้างเลขที่ invoice อัตโนมัติ ละกันนะครับ

- รันเลขที่อัตโนมัติ โดยรูปแบบเป็น ABC001-05-18 (ABC = คำนำหน้าเฉยๆ / 001 = เลขที่ / 05 = เลขเดือน / 18 = เลขปี) (INV_ID เป็น Short Text และเป็น Primary Key)
- เป็นการเรียงเลข invoice โดยตรวจสอบจากเลขที่เก่า ขึ้นเดือนใหม่ นับ 001 ใหม่
- เขียนฟังก์ชั่นเก็บไว้ที่ Modules
- ผมเรียกใช้โดยสร้างตัวแปรตอนกดปุ่ม
โค๊ด: [Select]
AutoGenINV_ID as string
AutoGenINV_ID  = AutoINV_ID

- โค้ดอาจจะเยอะไปหน่อย แต่มันสามารถเขียนให้สั้นกว่านี้ได้อยู่ ลองดูโค้ดแล้วปรับใช้ สลับลำดับเลขเดือน / ปี เองนะครับ

โค๊ด: [Select]
Public Function AutoINV_ID() As String
On Error GoTo ErrorHandlerFx

'get Now date
Dim NowMM As String 'เลขเดือนปัจจุบัน
Dim NowYY As String 'เลขปีปัจุบัน
Dim StrINV_RunNumber As String 'เลข inv สุดท้ายที่ได้จากกระบวนการทั้งหมด
Dim getLastINV As String 'เลข inv ล่าสุด
Dim IntINV As Integer 'ไว้พักค่าเฉยๆ
Dim LastINV_MM_YY As String 'เลขรวม inv+MM+YY
Dim Now_MM_YY As String 'เลขเดือน/ปี ปัจุบัน
Dim NewINV As String 'เลข inv ใหม่
Dim LastDate As String 'วันที่ออก inv ล่าสุด

'get Date
NowMM = Month(Date)
If NowMM < 10 Then
NowMM = "0" & NowMM
End If

NowYY = Year(Date) 'รับค่าปีปัจจุบัน (ไม่ได้ขึ้นอยู่กับรูปแบบเวลาของเครื่อง)
NowYY = Right(NowYY, 2) 'เอาเฉพาะ 2 ตัวท้าย *จะทำงานผิดพลาด ถ้าขึ้นปี ค.ศ.2100 ให้เขียนเช็คปีแล้วหักลบเอาเองเด้อ
Now_MM_YY = NowMM & "-" & NowYY 'เอาค่าเดือนและปีมารวมกัน จะกลายเป็น "07-18"
'----------------------------------------------

LastDate = DMax("INV_Date", "Invoice") 'ตรวจสอบวันที่ออก inv ล่าสุด
getLastINV = Nz(DLookup("INV_ID", "Invoice", "Format(INV_Date, ""ddmmyyyyhhmm"") = " & Format(LastDate, "ddmmyyyyhhmm")), "ABC000-00-00") 'ดึงเอาเลข inv ล่าสุด โดยเปรียบเทียบจากวันเวลาที่ออก inv แต่ถ้าไม่มีข้อมูลจะกำหนดใหม่เป็น "ABC000-00-00"

'สมมติให้ getLastINV มีค่าเท่ากับ "ABC051-07-18"
LastINV_MM_YY = Right(getLastINV, 5) 'ตัด 5 อักษรจากขวา ได้ "07-18"

getLastINV = Left(getLastINV, 6) 'ตัด 6 หลักจากซ้าย ได้ "ABC051"
getLastINV = Right(getLastINV, 3) 'ตัด 3 หลักจากขวา ได้ "051" คือ inv ลำดับที่ 51 ในเดือนนี้

'ตรวจสอบถ้าเดือนและปีปัจจุบัน = เดือนและปีล่าสุดของเลขที่ inv หรือไม่
If Now_MM_YY = LastINV_MM_YY Then
IntINV = CInt(getLastINV)
IntINV = IntINV + 1 'จะได้ 51 + 1 = 52
Else
IntINV = 1 'ถ้าไม่เท่า แสดงว่าขึ้นเดือนใหม่ ให้นับ 1 ใหม่
End If

'ใส่เลข 0 ด้านหน้า เพื่อให้เป็นเลข 3 หลัก
Select Case IntINV
Case Is < 10
        StrArrayINV_Output = "00" & CStr(IntINV)
Case Is < 100
        StrArrayINV_Output = "0" & CStr(IntINV) 'ตอนนี้ IntINV = 51 จะเข้าเคส <100 ก็เติม 0 ไป 1 ตัว รวมเป็น "051"
Case Is < 1000
        StrArrayINV_Output = CStr(IntINV)
Case Else
        MsgBox "เกิดข้อผิดพลาด ไม่สามารถสร้างเลขที่ invoice ได้ !!!"
        Exit Function
End Select

StrINV_RunNumber = "ABC" & StrINV_RunNumber & "-" & Now_MM_YY 'สุดท้ายได้ "ABC052-07-18"
AutoINV_ID = StrINV_RunNumber คืนค่าเลข inv ที่ได้
Exit Function

'On Error Handler
ExitSubFx:
AutoINV_ID = "ใส่เลขที่ invoice"
Exit Function

ErrorHandlerFx:
MsgBox "Error Number:" & Err.Number & " " & "ไม่สามารถสร้างเลขที่ invoice อัตโนมัติได้ กรุณาใส่เลขที่เอง "
'Call onError_FX(Err.Number)
Resume ExitSubFx

End Function
โพสต์นี้ได้รับคำขอบคุณจาก: nutto2456

หน้า: [1]