ช่วยแนะนำการจัดตารางสรุปยอดหน่อยค่ะ
กระทู้เก่าบอร์ด อ.Yeadram

 1,428   13
URL.หัวข้อ / URL
ช่วยแนะนำการจัดตารางสรุปยอดหน่อยค่ะ

คือเรามีtable คือ 1.สินค้า(มีหลายชิ้น รับ-เบิกตลอดเวลาครั้งละหลายชิ้นต่อวัน) 2.รับเข้า 3.จ่ายออก 4.คลัง ซึ่งตัดยอดเข้าออก เชื่อมสัมพันเรียบร้อยแล้ว

ที่เราอยากได้คือ ต้องการให้แสดงผลข้อมูลของสินค้า 1 ชิ้น(สินค้าเรามีประมาณ 300 ชนิด) ที่มีการ รับเข้า จ่ายออก ประมาณว่า สินค้าชิ้นนี้ มีประวัติการเบิกเข้า จ่ายออกยังไง กี่ชิ้น วันไหน ซึ่งในตาราง ต้องมี ชื่อสินค้า รับ(จำนวน) จ่าย(จำนวน) ผู้ดำเนินการ ซึ่งส่วนตรงนี้ที่เราดึงตารางมาไม่เป็น สิ่งที่อยากได้จะประมาณข้างล่างนะคะ
ชื่อสินค้า..........AAA....................
ลำดับ          วันที่          เวลา          รับ     จ่าย     คงเหลือ          ผู้ดำเนินการ
1               22/03/60     09.30          3         3                  นายเอ
   2               22/03/60             11.25          2         1                    นายบี


ตารางเรามี

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

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

คลัง มี รหัสสินค้า ชื่อสินค้า ยอดคงเหลือ (สินค้าจะมีแค่ชื่อเดียวแล้วรวมยอดที่เหลืออยู่เลย)


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

1 @R23803
ลำดับ          วันที่          เวลา          รับ     จ่าย     คงเหลือ          ผู้ดำเนินการ
1               22/03/60     09.30        3                     3                  นายเอ
2               22/03/60     11.25                   2          1                    นายบี

ตารางประมานี้ค่ะ อันก่อนหน้า เลื่อนมากไปหน่อย
2 @R23804
1. สร้างตารางใหม่ที่มีโครงสร้างที่อยากแสดงผลขึ้นมา สมมติชื่อ StockCard
ลำดับ          วันที่          เวลา          รับ     จ่าย     คงเหลือ          ผู้ดำเนินการ
1               22/03/60     09.30        3                     3                  นายเอ
2               22/03/60     11.25                   2          1                    นายบี

2. Append รายการรับ - จ่าย ของสินค้าตัวที่ต้องการเข้าไปยังตารางในข้อ 1 ตามฟิลด์ที่ต้องการ
Docmd.RunSQL "INSERT INTO StockCard ( วันที่, รับ, ผู้ดำเนินการ ) SELECT วันที่, รับ, ผู้ดำเนินการ FROM Tableรับเข้า WHERE สินค้า = 'ABCD';"

Docmd.RunSQL "INSERT INTO StockCard ( วันที่, จ่าย, ผู้ดำเนินการ ) SELECT วันที่, จ่าย, ผู้ดำเนินการ FROM Tableจ่ายออก WHERE สินค้า = 'ABCD';"

3. ใส่ลำดับที่และปรับปรุงผลรวมคงเหลือในตาราง StockCard โดยเขียนโค้ดประมาณนี้

Private Sub Form_Open(Cancel As Integer)
Dim MyRS As Recordset, i As Long, nBalance as Long

Set MyRS = CurrentDb.OpenRecordset("SELECT StockCard.* FROM StockCard ORDER BY StockCard.วันที่")
If MyRS.RecordCount > 0 Then
    MyRS.MoveFirst
    i = 1
    nBalance = 0
    Do While Not MyRS.EOF
          If Not IsNull(MyRS!รับ) Then
               nBalance = nBalance + MyRS!รับ
          Else
               nBalance = nBalance - MyRS!จ่าย
          End If
          MyRS.Edit
          MyRS!ลำดับ = i
          MyRS!คงเหลือ = nBalance
          MyRS.Update
          i = i +1
          MyRS.MoveNext
     Loop
