Skip to content

Prajuab Riabroy's Blog

Survey Application – GNSS – UAV – Programing – Python – Dart&Flutter – Rust

Menu
  • Home
  • About Us
  • Survey Application
    • Surveyor Pocket Tools
    • Traverse Pro
    • XSection Plot
    • Geoid Height Pro
    • Spot Fire
    • โปรแกรมงานสำรวจสำหรับเครื่องคิดเลข Casio fx-5800P
    • โปรแกรมงานสำรวจสำหรับเครื่องคิดเลข Casio fx-9860G II SD
  • Download
  • Privacy Policy
Menu

LazReport & Fortes Report สองสิงห์เครื่องมือจัดทำ Report สำหรับ Lazarus

Posted on 10/08/2011
  • หายหน้าหายตาไปนานทีเดียว จนคนสงสัยว่าจะเลิกเขียน blog ไปแล้วยัง ก็ยังเขียนอยู่แต่เรื่องอาจจะไม่ถี่เหมือนที่ผ่านมาครับ สำหรับแฟนๆ Lazarus ที่ต้องเกี่ยวข้องกับ Database ถ้าเป็นตัวทำ report ที่ฟรีก็ต้องนึกถึงสองตัวนี้ ผมมีโอกาสใช้ทั้งคู่ บางโปรแกรมก็ใช้ทั้งสองอย่าง ตามลักษณะข้อดี ข้อด้อยที่ไม่เหมือนกัน ก็มาเปรียบเทียบดูกันว่าสอง component นี้จะเป็นอย่างไร

LazReport

  • ตัวนี้พัฒนามาจาก FreeReport สำหรับ Delphi  ตัว LazReport เป็นกลุ่ม component ที่สำหรับจัดทำ Report มีเครื่องมือ Visual ที่ช่วยในการออกแบบได้ง่าย มี Preview ที่สามารถดูผลลัพธ์ได้ตลอด

การติดตั้ง

  • เครื่องมือตัวนี้มากับ Lazarus อยู่ในโฟลเดอร์ components วิธี compile และ build ก็ง่ายๆ เครื่องมือตัวนี้เรียกใช้ package “printer4lazarus” อันดับแรกเปิดเมนูของ Lazarus คือ Package > Open package file (.lpk) แล้ว browse ไปที่โฟลเดอร์ที่ติดตั้ง Lazarus เข้าไปที่โฟลเดอร์ components แล้วเข้าไปที่โฟลเดอร์ printers จะเจอ printer4lazarus.lpk จากนั้นทำการ install
  • หลังจากติดตั้ง printer4lazarus เข้าไปแล้ว ก็มาติดตั้ง LazReport ที่เมนูเปิด Package > Open package file (.lpk) เข้าไปที่โฟลเดอร์ components -> lazreport -> source คลิกเลือก lazreport.lpk คลิกเลือก install ก็เป็นอันเรียบร้อย หลังจากติดตั้งแล้วจะเห็นหน้าตาของ LazReport ดังรูปด้านล่าง
Lazreport บน palette ของ Lazarus

การใช้งานอย่างย่อ

  • วิธีใช้งานคร่าวๆดูที่  website ของ Lazarus ตามลิงค์นี้ ตัวอย่างการใช้งานมีอยู่ 3-4 ตัวอย่างสามารถเปิดได้ด้วย Lazarus อยู่ที่โฟลเดอร์ย่อย samples
  • ถ้าเป็นของผมก็ประมาณรูปด้านล่้าง
การใส่ component ของ Lazreport ลงบนฟอร์ม
  •  ผมใช้ Database Firebird มีสองตัวแปรคือ FDBConnect : TIBConnection และอีกตัวสำหรับ Transaction คือ FTrans : TSQLTransaction สอง class คือ TIBConnection กับ TSQLTransaction จะมากับ Lazarus อยู่แล้ว
  • ดูบนฟอร์มข้างบน ผม  drop TfrDBDataset ตั้งชื่อเป็น frDBMast ตัวต่อมา drop TSQLQuery ตั้งชื่อ SQLMast สุดท้ายลืมไม่ได้คือ TfrReport ตั้งชื่อ frReport1
  • ผมใส่ frBarcodeObject1 (TfrBarcodeObject) ลงไปด้วยเพราะมีการใช้ Barcode

