การคำนวณโดยการวนลูป

   
มีปัญหาเกี่ยวกับการคำนวณราคาต่อหน่วยกรณีมีส่วนลด คือ
1. ข้างล่างคือคำสั่งในการคำนวณราคาต่อหน่วย กรณียังไม่มีส่วนลดใน method unload ของฟอร์ม po ดังนี้
sele po_dtl &ตารางรายเอียดสินค้าที่สั่งซื้อ โดยจะอยู่ในรูปกริด
go top
do while .not. eof()
store codepro to ugoodsid &รหัสสินค้า
store qty_po to uquantity & ปริมาณที่สั่ง
store pricebuy to upricebuy &ราคาซื้อต่อหน่วย
store po_dtl.po_no to upo_no
sele product &ตารางข้อมูลสินค้า
seek ugoodsid
if found()
replace product.costtotal with product.costtotal+ (uquantity*upricebuy) &costotalคือราคาต่อหน่วยในตารางproduct จะดึงราคาเก่ามาคำนวณใหม่ทุกครั้งที่มีการซื้อแต่ละครั้งและเมื่อคำนวณเสร็จก็จะส่งกลับคืนไปที่ตารางprocuct
endif
sele po_dtl
skip
enddo
2. คำสั่งข้างบนจะทำงานในฟอร์ม po เมื่อตอน unload ฟอร์ม โดยฟอร์มนี้จะมีส่วนที่ไว้เก็บข้อมูลส่วนหัวของการสั่งซื้อ โดยส่งไปที่ตาราง po_head ซึ่งฟิลด์ส่วนลดจะอยู่ในตารางนี้ด้วย และส่วนที่เก็บรายละเอียดการสั่งซื้อจะเป็นกริด ซึ่งจะส่งไปที่ตาราง po_dtl
3.ทั้งสองตารางที่กล่าวมามีการเชื่อมความสัมพันธ์แล้ว รวมทั้งตารางสินค้าด้วย โดยตาราง po_headจะเชื่อมกับตาราง po_dtl ที่ฟิลด์ po_no และตาราง product จะเชื่อมกับตาราง po_dtlที่ฟิลด์ codepro
4. มีปัญหาคือ การคำนวณราคาต่อหน่วย กรณีมีส่วนลดทั้งpo ต้องใช้คำสั่งอะไรเพิ่มเติมจากคำสั่งเดิมคะ ช่วยด้วยนะคะ
เอ็ม
19 ก.ค. 46 เวลา 20:23:25 น. --> 203.156.26.134,
   
   
ส่วนลดที่กล่าวมา จะลดทุก รายการสินค้า หรือเป็นส่วนลดโดยคิดจาก PO ทั้งใบครับ
auiy
21 ก.ค. 46 เวลา 17:48:30 น. --> 203.144.216.250
  
   
เป็นส่วนลดของ po ทั้งใบคะ ช่วยตอบด้วยนะคะ ขอบคุณล่วงหน้าคะ
เจ้าของกระทู้
21 ก.ค. 46 เวลา 19:49:07 น. --> 203.156.27.155,
  
   
ตอนนี้กำลังเครียดมาก พยายามตั้งกระทู้มาหลายครั้งแล้วแต่ไม่มีใครตอบ หาคำตอบไม่ได้
จะไปหาซื้อหนังสือก็มีแล้ว ไม่มีเล่มไหนตอบได้เลย ไม่ค่อยมีหนังสือ มีแต่ระดับเบื้องต้นไม่ลงลึก
การจะศึกษา foxpro ลำบากมาก หาตำราก็ยาก หรือว่าคนไม่ค่อยใช้กันแล้ว
ตอนนี้กำลังตัดสินใจว่าจะหันลองมาใช้ vb ดีหรือเปล่า เพราะตอนนี้กำลังตัน ก็เลยต้องหยุดอยู่แค่นี้
รอแค่ความหวังสุดท้ายว่ามีใครจะช่วยตอบได้บ้าง

เจ้าของกระทู้
21 ก.ค. 46 เวลา 20:16:55 น. --> 203.156.27.155,
  
   
คุณเอ็มครับ
ปัญหาไม่ได้อยู่ที่ว่าคุณจะใช้ foxpro หรือ vb เขียนโปรแกรม
ปัญหาคือ คุณเองทราบหรือไม่ว่าคุณจะคำนวณอย่างไร ใช้สมการอย่างไร

ที่ไม่มีใครตอบให้เพราะไม่มีใครเข้าใจว่าคุณกำลังจะทำอะไรครับ

