ช่วยหนูด้วยค่ะ อาจารย์
กระทู้เก่าบอร์ด อ.สุภาพ ไชยา

 308   6
URL.หัวข้อ / URL
ช่วยหนูด้วยค่ะ อาจารย์

ตอนนี้หนูทำโปรแกรมสั่งซื้อสินค้าและตัดสต๊อกสินค้า โดยเลขที่ใบสั่งซื้อสินค้าจะ run auto ไปเรื่อยๆๆหนูมีปัญหาคือในกรณีที่ ตัดสต๊อกสินค้าไปแล้ว แต่ต้องการที่จะแก้ไขชื่อสินค้าหรือตัดสต๊อกใหม่ เช่นเลขที่บิล 12345 ซื้อสินค้า A 20ชิ้น ลูกค้าชื่อ JJ ตัดสต๊อกไปแล้วแต่ต้องการจะแก้ไขบิลนี้ใหม่เป็น บิล 12345 ซื้อสินค้า B 50 ชิ้น ลูกค้าชื่อ OO จะทำอย่างไรดีค่ะ หนูลองทำหน้าคืนสินค้าและหน้าแก้ไขใบสั่งสินค้า โดยดึงข้อมูลขึ้นมาแก้ไขใหม่แต่ว่ามันไม่ตัดสต๊อกใหม่ให้
คือระบบที่ทำงานนี่เลขที่ใบสั่งซื้อสินค้าจะ run ไปเรื่อยๆๆ จะข้ามบิล หรือว่าตกหล่นไม่ได้ค่ะ โดยลูกค้าส่วนมากจะโทรมาสั่งสินค้า .....สมมุติในกรณีที่ว่า ตอนแรกเลขที่บิล 12345 ( สั่งซื้อสินค้า A ไป 20g ลูกค้าชื่อ JJ โปรแกรมก้อจะตัดสต๊อกและ print ใบสั่งสินค้าออกมาแล้ว แต่ยังไม่ได้ไปส่งสินค้านะค่ะ ) จากนั้นก้อจะมีลูกค้ารายอื่นๆอีกสั่งซื้อสินค้าอีก เลขบิลก็จะ run ต่อไปเป็น 12346 , 12347... แต่เกิดอยู่ดีๆๆลูกค้า ชื่อ JJ ที่โทรมาสั่งสินค้าที่ออกบิล 12345 ไปแล้ว อาจจะโทรมาเปลี่ยนแปลงหรือว่า cancel การสั่งซื้อสินค้า เช่นสมมุติว่า ลูกค้า JJ จะเพิ่มรายการสั่งซื้อสินค้าอีกเป็นสั่งซื้อสินค้า B อีก 50 g , หรือในกรณีที่ลูกค้าจะเปลี่ยนแปลงรายการสินค้า / หรือยกเลิกการสั่งซื้อนั้นๆๆไปเลย จะทำอย่างไรดีค่ะ ถ้าลูกค้า JJ ยกเลิกการสั่งซื้อไปเลย เวลามีลูกค้ารายอื่นเข้ามาสั่งซื้ออีกก้อจะต้องออกบิลเลขที่ 12345 ใหม่ ( เฉพาะเลขบิล 12345 เพื่อให้เลขบิลมันเรียงลำดับต่อกันไปเรื่อยๆๆค่ะ)
สมมุติว่า ถ้าออกเลขบิล 12345 ใหม่ ก้อจะต้องมีการคืนสินค้าเก่าที่ตัดไปแล้วและทำการตัดสต๊อกสินค้าอันใหม่ด้วย ตอนตัดสต๊อกสินค้าหนูใช้วิธีที่สร้าง Update , Delete, Append qurey (ตามใน File นะค่ะ) และ เวลาคืนสินค้าเก่าหนูเข้าไปคืนสินค้าที่ frm เพิ่มสินค้า โดยจะให้ check และใส่เลขที่บิลนั้นๆเป็นหมายเหตุไว้....การแก้ไขใบสั่งซื้อสินค้า หนูสร้างform แก้ไขใบสั่งสินค้าขึ้นมาโดยดึงข้อมูลการสั่งซื้อทั้งหมดขึ้นมาและแก้ไขเฉพาะใบที่ต้องการแก้ไขเช่น เลขที่บิล 12345 (ตามที่หนูสมมุติขึ้นมา) แต่ว่าในหน้าแก้ไขใบสั่งซื้อสินค้านี้ มันยังไม่ตัดสต๊อกสินค้าให้ .... หนูไม่รู้ว่าเปงเพราะอะไร มันจะขึ้นว่า object requried ( อาจารย์ลองเทสดูนะค่ะ ) เพราะนู๋ก้อไม่ค่อยรู้เรื่องเกี่ยวกับ access มากเท่าไรนัก และไม่รู้ว่าจะใช้วิธีไหนแล้ว ขอความกรุณอาจารย์ช่วยหนูด้วยนะค่ะ.... ขอบคุณค่ะ


