ถามเรื่องการตัดสต๊อกหน่อยครับ
กระทู้เก่าบอร์ด อ.Yeadram

 16,926   15
URL.หัวข้อ / URL
ถามเรื่องการตัดสต๊อกหน่อยครับ

คือ ตารางสินค้ามี รหัส ชื่อ ราคา จำนวนในคลัง

พอไปฟอร์มสั่งซื้อสินค้า ของผมจะเป็นแบบเลือกรายการสินค้า 3 4 อย่างก็ว่าไป

แล้วใส่จำนวนที่ซื้อ คิดเงินให้เสร็จในฟอร์มเดียวกัน แล้วที่นี้อยากได้ ปุ่มตัดสต๊อก

เช่น มี 100 ชิ้น พอซื้อ 5 ชิ้น แล้วให้มันหักสต๊อกตารางสินค้า ต้องทำยังไงครับ

ใช้ปุ่มตัดสต๊อก หรือ ว่า กดชื่อสินค้า ใส่จำนวนแล้วตัดให้เลยก็ได้ครับ แต่่ถ้าเป็นไป

ได้ขอกดปุ่มก็ดีครับ

ขอฝากด้วยนะครับ ขอบคุณครับ

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

1 @R02577
ในระบบ ในตารางไม่ต้องเก็บยอดคงเหลือครับ
ให้เก็บยอดยกมา
ยอดเคลื่อนไหว (แยกชนิดการเคลื่อนไหว ว่าขาเข้าหรือขาออก)

เมื่ออยากทราบยอดคงเหลือ ให้รวมยอดหักล้างได้เลยครับ
ดังนั้น ปุ่มกด เมื่อถูกกด = (ยอดยกมา+sum(ยอดขาเข้า)) - sum(ยอดขาออก)

เราไม่เก็บยอดจากการประมวลผล (ยอดตัดสต็อก หรือยอดสต็อกปัจจุบัน) ครับ เมื่อมีการแก้ไขเอกสาร เช่น ตรวจสอบพบในภายหลังว่า คีย์ผิดเราสามารถแก้ยอดในเอกสารฉบับนั้นได้เลยโดยไม่ต้องคำนวนสต็อกอีก เพราะยอดสต็อกออนแฮนด์ มันเป็น ไดนามิค เมื่อไหร่ที่อยากทราบใช้ คิวรี่เรียกดูได้เลยครับตามสูตร


ตารางสินค้า
aba001 สินค้า1
aba002 สินค้า2

ตารางtransfer
วันที่1 aba001 ยอดยกมา   15
วันที่1 aba002 ยอดยกมา     0
วันที่1 aba001 ซื้อเข้า       30
วันที่2 aba001 ขายออก      5
วันที่2 aba002 ซื้อเข้า        2

เมื่อต้องการหายอดคงเหลือ ให้ใช้คิวรี่เรียกตามสูตรจากตาราง transfer ครับ ไม่ต้องมีการเก็บยอดคงเหลือในตาราง มันไม่จำเป็นครับ

qryBefore=select (sum(iif(type=ยอดยกมา,total,0))+sum(iif(type=เข้า,total,0))) - sum(iif(type=ออก,total,0)) as qbefore from tbTransfer where date < [วันเริ่มต้น] group by productCode;

qryCurMove=select (qbefore+sum(iif(type=เข้า,total,0))) - sum(iif(type=ออก,total,0)) as CurMove from tbTransfer inner join qryBefore on qryBefore.ProductCode = tbTransfer.ProductCode where tbTransfer.date Between [วันเริ่มต้น] and [วันสิ้นสุด] group by productCode;

-อยากทราบ stock on hand ให้ใส่พารามิเตอร์วันที่ปัจจุบันให้กับ qryBefore
-อยากทราบยอดเคลื่อนไหวเพื่อไปออกรายงาน "ความเคลื่อนไหว" ให้ดัดแปลงคิวรี่ qryCurMove อีกนิดหน่อย (ตรงที่ต้องแยกแจง ว่ายอดใดเข้า ยอดใดออก ยอดใดยกมา)

พอเห็นภาพไหมครับ


2 @R02578
ยอดเคลื่อนไหว
ยอดยกมา
ยอดเข้า
ยอดออก

นี้คืออะไรครับ ผมไม่เข้าใจ ครับ



3 @R02580
อืมม ผมก็งงแฮะ อิอิ

งั้นเอาอย่างนี้ ลืมที่ผมพูดไปทั้งหมดก็แล้วกัน
คุณต้องการกดปุ่มบนฟอร์ม เพื่ออัพเดตข้อมูลในตาราง ในคุณสั่งรัน คิวรี่ครับ เป็นคิวรี่แบบ action หรือคิวรี่อัพเดตนั่นเอง
คุณมีตัวเลขตัวตั้งแล้ว คือเลขเดิมในตาราง
คุณมีตัวเลขตัวกระทำแล้ว คือ ตัวเลขบนฟอร์ม ณ ขณะนั้น