End If
MyRS.Close
Set MyRS = Nothing

End Sub

4. หลังจากนั้นก็เอาตาราง StockCard ไปแสดงผลตามต้องการ

3 @R23805
ขอบคุณค่ะ จะพยายามทำความเข้าใน ถ้าติดตรงไหนเดี๋ยวสอบถามอีกทีนะคะ
4 @R23806
ขอสอบถามนิดนึงค่ะ
WHERE สินค้า = 'ABCD'

อันนี้คือให้ใส่ตัวอักษร ABCD ลงไปเลบ หรือเป็นชื่อสินค้าตัวที่ต้องการ หรือเป็นชื่อสินค้าทุกตัวใส่เรียงกันคะ

แล้วถ้ามี สินค้า 300 ชนิด แล้วต้องการตารางทุกชนิดก็ทำ 300 หน้าหรือเปล่าคะ

5 @R23807
เป็นการดูสินค้าทีละตัวครับ

ถ้าจะทำหมดทุกตัวก็ Loop สินค้าไปทีละตัว รายงานยาวเหยียดเลยนะครับ
6 @R23808
ขอบคุณค่ะ
7 @R23809
ถ้าทำแบบนี้จะสามารถทำได้ไหมคะ


ลำดับ    วันที่          เวลา     รายการ     รับ     จ่าย     คงเหลือ        ผู้ดำเนินการ
1        22/03/60     09.30       AA       3                     3                  นายเอ
2        22/03/60     11.25       AA                  2          1                  นายบี
3        22/03/60     14.25       BB        4                    4                  นายโอ


แล้วไปเลือกที่หัวฟิลล์รายการเอา ว่าต้องการรายการไหน จากนั้นค่อยพิมพ์ออกมา อย่างนี้จะง่ายกว่าหรือเปล่าคะ ถ้าทำได้ช่วยแนะนำด้วยค่ะ


คือเราเป็นนักศึกษาฝึกงาน ทาง บ.ต้องการให้ทำ พอทำเสร็จก็ให้พนักงานใช้ เราไม่ได้อยู่ใช้เอง กลัวว่าเค้าจะไม่เข้าใจการทำงานที่ยากเกินไปอะคะ แต่ถ้าทำวิธีนี้ไม่ได้ ทำวิธีเดิมก็ได้ค่ะ

ขอบคุณทีช่วยตอบมากนะคะ เรารบกวนเยอะมากเลย ^^
8 @R23812
มันก็ไม่ได้ต่างจากที่ผมให้ไปนี่ครับ แค่มีฟิลด์เพิ่มขึ้นมา ก็เพิ่มฟิลด์ในตาราง StockCard และเพิ่มฟิลด์ในขั้นตอนการ Append ข้อมูลจากตารางรับจ่ายแค่นั้นเอง
9 @R23813
ลองดูที่กระทู้นี้นะครับว่าพอตรงกับที่ต้องการป่าว

http://www.thai-access.com/yeadram_view.php?topic_id=3333&page=2

มี 2 หน้านะครับ ลองอ่านให้ครบ
10 @R23814
หรือถ้ารอได้ผมฝากติดตามช่องของผมนะครับ

youtube.com/c/AccessDenied

