การเลือกลุ่มสินค้าและการตัดยอดคงคลัง
กระทู้เก่าบอร์ด อ.Yeadram

 7,662   21
URL.หัวข้อ / URL
การเลือกลุ่มสินค้าและการตัดยอดคงคลัง

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

จะสามารถทำได้ไหมค่ะ
ขอบคุณล่วงหน้านะค่ะ น้องพร

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

1 @R08078
สงสัยกับคำถาม
สินค้าในกลุ่มที่ว่าตัดเหลือ 500 นี่ เรามีเกณฑ์การตัดสินค้าแต่ละตัวยังไงครับ เพราะ สินค้าแต่ละตัวก็มีจำนวนคงเหลือไม่เท่ากัน
2 @R08087
ประมาณว่าตัดให้เท่ากันได้ก็ดี แต่ถ้ามีสินค้าบางตัวที่มีจำนวนน้อยมากก็ไม่จำเป็นต้องตัด ให้ตัดตัวที่มากกว่าแทนและเมื่อสินค้าเหลือคงคลังรวมกันให้ได้เท่าที่เรากำหนดค่ะ
3 @R08127

ตัดอย่างไรก็ได้ ขอให้สินค้าในกลุ่มเหลือเท่าที่เรากำหนดเป็นสินค้าคงคลัง                     
                                                                       ขอบคุณค่ะ พร
4 @R08131
เรียนคุณ พร
ปกติ programming ควรจะต้องมีตรรกกะ ในการ กระทำ
Programmer จะหาหลักการเพื่อทำตาม requirement ที่ต้องการ

ยกตัวอย่าง โจทย์ข้อนี้
สรุปได้ตอนนี้คือ
สินค้าในกลุ่มเดียวกัน ต้องเหลือรวมกัน ไม่ต่ำกว่า 500 (เลขสมมุติ)
ที่สรุปไม่ได้
ไม่ได้บอกว่า สินค้าในกลุ่มเดียวกัน บางตัวเหลือ 0 ได้หรือไม่ เมื่อ สินค้ากลุ่มนั้นเหลือตามที่กำหนดแล้ว
รู้ว่าสินค้ามีจำนวนน้อย (programmer จะรู้ได้อย่างไร ว่าสินค้านั้นเหลือน้อยแล้ว) เทียบกับอะไร หรือเทียบกับจำนวนสินค้าตัวอื่นในกลุ่มเดียวกัน (ตัดตัวที่มีจำนวนมากกว่าก่อนในกลุ่ม)
5 @R08132
อยากให้คุณพร พยายามรวบรวมเหตุผล
หรือหลักการจากการทำงานอยู่ ให้พอเป็นรูปธรรม
แล้ว ท่าน อาจารย์ทั้งหลาย ใน web
จะช่วยก่อให้เป็นรูปเป็นร่างให้ครับ
6 @R08152
     สิ่งที่หนูต้องการคือ
1.เวลาปิดกะประจำวัน จะเช็คยอดของแต่ละสาขาค่ะ โดยมีข้อกำหนดว่าสินค้าคงคลังไม่เหมือนกัน (ของแต่ละสาขา) ส่วนสินค้าที่มีมากเกินไปก็ส่งต่อให้อีกสาขาอื่นเพื่อไม่ให้สินค้าในกลุ่มนั้นกระจุกตัวที่สาขาใด สาขาหนึ่งมากเกินไป
2.สินค้าแต่ละชนิดสามารถมีค่าเป็น 0 ได้ แต่มีค่าติดลบไม่ได้
3.ถ้าเป็นไปได้ คือ เวลาสินค้ารวมของกลุ่มเกินที่กำหนด (ในที่นี้ กำหนด 500 ) ให้ตัดยอดสินค้าที่มีมากที่สุด ไปหายอดสินค้าที่มีน้อยสุด เพื่อจะให้เหลือเท่าที่เรากำหนด ถ้าสินค้ารวมของกลุ่มนั้น ๆ มีจำนวนน้อยกว่าค่าที่กำหนด (500) ก็ไม่ต้องตัดเลย

***จะเช็คยอดทุกวัน หลังปิดกะสุดท้ายของวัน (กะดึก)
                          รบกวนอาจารย์ด้วยนะค่ะ           พร
