กระทู้เก่าบอร์ด อ.Yeadram
4,134 28
URL.หัวข้อ /
URL
การซ่อน/แสดง ในหน้ารายงานค่ะ
ดิฉันมีเรื่องรบกวนทุกท่านค่ะ
สมมติว่ามีข้อมูลอยู่ 3 กลุ่ม
ในหน้ารายงานจะมีส่วนท้ายของหน้า แสดงอยู่ทุกหน้า
แต่เมื่อถึงข้อมูลสุดท้ายในแต่ละกลุ่ม
จะให้แสดงส่วนท้ายของกลุ่ม โดยไม่แสดงส่วนท้ายของหน้าในหน้านั้น
จะมีวิธีการทำอย่างไรคะ รบกวนด้วยค่ะ จะประชุมอาทิตย์หน้าแล้ว ยังทำไม่สำเร็จเลย
มีภาพประกอบค่ะ
สมมติว่ามีข้อมูลอยู่ 3 กลุ่ม
ในหน้ารายงานจะมีส่วนท้ายของหน้า แสดงอยู่ทุกหน้า
แต่เมื่อถึงข้อมูลสุดท้ายในแต่ละกลุ่ม
จะให้แสดงส่วนท้ายของกลุ่ม โดยไม่แสดงส่วนท้ายของหน้าในหน้านั้น
จะมีวิธีการทำอย่างไรคะ รบกวนด้วยค่ะ จะประชุมอาทิตย์หน้าแล้ว ยังทำไม่สำเร็จเลย
มีภาพประกอบค่ะ
28 Reply in this Topic. Dispaly 2 pages and you are on page number 1
2 @R20644
ขอบคุณ อ.สันติสุข ค่ะ ดีใจที่ อ.จำได้
ได้ผลเป็นอย่างไรจะมารายงานให้ อ.ทราบค่ะ
ขอบคุณค่ะ
ได้ผลเป็นอย่างไรจะมารายงานให้ อ.ทราบค่ะ
ขอบคุณค่ะ
3 @R20645
ไม่หายค่ะ
มันซ่อนเฉพาะในหน้าสุดท้ายของรายงาน
แต่ในหน้าสุดท้ายของแต่ละกลุ่มไม่ได้ถูกซ่อนค่ะ
ดิฉันใน code on GroupFooter1_Format
ถูกที่หรือเปล่าคะ
มันซ่อนเฉพาะในหน้าสุดท้ายของรายงาน
แต่ในหน้าสุดท้ายของแต่ละกลุ่มไม่ได้ถูกซ่อนค่ะ
ดิฉันใน code on GroupFooter1_Format
ถูกที่หรือเปล่าคะ
4 @R20646
ผมเข้าใจว่า ให้แสดง Page Footer เฉพาะหน้าสุดท้ายของรายงานเท่านั้น ถูกต้องหรือไม่ หรืออย่างไร ถ้าใช่ โค้ดก็จะเป็น
Private Sub PageFooterSection_Format(Cancel As Integer, FormatCount As Integer)
Me.Section("PageFooterSection").Visible = (Me.Page = Me.Pages)
End Sub
อีกอย่างคือ ในรายงานไม่มีอะไรอยู่ใน Group Footer section ไม่ใช่หรือ ก็ทำให้สงสัยที่เขียนถามมาว่า "แต่เมื่อถึงข้อมูลสุดท้ายในแต่ละกลุ่ม จะให้แสดงส่วนท้ายของกลุ่ม" "ส่วนท้ายของกลุ่ม" นี่หมายถึงอะไรกันแน่
Private Sub PageFooterSection_Format(Cancel As Integer, FormatCount As Integer)
Me.Section("PageFooterSection").Visible = (Me.Page = Me.Pages)
End Sub
อีกอย่างคือ ในรายงานไม่มีอะไรอยู่ใน Group Footer section ไม่ใช่หรือ ก็ทำให้สงสัยที่เขียนถามมาว่า "แต่เมื่อถึงข้อมูลสุดท้ายในแต่ละกลุ่ม จะให้แสดงส่วนท้ายของกลุ่ม" "ส่วนท้ายของกลุ่ม" นี่หมายถึงอะไรกันแน่
5 @R20647
หรือถ้าต้องการ แสดงทุกหน้ายกเว้นหน้าสุดท้ายของแต่ละกลุ่ม ก็โค้ดเป็น
Private Sub GroupFooter1_Format(Cancel As Integer, FormatCount As Integer)
Me.Section("PageFooterSection").Visible = False
End Sub
แต่ Group Footer1 จะต้องมีพิมพ์อะไรออกมานะครับ ไม่งั้นน่าจะ(ผมไม่ได้ทดลอง)ไม่เกิด event ใดๆสำหรับ section นี้ แต่ถ้าไม่มีอะไรจะพิมพ์จริงๆ ก็พิมพ์เครื่องหมายจุด (.) เล็กๆสีเทาๆที่ไหนสักที่ใน section นี้ก็ได้เพื่อให้เกิด event ขึ้นมา
และต้องโค้ดด้วยว่า
Private Sub PageHeaderSection_Format(Cancel As Integer, FormatCount As Integer)
Me.Section("PageFooterSection").Visible = True
End Sub
Private Sub GroupFooter1_Format(Cancel As Integer, FormatCount As Integer)
Me.Section("PageFooterSection").Visible = False
End Sub
แต่ Group Footer1 จะต้องมีพิมพ์อะไรออกมานะครับ ไม่งั้นน่าจะ(ผมไม่ได้ทดลอง)ไม่เกิด event ใดๆสำหรับ section นี้ แต่ถ้าไม่มีอะไรจะพิมพ์จริงๆ ก็พิมพ์เครื่องหมายจุด (.) เล็กๆสีเทาๆที่ไหนสักที่ใน section นี้ก็ได้เพื่อให้เกิด event ขึ้นมา
และต้องโค้ดด้วยว่า
Private Sub PageHeaderSection_Format(Cancel As Integer, FormatCount As Integer)
Me.Section("PageFooterSection").Visible = True
End Sub
6 @R20648
ที่ GroupFooter1 มีข้อมูลค่ะ แต่ดิฉันบีบช่องให้สูงแค่ 0.11
ความต้องการจริงๆ คือ ให้ pagefooter แสดงทุกหน้า ยกเว้นในหน้าที่ groupfooter1 แสดงค่ะ ต้องไม่แสดง pagefooter
ดิฉันจะลองไปทำตามค่ะ
ขอบคุณ อ.สันติสุขมากนะคะ
ความต้องการจริงๆ คือ ให้ pagefooter แสดงทุกหน้า ยกเว้นในหน้าที่ groupfooter1 แสดงค่ะ ต้องไม่แสดง pagefooter
ดิฉันจะลองไปทำตามค่ะ
ขอบคุณ อ.สันติสุขมากนะคะ
7 @R20649
สำเร็จแล้วค่ะ ขอบพระคุณ อ.สันติสุขมากค่ะ
แต่แอบมีข้อสงสัยเรื่องอื่นค่ะ
ถ้าเราอยากให้ข้อมูลสุดท้าย ตัดไปอยู่อีกหน้าหนึ่ง ต้องทำอย่างไรคะ
แต่แอบมีข้อสงสัยเรื่องอื่นค่ะ
ถ้าเราอยากให้ข้อมูลสุดท้าย ตัดไปอยู่อีกหน้าหนึ่ง ต้องทำอย่างไรคะ
8 @R20650
ข้อมูลสุดท้ายคือเรคอร์ดสุดท้ายหรือว่าอะไรครับ แล้วทำไมจะต้องยกไปหน้าต่อไป
9 @R20652
ใช่ค่ะ record สุดท้าย
เหตุที่ต้องยกไปหน้าต่อไปเพราะ
ส่วนท้ายของกลุ่ม เป็นลายเซ็นผู้รับรอง
ซึ่งในบางที record สุดท้ายจะจบที่หน้าก่อนหน้า
พอหน้าถัดไปที่แสดงส่วนท้ายของกลุ่มก็จะแสดงแค่ลายเซ็นผู้รับรอง ไม่มีข้อมูลค่ะ
เหตุที่ต้องยกไปหน้าต่อไปเพราะ
ส่วนท้ายของกลุ่ม เป็นลายเซ็นผู้รับรอง
ซึ่งในบางที record สุดท้ายจะจบที่หน้าก่อนหน้า
พอหน้าถัดไปที่แสดงส่วนท้ายของกลุ่มก็จะแสดงแค่ลายเซ็นผู้รับรอง ไม่มีข้อมูลค่ะ
10 @R20656
ค่อนข้างจะยุ่งยากและมีข้อจำกัดบ้าง แล้วผมจะมาเขียนให้ดู ยังไม่ยืนยันนะครับว่าจะเขียนให้ได้เมื่อไหร่แน่ แต่อย่างเร็วคงเป็นเย็นวันจันทร์
11 @R20657
ขอบคุณ อ.สันติสุขค่ะ
12 @R20660
สิ่งที่ต้องทำก็คือ
1) หาว่าเป็นเรคอร์ดสุดท้ายในกลุ่มหรือไม่ โดยการเทียบเลขลำดับที่ของเรคอร์ดนั้นในกลุ่ม เทียบกับจำนวนเรคอร์ดในกลุ่ม ถ้าเท่ากันก็คือเรคอร์ดเป้าหมาย
- ใน Group Header Section ให้สร้างเท็กซ์บ็อกซ์ชื่อ TotalRecInGrp ให้ Control Source property เป็น =Count(*) และกำหนดให้ Visible property เป็น No ค่าที่ได้คือจำนวนเรคอร์ดในกลุ่มนี้
- ใน Detail Section ให้สร้างเท็กซ์บ็อกซ์ชื่อ CurrentRecInGrp ให้ Control Source property เป็น =1 ให้ Running Sum property เป็น Over Group และให้ Visible property เป็น No ค่าที่ได้คือลำดับที่ของเรคอร์ดในกลุ่มนี้
- ใน Detail Section เมื่อไหร่ที่ CurrentRecInGrp เท่ากับ TotalRecInGrp ก็แสดงว่ากำลังอยู่ที่เรคอร์ดสุดท้ายแล้วนั่นเอง
2) ถ้าเป็นเรคอร์ดสุดท้ายในกลุ่ม หาว่ามันจะพิมพ์เลยตำแหน่งที่กำหนด (ซึ่งวัดจากตำแหน่งเริ่มต้นของ Page Header Section) หรือไม่
- ข้อจำกัดคือ Can Grow, Can Shrink property ของ Detail section ต้องเป็น No เท่านั้น
- ระยะทางในระบบ Access มีอยู่หลายหน่วย ที่ใช้ในโค้ดนี้คือหน่วย Twip โดยที่ 1 นิ้วเท่ากับ 1440 twips หรือ 1 ซม.ก็เท่ากับ 567 twips
- Access ไม่มี property อะไรเพื่อบอกว่าสิ่งที่กำลังพิมพ์นี้อยู่ห่างจาก Page Header Section เท่าไหร่ แต่เรารู้ความสูงของแต่ละ section ดังนั้นจึงต้องสร้างตัวแปร TotalHeight เพื่อเก็บผลรวมว่าห่างจาก Page Header Section ไปเท่าไหร่แล้ว โดยการบวกความสูงของแต่ละ Section ที่อยู่ไม่ต่ำกว่า Detail Section บวกเข้ามาในตัวแปรนี้ ด้วยฟังก์ชั่นที่เราเขียนเองชื่อว่า SumHeight( ) แต่สิ่งนึงที่ต้องระวังเกี่ยวกับการบวกค่าอะไรเองด้วยโค้ดของ Report ก็คือ แต่ละ Section มีโอกาสที่จะเกิด Format event หรือ Print event ได้มากกว่า 1 ครั้ง (ตรวจสอบได้จากตัวแปร FormatCount หรือ PrintCount) ขึ้นกับการพิจารณาของตัว Access เอง เช่น เมื่อจะพิมพ์เรคอร์ดหนึ่งๆ Format event ก็จะเกิด 1 ครั้ง ปกติถ้า Access เห็นว่าเลยขอบกระดาษล่าง มันก็จะยกเลิกการพิมพ์และปัดไปหน้าถัดไปให้ แน่นอนว่าจะเกิด Format event อีก 1 ครั้ง รวมเป็น 2 ครั้ง เป็นต้น ดังนั้นโค้ดเราต้องเช็คว่าถ้า event เกิดมากกว่า 1 ครั้ง ค่าผลรวมความสูงต้องหักความสูงของการบวกในครั้งก่อนที่เก็บอยู่ในตัวแปรชื่อ LastHeight ออกไปด้วย ถึงจะได้ความสูงที่ถูกต้องตามจริง
3) ถ้าเลย ก็ให้ปัดเรคอร์ดนั้นไปหน้าใหม่
- เมื่อได้ความสูงรวมแล้ว ดังนั้นก่อนที่จะปล่อยให้พิมพ์ ก็เช็คจาก Format event ว่าค่านี้มากกว่าตำแหน่งที่เรากำหนดไว้หรือไม่ (ในตย.นี้อยู่ที่ 18.5 ซม.) ถ้ามากกว่าก็สั่งให้มองเห็นคอนโทรล Page Break ที่ชื่อ PB ซึ่งต้องตั้งให้อยู่ชิดขอบบนของ Detail Section เมื่ออยู่ในสถานะมองเห็น Access จะถือว่าสิ่งต่างๆใน Section นั้นๆที่อยู่ล่าง Page Break จะต้องการปัดขึ้นหน้าใหม่ ดังนั้นเรคอร์ดสุดท้ายก็จะถูกปัดไปหน้าใหม่ตามที่เราต้องการ (และ Format event ก็จะเกิดซ้ำอีกครั้งในหน้าใหม่) แต่ถ้าไม่เกินความสูงที่กำหนด ก็ต้องให้ Page Break มองไม่เห็น
โค้ดทั้งหมดก็คือ
Option Compare Database
Option Explicit
Const LimitHeight = 18.5 * 567 ' 1 cm = 567 twips
Dim TotalHeight As Long
Dim LastHeight As Long
Private Sub GroupHeader1_Format(Cancel As Integer, FormatCount As Integer)
' หายอดรวมความสูง
Call SumHeight(Me.Section("GroupHeader1").Height, FormatCount)
End Sub
Private Sub PageHeaderSection_Format(Cancel As Integer, FormatCount As Integer)
' เคลียร์ยอดรวมความสูง
TotalHeight = 0
' หายอดรวมความสูง
Call SumHeight(Me.Section("PageHeaderSection").Height, FormatCount)
End Sub
Private Sub Detail_Format(Cancel As Integer, FormatCount As Integer)
' ถ้าเป็นเรคอร์ดสุดท้ายในกลุ่ม และ ความสูงเกินกว่าลิมิตที่ตั้งไว้
' ก็ให้แสดง Page Control ซึ่งมีผลทำให้ปัดไปขึ้นหน้าใหม่ทันที
If (Me.CurrentRecInGrp = Me.TotalRecInGrp) And (TotalHeight >= LimitHeight) Then
Me.PB.Visible = True
Exit Sub
End If
Me.PB.Visible = False
' หายอดรวมความสูง
Call SumHeight(Me.Section("Detail").Height, FormatCount)
'Debug.Print Me.MCOD_ID
End Sub
Private Sub SumHeight(SectionHeight As Long, FormatCount As Integer)
' ถ้า FormatCount เกินกว่า 1 ก็ต้องลบความสูงครั้งล่าสุดที่เคยบวกเข้าไป
If FormatCount > 1 Then
TotalHeight = TotalHeight - LastHeight
End If
' เก็บความสูงครั้งล่าสุดไว้
LastHeight = SectionHeight
' บวกยอดรวมความสูงของทุก section ที่ได้ทำไป
TotalHeight = TotalHeight + LastHeight
End Sub
1) หาว่าเป็นเรคอร์ดสุดท้ายในกลุ่มหรือไม่ โดยการเทียบเลขลำดับที่ของเรคอร์ดนั้นในกลุ่ม เทียบกับจำนวนเรคอร์ดในกลุ่ม ถ้าเท่ากันก็คือเรคอร์ดเป้าหมาย
- ใน Group Header Section ให้สร้างเท็กซ์บ็อกซ์ชื่อ TotalRecInGrp ให้ Control Source property เป็น =Count(*) และกำหนดให้ Visible property เป็น No ค่าที่ได้คือจำนวนเรคอร์ดในกลุ่มนี้
- ใน Detail Section ให้สร้างเท็กซ์บ็อกซ์ชื่อ CurrentRecInGrp ให้ Control Source property เป็น =1 ให้ Running Sum property เป็น Over Group และให้ Visible property เป็น No ค่าที่ได้คือลำดับที่ของเรคอร์ดในกลุ่มนี้
- ใน Detail Section เมื่อไหร่ที่ CurrentRecInGrp เท่ากับ TotalRecInGrp ก็แสดงว่ากำลังอยู่ที่เรคอร์ดสุดท้ายแล้วนั่นเอง
2) ถ้าเป็นเรคอร์ดสุดท้ายในกลุ่ม หาว่ามันจะพิมพ์เลยตำแหน่งที่กำหนด (ซึ่งวัดจากตำแหน่งเริ่มต้นของ Page Header Section) หรือไม่
- ข้อจำกัดคือ Can Grow, Can Shrink property ของ Detail section ต้องเป็น No เท่านั้น
- ระยะทางในระบบ Access มีอยู่หลายหน่วย ที่ใช้ในโค้ดนี้คือหน่วย Twip โดยที่ 1 นิ้วเท่ากับ 1440 twips หรือ 1 ซม.ก็เท่ากับ 567 twips
- Access ไม่มี property อะไรเพื่อบอกว่าสิ่งที่กำลังพิมพ์นี้อยู่ห่างจาก Page Header Section เท่าไหร่ แต่เรารู้ความสูงของแต่ละ section ดังนั้นจึงต้องสร้างตัวแปร TotalHeight เพื่อเก็บผลรวมว่าห่างจาก Page Header Section ไปเท่าไหร่แล้ว โดยการบวกความสูงของแต่ละ Section ที่อยู่ไม่ต่ำกว่า Detail Section บวกเข้ามาในตัวแปรนี้ ด้วยฟังก์ชั่นที่เราเขียนเองชื่อว่า SumHeight( ) แต่สิ่งนึงที่ต้องระวังเกี่ยวกับการบวกค่าอะไรเองด้วยโค้ดของ Report ก็คือ แต่ละ Section มีโอกาสที่จะเกิด Format event หรือ Print event ได้มากกว่า 1 ครั้ง (ตรวจสอบได้จากตัวแปร FormatCount หรือ PrintCount) ขึ้นกับการพิจารณาของตัว Access เอง เช่น เมื่อจะพิมพ์เรคอร์ดหนึ่งๆ Format event ก็จะเกิด 1 ครั้ง ปกติถ้า Access เห็นว่าเลยขอบกระดาษล่าง มันก็จะยกเลิกการพิมพ์และปัดไปหน้าถัดไปให้ แน่นอนว่าจะเกิด Format event อีก 1 ครั้ง รวมเป็น 2 ครั้ง เป็นต้น ดังนั้นโค้ดเราต้องเช็คว่าถ้า event เกิดมากกว่า 1 ครั้ง ค่าผลรวมความสูงต้องหักความสูงของการบวกในครั้งก่อนที่เก็บอยู่ในตัวแปรชื่อ LastHeight ออกไปด้วย ถึงจะได้ความสูงที่ถูกต้องตามจริง
3) ถ้าเลย ก็ให้ปัดเรคอร์ดนั้นไปหน้าใหม่
- เมื่อได้ความสูงรวมแล้ว ดังนั้นก่อนที่จะปล่อยให้พิมพ์ ก็เช็คจาก Format event ว่าค่านี้มากกว่าตำแหน่งที่เรากำหนดไว้หรือไม่ (ในตย.นี้อยู่ที่ 18.5 ซม.) ถ้ามากกว่าก็สั่งให้มองเห็นคอนโทรล Page Break ที่ชื่อ PB ซึ่งต้องตั้งให้อยู่ชิดขอบบนของ Detail Section เมื่ออยู่ในสถานะมองเห็น Access จะถือว่าสิ่งต่างๆใน Section นั้นๆที่อยู่ล่าง Page Break จะต้องการปัดขึ้นหน้าใหม่ ดังนั้นเรคอร์ดสุดท้ายก็จะถูกปัดไปหน้าใหม่ตามที่เราต้องการ (และ Format event ก็จะเกิดซ้ำอีกครั้งในหน้าใหม่) แต่ถ้าไม่เกินความสูงที่กำหนด ก็ต้องให้ Page Break มองไม่เห็น
โค้ดทั้งหมดก็คือ
Option Compare Database
Option Explicit
Const LimitHeight = 18.5 * 567 ' 1 cm = 567 twips
Dim TotalHeight As Long
Dim LastHeight As Long
Private Sub GroupHeader1_Format(Cancel As Integer, FormatCount As Integer)
' หายอดรวมความสูง
Call SumHeight(Me.Section("GroupHeader1").Height, FormatCount)
End Sub
Private Sub PageHeaderSection_Format(Cancel As Integer, FormatCount As Integer)
' เคลียร์ยอดรวมความสูง
TotalHeight = 0
' หายอดรวมความสูง
Call SumHeight(Me.Section("PageHeaderSection").Height, FormatCount)
End Sub
Private Sub Detail_Format(Cancel As Integer, FormatCount As Integer)
' ถ้าเป็นเรคอร์ดสุดท้ายในกลุ่ม และ ความสูงเกินกว่าลิมิตที่ตั้งไว้
' ก็ให้แสดง Page Control ซึ่งมีผลทำให้ปัดไปขึ้นหน้าใหม่ทันที
If (Me.CurrentRecInGrp = Me.TotalRecInGrp) And (TotalHeight >= LimitHeight) Then
Me.PB.Visible = True
Exit Sub
End If
Me.PB.Visible = False
' หายอดรวมความสูง
Call SumHeight(Me.Section("Detail").Height, FormatCount)
'Debug.Print Me.MCOD_ID
End Sub
Private Sub SumHeight(SectionHeight As Long, FormatCount As Integer)
' ถ้า FormatCount เกินกว่า 1 ก็ต้องลบความสูงครั้งล่าสุดที่เคยบวกเข้าไป
If FormatCount > 1 Then
TotalHeight = TotalHeight - LastHeight
End If
' เก็บความสูงครั้งล่าสุดไว้
LastHeight = SectionHeight
' บวกยอดรวมความสูงของทุก section ที่ได้ทำไป
TotalHeight = TotalHeight + LastHeight
End Sub
13 @R20661
รูปแรก แสดงผลลัพธ์การพิมพ์โดยไม่มีการตรวจสอบอะไร จะเห็นว่า Group Footer จะโดดลอยเดี่ยวๆที่หน้าถัดไป
รูปแรก แสดงผลลัพธ์การพิมพ์โดยไม่มีการตรวจสอบอะไร จะเห็นว่า Group Footer จะโดดลอยเดี่ยวๆที่หน้าถัดไป
14 @R20662
รูปที่สอง แสดงผลลัพธ์เมื่อมีการตรวจสอบแล้ว เรคอร์ดสุดท้ายจะปัดไปหน้าถัดไป ทำให้ Group Footer ไม่อยู่เดี่ยวๆอีกต่อไป
15 @R20663
รูปที่สาม แสดงตัวอย่างว่าเราต้องมีคอนโทรลอะไรบ้างเพื่อใช้ในโค้ดที่ให้ไป
รูปที่สาม แสดงตัวอย่างว่าเราต้องมีคอนโทรลอะไรบ้างเพื่อใช้ในโค้ดที่ให้ไป
16 @R20664
ไม่รู้จะทำยังไง ภาพเวลาใส่ในเวปบอร์ดนี้รวนไปหมด เอาเป็นว่า ภาพที่สองก็นึกภาพเอาเองแล้วกัน
ส่วนรูปที่สาม ถูกต้องแล้ว
ส่วนรูปที่สาม ถูกต้องแล้ว
17 @R20671
ขอบคุณค่ะ อ.สันติสุข ดิฉันจะไปทดลองทำค่ะ สงสัยตรงไหน อย่างไร จะกลับมาขอความรุ้เพิ่มเติมนะคะ ขอบคุณมากๆ อีกครั้งค่ะ
18 @R20717
มันขึ้นอย่างนี้ค่ะ อ.สันติสุข
ต้องแก้ไขอย่างไรคะ
ต้องแก้ไขอย่างไรคะ
19 @R20718
น่าจะมีชื่อ procedure PageHeaderSection_Format ซ้ำในโค้ดของคุณ
20 @R20719
แก้ไขแล้วค่ะ
แต่ผลลัพธ์ของ code ไม่เป็นไปตามที่ อ.อธิบายค่ะ
แต่ผลลัพธ์ของ code ไม่เป็นไปตามที่ อ.อธิบายค่ะ
Time: 0.3027s
ปล. รายงานรายชื่อคนได้เครื่องราชฯนี่ never die จริงๆ ข้ามภพข้ามชาติ 55