Express Report

Express Report Application เป็นอีกทางเลือกหนึ่งสำหรับการออกรายงาน ที่มีแนวคิดแตกต่างไปจากเดิม
- ไม่มีการผูกติดแหล่งข้อมูล (Data source) ในหน้าจอการออกแบบรายงาน
- ไม่จำเป็นต้องศึกษาวิธีการเขียน Code มากมายเพื่อใช้งาน
- สามารถออกแบบรายงานได้ทันที่ ที่มีข้อมูลในฐานข้อมูล
- โปรแกรมปรับขนาดกระดาษให้อัตโนมัติ ในกรณีที่ขนาดของกระดาษที่ออกแบบ ไม่ตรงตามขนาดของกระดาษ ที่เครื่องพิมม์ยอมรับได้ ได้ตามขนาดตามเครื่องพิมพ์ เช่น หากในออกแบบรายงาน กำหนดขนาดกระดาษไว้ที่ A3 เมื่อเวลาไปใช้งานจริง เครื่องพิมพ์สามารถพิมพ์ได้แค่ A4 โปรแกรมจะปรับขนาดการพิมพ์ให้เหลือเพียง A4 โดยอัตโนมัติ
Express Report Application ได้ถูกทำขึ้นแบ่งเป็น 2 เวอร์ชั่นในช่วงแรกนี้ คือ Freeware และ Shareware Version ซึ่งจะมีชื่อเรียกต่างกัน
Express Report Freeware ผู้ใช้จำเป็นต้อง ดาวน์โหลดไฟล์ติดตั้ง ซึ่งประกอบด้วย
- Dtc Print ActiveX Control สำหรับเรียกใช้และออกรายงาน
- Dtc Print Designer ใช้สำหรับออกแบบรูปแบบรายงาน
Express Report Shareware ผู้ใช้จำเป็นต้องดาวน์โหลดไฟล์ติดตั้ง ซึ่งประกอบด้วย
- ExReport ActiveX Control สำหรับเรียกใช้และออกรายงาน
- Exreport Designer ใช้สำหรับออกแบบรูปแบบรายงาน
Note : Shareware version จะ Release ในวันที่ 31 พฤษภาคม 2554
ข้อมูลการใช้งานโปรแกรม
ขั้นตอนการติดตั้งโปรแกรม
หลังจากทำการดาวน์โหลดโปรแกรมเรียบร้อยแล้ว จะได้ไฟล์ชื่อ ExpressReport.zip ให้ทำการแตกไฟล์ออกไว้ที่โฟลเดอร์หรือไดเรคทอรี่เดียวกัน ซึ่งจะได้ไฟล์ชื่อ Express Report.msi กับ setup.exe แล้วทำการดับเบิลคลิกที่ไฟล์ setup.exe จะเข้าสู่ขั้นตอนการติดตั้งโปรแกรม Express Report ดังรูป

- เข้าสู่หน้าจอเริ่มการติดตั้งโปรแกรม คลิกเลือกที่ปุ่ม Next เพื่อเข้าสู่ขั้นตอนต่อไป ดังรูปด้านบน
- คลิกที่ปุ่ม Browse... เพื่อเลือกไดเรคทอรี่หรือโฟลเดอร์ที่ต้องการติดตั้งโปรแกรม ดังรูป
- คลิกที่ปุ่ม Disk Cost... เพื่อดูข้อมูลพื้นที่ใช้งานสำหรับการติดตั้งโปรแกรม ดังรูป
- คลิกเลือก Everyone เพื่อเลือกใช้โปรแกรมสำหรับทุก User ของ Windows หรือเลือก Just me เพื่อติดตั้งเฉพาะ User ปัจจุบันที่เข้าใช้งานอยู่ ดังรูป
- คลิกเลือกที่ปุ่ม Next เพื่อเข้าสู่ขั้นตอนต่อไป ดังรูป
- เข้าสู่หน้าจอยืนยันความพร้อมในการติดตั้ง คลิกที่ปุ่ม Next เพื่อเริ่มทำการติดตั้ง ดังรูป
- รอจนเสร็จกระบวนการติดตั้ง
- การติดตั้งเสร็จสมบูรณ์ คลิกที่ปุ่ม Close เป็นอันสิ้นสุดขั้นตอนการติดตั้งโปรแกรม