7 @R08154
ข้อสรุปปัจจุบัน
1 สามารถตัดยอดสินค้าได้เมื่อยอดรวมสินค้าคงเหลือของกลุ่ม >ยอดรวมสินค้าของกลุ่มตามที่กำหนด(500)
   ถ้ามีค่าน้อยกว่าหรือเท่ากับ 500 ห้ามตัดกลุ่มสินค้านี้
   [BLUE]ต้องตรวจสอบยอดคงเหลือของกลุ่มก่อนตัดทุกครั้ง
   ต้องมียอดคงเหลือของกลุ่มมากกว่าค่าที่กำหนด[/COLOR]

2 ตัดยอดสินค้าในกลุ่มเดียวกันโดยตัดจากสินค้าที่มียอดคงเหลือมากสุด
   [BLUE]ต้องตรวจสอบยอดคงเหลือของสินค้าในกลุ่มเดียวกันว่า
   สินค้าตัวไหนเหลือมากกว่ากัน[/COLOR]

3 ยอดสินค้าห้ามติดลบ(>=0)   

สอบถามเพิ่มเติมครับ
สินค้า ในกลุ่มเดียวกัน สามารถตัดยอดแทนกันได้หรือไม่
หรือเป็นสินค้าชนิดเดียวกันหรือไม่ แล้วแตกต่างกันอย่างไร
เห็นรหัส เรียงสลับกันไปมา เช่น 102,120,201,210,012,021
8 @R08155
โฟลว์การตัดยอดแบบไม่เฉลี่ยลำดับ สินค้าใดเหลือมากที่สุด จะถูกตัดก่อน
ถ้าตัดจากสินค้านั้นแล้ว ทั้งกลุ่มเหลือน้อยกว่า 500 จะข้ามไปทำงานที่กลุ่มต่อไปทันที



1 "นับจำนวนสินค้าในกลุ่ม" ของแต่ละกลุ่ม
2 เอา 500 ตั้ง เอาจำนวนสินค้าที่หาได้ในข้อ 1 มาหาร จะได้ค่าเฉลี่ยที่เหมาะสม ของแต่ละชนิดสินค้า ว่าควรจะเหลืออยู่ชนิดละเท่าไร

3 วนลูป
ลูปที่ 1 จำนวนรอบ = จำนวนกลุ่มสินค้า
   ลูปที่ 2 จำนวนรอบ = จำนวนสินค้าในกลุ่มนั้นๆ (ให้เรียงลำดับตามจำนวนคงเหลือ จากมาก มาหาน้อย)
        A ตรวจสอบจำนวนคงเหลือของสินค้านั้นๆ (เทียบกับคำตอบที่ได้จากข้อ2)
        A1 ถ้ามากกว่าค่าเฉลี่ยของกลุ่มนั้นๆ ให้ลดมันลง โดยเก็บค่าที่หักออกเข้าตัวแปร(ควรจะเป็นตัวแปรอาเรย์ เพื่อจะได้ทราบว่า สินค้ารหัสใด ต้องเอาออกเท่าไร)
        B รวมจำนวนคงเหลือของสินค้ากลุ่มนั้นอีกรอบ ว่า มากกว่าหรือน้อยกว่า 500
        B1 ถ้าน้อยกว่าหรือเท่ากับ 500 ให้ออกจากลูปที่ 2
     จบลูปที่ 2
     เอาค่าจากตัวแปรอาเรย์ ที่ได้จากข้อ A1 ไปรายงานผล หรือไปบันทึกผล ของสินค้ากลุ่มนั้นๆ
จบลูปที่ 1
จบงาน
       
9 @R08163
ข้อสรุปปัจจุบัน
1 สามารถตัดยอดสินค้าได้เมื่อยอดรวมสินค้าคงเหลือของกลุ่ม >ยอดรวมสินค้าของกลุ่มตามที่กำหนด(500)
   ถ้ามีค่าน้อยกว่าหรือเท่ากับ 500 ห้ามตัดกลุ่มสินค้านี้
   ต้องตรวจสอบยอดคงเหลือของกลุ่มก่อนตัดทุกครั้ง
   ต้องมียอดคงเหลือของกลุ่มมากกว่าค่าที่กำหนด