private sub command1_click()
dim sql as string
sql ="Update tbProduct Set stock = stock - " & me.txtQuantity & " where Code = '" & me.txtCode & "';"
currentproject.connection.execute sql
End sub
4 @R02590
แล้ว ใน Qry ผมต้องดึง อะไรมามังครับ แล้ว จ้องเขียน สูตร ยังไงครับ

ผมยังมืดกับ Qry แต่ ปุ่มพอเข้าใจครับ
5 @R02591
me.txtQuantity

me.txtCode

คืออะไีรครับ
6 @R02592
มือใหม่อย่างผมตัดแปลงจากตัวอย่างนี้ครับ สำหรับ Code ของอาจารย์ yeadram ผมขอนำไปศึกษาด้วย
7 @R02593
ขอบคุณมากครับ เด๋วเอาไป ศึกษาแล้วพรุ่งนี้จะมาบอก ครับ
8 @R02594
พอนำไฟล์คุณภานุวัฒน์ ไป ศึกษาและลองทำ ดู ถ้าจะทำตามคุณภานุวัฒน์ ผมว่าผมต้องแก้ของผมเยอะเลย เพราะ ว่า ผมออกแบบมาไม่เหมือนกัน แต่ ถ้าแก้ใหม่ คงไม่ไหว เพราะผมก็ มือใหม่ ไม่รู้เรื่องแบบนี้มากนะ ไงก็ขอบคุฯมากครับ เด๋วรอ อาจารย์มาตอบให้แน่ชัดกว่านี้ ในส่วนที่ผมงง อยู่ครับ

เพิ่มเติม---- (แบบละเอียดหรือป่าวมะรู้เอาที่ผมเข้าใจ)
ตารางที่มีที่จะตัดสต๊อก
1.tblProducts มีฟิลด์ รหัสสินค้า ชื่อ ราคา จำนวนในคลัง
2.tblOrderDetails "--" รหัสสั่งซื้อ รหัสสินค้า จำนวนที่ซื้อ ราคา ส่วนลด

แล้วนำ tblOrderDetails มาทำ QryOrderDetails เพิ่มฟิล์ด ยอดรวม (จำรวนxราคาxส่วนลด) และทำ QryOrderDetails มาำทำเป็น Subform ในการสั่งซื้อสินค้า
มีฟิล์ คือ รหัสสินค้า จำนวนที่ซื้อ ราคา ส่วนลด รวมยอด

ที่นี้ที่ผมต้องการคือ ผมต้องการให้ฟิลด์ จำนวนที่ซื้อ เอาไปหัก กับจำนวนในคลัง ที่อยู่ใน tblProducts เพื่อหายอดคงเหลือจะได้ไหมหรือถ้าไม่ได้มีวิธีอื่นไหมครับ

คำถามคือ ผมต้องทำยังไง ใช้ปุ่มกดตัดสต๊อกได้ไหม หรือ ทำแบบไหนที่ทำได้และไม่ซับซ้อนได้ไหม แล้วถ้าจะเพิ่มของในสต๊อก ต้่องทำไงมังครับ ผมไม่ค่อยเข้าใจเรื่อง Access มากครับ

ผมเพิ่มเติมให้ครับ กลัวจะไม่เข้าใจแล้วอีกอย่างกลัวผมเองจะ งง ด้วย- -*

ไงฝากอีกทีนะครับ ขอบคุณล่วงหน้านะครับ
9 @R02595
จาก Reply R02580 เอาไปใช้ได้เลยครับ
-ปุ่มคำสั่งของคุณที่สร้างชื่ออะไร
-ตารางสินค้าคุณชื่อ tblProducts
-ฟิลด์ที่จะอัพเดตของคุณชื่อ จำนวนในคลัง (ตัวตั้ง)
-ยอดที่จะเอาไปกระทำ ของคุณมันแสดงใน textbox หรือเปล่า textbox ตัวนั้น มันชื่ออะไร หรือว่าชื่อ จำนวนที่ซื้อ
-ในฟอร์มของคุณ ใช้ textbox หรือเปล่าที่แสดงรหัสสินค้า textbox หรือคอมโบตัวนั้นมันชื่ออะไร ก็เอาพวกนี้แหละครับ ไปใส่ในโค้ด (ชื่อคอนโทรลบนฟอร์ม)
-เครื่องหมายตัวกระทำนั่นเปลี่ยนเป็น + หรือ - ได้ ถ้าต้องการเพิ่มสต็อกก็เปลี่ยนเป็นบวก ถ้าจะลดสต็อกก็ใช้ -