6 Reply in this Topic. Dispaly 1 pages and you are on page number 1

1 @R03027
ผมแยกเป็น 2 คำถามนะครับ

1. หาบิลที่ถูกยกเลิกไป

วิธีที่ง่ายก็คือ เมื่อยกเลิกบิลใดๆ ออกไป ให้นำหมายเลขบิลนั้นไปเขียนเก็บไว้ในอีกตารางหนึ่ง เมื่อต้องการที่จะหาว่ามีบิลไหนที่ถูกเลิกบ้าง ก็ให้ดูจากตารางนี้

หรือจะใช้โค้ด เหมือนตัวอย่างที่ผมได้แนะนำไว้ครั้งหนึ่งแล้ว แต่ดูโค้ดแล้วจะเข้าใจยากหน่อย

หลักการมีอยู่ว่า ให้เปิดตารางที่มีฟีลด์ของบิลนี้ แล้วหาค่าหมายเลขบิลต่ำสุด และบิลสูงสุด สมมติบิลล่างคือ 1 บิลล่าสุดคือ 10 และบิลหมายเลข 6 ถูกยกเลิกไป จากนั้นก็ต้องทำการวนลูป โดยใช้ For Next ก็ได้ เช่น

For I = 1 To 10
ถ้าบิลลำดับที่ I = I ก็ไม่ต้องทำอะไร
แต่ถ้าไม่เท่า ซึ่งแสดงว่าบิลหมายเลขนั้นว่างอยู่
ก็ให้ออกจากการวนนี้ไป แล้วนำหมายเลขบิลนี้ไปออกใหม่ได้
Next I


2. คำถามที่ 2 ช่วยบอกชื่อ Form ที่เกิดปัญหาด้วยครับ จะได้ลองดูโค้ดให้




2 @R03035
Form ใบสั่งซื้อสินค้า = frmInvoice , Form แก้ไขรายการสั่งซื้อสินค้า =frmEditInvoice ,Form เพิ่ม/คืนสินค้าเก่า = frmStocking ค่ะอาจารย์
3 @R03036
ลองเปลี่ยนโค้ดของปุ่ม บันทึก ให้เป็นดังนี้

Private Sub Command47_Click()
'On Error GoTo Err_Command47_Click
Dim db As Object, rs2 As Object, rs3 As Object

Set db = CurrentDb
Set rs2 = db.OpenRecordset("tblProduct")
Set rs3 = db.OpenRecordset("fromqryAppendInvoiceDetail")

rs2.Edit
rs2.Fields("NumInStock").Value = rs2.Fields("NumInStock").Value - Me.frmSubEditInvoice.Form.QTY
rs2.Update

DoCmd.DoMenuItem acFormBar, acRecordsMenu, acSaveRecord, , acMenuVer70

Exit_Command47_Click:
Exit Sub

Err_Command47_Click:
MsgBox Err.Description
Resume Exit_Command47_Click

End Sub

ในการเขียนโค้ดเพื่อทดสอบการทำงาน ไม่ควรจะใส่

On Error GoTo ...

เพราะจะทำให้เราไม่รู้ว่าโค้ดมีปัญหาตรงบันทัดไหน