2 ตัดยอดสินค้าในกลุ่มเดียวกันโดยตัดจากสินค้าที่มียอดคงเหลือมากสุด
   ต้องตรวจสอบยอดคงเหลือของสินค้าในกลุ่มเดียวกันว่า
   สินค้าตัวไหนเหลือมากกว่ากัน

3 ยอดสินค้าห้ามติดลบ(>=0)    

สอบถามเพิ่มเติมครับ
สินค้า ในกลุ่มเดียวกัน สามารถตัดยอดแทนกันได้หรือไม่
หรือเป็นสินค้าชนิดเดียวกันหรือไม่ แล้วแตกต่างกันอย่างไร
เห็นรหัส เรียงสลับกันไปมา เช่น 102,120,201,210,012,021
** ตอบคำถามค่ะ**
1.ไม่สามารถตัดแทนกันได้
2.ไม่ใช่ชนิดเดียวกันแต่คุณลักษณะใกล้เคียงกัน จริงๆระหัสประมาณนี้ค่ะ

   1) 0759-012-00459
    2) 0759-021-05512
    3) 0759-102-37602
**โดยระหัสที่อยู่ตรงกลาง 3 ตำแหน่งบ่งบอกถึงกลุ่มค่ะ แล้ว 5 ตำแหน่งสุดท้ายบอกชนิด (เห็นเขาบอกว่าเป็นแบบ 12 NC ) ประมาณนี้ค่ะ

   ** สามารถทำเป็นคิวรี่ได้หรือเปล่าค่ะ อยากได้โค๊ด SQL หรือ VB ค่ะพอดีวันนี้ว่างทั้งวันค่ะอยากนั่งทำและลองศึกษาดูค่ะอาจารย์
                     ขอบพระคุณอาจารย์มากค่ะ
10 @R08164
โฟลว์การตัดยอดแบบไม่เฉลี่ยลำดับ สินค้าใดเหลือมากที่สุด จะถูกตัดก่อน
ถ้าตัดจากสินค้านั้นแล้ว ทั้งกลุ่มเหลือน้อยกว่า 500 จะข้ามไปทำงานที่กลุ่มต่อไปทันที



1 "นับจำนวนสินค้าในกลุ่ม" ของแต่ละกลุ่ม
2 เอา 500 ตั้ง เอาจำนวนสินค้าที่หาได้ในข้อ 1 มาหาร จะได้ค่าเฉลี่ยที่เหมาะสม ของแต่ละชนิดสินค้า ว่าควรจะเหลืออยู่ชนิดละเท่าไร

3 วนลูป
ลูปที่ 1 จำนวนรอบ = จำนวนกลุ่มสินค้า
   ลูปที่ 2 จำนวนรอบ = จำนวนสินค้าในกลุ่มนั้นๆ (ให้เรียงลำดับตามจำนวนคงเหลือ จากมาก มาหาน้อย)
        A ตรวจสอบจำนวนคงเหลือของสินค้านั้นๆ (เทียบกับคำตอบที่ได้จากข้อ2)
        A1 ถ้ามากกว่าค่าเฉลี่ยของกลุ่มนั้นๆ ให้ลดมันลง โดยเก็บค่าที่หักออกเข้าตัวแปร(ควรจะเป็นตัวแปรอาเรย์ เพื่อจะได้ทราบว่า สินค้ารหัสใด ต้องเอาออกเท่าไร)
        B รวมจำนวนคงเหลือของสินค้ากลุ่มนั้นอีกรอบ ว่า มากกว่าหรือน้อยกว่า 500
        B1 ถ้าน้อยกว่าหรือเท่ากับ 500 ให้ออกจากลูปที่ 2
     จบลูปที่ 2
     เอาค่าจากตัวแปรอาเรย์ ที่ได้จากข้อ A1 ไปรายงานผล หรือไปบันทึกผล ของสินค้ากลุ่มนั้นๆ
จบลูปที่ 1
จบงาน

*** อาจารย์ค่ะ ส่วนนี้ต้องเขียนที่โมดูลหรือ VB ค่ะ หนู งงมาก และหนูก็เป็นเด็กใหม่ค่ะ อาจารย์พอจะเขียนเป็นโค๊ดได้หรือเปล่าค่ะ รบกวนอาจารย์ด้วยนะค่ะ และก็ขอขอบคุณล่วงห้าค่ะ

                                                              ขอบคุณอาจารย์มากๆค่ะ
