กระทู้เก่าบอร์ด อ.Yeadram
        
           1,684   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.6100s
    
      
		
1 22/03/60 09.30 3 3 นายเอ
2 22/03/60 11.25 2 1 นายบี
ตารางประมานี้ค่ะ อันก่อนหน้า เลื่อนมากไปหน่อย