กระทู้เก่าบอร์ด อ.Yeadram
        
           17,587   15		  
          
					  
		    URL.หัวข้อ / 
		    URL
        
        ถามเรื่องการตัดสต๊อกหน่อยครับ      
    
      คือ ตารางสินค้ามี รหัส ชื่อ ราคา จำนวนในคลัง
พอไปฟอร์มสั่งซื้อสินค้า ของผมจะเป็นแบบเลือกรายการสินค้า 3 4 อย่างก็ว่าไป
แล้วใส่จำนวนที่ซื้อ คิดเงินให้เสร็จในฟอร์มเดียวกัน แล้วที่นี้อยากได้ ปุ่มตัดสต๊อก
เช่น มี 100 ชิ้น พอซื้อ 5 ชิ้น แล้วให้มันหักสต๊อกตารางสินค้า ต้องทำยังไงครับ
ใช้ปุ่มตัดสต๊อก หรือ ว่า กดชื่อสินค้า ใส่จำนวนแล้วตัดให้เลยก็ได้ครับ แต่่ถ้าเป็นไป
ได้ขอกดปุ่มก็ดีครับ
ขอฝากด้วยนะครับ ขอบคุณครับ
    
  พอไปฟอร์มสั่งซื้อสินค้า ของผมจะเป็นแบบเลือกรายการสินค้า 3 4 อย่างก็ว่าไป
แล้วใส่จำนวนที่ซื้อ คิดเงินให้เสร็จในฟอร์มเดียวกัน แล้วที่นี้อยากได้ ปุ่มตัดสต๊อก
เช่น มี 100 ชิ้น พอซื้อ 5 ชิ้น แล้วให้มันหักสต๊อกตารางสินค้า ต้องทำยังไงครับ
ใช้ปุ่มตัดสต๊อก หรือ ว่า กดชื่อสินค้า ใส่จำนวนแล้วตัดให้เลยก็ได้ครับ แต่่ถ้าเป็นไป
ได้ขอกดปุ่มก็ดีครับ
ขอฝากด้วยนะครับ ขอบคุณครับ
				15 Reply in this Topic. Dispaly 1  pages and you are on page number 1 
				
        
    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
    
  งั้นเอาอย่างนี้ ลืมที่ผมพูดไปทั้งหมดก็แล้วกัน
คุณต้องการกดปุ่มบนฟอร์ม เพื่ออัพเดตข้อมูลในตาราง ในคุณสั่งรัน คิวรี่ครับ เป็นคิวรี่แบบ 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 แต่ ปุ่มพอเข้าใจครับ
    
    
  ผมยังมืดกับ Qry แต่ ปุ่มพอเข้าใจครับ
        
    5 @R02591    
        
  
      me.txtQuantity
me.txtCode
คืออะไีรครับ
    
  me.txtCode
คืออะไีรครับ
        
    6 @R02592    
        
  
      มือใหม่อย่างผมตัดแปลงจากตัวอย่างนี้ครับ สำหรับ Code ของอาจารย์ yeadram ผมขอนำไปศึกษาด้วย
    
    
  
        
    7 @R02593    
        
  
      ขอบคุณมากครับ เด๋วเอาไป ศึกษาแล้วพรุ่งนี้จะมาบอก ครับ    
    
  
        
    8 @R02594    
        
  
      พอนำไฟล์คุณภานุวัฒน์ ไป ศึกษาและลองทำ ดู ถ้าจะทำตามคุณภานุวัฒน์ ผมว่าผมต้องแก้ของผมเยอะเลย เพราะ ว่า ผมออกแบบมาไม่เหมือนกัน  แต่ ถ้าแก้ใหม่ คงไม่ไหว เพราะผมก็ มือใหม่ ไม่รู้เรื่องแบบนี้มากนะ ไงก็ขอบคุฯมากครับ เด๋วรอ อาจารย์มาตอบให้แน่ชัดกว่านี้ ในส่วนที่ผมงง อยู่ครับ
เพิ่มเติม---- (แบบละเอียดหรือป่าวมะรู้เอาที่ผมเข้าใจ)
ตารางที่มีที่จะตัดสต๊อก
1.tblProducts มีฟิลด์ รหัสสินค้า ชื่อ ราคา จำนวนในคลัง
2.tblOrderDetails "--" รหัสสั่งซื้อ รหัสสินค้า จำนวนที่ซื้อ ราคา ส่วนลด
แล้วนำ tblOrderDetails มาทำ QryOrderDetails เพิ่มฟิล์ด ยอดรวม (จำรวนxราคาxส่วนลด) และทำ QryOrderDetails มาำทำเป็น Subform ในการสั่งซื้อสินค้า
มีฟิล์ คือ รหัสสินค้า จำนวนที่ซื้อ ราคา ส่วนลด รวมยอด
ที่นี้ที่ผมต้องการคือ ผมต้องการให้ฟิลด์ จำนวนที่ซื้อ เอาไปหัก กับจำนวนในคลัง ที่อยู่ใน tblProducts เพื่อหายอดคงเหลือจะได้ไหมหรือถ้าไม่ได้มีวิธีอื่นไหมครับ
คำถามคือ ผมต้องทำยังไง ใช้ปุ่มกดตัดสต๊อกได้ไหม หรือ ทำแบบไหนที่ทำได้และไม่ซับซ้อนได้ไหม แล้วถ้าจะเพิ่มของในสต๊อก ต้่องทำไงมังครับ ผมไม่ค่อยเข้าใจเรื่อง Access มากครับ
ผมเพิ่มเติมให้ครับ กลัวจะไม่เข้าใจแล้วอีกอย่างกลัวผมเองจะ งง ด้วย- -*
ไงฝากอีกทีนะครับ ขอบคุณล่วงหน้านะครับ
    
  เพิ่มเติม---- (แบบละเอียดหรือป่าวมะรู้เอาที่ผมเข้าใจ)
ตารางที่มีที่จะตัดสต๊อก
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
    
    
  -ปุ่มคำสั่งของคุณที่สร้างชื่ออะไร
-ตารางสินค้าคุณชื่อ 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
และตัวอย่างอื่นๆ อีกมากมายหลายวิธีลองค้นดูในกระทู้เก่า เว็บบอร์ดอาจารย์สุภาพด้วยครับ มีวิธีการอ้างเยอะแยะเลย
    
  แค่นั้นมันก็ทำงานให้แล้ว ปัญหาต่อมาของคุณคือ "การอ้างอิง"
- คุณเขียนโค้ดไว้ที่ฟอร์มหนึ่ง จะไปเอา "ค่า" ในคอนโทรล ของอีกฟอร์มหนึ่ง คุณต้องรู้วิธีการอ้างอิง เพราะจะใช้ 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    
        
    
      จากตัวอย่างของคุณภาณุวัฒน์ ยอดคงเหลือ บางช่องไม่ออก ต้องทำอย่างไรคะ เช่นถ้ามียอดเข้า แต่ไม่มีออก ทำอย่างไรให้ยอดคงเหลือคำนวณได้คะ    
    
  
      Time: 0.7108s
    
      
		
ให้เก็บยอดยกมา
ยอดเคลื่อนไหว (แยกชนิดการเคลื่อนไหว ว่าขาเข้าหรือขาออก)
เมื่ออยากทราบยอดคงเหลือ ให้รวมยอดหักล้างได้เลยครับ
ดังนั้น ปุ่มกด เมื่อถูกกด = (ยอดยกมา+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 อีกนิดหน่อย (ตรงที่ต้องแยกแจง ว่ายอดใดเข้า ยอดใดออก ยอดใดยกมา)
พอเห็นภาพไหมครับ