private sub ชื่อปุ่มคำสั่ง_click()
dim sql as string
sql ="Update tblProducts Set จำนวนในคลัง = จำนวนในคลัง เครื่องหมายตัวกระทำ " & me.จำนวนที่ซื้อ & " where รหัสสินค้า(ชื่อฟิลด์จริงในตาราง) = '" & me.รหัสสินค้า(ชื่อคอนโทรลบนฟอร์ม & "';"
currentproject.connection.execute sql
End sub
10 @R02599
ดูให้หน่อยครับ

11 @R02600
กดคลิกขวาที่รูปละ ดูภาำพ นะครับ
12 @R02601
เรื่องการใช้โค้ดเพื่ออัพเดตข้อมูลจบแล้วนะครับ

แค่นั้นมันก็ทำงานให้แล้ว ปัญหาต่อมาของคุณคือ "การอ้างอิง"

- คุณเขียนโค้ดไว้ที่ฟอร์มหนึ่ง จะไปเอา "ค่า" ในคอนโทรล ของอีกฟอร์มหนึ่ง คุณต้องรู้วิธีการอ้างอิง เพราะจะใช้ me....... ไม่ได้ เพราะคอนโทรลตัวนั้น มันไม่ได้อยู่ในฟอร์มปัจจุบันแล้ว มันจะเป็น me ไม่ได้ มันต้องเป็น him เป็น them ไปแล้วล่ะ มันใช้ me ไม่ได้ (พอให้เห็นภาพนะครับ จริงๆ ในโค้ดไม่มี him ไม่มี them นะ แค่ให้รู้ว่า มันใช้ me ไม่ได้ เพราะมันไม่ใช่คอนโทรลของเรา)

มันเป็นของฟอร์มอื่น
1 เมื่อค่า ที่จะนำมาคำนวน มันอยู่ที่ฟอร์มอื่น แล้วเรายังจะนำมาคำนวนได้หรือไม่
ตอบ ได้ครับ แต่ต้องอ้างอิงให้ถูกตามหลักของภาษา (VBA)

2 แล้วเราจะอ้างอิงได้อย่างถูกต้องได้อย่างไร
ตอบ ...................... จริงๆ มันก็มีกระทู้เก่าๆ บอกวิธีการอ้างอิงไว้แล้วนะครับ ......

จากรูปที่สองที่คุณนำมาให้ดู นั่นมัน อ้างถึง คอนโทรลของฟอร์มย่อย แล้วในคำถามตอนแรก ทำไมไม่บอกโดยละเอียดว่า มันเป็นคอนโทรลของฟอร์มย่อย ผมจะได้ไม่เขียนคำว่า me ใส่ลงไป


sql ="Update tblProducts Set จำนวนในคลัง = จำนวนในคลัง เครื่องหมายตัวกระทำ " & [อ้างอิงลงไปตามลำดับขั้นจนกว่าจะถึง คอนโทรลทีแสดงจำนวนการซื้อ] & " where รหัสสินค้า(ชื่อฟิลด์จริงในตาราง) = '" & [อ้างอิงลงไปตามลำดับขั้นจนกว่าจะถึง คอนโทรลทีแสดงรหัสสินค้าที่ต้องการอัพเดต] & "';"



http://thai-access.com/yeadram_view.php?topic_id=298


http://thai-access.com/yeadram_view.php?topic_id=279

และตัวอย่างอื่นๆ อีกมากมายหลายวิธีลองค้นดูในกระทู้เก่า เว็บบอร์ดอาจารย์สุภาพด้วยครับ มีวิธีการอ้างเยอะแยะเลย
13 @R02602
ขอบคุณครับ
14 @R08839
เสร็จแล้วขอหนูดูได้ชมเป็นตัวอย่างทีน่ะค่ะ อยากทำแบบนี้แตไม่มี idea ด้านนี้ สับสนตรงตารางนิดหน่อยค่ะ
15 @R21708
จากตัวอย่างของคุณภาณุวัฒน์ ยอดคงเหลือ บางช่องไม่ออก ต้องทำอย่างไรคะ เช่นถ้ามียอดเข้า แต่ไม่มีออก ทำอย่างไรให้ยอดคงเหลือคำนวณได้คะ
@ ประกาศใช้งานเว็บบอร์ดใหม่ => บอร์ดเรียนรู้ Access สำหรับคนไทย
แล้วจะใส่ลิ้งอ้างอิงมาที่โพสต์เก่านี้หรือไม่ก็ตามสะดวกครับ
Time: 0.2700s