ความสัมพันธ์

  • เนื่องจากผมใช้ตัวแปรคือ FDBConnect และ FTrans ไม่ได้ drop เป็น component จึงต้องมีการโค๊ดด้วยมือเริ่มจาก

SQLMast.Database := FDBConnect;

SQLMast.Transaction := FTrans;

frDBMast.Dataset := SQLMast;

  • ดูจากโคีด frReport1(TfrReport) จะมองเห็นเฉพาะ frDBMast(TfrDBDataSet) ส่วน frDBMast จะมองหาเฉพาะ Dataset ซึ่งก็คือ SQLMast ซึ่งตัว SQLMast สามารถเชื่อมโยงไปหา Database ได้

เปิด Report Designer

  • จากรูปด้านบนเมื่อ double click ที่ frReport1 จะกระโดดเข้าสู่โหมดการออกแบบทันที อันดับแรกเลือก Band ก่อนเมื่อลากวาง Band ลงบนกระดาษ Report จะถูกถามว่าเป็น band อะไร เช่นถ้าเป็น Report Title จะเป็นหัวของรายงานปรากฎอยู่ใน Report เพียงหน้าเดียวหน้าแรก ถ้าเป็น Column header อยู่ทุกหน้าตราบเท่าที่ตารางที่แสดงผลยังไม่หมด
  • อีกตัวที่สำคัญคือ Master data จะเป้นข้อมูลของ Dataset อย่างของผมได้จากการ Query ผ่าน SQLMast
การออกแบบ Report
  • และอีกตัวที่ไม่พูดไม่ได้คือ Memo Strings ชื่อ class เต็มๆคือ TfrMemostrings เราจะใส่ชื่อฟิลด์ของ Dataset ผ่านช่องนี้ เมื่อลากวาง Band ลงไปแล้วเราจะลากวาง Memo Strings ตัวนี้ลงบน band อีกที การใส่ชื่อฟิลด์จะอยู่ในเครื่องหมาย bracket [] ดังรูปด้านล่าง
การใส่ฟิลด์
  • Save ตัว Report จะมีนามสกุลเป็น lrf ซึ่งไฟล์ตัวนี้เวลาทำโปรแกรม Setup ต้องนำไปด้วยถึงจะใช้งานได้ เวลาเรียก Report ก็ใช้โค๊ดดังนี้

    SQLMast.Active := true;
frReport1.ShowReport;

  • ผมลืมไปนิดเวลาเรียกไฟล์ Report ที่เราสร้างไว้แล้วอาจจะเป็นตอนสร้างฟอร์ม (FormCreate) ดังนี้

  frReport1.LoadFromFile(‘barcodereport.lrf’);

ผลลัพธ์ (Report)

  • สำหรับ Report ที่มีรูปมากๆ LazReport ทำได้ดีมาก ตัวอย่างจาก Report Designer ด้านบนผม generate ได้ดังรูปด้านล่าง
ผลลัพธ์ที่ได้จาก Lazreport

ข้อดีและข้อด้อย

  • ข้อดีคือเร็ว มี Report Designer ที่เป็น Visual สามารถใช้งานได้ง่าย แรกๆผมอ่านวิธีการใช้งานไม่กี่บรรทัดก็ใช้งานได้แล้ว ข้อดีอีกอย่างคือ Memo Strings นั้นเป็น Memo เต็มตัวเมื่อแสดงข้อมูลในฟิลด์ที่ยาวๆสามารถปัดบรรทัดได้ (word wrap)
  • ข้อด้อย อืม…..ในกรณีของผมดูเหมือน LazReport จะมี bug คือถ้าสร้าง Report แบบ Master – Detail จะเกิด Error ที่ component ของ LazReport บางครั้งโปรแกรมของผมรันผ่าน บางครั้งไม่ผ่านจนรำคาญต้องไปลองดูตัว Fortes Report ที่จะว่ากันต่อไป ข้อด้อยอีกอย่างคือไฟล์แสดง Definition ของ report ที่ผมกล่าวไปแล้วคือ .lrf ไม่สามารถแปลงเป็น resource ได้เวลาจะนำไฟล์โปรแกรมไปใช้ที่ไหนก็ต้องพ่วงไปด้วย ถ้าสามารถแปลงเป็น resource ได้เวลา build แค่มารวมกับไฟล์ execute ของโปรแกรมคงไม่กี่พันไบต์