อย่างที่คุณเอาสุ่มตอบเอาไว้ในกระทู้ที่แล้วว่า ถ้าคุณรู้สมการ คุณก็น่าจะทำได้เองไม่ต้องมาถามใคร

คุณพยายามยืนยันว่า CostTotal คือราคาต่อหน่วยโดยไม่ให้เหตุผลหรือคำอธิบายประกอบ ผมก็อยากจะถามกลับไปเหมือนกันว่า คุณเข้าใจหรือไม่ว่า ราคาต่อหน่วยคืออะไร และอีก 1 คำถามคือ คุณเขียนโปรแกรมเป็นหรือไม่

ถ้าจะให้แค่ตอบคำถามว่า จะต้องใช้คำสั่งอะไรเพิ่มเติม ผมก็จะช่วยตอบให้นะครับ

จากเดิม
if found()
replace product.costtotal with product.costtotal+ (uquantity*upricebuy)
endif

ให้แทนด้วย
if found()
ส่วนลดของ product = ??? <--- ตรงนี้คุณต้องหาสมการมาคำนวณส่วนลดเอาเอง
replace product.costtotal with product.costtotal+ (uquantity*upricebuy) - ส่วนลดของ product
endif
จิ้งจอกหลงประเด็น
21 ก.ค. 46 เวลา 22:14:17 น. --> 203.121.130.33,
  
   
ไม่ทราบว่าผมเข้าใจคำถามถูกรึเปล่านะครับ ผมคิดว่าคุณเอ็มคงอยากจะทราบว่าราคาต่อหน่วยของแต่ละรายการเป็นเท่าไหร่ในกรณีที่มีส่วนลดทั้ง PO เพราะว่าถ้ามีส่วนลดในรายการ คุณเอ็มก็เอาส่วนลดในรายการมาหักลบได้เลย แต่ถ้ามีส่วนลดทั้งหมด คุณเอ็มคงต้องหาว่าส่วนลดที่ได้เป็นกี่เปอร์เซ็นต์นะครับ แล้วเอามาคำนวณส่วนลดในแต่ละรายการครับ เช่น
ยอดเงินทั้งหมดในใบสั่งซื้อเท่ากับ 10,000 บาท
ส่วนลดคือ 1,000 ก็เท่ากับ 10% ใช่มั้ยครับ
ก็เอา 10% ไปหาส่วนลดในรายการสินค้าแต่ละตัวครับ แล้วเอาส่วนลดที่คำนวณได้ไปหาราคาต่อหน่วยครับ
แต่เท่าที่ดูจากสูตรที่คำนวณ "product.costtotal+ (uquantity*upricebuy)" ไม่น่าใช่ราคาต่อหน่วยเลยนะครับ ยังงี้เหมือนกับยอดเงินที่สั่งซื้อมาทั้งหมดมากกว่านะครับ เพราะเอา จำนวนที่สั่ง*ราคาต่อหน่วย ก็เป็นยอดเงินที่สั่งซื้อครั้งนี้ แล้วไป + เก็บไว้กับยอดเดิม
ถ้ายังไม่ใช่อย่างที่ผมเข้าใจก็อธิบายคำถามเพิ่มอีกหน่อยนะครับ ใจเย็น ๆ นะ สู้ต่ออีกหน่อยอย่าพึ่งท้อครับ
Neo
22 ก.ค. 46 เวลา 3:40:39 น. --> 202.29.46.122,
  
   
>ตอนนี้กำลังเครียดมาก พยายามตั้งกระทู้มาหลายครั้งแล้วแต่ไม่มีใครตอบ หาคำตอบไม่ได้
หลายคนอาจจะอ่านแล้วผ่าน เพราะคำถามไม่ชัดเจนก็เป็นได้ หรือ.... อีกหลายสาเหตุ

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

>การจะศึกษา foxpro ลำบากมาก หาตำราก็ยาก หรือว่าคนไม่ค่อยใช้กันแล้ว
ยังมีคนใช้กันมากทั้งในไทยและต่างประเทศครับ ตำรา vfp ดีๆก็มี แต่คงต้องสั่งซื้อจากต่างประเทศหรือจาก amazon.com ครับ

>ตอนนี้กำลังตัดสินใจว่าจะหันลองมาใช้ vb ดีหรือเปล่า เพราะตอนนี้กำลังตัน ก็เลยต้องหยุดอยู่แค่นี้
จะใช้อะไรก็คงได้ทั้งนั้นแหละครับ delphi vc++ borland c++ vb แต่หลักการเขียนโปรแกรมของคุณยังไม่ค่อยจะดี ทำให้เกิดความท้อแท้ ลองตั้งต้นดูใหม่