11 @R08168
ส่งตัวอย่างไปในเมล์กลางแล้วนะครับ
หัวข้อเดียวกันกระกระทู้นี้ บันทึก ณ วันนี้ 14:53 นาฬิกา

ตัวอย่าง เป็น mdb จาก access เวอร์ชั่น 2000 ( officeXP )
มีออปเจค
1 ตาราง (หลังการรันโค้ด จะมีเพิ่มมาอีก 1 เป็นตารางชั่วคราว)
1 คิวรี่แอ็คชั่น
1 รายงาน
1 โมดูล

- อย่าเปลี่ยนชื่อออบเจคใดๆ จนกว่าคุณจะมั่นใจว่า เข้าใจมันทั้งหมดแล้ว
- โครงสร้างตาราง หากตารางของคุณ มีชื่อฟิลด์ไม่เหมือนกันกับตัวอย่าง อาจต้องปรับแก้ไขหลายจุด ทั้งใน คิวรี่ โมดูล และ รายงาน
- โครงสร้างตาราง ที่สำคัญคือ รหัสสินค้า ต้องไม่ซ้ำกัน
- โครงสร้างคิวรี่   สามารถปรับแต่งเพิ่มเติมได้เล็กน้อย (ได้ทำเผื่อไว้ให้แล้ว น่าจะประยุกต์ได้ง่าย)
- หน้าตารายงานปรับแต่งได้ตามสะดวก แต่เพื่อให้สัมพันธ์กันกับคิวรี่ ควรระมัดระวังเรื่องการอ้างอิงหากจะแก้ไข นิพจน์ใดๆ หรือคอนโทรลซอร์ส ใดๆ
- ทดสอบโปรแกรมได้ โดยเปิดโมดูลขึ้นมา >> วางเม้าส์พ้อยเตอร์ไว้ในบริเวณใดๆ ของฟังก์ชั่น แล้วกดปุ่ม F5 >> โปรแกรมจะทำงานหลายขั้นตอน อัตโนมัติทั้งหมด แล้วจะแสดงรายงานให้ดู (คุณอาจต้องย่อหน้าต่าง VBA เพื่อจะได้เห็นรายงาน)
- หากต้องการรันฟังก์ชั่นในโมดุลผ่านปุ่มคำสั่ง ให้สร้างปุ่มคำสั่งบนฟอร์ม แล้วฝั้งโค้ดไป 1 คำสั่ง ว่า
StockLimit
- หากต้องการเห็นผลที่แตกต่างเป็นอย่างอื่น ให้ลองเล่นกับข้อมูลในตารางดู เช่นการเพิ่มรายการ , การลดรายการ, และ / หรือ การเปลี่ยนยอดสต็อก ของบางรายการหรือทั้งหมด แล้วค่อยรันโค้ดดูใหม่อีกครั้ง
------- ศึกษา ศึกษา ศึกษา ถ้าเข้าใจ จะประยุกต์ต่อยอดได้มากกว่าที่เห็น ------
12 @R08173
ขอบคุณอาจารย์มากค่ะ หนูลองทำแล้วได้ตามต้องการ แต่พอหนูลองแก้ไขจำนวนของสินค้าบางตัว ให้มีมากกว่าจำนวน สต๊อก เพราะเราไม่รู้ว่าของเข้ามาเท่าไหร่ ทำรายการรับสินค้าทุกตัวที่เข้ามา บางตัวก็มีจำนวนมาก คือมากกว่าจำนวนสต๊อก (สินค้าคงคลัง) เช่น สต๊อกเรากำหนดไว้ 500 แต่พอมาดู จำนวนสินค้ามีมากถึง 1000 หนูลองแก้ดูแล้ว ปรากฎว่ามีสินค้ามากกว่า 500 ค่ะ หรือว่าหนูเข้าใจอะไรผิดไปหรือเปล่า ช่วยชี้แนะด้วยนะค่ะ (พอดีเป็นหวัดอะค่ะ ม฿นๆๆ)
                  ยังไงหนูก็ขอบพระคุณอาจารย์มาก ๆ เลยนะค่ะ

                                                                                         หนูพร