Fortes Report

  • component ตัวนี้ดั้งเดิมเป็นของบริษัทฯ Fortes Informatica สัญชาติบราซิล ดูใน wesite แล้วรุ่นสุดท้ายประมาณปี 2004 แล้วไม่มีการพัฒนาต่อ Fortes Report ออกแบบมาใช้กับ Delphi32 ผมเข้าใจว่าของดั้งเดิมน่าจะมีลิขสิทธิ์ แต่ไม่ทราบอีท่าไหนมีโปรแกรมเมอร์ชาวบราซิลอีกชุดหนึ่งนำโค๊ดมาเปิด น่าจะได้รับการอนุญาตจากเจ้าของเดิมเป็นที่เรียบร้อยแล้ว
  • ผมเข้าใจว่า Fortes Report น่าจะขายไม่ได้คือตายๆไปพร้อมกับ Borland Delphi แต่ก็น่าดีใจว่ามีคนนำมาพัฒนาต่อแล้วเปิดเป็น LGPL ซึ่งก็คือฟรีและเปิดโค๊ด ผมชอบใจ Fortes Report ในรุ่นของ Lazarus มากคือเท่ห์ ถึงไม่ได้เร็วแบบ LazReport แต่แทบไม่มี bug มากวนใจเลยครับ

การติดตั้ง

  • ผมลองดาวน์โหลดโค๊ดจากที่ต่างๆแล้วเช่น sourceforge ไม่สามารถ compile และติดตั้งผ่านใน Lazarus เลย ที่จะแนะนำคือให้ใช้ subversion (svn) เท่านั้น
  • ถ้าเป็น linux ใช้คำสั่งนี้ได้เลย

svn co https://fortes4lazarus.svn.sourceforge.net/svnroot/fortes4lazarus fortes4lazarus

  • ถ้าเป็นบนวินโดส์ ถ้าติดตั้ง TortoiseSVN ไว้แล้ว สร้างโฟลเดอร์เพื่อเก็บโค๊ดของ Fortes Report สมมติว่าผมสร้างโฟลเดอร์ชื่อ fortes4lazarus เรียบร้อยใช้ Explorer คลิกขวาแล้วเลือกเมนูของ TortoiseSVN คือ SVN Checkout… ใส่ https://fortes4lazarus.svn.sourceforge.net/svnroot/fortes4lazarus/trunk ตรงช่อง URL of repository
  • ต่อไปก็เป็นกระบวนการดาวน์โหลดเพื่อดึง sourcecode ของ fortes report มาไว้บนเครื่องคอมพิวเตอร์ของเรา

การติดตั้ง

  • เมื่อได้ sourcecode มาแล้วทำการติดตั้ง package ก็คล้ายๆกันของ LazReport ที่ผมกล่าวไปแล้ว จะเห็นชุดของ component ของ fortes report ดังรูปด้านล่าง
Fortes Report บน palette ของ Lazarus
  • จะเห็นเครื่องมือหลายอย่างค่อนข้างจะลายตา ค่อนข้างจะครบครัน มี barcode ให้ใช้ด้วย และตัวที่ช่วย export ตัว report เป็น HTML, pdf, CSV หรือแม้กระทั่ง Excel