>รอแค่ความหวังสุดท้ายว่ามีใครจะช่วยตอบได้บ้าง
เพื่อนๆ ในนี้ ช่วยแนะนำให้ได้ แต่โจทย์คุณควรชัดเจน code ที่คุณให้มานั้น มันแปลกๆนะครับ

หากจะเมล์มาปรึกษากัน ก็เมล์มาที่ knight2000@mweb.co.th ครับ จะแนะนำหลักการให้ก่อน
knight2000
22 ก.ค. 46 เวลา 4:10:31 น. --> 203.107.149.197
  
   
เรียน คุณเอ็ม
error ของการเขียนโปรแกรมมี 3 ประเภท คือ
1. syntax error คือการพิมพ์คำสั่งผิด อันนี้แก้ไขง่ายเพราะตัวแปลภาษาจะเป็นตัวตรวจสอบตอนคอมไพล์
2. runtime error คือความผิดพลาดตอนทำงาน เช่น สั่งให้ copy ข้อมูลลงไดร์ฟ A แล้วไม่ได้ใส่แผ่นในไดร์ฟ อันนี้แก้ยากขึ้นมาหน่อยเพราะต้องรู้ว่าตอนทำงานโปรแกรมติดต่อหรือจัดการกับอะไรบ้าง
3. logical error คือการแปลตรรกะผิดพลาด หรือพูดภาษาชาวบ้านก็คือ ตีโจทย์ไม่ออก เช่น จะเอา 3+2 ก่อนแล้วจึงคูณด้วย 4 แต่พิมพ์เป็น 3+2*4 ถ้าพิมพ์อย่างนี้จะเป็น 2*4 ก่อนแล้วบวกด้วย 3 อันนี้เป็น error ที่แก้ยากที่สุด เพราะแม้แต่คนเขียนเองก็ไม่รู้เพราะหลงประเด็น
จากที่อ่านปัญหาของคุณเอ็มมา คิดว่าอาจจะเป็น logical error ยังไงขอโจทย์ที่ชัดเจนขึ้นอีกหน่อยนะครับ ผมก็อยากจะช่วยเหมือนเพื่อนสมาชิกคนอื่น ๆ นั่นแหล่ะ แต่ว่าอ่านแล้วไม่เข้าใจก็เลยไม่รู้จะช่วยอย่างไรครับ
ผ่านมาหมวกขาว
22 ก.ค. 46 เวลา 8:51:05 น. --> 203.151.89.11,
  
   
ขอแจมต่อจากเพื่อนๆสมาชิกอีกนิดครับ..
- จากปัญหาที่คุณถาม ผมคาดคะเนว่าน่าจะเป็นส่วนหนึ่งของระบบจัดซื้อ(ความเป็นไปได้นะครับ..แต่ผมอาจจะเดาผิดก็ได้ ) แต่ตัวปัญหายังขาดรายละเอียดเนื่องจากระบบจัดซื้อ (หรือระบบอื่นๆไม่ว่าจะเป็นระบบใดๆก็ตาม ) ของกิจการแต่ละแบบก็จะมีความแตกต่างกันออกไปถึงแม้นจะเป็นกิจการประเภทเดียวกันก็ตามก็ย่อมต้องมีความแตกต่างกันในหลายๆด้านๆ เช่น ทางด้านนโยบายการบริหารจัดการ,ระเบียบ/วิธีการ/ขั้นตอน ในการทำงาน ฯลฯ ... สาเหตุที่เพื่อนๆสมาชิกไม่สามารถช่วยตอบคำถามให้คุณได้เนื่องจากไม่เข้าใจระบบงานของคุณได้ดีพอว่าเป็นระบบการจัดซื้อของกิจการประเภทใดๆ (โรงงานผลิต,ซื้อมาขายไป...)และมีขั้นตอนการทำงานเป็นอย่างไร ใช้วิธีการ ทางบัญชี/สินค้าคงคลังอย่างไร ????? ....เป็นระบบงานอิสระหรือ linked รวมกับระบบอื่นๆเช่นระบบบัญชี ???
ขอรายละเอียดเกี่ยวกับระบบงานเพิ่มอีกนิดนะครับ เพื่อนๆจะได้ช่วยได้ ...
เดาสุ่ม
22 ก.ค. 46 เวลา 21:17:03 น. --> 210.203.184.238
  
   
เป็นโปรแกรมสต็อก โดยคำนวณแบบถั่วเฉลี่ย ก็จะได้เป็นราคาต่อหน่วย โดยมีหลักการคำนวณคือ
-ที่ฟอร์ม po เมื่อมีการซื้อสินค้าเข้ามาก็จะบวกจำนวนสินค้าเพิ่มและคำนวณราคาต่อหน่วยแบบถั่วเฉลี่ยด้วย แล้วส่งไปที่ฟอร์ม product (ข้อมูลสินค้า) ก็จะได้เป็นยอดสินค้าคงเหลือ และราคาต่อหน่วย
- จริงๆ ปัญหาหลัก คือ นำส่วนลดทั้ง po ไปหักเป็นส่วนลดแต่ละตัวแล้วคำนวณเฉลี่ยเป็นราคาต่อหน่วยแต่ละรายการ แล้วส่งไปที่ฟอร์ม product ไม่ได้
เจ้าของกระทู้
23 ก.ค. 46 เวลา 21:31:49 น. --> 203.156.28.195,
  
   
-ค่อยยังชั่วหน่อยครับ....พอจะจับประเด็นปัญหาได้บ้างแต่อาจยังมีความเข้าใจความคลาดเคลื่อน
เข้าใจไม่ตรงกันไปบ้างเนื่องมาจากคำศัพท์เทคนิคตามหลักการบัญชี :-(

(ถ้าผมตั้งสมมุติฐานคลาดเคลื่อนไปจากความเป็นจริงของระบบที่คุณกำลังทำอยู่ช่วยบอกด้วยนะครับ)

ผมตั้งสมมุติฐานว่าระบบสินค้าคงเหลือ/สินค้าคงคลัง ( Inventory ) ระบบนี้
- มีการบันทึกบัญชีตามระบบสินค้าแบบต่อเนื่อง( Prepetual Inventory System)
- ใช้วิธีตีราคาสินค้าคงเหลือตามราคาทุนด้วยวิธีถัวเฉลี่ยแบบ Moving-average Method (วิธีถัวเฉลี่ยเคลื่อนที่)

ปัญหาของคุณคือ....
"ปัญหาหลัก คือ นำส่วนลดทั้ง po ไปหักเป็นส่วนลดแต่ละตัวแล้วคำนวณเฉลี่ยเป็นราคาต่อหน่วยแต่ละรายการ แล้วส่งไปที่ฟอร์ม product ไม่ได้"

-คำตอบ
ถ้ามีการซื้อสินค้าหลายชนิดในใบกำกับภาษี 1 ใบ แล้ว "ส่วนลดรับ" ที่เกิดขึ้น จะไม่สามารถนำไปใช้ในการคำนวณ
ปรับลดต้นทุนของสินค้าได้ครับ (ถ้าจำไม่ผิดจะนำไปบันทึกในบัญชีคุมสินค้าแทนมั้ง... แต่ไม่แน่ใจนะครับว่าบัญชีอะไร
แน่ต้องลองถามเพื่อนที่เป็นนักบัญชีดู หรือถามเพื่อนที่กำลังเขียนระบบ Inventory อยู่เพราะจะแม่นในเรื่องระบบ
และศัพท์เทคนิคทางบัญชีครับ )



****************************************************************************************************
หมายเหตุ:
**************************************วิธีถัวเฉลี่ย มี 3แบบ*********************************************
1) วิธีถัวเฉลี่ยแบบง่าย (Simple-average Method) ใช้กับกิจการที่บันทึกบัญชีสินค้าคงเหลือเมื่อสิ้นงวด
(Periodic Invetory System)
2) วิธีถัวเฉลี่ยแบบถ่วงนำหนัก(Weighted-average Method) ใช้กับกิจการที่บันทึกบัญชีสินค้าคงเหลือเมื่อสิ้นงวด
3) วิธีถัวเฉลี่ยเคลื่อนที่(Moving-average Method) ใช้กับกิจการที่บันทึกบัญชีสินค้าคงเหลือที่บันทึกบัญชี
ตามระบบสินค้าแบบต่อเนื่อง วิธีนี้ต้องมีการคำนวณต้นทุนถัวเฉลี่ยสำหรับสินค้าที่มีเพื่อขายทุกครั้งที่มีการซื้อสินค้า