13 @R08213
หนูลองทำแล้วค่ะยังได้ไม่ตรงกับที่หนูต้องการ ดูจากภาพคะ

คือหนูอยากให้ตัวเลขที่ช่อง After ในวงกลมสีแดง เท่ากับ 500 ค่ะ (หนูลองเปลี่ยนตัวเลข ของสินค้าในกลุ่มที่ 1 และกลุ่มที่ 2 ) ลองดูแล้วได้ค่าประมาณนั้นค่ะ แต่ก็ใกล้ความจริงแล้วค่ะ   หนูต้องขอบคุณอาจารย์ มากๆ เลยนะค่ะ              
14 @R08280
จากหัวข้อที่ [ R08213] จากรูป

   จากรูป มีวิธีที่จะทำให้จำนวนสินค้าในวงกลม ได้เท่ากับจำนวนสินค้าคงคลังที่ 500 ตามต้องการ

1. หาผลรวมของสินค้าแต่ละกลุ่ม ในที่นี้กลุ่มที่ 1 เท่ากับ 3363
2.เอาจำนวนสินค้าคงคลัง (500) ไปเปรียบเทียบกับผลรวมของสินค้ากลุ่มที่ 1
   โดยคิดเป็นเปอร์เซ็นต์ จะได้แบบนี้ ((500)*100)/3363 = 14.87 %
3.นำสินค้าในกลุ่ม มาคิด ที่ 14.87% ว่ามีจะนวนเท่าไหร่
----------------------------------------------------------------
สินค้ากลุ่มที่ 1        จำนวนสินค้า     คิดที่ 14.87%
---------------------------------------------------------------
     012                             20                    2.97       (20*14.87)/100
      021                         2500               371.75      (2500*14.87)/100
      102                           500                  74.35      (500*14.87)/100
      120                           230                  34.20      (230*14.87)/100
      201                             98                  14.57      (98*14.87)/100   
      210                             15                    2.23      (15*14.87)/100
---------------------------------------------------------------
       รวม                           3363                  500
----------------------------------------------------------------
4.จากตาราง (มองให้เป็นตารางนะครับ) จะเห็นว่าสินค้าในกลุ่มถูกตัดทุกตัวในปริมาณที่ 14.87% เท่า ๆ กัน นำแนวคิดนี้ไปเขียนเป็นโค๊ด หรือ โมดูล

      ผมเขียนโค๊ดไม่เป็นครับ ต้องรบกวนอาจารย์ yeadram และอาจารย์ท่านอื่น ๆ ที่มีเวลา ช่วยในการเขียนโค๊ดให้นะครับ ผมคงช่วยได้แค่นี้นะครับ
    
15 @R08282
อาจารย์ค่ะ หนูงงมาก ตอนแรกหนูอ่านเจอที่อาจารย์เข้ามาตอบ (หนูจะนั่งเฝ้ารอคำตอบตลอด หน้าจอคอม ในวันที่หนูหยุดค่ะ) อย่างที่พี่ชายตอบก็ไม่ผิดค่ะ คือตัดได้ทุกตัว ขอให้สินค้าคงคลังเหลือเท่าที่เรากำหนดค่ะ และหนูได้ส่งไฟร์ที่หนูลองแก้ไข ไปที่เมล์ลกลางเรียบร้อยแล้วค่ะ ขอบคุณอาจารย์มากนะค่ะที่ ช่วยเหลือ หนูจะไม่ลืมพระคุณเลยค่ะ                                         ขอบคุณค่ะ    พร
16 @R08284
ผมตอบล่าสุด ดูเหมือนไม่รัดกุมพอ ก็เลยลบความเห็นล่าสุดของผมออก

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

ในคิวรี่ ให้คุณพร แก้ SQL เป็น (มีแก้ไขการลำดับเล็กน้อย)
SELECT tbl_stock.prod_code, tbl_stock.prod_cat, tbl_stock.prod_stock, 0 AS Prod_spend, "ชื่อสินค้า" AS prod_name, "ชื่อกลุ่มสินค้า" AS cat_name INTO tmpLimit
FROM tbl_stock
ORDER BY tbl_stock.prod_cat, tbl_stock.prod_stock;


