ต้องการให้กระจายสินค้าตามสูตรทำยังไงครับ
กระทู้เก่าบอร์ด อ.สุภาพ ไชยา

 264   8
URL.หัวข้อ / URL
ต้องการให้กระจายสินค้าตามสูตรทำยังไงครับ

รับข้อมูล สินค้า a ,b,c,d มาอย่างละ 50 ตัว จาก form เก็บลง table แล้ว ต้องการกระจายสินค้าที่รับมา (a,b,c,d อย่างละ 50 ตัว) ให้ร้าน 1 ,2,3,4,5,6,7,8,9,10  
โดยมีสูตรว่า  
โซนร้าน 1-4 ได้ร้านละ a =2 b=2 c=2 d=2 ตัว (คือร้าน 1 ได้ทั้งสิ้น 8 ตัวคือ a=2+b=2+c=2+d=2 / ร้าน 2 ก็ได้ทั้งสิ้น 8 ตัวคือ a=2+b=2+c=2+d=2 รวมทั้งโซน เอาไป 32 ตัว)  
โซนร้าน 5-7 ได้ a =2 b=2 c=1d=1 ตัว  
โซนร้าน ที่เหลือ ได้ a =1 b=1 c=1 d=1 ตัว  
กรณีสินค้าไม่พอ ตัดร้านที่อยู่ท้ายๆทิ้งไปคือไม่ได้รับ  
โดยอยากให้จำนวนตัว เป็นตัวแปร เผื่อวันหลังอยากเปลี่ยนสูตรการกระจาย จะได้ใส่ผ่าน form สูตร เลย  
 
กราบขอบพระคุณทุกท่านมากครับ ผมงงๆมากทำไม่ได้

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