“ส่วนลดรับ” จัดอยู่ในหมวด “ค่าใช้จ่าย ” เนื่องจากกิจการจะไม่ถือว่า ส่วนลดที่ได้นั้น เป็นรายได้
แต่จะถือว่าเป็นจำนวนที่ทำให้ต้นทุนค่าสินค้าลดต่ำลง ดังนั้น การบันทึกบัญชีจึงเป็นดังนี้ :
Dr. เจ้าหนี้ XX
Cr. เงินสด XX
สินค้า (ส่วนลดรับ) XX
เดาสุ่ม
24 ก.ค. 46 เวลา 20:14:47 น. --> 203.148.252.247
  
   
ใช้วิธีคำนวณ "แบบถัวเฉลี่ยเคลื่อนที่(Moving-average Method) ใช้กับกิจการที่บันทึกบัญชีสินค้าคงเหลือที่บันทึกบัญชีตามระบบสินค้าแบบต่อเนื่อง วิธีนี้ต้องมีการคำนวณต้นทุนถัวเฉลี่ยสำหรับสินค้าที่มีเพื่อขายทุกครั้งที่มีการซื้อสินค้า"
- คือดูตัวอย่างจากโปรแกรม express คะ คือเขาจะนำราคาซื้อแต่ละตัวมาหักจากส่วนลดรวม โดยหักเป็นสัดส่วน แล้วคำนวณถั่วเฉลี่ย แล้วส่งราคาต่อหน่วยที่คำนวณได้ส่งไปที่ตาราง product คะ