ส่วนในโมดูล หรือตัวฟังก์ชั่นนั้น ผมปรับแก้ไปหลายจุดพอสมควร ให้คุณพร ลบของเก่าทิ้งไปเลยก็ได้ครับ คัดลอกโค้ดนี้ไปวางในโมดูลทดแทนของเดิมครับ
Function StockLimit()
Dim pCat As Long          ' รหัสกลุ่ม ของสินค้านี้
Dim CntCat As Long      ' จำนวนสินค้าทั้งหมด ของสินค้ากลุ่มนี้
Dim StkCat As Long      ' จำนวนสต็อกทั้งหมด ของสินค้ากลุ่มนี้
Dim StkAvg As Long     ' จำนวนเฉลี่ยที่ควรจะเหลือของสินค้ากลุ่มนี้
Dim StkLimit As Long    ' จำนวนที่กำหนดให้คงเหลือ
Dim sq As String
Dim Rs As New ADODB.Recordset


DoCmd.SetWarnings False
'------------------------ โค้ดเดิม ไม่ต้องสร้างคิวรี่ไว้รอ -------------------
    'sq = "SELECT tbl_stock.prod_code, tbl_stock.prod_cat, tbl_stock.prod_stock, 0 AS Prod_spend, " & _
              "'ชื่อสินค้า' AS prod_name, 'ชื่อกลุ่มสินค้า' AS cat_name INTO tmpLimit" & _
              " FROM tbl_stock" & _
              " ORDER BY tbl_stock.prod_cat, tbl_stock.prod_stock;"
    'DoCmd.RunSQL sq
' -------------------------- จบโค้ดเดิม --------------------------------------

' ---------- โค้ดใหม่ สร้างคิวรี่ qr_StkLimit ไว้รอ เพื่อให้ง่ายต่อการนำไปประยุกต์ต่อ ------
DoCmd.OpenQuery "qr_StkLimit"
' ---------- จบส่วนโค้ดใหม่ -----------------------------------------------------------------------
DoCmd.SetWarnings True


StkLimit = 500


sq = "select * from tmpLimit;"
Rs.Open sq, CurrentProject.Connection, 1, 3

pCat = DMin("prod_cat", "tmplimit")
CntCat = DCount("prod_code", "tmplimit", "[prod_cat] = " & pCat)
StkCat = DSum("[prod_stock] - [prod_spend]", "tmplimit", "[prod_cat] = " & pCat)
StkAvg = StkLimit \ CntCat

Rs.MoveFirst
Do While Not Rs.EOF
If Rs("prod_cat") <> pCat Then
    pCat = Rs("prod_cat")
    CntCat = DCount("prod_code", "tmplimit", "[prod_cat] = " & pCat)
    StkCat = DSum("[prod_stock] - [prod_spend]", "tmplimit", "[prod_cat] = " & pCat)
    StkAvg = StkLimit \ CntCat
End If

If StkCat > StkLimit Then
If (Rs("Prod_stock") - Rs("Prod_spend")) > StkAvg Then
    If (Rs("Prod_stock") - Rs("Prod_spend") - StkAvg) >= (StkCat - StkLimit) Then
    Rs("Prod_spend") = Rs("Prod_spend") + (StkCat - StkLimit)
    Else
    Rs("Prod_spend") = Rs("Prod_spend") + (Rs("Prod_stock") - StkAvg)
    End If
Else
    If (Rs("Prod_stock") - Rs("Prod_spend")) >= (StkCat - StkLimit) Then
    Rs("Prod_spend") = Rs("Prod_spend") + (StkCat - StkLimit)
    Else
    Rs("Prod_spend") = 0
    End If
End If
Rs.Update
StkCat = StkCat - Rs("prod_spend")
End If

Rs.MoveNext
Loop

Rs.Close
Set Rs = Nothing


DoCmd.OpenReport "rp_STK_Limit", acViewPreview
End Function



ส่วนไฟล์ตัวอย่างที่คุณพรส่งกลับเข้ามา ผมขอไม่เปิดอ่านนะครับ
17 @R08292
   ขอบคุณอาจารย์มากๆ เลยค่ะ ถ้าไม่ได้อาจารย์มาชี้แนะหนูคงแย่แน่ๆเลย ความรู้สึกตอนนี้เหมือนหนูตายแล้วเกิดใหม่ค่ะ ความหวังที่จะทำงาน พลังกลับมาค่ะ ขอบคุณจากใจจริงๆค่ะ ขอบคุณค่ะ
                                                                          พร
