... เรียนอาจารย์สุภาพ ครับ สืบเนื่องจากกระทู้ 1042 คือ วิธีที่อาจารย์บอกมันไม่ได้อ่ะครับ ช่วยดูที ..
กระทู้เก่าบอร์ด อ.สุภาพ ไชยา

 299   3
URL.หัวข้อ / URL
... เรียนอาจารย์สุภาพ ครับ สืบเนื่องจากกระทู้ 1042 คือ วิธีที่อาจารย์บอกมันไม่ได้อ่ะครับ ช่วยดูที ..

คือ ต้องคำนวนราคาต้นทุนแบบ Lifo น่ะครับ เลยต้องมีการใช้ตัวแปรและวนลูป (คล้ายFIFO ที่เป็นตัวอย่างของอาจาร น่ะ ) แล้วจะแก้ยังไงต่อดีครับ เออ แล้วที่อาจารย์บอกให้คำนวณ ใน Query จะทำยังไงครับ เพราะมันมีการใช้ตัวแปรและวนลูป

เออ แล้วมีคนแนะนำให้ลองไปเขียน Function แล้ว มาใช้ใน recordsource ของรายงานน่ะครับ
มันต้องเขียนยังไงเหรอ แล้วคล้ายๆ กับของเดิมหรือปล่าว

อาจาย์ช่วยแนะนำที ครับ

ขอบคุณมากครับ

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

1 @R02347
ผมยังไม่ค่อยเข้าใจตรงที่ว่า ใช้ตัวแปร และการวนลูป ครับ

ช่วยยกตัวอย่างให้ดูสักรายการ ว่ามีการเก็บค่าต่างๆ ในตารางอย่างไร และผลลัพธ์ที่ต้องการเป็นอย่างไร

ถ้ามีตัวอย่างจริงก็จะเข้าใจปัญหาได้ง่ายขึ้นครับ ไม่ต้องเอาข้อมูลมาก แค่ 2-3 ข้อมูลก็พอ และให้เอาเฉพาะส่วนที่เกี่ยวข้องเท่านั้น ไม่ต้องเอาส่วนอื่นๆ มาด้วย

จากนั้นช่วย Compact แล้ว Zip แนบมาในกระทู้นี้ได้เลยครับ
2 @R02348
ok ครับ ผมจะอธิบาย code ที่อยู่ใน report นะ(หลักๆ เลย)
ตาราง Buy คือตารางรายการสั่งซื้อ ตาราง Merchandise คือตารางรายการสินค้า

Private Sub Report_Activate()
Dim MerAmount As Long
Dim rst2 As DAO.Recordset

Set dbs = CurrentDb()
Set rst = dbs.OpenRecordset("select mer_amount from merchandise where mer_id = '" & Me.MER_ID & "'")
' ตรงส่วนนี้ก็เข้าไปดูจำนวนสินค้าคงเหลือที่มีอยู่ใน stock โดยดูตามรหัสสินค้า

Set rst2 = dbs.OpenRecordset("select buy_amount , buy_unitprice from buy where mer_id = '" & Me.MER_ID & "' order by buy_date desc")
' ตรงส่วนนี้เข้าไปดู จำนวนสินค้าที่ซื้อเข้ามา กับ ราคาต่อหน่วยที่ซื้อเข้ามา โดยดูตามรหัส และตามวันที่หลังสุด (ตามหลัก Lifo )

If Not rst.EOF And Not rst2.EOF Then

MerAmount = rst!MER_AMOUNT ' ถ้ามีข้อมูลตรง ก็จะให้ตัวแปร MerAmount เท่ากับ จำนวนสินค้าคงเหลือ(ที่อยู่ในตาราง Merchandise น่ะ)

TotalPrice = 0
If rst2!BUY_AMOUNT < MerAmount Then ' ถ้า เรคอดนั้น จำนวนสินค้าซื้อเข้าในตาราง buy มีน้อยกว่า จำนวนสินค้าคงเหลือในตาราง merchandise ก็จะให้ทำการวนลูป

Do
TotalPrice = TotalPrice + (rst2!BUY_AMOUNT * rst2!BUY_UNITPRICE) ' (ตัวแปร totalpriceผมกำหนดไว้ที่ Module นะ) TotalPrice คือตัวแปรที่จะรวมราคาต้นทุนจากสินค้าคงเหลือของสินค้านั้นๆ และบรรทัดนี้คือ เมื่อเงื่อนไข ข้างต้นเป็นจริง(ก่อน Do น่ะ) ก็จะให้นำ จำนวนสินค้าที่ซื้อเข้ามา * ราคาต่อหน่วยที่ซื้อเข้ามา จากตาราง buy

