กระทู้เก่าบอร์ด อ.Yeadram
4,003 17
URL.หัวข้อ /
URL
เรื่องอยากให้หน่วงเวลาครับ
คือผมมีฟอร์มหลักชื่อ FmOrder_Out_Ey_Pos_Fast_InV_01
ฟอร์มย่อยชื่อ FsOrderDetail_Out_Ey_Pos_Fast_InV_01
ใช้คิดเงิน I.จุดขายครับ
ทีนี้เมื่อเราลงรายการเสร็จ กด Ctrl+Tab มาที่ฟิล์ด CashInAtPos เพื่อให้ใส่จำนวนเงินรับ ช่วงนี้จะมีการคำนวณครับ ประมาณสัก2วินาทีได้มั๊งครับ
ทีนี้คนที่บ้านเค้ากดเร็วมากๆ เช่น ค่าของ 900 จ่าย 1000 กดพั๊วๆเลย ทำให้บางทีมันจะคิดเงินทอนให้ไม่ทันน่ะครับ
คำถาม
1. อยากทราบว่า มีวิธีหน่วงที่ช่อง CashInAtPos สัก 4 วินาทีมั๊ยครับ ก่อนจะไปต่อที่ปุ่มอื่น (ต่อจากนี้มันจะไปที่ปุ่มพิมพ์บิลครับ)
2. ใช้วิธีอื่นๆดีกว่านี้หรือเปล่าครับ ถ้ามีโปรดแนะนำทีครับ
ขอบคุณครับ
ฟอร์มย่อยชื่อ FsOrderDetail_Out_Ey_Pos_Fast_InV_01
ใช้คิดเงิน I.จุดขายครับ
ทีนี้เมื่อเราลงรายการเสร็จ กด Ctrl+Tab มาที่ฟิล์ด CashInAtPos เพื่อให้ใส่จำนวนเงินรับ ช่วงนี้จะมีการคำนวณครับ ประมาณสัก2วินาทีได้มั๊งครับ
ทีนี้คนที่บ้านเค้ากดเร็วมากๆ เช่น ค่าของ 900 จ่าย 1000 กดพั๊วๆเลย ทำให้บางทีมันจะคิดเงินทอนให้ไม่ทันน่ะครับ
คำถาม
1. อยากทราบว่า มีวิธีหน่วงที่ช่อง CashInAtPos สัก 4 วินาทีมั๊ยครับ ก่อนจะไปต่อที่ปุ่มอื่น (ต่อจากนี้มันจะไปที่ปุ่มพิมพ์บิลครับ)
2. ใช้วิธีอื่นๆดีกว่านี้หรือเปล่าครับ ถ้ามีโปรดแนะนำทีครับ
ขอบคุณครับ
17 Reply in this Topic. Dispaly 1 pages and you are on page number 1
2 @R04089
-คำนวนหาเงินทอนครับ
-คำนวนที่ MainFormครับ
-คำนวนที่CashInAtPos ที่AfterUpdateครับ
คือว่าแบบนี้ครับ
การทำงานของฟอร์มนี้คือ
โดยเมื่อลงIDของผู้ติดต่อเสร็จ มันจะเข้าฟอร์มย่อย จากนั้นจึงลงรายการ ProductID ซึ่งจะแสดงราคาต่างๆ รวมถึงราคาทุนโดยยิงรหัสProductIDเพียง1ครั้ง ช่วงนี้จึงมีการคำนวณอยู่ที่ฟอร์มย่อย และถูกเก็บผลรวม ทั้งราคาขาย และราคาทุนรวมอยู่ในส่วนท้ายของฟอร์มย่อย และเมื่อกดCtrl+Tabก็จะมาโฟกัสที่ CashInAtPos เป็นฟิล์ดของฟอร์มหลักเพื่อเก็บจำนวนเงินที่รับจากลูกค้า
ยังมี textboxต่างๆ ที่ดึงมาจากฟอร์มย่อยมาแสดงราคารวม เช่น ราคาขายรวม ราคาทุนรวม ด้วย ให้มันแสดงขึ้นมา เช่น ที่TextBox(TextSale)=[FsOrderDetail_Out_Ey_Pos_Fast_InV_01].Form!SumTotal3
ดังนั้นเวลาใส่เงินรับจากลูกค้าแล้ว จึงทำการลบกัน
โดยเงินรวมหลังหักภาษี(ถูกคำนวณที่ฟอร์มย่อยแล้ว เอามาแสดงและคำนวณ)ลบด้วย กับเงินมัดจำ ที่ฟอร์มหลัก ในTextBoxDeposit ลบด้วยรวมเงินทั้งสิ้น ลบด้วย CashInAtPos จึงเท่ากับ จำนวนเงินทอนแต่ถ้าเรารอมันกระพริบทีนึงหลังจากใส่จำนวรเงินที่รับจากลูกค้าเสร็จแล้ว ก็จะเก็บข้อมูลดังกล่าวได้ทั้งหมด
ปัญหาคือ
แต่ทีนี้ ถ้าไม่ยอมรอให้มันกระพริบ(ตอนกระพริบขึ้นมาคือการคำนวณเสร็จแล้ว) (กรณีนี้ ถ้าโดยเฉพาะถ้าไปใช้กับเครื่องเก่า มันจะนานกว่านี้ครับ)คือไม่รอรีบกดปุ่มออกเลยมันก็จะไม่กระพริบและแสดงค่าดังกล่าว
จึงอยากหน่วงเวลาในลักษณะนี้ครับ
หลังจากใส่จำนวนเงินรับที่ช่อง CashInAtPosแล้ว(AfterUpdate) อยากให้มันค้างสัก2-3วินาทีน่ะครับ แล้วค่อยไปโฟกัสที่อื่นตามปรกติครับ
ขอบคุณครับ
-คำนวนที่ MainFormครับ
-คำนวนที่CashInAtPos ที่AfterUpdateครับ
คือว่าแบบนี้ครับ
การทำงานของฟอร์มนี้คือ
โดยเมื่อลงIDของผู้ติดต่อเสร็จ มันจะเข้าฟอร์มย่อย จากนั้นจึงลงรายการ ProductID ซึ่งจะแสดงราคาต่างๆ รวมถึงราคาทุนโดยยิงรหัสProductIDเพียง1ครั้ง ช่วงนี้จึงมีการคำนวณอยู่ที่ฟอร์มย่อย และถูกเก็บผลรวม ทั้งราคาขาย และราคาทุนรวมอยู่ในส่วนท้ายของฟอร์มย่อย และเมื่อกดCtrl+Tabก็จะมาโฟกัสที่ CashInAtPos เป็นฟิล์ดของฟอร์มหลักเพื่อเก็บจำนวนเงินที่รับจากลูกค้า
ยังมี textboxต่างๆ ที่ดึงมาจากฟอร์มย่อยมาแสดงราคารวม เช่น ราคาขายรวม ราคาทุนรวม ด้วย ให้มันแสดงขึ้นมา เช่น ที่TextBox(TextSale)=[FsOrderDetail_Out_Ey_Pos_Fast_InV_01].Form!SumTotal3
ดังนั้นเวลาใส่เงินรับจากลูกค้าแล้ว จึงทำการลบกัน
โดยเงินรวมหลังหักภาษี(ถูกคำนวณที่ฟอร์มย่อยแล้ว เอามาแสดงและคำนวณ)ลบด้วย กับเงินมัดจำ ที่ฟอร์มหลัก ในTextBoxDeposit ลบด้วยรวมเงินทั้งสิ้น ลบด้วย CashInAtPos จึงเท่ากับ จำนวนเงินทอนแต่ถ้าเรารอมันกระพริบทีนึงหลังจากใส่จำนวรเงินที่รับจากลูกค้าเสร็จแล้ว ก็จะเก็บข้อมูลดังกล่าวได้ทั้งหมด
ปัญหาคือ
แต่ทีนี้ ถ้าไม่ยอมรอให้มันกระพริบ(ตอนกระพริบขึ้นมาคือการคำนวณเสร็จแล้ว) (กรณีนี้ ถ้าโดยเฉพาะถ้าไปใช้กับเครื่องเก่า มันจะนานกว่านี้ครับ)คือไม่รอรีบกดปุ่มออกเลยมันก็จะไม่กระพริบและแสดงค่าดังกล่าว
จึงอยากหน่วงเวลาในลักษณะนี้ครับ
หลังจากใส่จำนวนเงินรับที่ช่อง CashInAtPosแล้ว(AfterUpdate) อยากให้มันค้างสัก2-3วินาทีน่ะครับ แล้วค่อยไปโฟกัสที่อื่นตามปรกติครับ
ขอบคุณครับ
3 @R04090
อ่านแล้วก็ยังงงนะครับ ไม่เว้นวรรค หรือเว้นไม่ถูกจังหวะ ก็ทำให้ตีความยากมาก
เท่าที่พอจะสรุปและเดาได้ก็คือ เหมือนกับว่า ระหว่างที่โปรแกรมกำลังคำนวนใน CashInAtPos_AfterUpdate event procedure อยู่ และยังคำนวนไม่เสร็จ (ซึ่งสังเกตุจากที่ cursor ยังไม่กระพริบขึ้นมาให้เห็น) ผู้ใช้ก็ทำการ กดปุ่มออก ทำให้การทำงานไม่เสร็จสมบูรณ์ ข้อมูลบางส่วนยังสร้างไม่ถูกต้อง ... ผมสรุปอย่างนี้ ถูกต้องใช่ไหม ? ถ้าถูก ผมก็จะถามต่อว่า ปุ่มออกที่ว่านั้น คือปุ่มอะไร และมีโค้ดอะไรอยู่ ?
เท่าที่พอจะสรุปและเดาได้ก็คือ เหมือนกับว่า ระหว่างที่โปรแกรมกำลังคำนวนใน CashInAtPos_AfterUpdate event procedure อยู่ และยังคำนวนไม่เสร็จ (ซึ่งสังเกตุจากที่ cursor ยังไม่กระพริบขึ้นมาให้เห็น) ผู้ใช้ก็ทำการ กดปุ่มออก ทำให้การทำงานไม่เสร็จสมบูรณ์ ข้อมูลบางส่วนยังสร้างไม่ถูกต้อง ... ผมสรุปอย่างนี้ ถูกต้องใช่ไหม ? ถ้าถูก ผมก็จะถามต่อว่า ปุ่มออกที่ว่านั้น คือปุ่มอะไร และมีโค้ดอะไรอยู่ ?
4 @R04091
ถูกต้องครับอาจารย์
และปุ่มออกก็มีครับ แต่ใช้ตอนไม่อยากออกบิลซึ่งผมอาจจะลบปุ่มนี้ก็ได้ครับ
ปุ่มที่จะถูกโฟกัสต่อจาก CashInAtPos คือป่ม พิมพ์บิลใบเล็กครับ ซึ่งเอาไว้ดีดลิ้นชักออกมา แล้วพิมพ์บิลใบเล็กแบบความร้อน(แต่ยังไม่เคยซื้อมาใช้เลย แต่ผมคือว่ามันต้องพิมพ์บิลใบเล็กได้)
ผมเอาไว้เผื่อผู้ใช้ไม่ใส่ตัวเลขที่ช่อง CashInAtPosด้วยครับ และโค๊ตนี้ก็ใช้กับฟิล์ดcashInAtPosด้วย มีโค๊ตดังนี้
Private Sub Command81_GotFocus()
Me.Total3s = SumTotal3
Me.TotalFunds = txtTotalFunds
Me.ProfitAtVats = txtProfitAtVats
Me.ProfitNoVats = txtProfitNoVats
End Sub
และ Event เมื่อคลิ๊ก
โค๊ตผมไม่ค่อยเป็นครับ ผมใช้แต่แมโคร อันนี้McOnOff_Report.OffFmOrder_Out_Ey_Pos_Fast_InV_02_CBill_01
ข้างในเป็น
พอใช้วิธีแปลงเป็นโค๊ตได้แบบนี้ครับ
Private Sub Command81_Click()
On Error GoTo Command81_Click_Err
Beep
On Error Resume Next
DoCmd.RunCommand acCmdSaveRecord
If (MacroError <> 0) Then
Beep
MsgBox MacroError.Description, vbOKOnly, ""
End If
If (CashInAtPos >= Text24) Then
DoCmd.RunMacro "McOnOff_Report.OffFmOrder_Out_Ey_Pos_Fast_InV_02_CBill_02", , ""
Exit Sub
End If
Beep
MsgBox "ÍêÐ! â»Ã´µÃǨÊͺ¡ÒÃÃѺà§Ô¹´éǤÃѺ", vbOKOnly, ""
Command81_Click_Exit:
Exit Sub
Command81_Click_Err:
MsgBox Error$
Resume Command81_Click_Exit
End Sub
และปุ่มออกก็มีครับ แต่ใช้ตอนไม่อยากออกบิลซึ่งผมอาจจะลบปุ่มนี้ก็ได้ครับ
ปุ่มที่จะถูกโฟกัสต่อจาก CashInAtPos คือป่ม พิมพ์บิลใบเล็กครับ ซึ่งเอาไว้ดีดลิ้นชักออกมา แล้วพิมพ์บิลใบเล็กแบบความร้อน(แต่ยังไม่เคยซื้อมาใช้เลย แต่ผมคือว่ามันต้องพิมพ์บิลใบเล็กได้)
ผมเอาไว้เผื่อผู้ใช้ไม่ใส่ตัวเลขที่ช่อง CashInAtPosด้วยครับ และโค๊ตนี้ก็ใช้กับฟิล์ดcashInAtPosด้วย มีโค๊ตดังนี้
Private Sub Command81_GotFocus()
Me.Total3s = SumTotal3
Me.TotalFunds = txtTotalFunds
Me.ProfitAtVats = txtProfitAtVats
Me.ProfitNoVats = txtProfitNoVats
End Sub
และ Event เมื่อคลิ๊ก
โค๊ตผมไม่ค่อยเป็นครับ ผมใช้แต่แมโคร อันนี้McOnOff_Report.OffFmOrder_Out_Ey_Pos_Fast_InV_02_CBill_01
ข้างในเป็น
พอใช้วิธีแปลงเป็นโค๊ตได้แบบนี้ครับ
Private Sub Command81_Click()
On Error GoTo Command81_Click_Err
Beep
On Error Resume Next
DoCmd.RunCommand acCmdSaveRecord
If (MacroError <> 0) Then
Beep
MsgBox MacroError.Description, vbOKOnly, ""
End If
If (CashInAtPos >= Text24) Then
DoCmd.RunMacro "McOnOff_Report.OffFmOrder_Out_Ey_Pos_Fast_InV_02_CBill_02", , ""
Exit Sub
End If
Beep
MsgBox "ÍêÐ! â»Ã´µÃǨÊͺ¡ÒÃÃѺà§Ô¹´éǤÃѺ", vbOKOnly, ""
Command81_Click_Exit:
Exit Sub
Command81_Click_Err:
MsgBox Error$
Resume Command81_Click_Exit
End Sub
5 @R04092
ในภาพ คำนี้ไม่เกี่ยวครับ
OffFmOrder_Out_Hd_Cc_Pos_All_CBill_01_B
มันติดไปด้วย ไม่ใช้นะครับ
OffFmOrder_Out_Hd_Cc_Pos_All_CBill_01_B
มันติดไปด้วย ไม่ใช้นะครับ
6 @R04093
ไฟล์ Cash01.Bat เป็นตัวดีดลิ้นชักครับ ที่ผมใช้ไฟล์นี้เพราะผมเขียนโค๊ตไม่เป็น
ในไฟล์นี้มี
echo off
c:
echo n>com1
cls
exit
ต่อลิ้นชักที่ Com01 ครับ
เดี๋ยวจะย้ายไฟล์นี้ไปไว้ที่Windows System32ตอนใช้งานจริงครับ
ในไฟล์นี้มี
echo off
c:
echo n>com1
cls
exit
ต่อลิ้นชักที่ Com01 ครับ
เดี๋ยวจะย้ายไฟล์นี้ไปไว้ที่Windows System32ตอนใช้งานจริงครับ
7 @R04094
ขออนุญาตครับ
พอดีเข้ามาศึกษาเก็บความรู้ครับ อ่านแล้วก็ยังแปลกใจว่าทำไมเครื่องถึงได้เวลาคำนวณนานจัง ดูแล้วก็เป็นบวกลบคูณหารธรรมดาเท่านั้นเองนี่ครับ น่าจะคำนวณผลเสร็จก่อนที่ผู้ใช้จะยกนิ้วออกจากปุ่มเสียอีก หรืออาจมีการคำนวณอะไรที่ซับซ้อนมากกว่านี้ ก็ต้องขออภัยด้วยครับ
พอดีเข้ามาศึกษาเก็บความรู้ครับ อ่านแล้วก็ยังแปลกใจว่าทำไมเครื่องถึงได้เวลาคำนวณนานจัง ดูแล้วก็เป็นบวกลบคูณหารธรรมดาเท่านั้นเองนี่ครับ น่าจะคำนวณผลเสร็จก่อนที่ผู้ใช้จะยกนิ้วออกจากปุ่มเสียอีก หรืออาจมีการคำนวณอะไรที่ซับซ้อนมากกว่านี้ ก็ต้องขออภัยด้วยครับ
8 @R04095
ผมยังไม่รู้เลยว่า [B]ปุ่มออก[\B] ที่พูดไว้ในคำตอบ R04089 นั้น มีโค้ดว่าอย่างไร เพราะเข้าใจว่าจุดนี้คือจุดที่เป็นปัญหา ตรงจุดอื่นผมไม่สนใจครับ ไม่ต้องแสดงโค้ดให้ดูครับ
9 @R04096
ครับ
คือปรกติตอนที่Posมันก็จะพอดีๆครับ
แต่บางทีตอนนี้ซ้อมๆน่ะครับ พนักงานตอนขายแล้วยังไม่ชิน กดเร็วครับ ไม่ยอมดูช่องจำนวนเงินทอน หรือบางทีคนโพสไม่อยู่แล้ว มาลงที่หลัง กุญแจก็เสียบคาลิ้นชักเด้งไว้ ก็เลยไขเปิดทอนไปก่อน อะไรแบบนั้นครับ ถ้าไม่ได้จริงๆ อีกหน่อยคงใช้วิธีบอกกล่าว ใครไม่รอจะโดนตีมือ อิอิ
หรือไม่ก็ เอากุญแจเก็บแล้วให้พนักงานอยู่ตรงที่คิดเงิรตลอดไปเลยครับ
คือปรกติตอนที่Posมันก็จะพอดีๆครับ
แต่บางทีตอนนี้ซ้อมๆน่ะครับ พนักงานตอนขายแล้วยังไม่ชิน กดเร็วครับ ไม่ยอมดูช่องจำนวนเงินทอน หรือบางทีคนโพสไม่อยู่แล้ว มาลงที่หลัง กุญแจก็เสียบคาลิ้นชักเด้งไว้ ก็เลยไขเปิดทอนไปก่อน อะไรแบบนั้นครับ ถ้าไม่ได้จริงๆ อีกหน่อยคงใช้วิธีบอกกล่าว ใครไม่รอจะโดนตีมือ อิอิ
หรือไม่ก็ เอากุญแจเก็บแล้วให้พนักงานอยู่ตรงที่คิดเงิรตลอดไปเลยครับ
10 @R04097
หรือว่า พอมันเด้งเข้าดอสแล้วแป๊บๆ แล้วมันช้าๆรึเปล่าครับอาจารย์
11 @R04098
ปุ่มออกไม่มีครับ เอาออกไปแล้วครับ เหลือปุ่มพิมพ์บิลใบเล็กครับ
12 @R04099
คือผมมาสังเกตุอีกทีแล้วครับ เวลาคิดเปอร์เซ็นต์ มันหน่วงกว่าปรกติจากฟอร์มย่อยมาก่อน แล้วพอออกมาโฟกัสแล้ว ใส่ตัวเลขเร็วและกดปุ่มเร็วๆ ทำให้ไม่บันทึก ไม่เป้นไรครับ เดี๋ยวแก้เท่าที่พอเป้นไปได้ก่อนครับ ขอบคุณครับ
13 @R04100
ผมเพิ่งมาครับ
อ่านตามไม่ไหว ไม่รู้ไปถึงไหนกันแล้ว เห็นแต่หัวคำถาม ว่า
อยากได้โค้ดหน่วงเวลา
- ใช้ timeinterval ของฟอร์มนั่นครับ หนึ่งวิธี
- ใช้ control ของ vb เข้ามาก็ได้ครับ ตัว Timer นั่นอีกหนึ่งวิธี
- ใช้ คำสั่งของ Excel ครับ นั่นอีกหนึ่งวิธี
ตัวอย่างการใช้คำสั่งของ excel
sub...................
dim Ex
set Ex = createobject("Excel.Application")
if ex.wait= (now()+Timevalue("0:00:04")) then ' รอ 4 วินาที
...
...
...
end if
end sub
อ่านตามไม่ไหว ไม่รู้ไปถึงไหนกันแล้ว เห็นแต่หัวคำถาม ว่า
อยากได้โค้ดหน่วงเวลา
- ใช้ timeinterval ของฟอร์มนั่นครับ หนึ่งวิธี
- ใช้ control ของ vb เข้ามาก็ได้ครับ ตัว Timer นั่นอีกหนึ่งวิธี
- ใช้ คำสั่งของ Excel ครับ นั่นอีกหนึ่งวิธี
ตัวอย่างการใช้คำสั่งของ excel
sub...................
dim Ex
set Ex = createobject("Excel.Application")
if ex.wait= (now()+Timevalue("0:00:04")) then ' รอ 4 วินาที
...
...
...
end if
end sub
14 @R04101
ขอบคุณครับ ถามเพิ่มเติมครับว่า เป้นแบบนี้หรือเปล่าครับ อยากได้มากครับโค๊ตนี้ แต่เขียนไปค่อยเป็นน่ะครับ
แบบนี้หรือเปล่าครับ
Private Sub CashInAtPos_AfterUpdate()
Dim Ex
Set Ex = CreateObject("Excel.Application")
If Ex.wait = (Now() + TimeValue("0:00:04")) Then ' รอ 4 วินาที End If
End Sub
แบบนี้หรือเปล่าครับ
Private Sub CashInAtPos_AfterUpdate()
Dim Ex
Set Ex = CreateObject("Excel.Application")
If Ex.wait = (Now() + TimeValue("0:00:04")) Then ' รอ 4 วินาที End If
End Sub
15 @R04102
รบกวนช่วยจับภาพหน้าฟอร์มที่มีปัญหา มาให้ดูหน่อย เพื่อช่วยให้ผู้ตอบเข้าใจปัญหาของคุณมากขึ้น อาจช่วยคิดหาทางออกอื่นที่ถูกต้องให้
16 @R04103
เร้วขึ้นแล้ว ตรงระหว่างการลงรายการผู้ติดต่อ กับเปอร์เซ็นต์ เลยต้องเอาโค๊ตที่เรียก Requery มาผสมกันกับการใช้เปอร์เซ็นต์ครับ ได้แล้วครับ ขอบคุณทุกท่านครับ
17 @R04108
ขอแชร์ไอเดียนิดนึงนะครับ
การคำนวณเงินทอนผมจะไม่ใช้ที่ CashInAtPost.AfterUpdate แต่จะไปแสดงเงินทอนเมื่อทำการ Save หากมีเงินเกิน
หรือสร้างหน้าจอรับเงินอีกหน้าจอหนึ่ง เมื่อมีการ Save การซื้อจะแสดงจำนวนเงินต่าง ๆ และมี text CashInAtPost ในหน้าจอนี้ พอคีย์เงินรับ ก้คำนวณบวกลบเท่านั้น น่าจะไม่มีปัญหาเรื่องเวลาที่ต้องไปหน่วงครับ
การคำนวณเงินทอนผมจะไม่ใช้ที่ CashInAtPost.AfterUpdate แต่จะไปแสดงเงินทอนเมื่อทำการ Save หากมีเงินเกิน
หรือสร้างหน้าจอรับเงินอีกหน้าจอหนึ่ง เมื่อมีการ Save การซื้อจะแสดงจำนวนเงินต่าง ๆ และมี text CashInAtPost ในหน้าจอนี้ พอคีย์เงินรับ ก้คำนวณบวกลบเท่านั้น น่าจะไม่มีปัญหาเรื่องเวลาที่ต้องไปหน่วงครับ
Time: 0.4381s
- คำนวนที่ main form หรือ sub form
- คำนวนที่ event procedure อะไร
เพราะปกติแล้ว การทำงานของฟอร์มก็จะรอการทำงานของโค้ดเสียก่อนว่าเสร็จหรือยัง โค้ดในระบบของ Access ไม่ได้ทำงานแบบ Parallel Processing แต่ยังทำงานแบบ Sequential Processing แม้ว่าคุณจะเปิดหลายๆฟอร์มก็ตาม ดังนั้นจึงไม่เข้าใจว่าทำไมต้องมีการหน่วงด้วย