ควรจะใส่เมื่อจะส่งงานเท่านั้นให้ผู้ใช้เริ่มใช้งาน

เพิ่มบันทัดนี้ลงไปด้วย

Dim db As Object, rs2 As Object, rs3 As Object

เนื่องจาก QTY อยู่ใน SubForm ต้องอ้างอิงให้มีชื่อ SubForm เข้าไปด้วย ดังนี้

rs2.Fields("NumInStock").Value = rs2.Fields("NumInStock").Value - Me.frmSubEditInvoice.Form.QTY
4 @R03053
หนูลองเปลี่ยน code ตามที่อาจารย์บอกแล้วค่ะ ผลปรากฏว่ามันจะตัดสต็อกเฉพาะสินค้าตัวบนสุดตัวเดียว ซึ่งไม่ว่าหนูจะไปเลือกชื่อสินค้าตัวไหนมันก้อจะตัดจำนวนสต็อกที่สินค้าบนสุดค่ะ( ตัด Stock ผิดค่ะอาจารย์) แล้วหนูลองเปลี่ยน code เป็น

Private Sub Command47_Click()
'On Error GoTo Err_Command47_Click
Dim db As Object, rs2 As Object, rs3 As Object

Set db = CurrentDb
Set rs2 = db.OpenRecordset("tblProduct")
Set rs3 = db.OpenRecordset("fromqryAppendInvoiceDetail")

rs3.Seek "=", InvoiceID.Value, ProductID.Value
If rs4.NoMatch Then

rs2.Edit
rs2.Fields("NumInStock").Value = rs2.Fields("NumInStock").Value - Me.frmSubEditInvoice.Form.QTY
rs2.Update

MsgBox "ºÑ¹·Ö¡ÃÒ¡Òà áÅеѴʵêͤàÃÕºÃéÍÂáÅéÇ"
Else
MsgBox "·èÒ¹ºÑ¹·Ö¡ÃÒ¡ÒùÕé«éÓ ¡ÃسҵÃǨÊͺ´éÇÂ"
End If
DoCmd.DoMenuItem acFormBar, acRecordsMenu, acSaveRecord, , acMenuVer70

Exit_Command47_Click:
Exit Sub

Err_Command47_Click:
MsgBox Err.Description
Resume Exit_Command47_Click


End Sub

แล้วเกิด error ค่ะอาจารย์ช่วยหนูแก้ปัญหานะค่ะ ขอบคุณ มาก มาก มาก ค่ะ อาจารย์
5 @R03054
ลองเปลี่ยนเป็นอย่างนี้ครับ

Private Sub Command47_Click()
'On Error GoTo Err_Command47_Click
Dim db As Object, rs2 As Object, rs3 As Object

Set db = CurrentDb
Set rs2 = db.OpenRecordset("Select NumInStock From tblProduct Where ProductID=" & Me.frmSubEditInvoice.Form.ProductID)
'Set rs3 = db.OpenRecordset("fromqryAppendInvoiceDetail")

rs2.Edit
rs2.Fields("NumInStock").Value = rs2.Fields("NumInStock").Value - Me.frmSubEditInvoice.Form.QTY
rs2.Update

DoCmd.DoMenuItem acFormBar, acRecordsMenu, acSaveRecord, , acMenuVer70

Exit_Command47_Click:
Exit Sub

Err_Command47_Click:
MsgBox Err.Description
Resume Exit_Command47_Click

End Sub

ผมว่า rs3 ไม่ได้เกี่ยวข้องอะไรในโค้ดเลยนะครับ
6 @R03065
ขอบคุณมาก มากค่ะ อาจารย์ ถ้าวันไหนหนูจะได้ไปที่ขอนแก่นอีก หนูจะขอนัดเลี้ยงข้าวขอบคุณอาจารย์ได้มั้ยค่ะ
@ ประกาศใช้งานเว็บบอร์ดใหม่ => บอร์ดเรียนรู้ Access สำหรับคนไทย
แล้วจะใส่ลิ้งอ้างอิงมาที่โพสต์เก่านี้หรือไม่ก็ตามสะดวกครับ
Time: 0.0484s