18 @R08304
          อาจารย์ค่ะหนูมีเรื่องจะรบกวนอาจารย์อีกค่ะ คือตอนนี้หนูจะทำตารางรับสินค้าขึ้นมาอันหนึ่ง แล้วกรอกข้อมูลผ่านฟอร์ม เป็นข้อมูลที่ยังไม่ได้รวมค่ะ แล้วหนูก็สร้างคิวรี่ขึ้นมาให้โปรแกรม Sum ให้ หลังจากนั้นหนูก็ปริ้นข้อมูลที่รวมแล้วออกมา นำไปกรอกในตารางหลัก ที่มีกลุ่มสินค้า,ประเภทสินค้า,ระหัสสินค้า ,จำนวน ซึ่งดูแล้งยุ่งยากค่ะ สิ่งที่หนูต้องการคือ

1. กรอกสินค้าที่ตารางรับสินค้า แล้วให้ตารางหลักอัฟเดทข้อมูลจากคิวรี่รวมสินค้าโดยอัตโมมัติค่ะ

2.อาจารย์ค่ะ พอจะมีวิธีที่จะแก้ไข สินค้าคงคลัง [Stock Limit]ผ่านฟอร์ม หรือตาราง หรือเปล่าค่ะ เพราะบางครั้งหนูหยุด แล้วให้น้องๆที่บริษัททำแทนถ้าให้ไปแก้ที่โมดูล อาจไปลบข้อมูลในโมดูลบางส่วนทิ้ง (ด้วยความที่ไม่เข้าใจ พลาด) อาจทำให้โปรแกรมมีปัญหาได้ค่ะ

   รบกวนอารย์ด้วยนะค่ะ และขอขอบพระคุณอาจารย์ล่วงหน้าค่ะ


                                                                หนูพร
19 @R08312
ใช้คิวรี่ซิครับ
มีวิซาร์ดช่วยสร้างครับ
แบบอัพเดตข้อมูลครับ (action query)

ลองทำดูครับ
สำรองข้อมูลเก่าไว้ก่อน หรือคัดลอกฐานข้อมูลมาลองทำลองเล่นดูครับ
ทำด้วยตัวเอง ค้นพบวิธีทำด้วยตัวเอง จะทำให้จำได้แม่นครับ

เพราะงานนี้มันไม่ยาก และไม่ซับซ้อนนัก จึงอยากให้ลองทำเองครับ

- สร้างคิวรี่เลือกข้อมูลที่ต้องการจากตารางต้นทาง (อาจจะมีการ sum ด้วยก็ได้)
- เลือกเปลี่ยนชนิดคิวรี่เป็น "ปรับปรุงข้อมูล"
- เลือกชื่อตารางปลายทางที่จะเอาข้อมูลไปใส่
- ตรวจสอบการจับคู่ของฟิลด์ต้นทาง และปลายทาง ดูชนิดข้อมูลตรงกันหรือไม่
- สั่งเซฟ หรือสั่งรัน คิวรี่
20 @R08323
   อาจารย์ค่ะหนูลองทำแล้วไม่สำเร็จค่ะ ปัญหาของหนูคือ

1.การสร้างคิวรี่เลือกข้อมูลแบบ อัฟเดทข้อมูล [action query] หนูหาไม่เจอค่ะหนูก็เลยสร้างแบบธรรมดา (เป็นคิวรี่ผลรวมของสินค้าแต่ละชนิดค่ะ) แล้วคลิกขวา ในมุมมองออกแบบแล้วเปลี่ยนเป็น update query แทน ( ตารางต้นทางของหนูคือตารางรับสินค้าค่ะ จะมีเฉพาะ prod_code และ prod_stock )
2.จะเลือกตารางปลายทางตรงไหนค่ะ หนู งง พอเปลี่ยนรูปแบบคิวรี่แล้ว มันก็จะปิดไปเองเลยค่ะ
3.ขั้นตอนตรวจสอบการจับคู่ก็ไม่รู้ว่าจอเข้าที่ตรงไหนค่ะ พยายามหาแล้วก็ไม่เจอค่ะ

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