การใช้งานอย่างย่อ

  • สมมติว่ามีตัวแปรต่อ Database เรียบร้อยแล้วหรือใช้เครื่องมือจำพวก ZeosLib ก็สะดวกดีเหมือนกัน ขั้นตอนแรกสร้างฟอร์มเพื่อจะลากวาง component ลงบนฟอร์ม จะต่างกับ LazReport ตรงไม่มี Visual Designer แต่ก็ไม่ยากอะไรนัก จับลากวาง set property อะไรประมาณนี้
  • อันดับแรกลากวาง TRLReport มาวางบนฟอร์มก่อน พอวางปุ๊บ ก็กลายเป็นกระดาษมีหน่วยเซ็นติเมตร ให้เราได้ออกแบบ report ได้ง่ายทั้งแนวราบและแนวดิ่ง
การออกแบบ report ด้วย Fortes Report
  • เมื่อวาง TRLReport ผมตั้งชื่อว่า rptManDetail ตัวนี้เป็นตัวหลัก ตัวอื่นจะต้องลากมาวางบนตัวนี้เท่านั้น อันดับต่อไปคือลาก Band มาวาง Band ที่วางไปแล้วสามารถตั้งได้ว่าเป็นแบบไหนทีหลังได้แก่ Title, ColumnHeader, ColumnFooter, Header, Footer ,Summary, Detail

การใส่ฟิลด์

  • พอวาง Band เสร็จ ก็ลาก TRLLabel ไปวางบน Band การใส่ฟิลด์ของ Dataset จะใส่ผ่านช่องนี้ ดูรูปด้านล่างประกอบ
การ set property ใส่ชื่อฟิลด์

การกำหนด Master – Detail

  • ผมขอขยายความ report แบบ Master – Detail อีกนิดหนึ่่งว่าคือรายงานที่ประกอบไปด้วยตัวหลัก เช่นถ้าเป็นระบบ Timesheet ลูกจ้าง(Employee) แต่ละคน เป็น Master ตัว Detail ได้แก่ชั่วโมงทำงานของแต่ละคนในแต่ละวันเรียงลงมาเป็น period อาจจะเป็นสัปดาห์หรือหนึ่งเดือนก็แล้วแต่จะกำหนด
  • ถ้าดูฟอร์มของผมจะเห็น Master-Detail มาดูกันนิดว่าจะ assign ใน Lazarus อย่างไร ตัว Fortes Report จะมองหา Datasource แทนที่จะเป็น Dataset อย่างใน LazReport

ความสัมพันธ์ Mater-Detail

  • ผม drop TDatasource ลงบนฟอร์มสองตัวตั้งชื่อว่า Master กับ Detail และก็ drop TSQLQuery ตามลงไปสองตัว ตั้งชื่อว่า SQLMast และ SQLDetail ตามลำดับ มาดูความสัมพันธ์

Master.Dataset := SQLMast;

SQLMast.Database := FDBConnect;

SQLMast.Transaction := FTrans;

Detail.Dataset := SQLDetail;

SQLDetail.Database := FDBConnect;

SQLDetail.Transaction := FTrans;

SQLDetail.Datasource := Master     //**** บรรทัดนี้สำคัญมากสำหรับ Master – Detail

  • และที่สำคัญคือการ Query ใน SQLMast และ SQLDetail จะส่ง parameter ให้กันอย่างไรดูรูปด้านล่างประกอบ
การส่งผ่านพารามิเตอร์อของการ Query

ผลลัพธ์

  • มาดูผลลัพธ์ของรายงานที่ได้
ผลลัพธ์ที่ได้จาก Fortes Report

การ Export รายงานเป็น Excel

  • ก็ขอเพิ่มเติมผมเห็นว่าเป็นฟีเจอร์ที่ค่อนข้างดีสำหรับ Fortes Report ทำการ drop “TRLXLSFilter” ลงไปบนฟอร์มที่มี Fortes Report อยู่ดังรูปตั้ง property ตัว Display Name = Export To Excel