ชื่อคลิป: มาเริ่มทำฐานข้อมูลกัน Ep.1...เท่าไหร่ยังไม่รู้เสริมเรื่อยๆถ้านึกออก
ตอนนี้ทำถึง Ep.5 แล้ว Ep.6 จะเป็นเรื่องของ Report ซึ่งผมทำเสร็จแล้วแต่ยังไม่อัพ (รอตัดต่ออีกหน่อย) และ Ep.7 จะเป็นเรื่องของ สินค้าคงเหลือ ซึ่งจะมีเรื่องการคิวรี่ยอดยกมาแบบนี้อยู่นะเท่าที่ผมกำลังคิดเนื้อหาอยู่ และก็มีเรื่องการคิดราคาสินค้าคงเหลือแบบ FIFO และ Average Cost หากมีเวลา สำหรับหาต้นทุนของสินค้าที่เราค้างอยู่ในสต๊อก อะไรประมาณนี้ ยังอยู่ในช่วงการคิดเนื้อหาอยู่ครับ ยังไงก็ฝากเพื่อนติดตามด้วย
ขอโปรโมทนิดนะครับ ไหนๆทำมาแล้วก็อยากให้ได้ดูกันเยอะๆ
11 @R23817
ขอบคุณทุกคนมากเลยคะ
12 @R23824
Docmd.RunSQL "INSERT INTO StockCard ( วันที่, รับ, ผู้ดำเนินการ ) SELECT วันที่, รับ, ผู้ดำเนินการ FROM Tableรับเข้า WHERE สินค้า = 'ABCD';"

Docmd.RunSQL "INSERT INTO StockCard ( วันที่, จ่าย, ผู้ดำเนินการ ) SELECT วันที่, จ่าย, ผู้ดำเนินการ FROM Tableจ่ายออก WHERE สินค้า = 'ABCD';"

โค้ดอันนี้นี้ใส่ตรงไหนคะ เราลองใส่ไปหลายที่แล้วไม่ขึ้นเลย

ลองใส่ที่ Union ก็ไม่ขึ้น หรือ ใส่แค่นี้คะ

INSERT INTO StockCard ( วันที่, รับ, ผู้ดำเนินการ ) SELECT วันที่, รับ, ผู้ดำเนินการ FROM Tableรับเข้า WHERE สินค้า = 'ABCD';


เราลองแยก คิวรี แบบรับ กับ จ่ายเป็นคนละไฟล์ แล้ว Append ไปที่ table เดียวกัน ต่างกันแค่ จำนวนของinจะลงใน รับของtable ส่วนout จะลงใน จ่ายของtable อย่างนี้ถูกไหมคะ
ส่วนโค้ดในข้อ 3 ใส่ใน โมดูล หรอคะ หรือ SQL แล้วไปลิ้งค์กับ table หรือใส่ในไหนคะ
13 @R23826
ใส่ใน Click event ของปุ่มที่จะแสดงฟอร์มสรุปดังกล่าวก็ได้ครับ โดยเอา code ข้อ 3 ใส่ต่อจาก 2 อันบนเลยก็ได้ครับ

ตัวอย่าง

Private Sub Button1_Click(Cancel As Integer)
Dim MyRS As Recordset, i As Long, nBalance as Long

Docmd.SetWarning False
Docmd.RunSQL "INSERT INTO StockCard ( วันที่, รับ, ผู้ดำเนินการ ) SELECT วันที่, รับ, ผู้ดำเนินการ FROM Tableรับเข้า WHERE สินค้า = 'ABCD';"

Docmd.RunSQL "INSERT INTO StockCard ( วันที่, จ่าย, ผู้ดำเนินการ ) SELECT วันที่, จ่าย, ผู้ดำเนินการ FROM Tableจ่ายออก WHERE สินค้า = 'ABCD';"
Docmd.SetWarning True

Set MyRS = CurrentDb.OpenRecordset("SELECT StockCard.* FROM StockCard ORDER BY StockCard.วันที่")
If MyRS.RecordCount > 0 Then
    MyRS.MoveFirst
    i = 1
    nBalance = 0
    Do While Not MyRS.EOF
          If Not IsNull(MyRS!รับ) Then
               nBalance = nBalance + MyRS!รับ
          Else
               nBalance = nBalance - MyRS!จ่าย
          End If
          MyRS.Edit
          MyRS!ลำดับ = i
          MyRS!คงเหลือ = nBalance
          MyRS.Update
          i = i +1
          MyRS.MoveNext
     Loop
End If
MyRS.Close
Set MyRS = Nothing

Docmd.OpenForm "Form_สรุปรับจ่าย"

End Sub

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