เมื่อทำการติดตั้ง Express Report เสร็จเรียบร้อยแล้วตัว Dtc Print Control ซึ่งเป็น Active X Control จะถูกลงทะเบียนไว้ใน Register ของเครื่อง และ Dtc Print Designer ก็จะถูกติดตั้งเป็นที่เรียบร้อย
เริ่มต้นการใช้งาน
เราจะเริ่มจากการสร้างรูปแบบรายงาน แล้วทดลองเขียนโปรแกรมง่ายๆ เพื่อทำความเข้าใจในการทำงานของตัว Express Report ซึ่งในที่นี้เราจะมีตัวอย่างไฟล์รูปแบบรายงานที่ชื่อ (Receipt.lout) เป็นตัวอย่างในการทดลองเขียนโปรแกรมเพื่อใช้งาน ในรูปแบบรายงานที่เราสร้างขึ้นนั้น มีการกำหนด หมายเลข ID ซึ่งจะเป็นกุญแจสำคัญที่ใช้ในการสร้างรายงาน
คำถามคือ ทำไม หมายเลข ID จึงมีความสำคัญ ก็สืบเนื่องมาจากการที่โปรแกรมที่ใช้ในการออกแบบของเรา ไม่ต้องการผูกติดกับ Data Source ใดๆ และมีวิธีคิดแบบเรียบง่ายคือ หากเราต้องการส่งข้อมูลใดๆ มาที่รูปแบบรายงาน ให้ส่งมาในลักษณะของ “ข้อความ” และ ระบุตำแหน่งด้วย หมายเลข ID ที่ต้องการให้ข้อความนั้นๆ ปรากฎนั่นเอง
ขั้นตอนการ Import รูปแบบรายงานตัวอย่างเพื่อใช้ในโปรเจค
ให้ทำการ Import ตัวอย่างรูปแบบรายงานจากไฟล์ที่ชื่อ Receipt.lout จากโฟลเดอร์ Sample ที่อยู่ภายในโฟลเดอร์โปรแกรม Express Report สามารถติดตามอ่านขั้นตอนการ Import รูปแบบรายงานอย่างละเอียดได้จากคู่มือการใช้งานโปรแกรมซึ่งอยู่ในโฟลเดอร์ Doc ที่ได้จากการติดตั้งโปรแกรมไว้ หรือดาวน์โหลดได้จากหน้าดาวน์โหลด คลิ๊กที่นี่

ตัวอย่างการสร้างฟอร์ม PrintPreview.vb
ในฟอร์มนี้จะมี Control เพียงตัวเดียว คือ Dtc Print Control ซึ่งตัว Control จะสามารถเรียกใช้ได้เมื่อทำการติดตั้ง Express Report
เริ่มต้นสร้างฟอร์ม PrintPreview.vb
- ทำการเพิ่ม Form ใหม่เข้ามาในโปรเจค โดยตั้งชื่อฟอร์มว่า PrintPreview
- ทำการเพิ่ม Dtc Print Control มาไว้ใน Toolbox โดยคลิกขวา ที่ Common Control ->Choose Items…ดังรูป
- จากนั้นจะปรากฎหน้าจอ Choose Toolbox Item
- เลือกแท็บ Com Component
- หา Control ที่ชื่อ DtcPrint Control แล้วคลิกเลือก ดังรูป
- คลิกปุ่ม
DtcPrint Control จะปรากฎบน Toolbox ดังรูป - นำ DtcPrint Control มาวางในฟอร์ม PrintPreview ที่สร้างไว้ให้ได้ดังรูป



