กระทู้เก่าบอร์ด อ.Yeadram
1,570 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 นายบี
ตารางเรามี
รับเข้ามี วันที่ รหัสสินค้า จำนวนการรับ ผู้ดำเนินการ (สินค้าที่ขึ้นจะเป็นทุกชิ้น ทุกการเบิกทีละรายการ ยังไม่รวมเป็นชื่อเดียวกัน-ยังไม่รวมยอดรับในแต่ละชิ้ด้วย)
จ่ายออก มี วันที่ รหัสสินค้า จำนวนการรับ ผู้ดำเนินการ (สินค้าที่ขึ้นจะเป็นทุกชิ้น ทุกการเบิกทีละรายการ ยังไม่รวมเป็นชื่อเดียวกัน-ยังไม่รวมยอดจ่ายในแต่ละชิ้น)
คลัง มี รหัสสินค้า ชื่อสินค้า ยอดคงเหลือ (สินค้าจะมีแค่ชื่อเดียวแล้วรวมยอดที่เหลืออยู่เลย)
ที่เราอยากได้คือ ต้องการให้แสดงผลข้อมูลของสินค้า 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
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 ไปแสดงผลตามต้องการ
ลำดับ วันที่ เวลา รับ จ่าย คงเหลือ ผู้ดำเนินการ
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 หน้าหรือเปล่าคะ
WHERE สินค้า = 'ABCD'
อันนี้คือให้ใส่ตัวอักษร ABCD ลงไปเลบ หรือเป็นชื่อสินค้าตัวที่ต้องการ หรือเป็นชื่อสินค้าทุกตัวใส่เรียงกันคะ
แล้วถ้ามี สินค้า 300 ชนิด แล้วต้องการตารางทุกชนิดก็ทำ 300 หน้าหรือเปล่าคะ
5 @R23807
เป็นการดูสินค้าทีละตัวครับ
ถ้าจะทำหมดทุกตัวก็ Loop สินค้าไปทีละตัว รายงานยาวเหยียดเลยนะครับ
ถ้าจะทำหมดทุกตัวก็ 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 นายโอ
แล้วไปเลือกที่หัวฟิลล์รายการเอา ว่าต้องการรายการไหน จากนั้นค่อยพิมพ์ออกมา อย่างนี้จะง่ายกว่าหรือเปล่าคะ ถ้าทำได้ช่วยแนะนำด้วยค่ะ
คือเราเป็นนักศึกษาฝึกงาน ทาง บ.ต้องการให้ทำ พอทำเสร็จก็ให้พนักงานใช้ เราไม่ได้อยู่ใช้เอง กลัวว่าเค้าจะไม่เข้าใจการทำงานที่ยากเกินไปอะคะ แต่ถ้าทำวิธีนี้ไม่ได้ ทำวิธีเดิมก็ได้ค่ะ
ขอบคุณทีช่วยตอบมากนะคะ เรารบกวนเยอะมากเลย ^^
ลำดับ วันที่ เวลา รายการ รับ จ่าย คงเหลือ ผู้ดำเนินการ
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 หน้านะครับ ลองอ่านให้ครบ
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 หากมีเวลา สำหรับหาต้นทุนของสินค้าที่เราค้างอยู่ในสต๊อก อะไรประมาณนี้ ยังอยู่ในช่วงการคิดเนื้อหาอยู่ครับ ยังไงก็ฝากเพื่อนติดตามด้วย
ขอโปรโมทนิดนะครับ ไหนๆทำมาแล้วก็อยากให้ได้ดูกันเยอะๆ
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 หรือใส่ในไหนคะ
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 ไปแสดงผลครับ
ตัวอย่าง
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 ไปแสดงผลครับ
Time: 0.2475s
1 22/03/60 09.30 3 3 นายเอ
2 22/03/60 11.25 2 1 นายบี
ตารางประมานี้ค่ะ อันก่อนหน้า เลื่อนมากไปหน่อย