เพิ่มฟีเจอร์ในการ export รายงานเป็น Excel
  • พอจะพิมพ์รายงานจะมี icon รูป diskette คลิกเพื่อทำการ export เลือก filter เป็น “Export To Excel” ตามที่เราตั้งไว้ แล้วใส่ชื่อไฟล์
Export รายงานเป็น Excel

ข้อดีและข้อด้อย

  • ข้อดีคือใช้ง่ายไม่มีปัญหา สามารถ Export ข้อมูลจากรายงานได้หลากหลายฟอร์แม็ตมากกว่า LazReport ข้อเสียดูจะใช้งานยากกว่า LazReport นิดเดียว เมื่อใช้งานบ่อยๆก็จะเป็นเรื่องง่ายๆ

Related

Leave a Reply Cancel reply

Your email address will not be published. Required fields are marked *

October 2026
M T W T F S S
 1234
567891011
12131415161718
19202122232425
262728293031  
« Sep    

Blog Stats

There was an issue retrieving stats. Please try again later.

Recent Posts

  • เร็วแรงทะลุนรกกับ POCUT (POint Cloud UTils)
  • อัพเดทแอพ “SurveyStar LDP Thailand” เพื่อรับกับยกร่างมาตรฐาน “TH-LDP”
  • ออกแอพใหม่ SurveyStar Traverse Pro สืบสานงานคำนวณวงรอบ ตอนที่ 2
  • ออกแอพใหม่ SurveyStar Traverse Pro สืบสานงานคำนวณวงรอบ ตอนที่ 1
  • โปรแกรมอรรถประโยชน์ Pocut (POint Cloud Utils)
  • โปรแกรมแปลงไฟล์แคดข้ามระบบพิกัด (Drawing Transformer)
  • มาตรฐานระบบพิกัดแผนที่แบบแอลดีพีของประเทศไทยสำหรับงานวิศวกรรมและการก่อสร้าง (Thailand Low Distortion Map Coordinate System for Engineering and Construction)
  • ประสบการณ์ใช้งาน Kimi K3 Code เขมือบแบบสยอง
  • สร้างแพลตฟอร์มดู Point Cloud บนเว็บด้วย Potree + CesiumJS — เรื่องเล่าจากสนามบินอู่ตะเภา
  • เมื่อวิศวกรสำรวจคำนวณเรื่องน้ำ – วิเคราะห์ระบบระบายน้ำบริเวณ RESA
  • แนะนำหนังสือ “จีออเดซี” ที่ยอดเยี่ยมของดร.พุทธิพล
  • ESPrtk ทำให้ ESP32 ใช้ไม่ได้? วิธีกู้คืน
  • กรณีศึกษา – คืนชีพ SDL30 ปี 2000 ด้วย ESP32 และแอพทำเอง SDL30 Collector
  • DIY RTK Base Station (survey-grade) รุ่น V3.21 ด้วย Raspberry Pi 2B + UM980 เมื่อคุณปู่กลับมาเป็นฮีโร่ ตอนที่ 4
  • รีวิวกูปรี (CoPre2) โปรแกรมประมวลผลไลดาร์จากค่าย CHCNav
  • DIY RTK Base Station (survey-grade) รุ่น V3.2 ด้วย Orange Pi 3 Zero + UM980 ตอนที่ 3
  • DIY RTK Base Station (survey-grade) รุ่น V3 ด้วย Orange Pi 3 Zero + UM980 ตอนที่ 2
  • เส้นทางและไทม์ไลน์ของใบรับรองความรู้ความชำนาญในการประกอบอาชีพวิศวกรรม(สำรวจ)ระดับวิศวกรวิชาชีพ
  • มัดแหนมรวมสามโปรแกรมไปใช้บนสโตร์ Snap ฝั่งลีนุกซ์
  • ปัดฝุ่น Traverse Pro เพิ่มรายละเอียดรายการคำนวณใหม่แบบแนวนอน (Landscape) และธีมมืด
  • DIY RTK Base Station (Survey-Grade) ด้วยชิป UM980 และบอร์ด ESP32 ตอนที่ 1
  • สร้าง NTRIP Caster ด้วย BNC บนคลาวด์แบบ DIY สำหรับ RTK Base Station ใช้ CHCNav P5
  • จับ AI มาไตรกรีฬา สร้างตัวติดตั้ง Snap สำหรับ Surveyor Pocket Tools กับประเด็นแฝงเร้นความเป็นส่วนตัวของผู้ใช้
  • ทดสอบรีด QGIS แบบโหดสัสด้วยชุดข้อมูล Open Building V3 โพลีกอน 74 ล้านหลัง
  • เมื่อ AI เป็นพิษชักจูงผู้ใช้ด้วยข้อมูลผิดๆ