รู้จักกับ Event ที่สำคัญของ DtcPrint Control
Event CreatePreview (AxDtcPrint1_CreatePreview)
โดยปกติเมื่อทำการรันโปรแกรม ก็จะเริ่มต้นด้วยการเข้าสู่ Event Load ของฟอร์มก่อน (ในที่นี้ PrintPreview_Load) แต่เมื่อเราใช้ตัว DtcPrint Control โปรแกรมจะเรียก Event CreatePreview (AxDtcPrint1_CreatePreview) ก่อนที่จะฟอร์ม PrintPreview จะโหลด ขึ้นมา
ใน Event CreatePreview นี้มีสิ่งที่เราควรจะเขียนโปรแกรมเพื่อสั่งการทำงานดังนี้
- ทำการกำหนดชื่อไลบรารี่ไฟล์ ที่ต้องการเรียกใช้ในการสั่งพิมพ์นี้ (ไลบรารี่ไฟล์ คือไฟล์นามสกุล.lot ที่เราทำการสร้างขึ้นจากโปรแกรม DtcPrint Designer โดยเรียกใช้เมนู File->Create Layout Library
- ทำการกำหนด หรือคำนวณหน้าสูงสุด ในการสั่งพิมพ์ ให้กับตัว AxDtcPrint1 นี้
ตัวอย่างการเขียน Code ดังนี้
Private Sub AxDtcPrint1_CreatePreview(ByVal sender As Object, ByVal e As
System.EventArgs) Handles AxDtcPrint1.CreatePreview
'กำหนด Layout Library File ให้กับ DtcPrint Control ที่ชื่อ AxDtcPrint1
'ปกติไฟล์เมื่อสร้างขึ้นจะอยู่ที่เดียวกับที่เราสร้าง Layout โปรเจค
AxDtcPrint1.LayoutFileName = "C:\DOCUMENTS AND SETTINGS\JUB\MY
DOCUMENTS\EXPRESS REPORT.LOT"
'การเขียน Code กำหนดจำนวนหน้าสูงสุดที่ต้องสั่งพิมพ์
AxDtcPrint1.MaxPage = 2
End Sub
Event SelectLayout (AxDtcPrint1_ SelectLayout)
เมื่อประมวลผลใน Event CreateLayout เสร็จแล้ว ต่อมาโปรแกรมก็จะมาประมลวผลใน Event SelectLayout ซึ่งใน Event นี้สิ่งที่เราต้องกำหนดคือ บอกให้รู้ว่าในรายงานนี้จะรียกให้ Layout ชื่ออะไร (จากตัวอย่างได้มาจากตอนที่เรา กำหนดชื่อ Layout Name ในหน้าจอ Import ซึ่งได้กำหนดชื่อไว้ว่า “SaleOrder”)
โดยมีวิธีการเขียน Code ดังนี้
Private Sub AxDtcPrint1_SelectLayout(ByVal sender As Object, ByVal e As
AxDtcPrintLib._DDtcPrintEvents_SelectLayoutEvent)
Handles AxDtcPrint1.SelectLayout
Select Case e.pageNo
Case 1
AxDtcPrint1.LayoutName = "SALEORDER"
Case 2 To AxDtcPrint1.MaxPage 'PAGE 2 - MaxPage USE SAME LAYOUT
AxDtcPrint1.LayoutName = "SALEORDER2"
End Select
End Sub
Event DataImplement (AxDtcPrint1_ DataImplement)
ใน Event นี้ จะเป็น Event ที่สำคัญ ในการส่งข้อมูลให้กับตัวรูปแบบรายงาน ซึ่งเราจะส่งข้อมูลออกไปยังรายงาน ด้วยการเรียกใช้ฟังก์ชั่นของ DtcPrint Control ที่ชื่อ PrnSetText โดยเรียกใช้ดังนี้
e.objectID หมายถึง โปรแกรม Object ให้ระบุเป็นชื่อตัวแปรนี้เลยเมื่อเลือกใช้งาน ห้ามเปลี่ยนแปลง
e.pageNo หมายถึง เป็นค่าตัวแปรที่เก็บค่าของหมายเลขหน้าที่กำลังแสดงผลบนหน้าจอการทำงาน ให้ระบุเป็นชื่อตัวแปรนี้เลยเมื่อเลือกใช้งาน ห้ามเปลี่ยนแปลง
ItemID หมายถึง ค่าที่เรากำหนด หมายเลข ID ใน Layout ที่เราสร้างไว้ เพื่อใช้กำหนดหมายเลข ID ที่ต้องการ
”ข้อความที่ต้องการส่งค่า” หมายถึง ข้อความที่เราต้องการแสดงค่าใน บน Layout ที่ถูกระบุใน ItemID
ตัวอย่างการเขียน Code ดังนี้
Private Sub AxDtcPrint1_DataImplement(ByVal sender As Object, ByVal e As
AxDtcPrintLib._DDtcPrintEvents_DataImplementEvent) Handles
AxDtcPrint1.DataImplement
Dim DisCnt1, DisCnt2, UnitPrice, Qty As Integer
Dim UntiAmount As Decimal
DisCnt1 = 10
DisCnt2 = 15
DisCnt3 = 20
UnitPrice = 1000
Qty = 2
Select Case e.pageNo
Case 1
'ItemID = 20 คือ Column ItemNO
AxDtcPrint1.PrnSetText(e.objectID,e.pageNo,20,"1")
'ItemID = 21 คือ Column Description
AxDtcPrint1.PrnSetText(e.objectID,e.pageNo,21,"ProductName Item1 Page1")
'ItemID = 22 คือ Column Discount
AxDtcPrint1.PrnSetText(e.objectID,e.pageNo,22,DisCnt1.ToString())
'ItemID = 23 คือ Column Quanlity
AxDtcPrint1.PrnSetText(e.objectID,e.pageNo,23,Qty.ToString())
'ItemID = 24 คือ Column Unit Price
AxDtcPrint1.PrnSetText(e.objectID,e.pageNo,24,UnitPrice.ToString())
UntiAmount = Qty * (UnitPrice - (UnitPrice * (DisCnt1 / 100)))
'ItemID = 25 คือ Column Amount
AxDtcPrint1.PrnSetText(e.objectID,e.pageNo,25,
UntiAmount.ToString("#,###,##0.00"))
Case 2
AxDtcPrint1.PrnSetText(e.objectID,e.pageNo,20,"1")
AxDtcPrint1.PrnSetText(e.objectID,e.pageNo,21,"ProductName Item1 Page 2")
AxDtcPrint1.PrnSetText(e.objectID,e.pageNo,22,DisCnt2.ToString())
AxDtcPrint1.PrnSetText(e.objectID,e.pageNo,23,Qty.ToString())
AxDtcPrint1.PrnSetText(e.objectID,e.pageNo,24,UnitPrice.ToString())
UntiAmount = Qty * (UnitPrice - (UnitPrice * (DisCnt2 / 100)))
AxDtcPrint1.PrnSetText(e.objectID,e.pageNo,25,
UntiAmount.ToString("#,###,##0.00"))
End Select
End Sub
จากตัวอย่างด้านบนเราต้องการกำหนดค่าให้กับ Layout ในส่วนหมายเลข 20-25 ดังรูป

Event ClosePreview (AxDtcPrint1_ ClosePreview)
ใช้เพื่อออกจากหน้าจอ หรือปิดหน้าจอของ PrintPreview นี้เมื่อคลิกปุ่ม
บน PrintPreview TooBar
ตัวอย่างการเขียน Code ดังนี้
Private Sub AxDtcPrint1_ClosePreview(ByVal sender As Object, ByVal e
As System.EventArgs) Handles AxDtcPrint1.ClosePreview
Me.Close()
End Sub
ก่อนทำการรันโปรแกรม ให้กำหนดขนาดของ AxDtcPrint1 เมื่อทำการปรับขนาดฟอร์ม (PrintPreview_Resize)
ตัวอย่างการเขียน Code ดังนี้
Private Sub PrintPreview_Resize(ByVal sender As Object, ByVal e As
System.EventArgs) Handles Me.Resize
AxDtcPrint1.Size = Me.ClientSize
End Sub
ทดสอบรันโปรแกรมจะได้ผลลัพธ์ดังรูป