เจ้าของกระทู้
25 ก.ค. 46 เวลา 18:14:39 น. --> 203.156.27.193,
  
   
“การนำราคาซื้อแต่ละตัวมาหักจากส่วนลดรวม โดยหักเป็นสัดส่วน “
ขอบคุณครับ ได้ Idea ดีๆ จากระบบบัญชี Express ที่คุณเอ็มนำมาตั้งเป็นกระทู้เพิ่มขึ้น เมื่อก่อนตอน
ผมทำระบบ Invetory มีแต่นักบัญชีรุ่นกระเตาะของบริษัทเล็กๆที่เพิ่งเปิดกิจการใหม่ๆ คอยช่วยอธิบาย
ระบบบัญชี หาตำราอ่านเองก็ค่อนข้างยากก็เลยไม่ค่อยได้ Idea เท่าไหร่ ตัวผมเองในขณะนั้นก็ยังหัดเดิน
เตาะแตะในการเขียนโปรแกรม (ตอนนี้ก็ยังต้วมเตี้ยม ..) ผมเลยตัดสินใจเลือกใช้วิธีที่ การลงบัญชีส่วนลดรับ
โดย แสดงเป็นยอดหักจากบัญชีต้นทุนสินค้าขายใน” งบกำไรขาดทุน” แทนครับ
( ระบบบัญชี EASY-ACC ของ Business Soft ที่ผมเคยเห็นรุ่นสุดท้ายยังไม่สามารบันทึกส่นลดรับแบบนี้ได้ครับ )

ถ้าผมเข้าใจไม่ผิดเจ้า Table Product ของคุณคงเป็น “บัญชีแยกประเภทย่อยสินค้า” …
ถ้าคุณ Design Tables ได้ดีพอ ก็คงจะไม่มีปัญหาครับสามารถทำแบบ Express ได้เช่นกัน…

อ้อคุณควรทบทวนความเข้าใจ การบัญชีสำหรับกิจการซื้อขายสินค้า-ระบบต่อเนื่อง อีกสักหน่อยครับลอง
อ่านเอกสารเดียวกับที่ผมมีอยู่แล้วกันครับจะได้ใช้คำศัพท์เทคนิคและมีความเข้าใจที่ตรงกัน
ถ้าติดขัดก็มา โพสต์ถามใหม่แล้วกันครับ (อ้อ..ไม่ควรระบุชื่อผู้ตอบกระทู้นะครับ หัวข้อกระทู้เป็น
“Prepetual Inventory System “ ก็เข้าใจง่ายดีครับ หรือ e-mail : offline102@hotmail.com ครับ

เอกสาร: http://www.uni.net.th/~10_2543/chap.html (เลือกดูบทที่ 9 นะครับ Download PDF มาก็ได้ )
เดาสุ่ม
25 ก.ค. 46 เวลา 21:02:45 น. --> 203.148.252.247
  
   
ขอบคุณคะคุณเดาสุ่ม สำหรับคำปรึกษา จะลองเข้าไปดูคะ
เจ้าของกระทู้
26 ก.ค. 46 เวลา 14:54:48 น. --> 203.156.28.207,
  
ขอเชิญร่วมตอบคำถามครับ
 
ผู้ตอบ :
รหัสผ่าน :
รูปภาพ :
คำตอบ :