Subscribe to Blog via Email

Enter your email address to subscribe to this blog and receive notifications of new posts by email.

Join 122 other subscribers

Archives

  • October 2026
  • September 2026
  • August 2026
  • July 2026
  • May 2026
  • April 2026
  • March 2026
  • January 2026
  • December 2025
  • November 2025
  • September 2025
  • August 2025
  • July 2025
  • June 2025
  • May 2025
  • January 2025
  • December 2024
  • November 2024
  • October 2024
  • September 2024
  • July 2024
  • May 2024
  • April 2024
  • January 2024
  • November 2023
  • October 2023
  • September 2023
  • July 2023
  • June 2023
  • May 2023
  • March 2023
  • February 2023
  • January 2023
  • November 2022
  • October 2022
  • September 2022
  • July 2022
  • May 2022
  • December 2021
  • October 2021
  • September 2021
  • August 2021
  • May 2021
  • February 2021
  • January 2021
  • December 2020
  • November 2020
  • October 2020
  • September 2020
  • July 2020
  • June 2020
  • May 2020
  • April 2020
  • March 2020
  • February 2020
  • January 2020
  • December 2019
  • November 2019
  • September 2019
  • August 2019
  • July 2019
  • May 2019
  • April 2019
  • March 2019
  • February 2019
  • January 2019
  • November 2018
  • October 2018
  • September 2018
  • August 2018
  • July 2018
  • June 2018
  • May 2018
  • April 2018
  • March 2018
  • January 2018
  • November 2017
  • July 2017
  • June 2017
  • May 2017
  • April 2017
  • March 2017
  • February 2017
  • January 2017
  • December 2016
  • November 2016
  • October 2016
  • August 2016
  • November 2015
  • March 2015
  • August 2014
  • March 2014
  • January 2014
  • December 2013
  • February 2012
  • January 2012
  • November 2011
  • October 2011
  • August 2011
  • April 2011
  • February 2011
  • December 2010
  • November 2010
  • October 2010
  • September 2010
  • June 2010
  • April 2010
  • March 2010
  • January 2010
  • December 2009
  • November 2009
  • October 2009
  • September 2009
  • August 2009

Recent Comments

  • priabroy on ออกแอพใหม่ SurveyStar Traverse Pro สืบสานงานคำนวณวงรอบ ตอนที่ 1
  • Konexana Yomleuangsa on ออกแอพใหม่ SurveyStar Traverse Pro สืบสานงานคำนวณวงรอบ ตอนที่ 1
  • เฟือง เถา on DIY RTK Base Station (survey-grade) รุ่น V3.21 ด้วย Raspberry Pi 2B + UM980 เมื่อคุณปู่กลับมาเป็นฮีโร่ ตอนที่ 4
  • priabroy on DIY RTK Base Station (survey-grade) รุ่น V3.21 ด้วย Raspberry Pi 2B + UM980 เมื่อคุณปู่กลับมาเป็นฮีโร่ ตอนที่ 4
  • ตรันฟองนาม on DIY RTK Base Station (survey-grade) รุ่น V3.21 ด้วย Raspberry Pi 2B + UM980 เมื่อคุณปู่กลับมาเป็นฮีโร่ ตอนที่ 4
©2026 Prajuab Riabroy's Blog | Design: Newspaperly WordPress Theme