MerAmount = MerAmount - rst2!BUY_AMOUNT ' ในการซือ้สินค้าเข้ามาแต่ละครั้ง ถึงเป็นสินค้าชนิดเดียวกันแต่บางครั้งอาจซื้อเข้าในราคาต่อหน่วยไม่เท่ากัน และถ้าในการซื้อสินค้าเข้ามารอบนั้นยังมีจำนวนไม่ครบกับสินค้าคงเหลือที่มีอยู่ จึงต้องทำการไล่เรคอดไปเรื่อยๆ จนครบ (ไล่ตามวันที่หลังสุดก่อนและย้อนขึ้นไป ตามหลัก Lifo ) และก็คำนวณราคาซื้อเข้าต่อหน่วย ของแต่ละรอบไปด้วย และบรรทัดนี้คือ ก็จะทำการหักลบจำนวนสินค้าที่ซื้อเข้ามาในรอบนั้น ออกจากจำนวนสินค้าคงเหลือ (ก็จะทำการหักลบไปเรื่อยๆ จนจำนวนที่ซื้อเข้าในรอบนั้นๆ มีค่าเท่ากับหรือมากกว่า จำนวนสินค้าคงเหลือ หรือ หักลบไปเรื่อยๆ จนกว่า MerAmount หรือสินค้าคงเหลือมีค่าเป็น 0 คือไม่ต้องทำการคำนวณหาราคาต้นทุนอีกต่อไป )

rst2.MoveNext ' ดูเรคอดต่อไปอีกว่ายังเป็นตามเงื่อนไขหรือป่าว

If rst2!BUY_AMOUNT >= MerAmount Then GoTo jaja
' ถ้าจำนวนสินค้าที่ซือ้เข้ามาในรอบนั้นๆ มีค่ามากกว่หรือเท่ากับจำนวนสินค้าคงเหลือแล้วให้ทำการ เอาจำนวนสินค้าที่ซื้อเข้ามารอบนั้นๆ * ราคาซื้อเข้าต่อหน่วยได้เลย ดังนั้นบรรทัดนี้จึงข้ามไปที่ ส่วน jaja
Loop

Text20 = TotalPrice ' กำหนดให้ text20 ที่อยู่ใน report (ตรงส่วน detail) แสดงค่าเป็นจำนวนเงินต้นทุนจากสินค้าคงเหลือทั้งหมดของสินค้านั้นๆ

jaja:
TotalPrice = TotalPrice + (rst2!BUY_AMOUNT * rst2!BUY_UNITPRICE)
Text20 = TotalPrice ' ตรงส่วนนี้ก็ถ้าการซื้อสินค้ารอบไหน จำนวนสินค้าที่ซือ้เข้ามีค่ามากกว่าหรือเท่ากับจำนวนสินค้าคงเหลือ ก็ให้ทำการคูณปกติ ได้เลย

End If
End If
End Sub

คือสรุปแล้วต้องการคำนวณหาจำนวนเงินต้นทุนจากสินค้าคงเหลือทั้งหมด ของสินค้านั้นๆ น่ะครับ โดยคำนวนตอนเปิด report (ไม่มีการแก้ไขหรอืลบอะไรทั้งสิ้นในตาราง แค่เข้าไปดูและดึงมาคำนวณ) พอได้ผลลัพแล้วก็นำมาแสดงบน text20 ใน report ส่วน detail เท่านั้นเอง
ปัญหาคือ คำนวณได้แล้ว แต่พอแสดงบน report มันดันแสดงเหมือนเรคอดแรกสุดหมดเลยอ่ะครับ ต้องการให้มันแสดงผลลัพของเรคอดใคร ของมัน

-----------------------
รบกวนให้อาจาร ช่วยดูอีกทีนะครับ ทำมาตั้งนานแล้ว และใกล้ถึงวันส่งงานแล้ว
ขอบคุณมากครับ
3 @R02349
ลองดูที่ผมแก้ไขให้ครับ

โดยผมเปลี่ยน Record Source ของ Report ให้เป็น Query1 ครับ

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