1 @R00483
เมื่ออ่านโจทย์ แล้ว ผมเดาว่าจะต้องมีการใช้การวนลูป ใช้ Select Case, และ If ... Else ... Then เข้าช่วย รวมถึง Array() ด้วย ตอนนี้ผมยกตัวอย่างแค่สินค้าตัวเดียวก่อนนะครับ ได้ตัวอย่างโค้ดดังนี้ Function ShowArray(intI As Integer) ShowArray = "ร้าน " & intI & " ได้ = " End Function Function ShowAmount(intQTY As Integer) Dim I As Integer, J As Integer, K As Integer Dim strString As String K = 0 For I = 1 To 10 Select Case I Case Is < 5 If intQTY > 2 Then intQTY = intQTY - 2 K = 2 Else K = intQTY intQTY = 0 End If strString = strString & ShowArray(I) & K & vbCrLf Case Is < 8 If intQTY > 2 Then intQTY = intQTY - 2 K = 2 Else K = intQTY intQTY = 0 End If strString = strString & ShowArray(I) & K & vbCrLf Case Else If intQTY > 1 Then intQTY = intQTY - 1 K = 1 Else K = intQTY intQTY = 0 strString = strString & ShowArray(I) & K & vbCrLf End If strString = strString & ShowArray(I) & K & vbCrLf End Select If intQTY = 0 Then GoTo JumpHere End If Next I JumpHere: If intQTY = 0 Then strString = strString & "ไม่เหลือแย้ว" Else strString = strString & "คงเหลือ =" & intQTY End If ShowAmount = strString End Function ลองใช้ฟังก์ชัน จะได้ผลดังนี้ ? ShowAmount(15) ร้าน 1 ได้ = 2 ร้าน 2 ได้ = 2 ร้าน 3 ได้ = 2 ร้าน 4 ได้ = 2 ร้าน 5 ได้ = 2 ร้าน 6 ได้ = 2 ร้าน 7 ได้ = 2 ร้าน 8 ได้ = 1 ร้าน 8 ได้ = 1 ไม่เหลือแย้ว ถ้าเปลี่ยนจำนวนสินค้าเป็น 50 จะได้ ? ShowAmount(50) ร้าน 1 ได้ = 2 ร้าน 2 ได้ = 2 ร้าน 3 ได้ = 2 ร้าน 4 ได้ = 2 ร้าน 5 ได้ = 2 ร้าน 6 ได้ = 2 ร้าน 7 ได้ = 2 ร้าน 8 ได้ = 1 ร้าน 9 ได้ = 1 ร้าน 10 ได้ = 1 คงเหลือ =33 คราวนี้ก็มาถึงจุดที่จะต้องปรับปรุงให้มีสินค้าหลายตัวตามที่กำหนดดูนะครับ ตอนนี้ผมต้องไปทำธุระด่วน เดี๋ยวผมจะมาดูส่วนที่เหลือให้ ผมว่าเห็นแนวทาง แล้วลองพัฒนาต่อ มันท้าทายดีครับ หรือใครมีวิธีคิดที่ง่ายกว่านี้ ก็เชิญชี้แนะครับ ขอบคุณสำหรับอาหารสมองเช้านี้ครับ
2 @R00484
และนี่คือตัวอย่างการใช้ Array() ช่วยในการพัฒนาต่อครับ Function GetShow(intNo As Integer) Dim I As Integer, J As Integer Dim Shop As Variant, B As Variant B = Array("Shop A", "Shop B", "Shop C", "Shop D") Shop = B(intNo) GetShow = Shop End Function การใช้งานจะเป็นอย่างนี้ ? GetShow(0) Shop A
3 @R00485
Function GetItems(intNo As Integer) Dim I As Integer Dim Item As String, B As Variant B = Array("Item A", "Item B", "Item C", "Item D") Item = B(intNo) GetItems = Item End Function ? Getitems(0) Item A
4 @R00488
ผมอ่าน ของอ.สุภาพ แล้วงง มากครับ ผมส่ง file ไปให้ดูได้ไหมครับ แล้วอ.ทำไป Guide lineให้หน่อย ผมเขียน code ยังไม่เป็นเท่าไรครับ
5 @R00489
ส่งมาได้เลยครับ แต่อย่าลืม Zip ก่อนส่งนะครับ
6 @R00498
ตัวเต็มมาแล้วครับ โค้ดที่ผมแก้ไขและเพิ่มเติมเข้าไปมีดังนี้ Function ShowAmount(intQTY As Integer, intItem As Integer) As String Dim I As Integer, J As Integer, K As Integer Dim strString As String K = 0 strString = "" ' แสดงชื่อสินค้า เช่น สินค้า A โดยดูจากค่า intItem ที่ได้รับมา strString = strString & GetItems(intItem - 1) & vbCrLf ' วนตั้งแต่ร้าน 1 - 10 For I = 1 To 10 ' หาค่าจำนวนสินค้าที่แต่ละร้านจะได้ ' โดยหาจากฟังก์ชัน MyAmount จากตัวแปรที่ได้รับ ' เพื่อนำไปหักออกจากจำนวนสินค้า (intQTY) J = MyAmount(I, intItem) ' เลือกว่าร้านไหน Select Case I Case Is < 5 If intQTY > J Then intQTY = intQTY - J K = J Else K = intQTY intQTY = 0 End If strString = strString & ShowArray(I) & K & vbCrLf Case Is < 8 If intQTY > J Then intQTY = intQTY - J K = J Else K = intQTY intQTY = 0 End If strString = strString & ShowArray(I) & K & vbCrLf Case Else If intQTY > J Then intQTY = intQTY - J K = J Else K = intQTY intQTY = 0 strString = strString & ShowArray(I) & K & vbCrLf End If strString = strString & ShowArray(I) & K & vbCrLf End Select ' ตรวจดูว่าจำนวนสินค้าหมดหรือยัง ' ถ้าหมดแล้ว ให้ออกจากการวนลูป ไปยังบันทัด JumpHere If intQTY = 0 Then GoTo JumpHere End If Next I JumpHere: If intQTY = 0 Then ' ถ้าจำนวนสินค้าไม่เหลือ strString = strString & "ไม่เหลือแย้ว" Else ' ถ้าจำนวนสินค้ายังเหลืออยู่ ให้แสดงด้วยว่าเหลือเท่าไร strString = strString & "คงเหลือ =" & intQTY End If ShowAmount = strString End Function Function GetItems(intNo As Integer) ' แสดงชื่อสินค้า โดยใช้ Array() เข้าช่วย ' ค่าเริ่มต้นของ Array = 0 ' ถ้าใส่ GetItems(0) จะได้ "สินค้า A" ' ถ้าใส่ GetItems(3) จะได้ "สินค้า D" Dim I As Integer Dim Item As String, B As Variant B = Array("สินค้า A", "สินค้า B", "สินค้า C", "สินค้า D") Item = B(intNo) GetItems = Item End Function Function MyAmount(intShop As Integer, intItem As Integer) As Integer ' ---------- สินค้า ------------ ' ร้าน A B C D ' 1-4 2 2 2 2 ' 5-7 2 2 1 1 ' 8-10 1 1 1 1 Dim I As Integer If intShop > 7 And intItem > 0 Then I = 1 ElseIf intShop > 4 And intItem > 2 Then I = 1 Else I = 2 End If MyAmount = I End Function Function ShowArray(intI As Integer) ShowArray = "ร้าน " & intI & " ได้ = " End Function ลองใช้งานดู ก็จะได้ดังนี้ครับ ? ShowAmount(15,4) สินค้า D ร้าน 1 ได้ = 2 ร้าน 2 ได้ = 2 ร้าน 3 ได้ = 2 ร้าน 4 ได้ = 2 ร้าน 5 ได้ = 1 ร้าน 6 ได้ = 1 ร้าน 7 ได้ = 1 ร้าน 8 ได้ = 1 ร้าน 9 ได้ = 1 ร้าน 10 ได้ = 1 คงเหลือ =1 ? ShowAmount(13,1) สินค้า A ร้าน 1 ได้ = 2 ร้าน 2 ได้ = 2 ร้าน 3 ได้ = 2 ร้าน 4 ได้ = 2 ร้าน 5 ได้ = 2 ร้าน 6 ได้ = 2 ร้าน 7 ได้ = 1 ไม่เหลือแย้ว
7 @R00565
ส่งไปให้ อ.สุภาพแล้วครับ กราบขอบพระคุณในความกรุณาครับ
8 @R00566
ผมได้รับ mail แล้วครับ
@ ประกาศใช้งานเว็บบอร์ดใหม่ => บอร์ดเรียนรู้ Access สำหรับคนไทย
แล้วจะใส่ลิ้งอ้างอิงมาที่โพสต์เก่านี้หรือไม่ก็ตามสะดวกครับ
Time: 0.0670s