Archive

Archive for สิงหาคม, 2011

ระบบการวัดพิกัด (Positioning) ใต้ทะเล

Underwater positioning and navigation systems

  • ก็ขอแปลตรงตัวก็แล้วกันว่า ระบบการวัดพิกัดใต้ทะเล งานที่เราเรียกกันว่างาน Offshore ได้แก่งานสำรวจหา oil & gas หรือสำรวจเพื่อการก่อสร้างเช่นการวางท่อแก็ส การวางสายไฟฟ้า การวางสาย Fiber optic การติดตั้งแท่นขุดเจาะน้ำมัน หรืองานสำรวจทรัพยากรทางทะเล เป็นต้น งานเหล่านี้ถ้าต้องใช้เครื่องจักรใต้น้ำเช่น ROV (Remote Operated Vihicle) (สำหรับน้ำลึกเกินขึดของนักประดาน้ำจะดำได้) ไปปฎิบัติการใต้น้ำ จะหาตำแหน่งของ ROV ได้อย่างไร ติดตั้ง GPS ไม่ได้แน่นอนเพราะอยู่ใต้น้ำ
  • ในบางกรณีที่ต้องใช้นักประดาน้ำก็สามารถติดตั้งเครื่องมือเหล่านี้ที่หลังนักประดาน้ำได้เช่นเดียวกัน

อุปกรณ์

  • จะประกอบไปด้วยอุปกรณ์อยู่สองอย่างคือ Transmitter (Transducer) เป็นตัวส่งคลื่นเสียง ติดตั้งอยู่ที่เรือ ส่วนอีกส่วนเรียกว่า Receiver (Transponder) เป็นตัวรับคลื่นเสียงและสะท้อนกลับไปที่ Transducer และจะมีโปรแกรมสำหรับประมวลผลเพื่อหาพิกัดและความลึก
  • ระบบการวัดพิกัดใต้ทะเลจะมีอยู่สามแบบขึ้นอยู่กับอุปกรณ์และความลึกได้แก่
    1. Ultra Short Baseline(USBL) หรือเรียกอีกอย่างว่า Super Short Baseline (SSBL)
    2. Short Baseline (SBL)
    3. Long Baseline (LBL)

Ultra Short Baseline (USBL)

  • เป็นระบบที่เล็กและใช้อุปกรณ์น้อย การติดตั้งอุปกรณ์ที่ด้านข้างหรือใต้ท้องของเรือจะเรียกว่า array of transducer คือจะมี transducer มากกว่า 3 ตัวเรียงเป็นแนวเส้นตรงห่างกันตัวละประมาณ 10 cm. ที่ต้องมีหลายตัวเพราะจะเป็นตัววัดมุม (angle) ไปยัง transponder ที่อยู่ใต้น้ำ

ภาพจาก http://www.km.kongsberg.com

  • การประยุกต์ใช้งาน รูปด้านล่างจะติดตั้ง transpoder ที่ ROV

ภาพจาก http://www.sonardyne.co.uk

Short Baseline (SBL)

  • การติดตั้งอุปกรณ์ transducer มากกว่า 3 ตัวที่ใต้ท้องเรือ แต่ละตัวจะติดตั้งห่างกันประมาณ 10-50 เมตร เมื่อคลี่นเสียงถูกส่งไปจาก transducer จากตัวเรือคลื่นเสียงจะสะท้อนจาก transponder ที่อยู่ใต้น้ำจะได้ระยะทาง (Range) ซึ่งสามารถนำไปคำนวณหาพิกัดของ transponder เป้าหมายได้

ภาพจาก http://www.km.kongsberg.com

  • การประยุกต์ใช้งาน รูปด้านล่างจะติดตั้ง transponder ที่ ROV

ภาพจาก wikipedia

 Long Baseline (LBL)

  • เป็นระบบที่ใช้อุปกรณ์มากที่สุดและให้ความละเอียดดีที่สุด การติดตั้งอุปกรณ์จะติดตั้ง transponder มากกว่า 3 ตัวบนพื้นท้องทะเล

ภาพจาก http://www.sonardyne.co.uk

Topside Unit

  • การคำนวณหาพิกัดใต้ทะเลจะใช้โปรแกรมบนเครื่องคอมพิวเตอร์เฉพาะแล้วแต่ผู้ผลิด หรืออาจจะเป็น Topside Unit ดังรูปด้านล่าง

ภาพแสดง Topside Unit และ Transducer ยี่ห้อ Applied Acoustic

การประยุกต์ใช้งานในองค์กรของผม

  • สืบเนื่องจากบริษัทฯที่ผมทำงานอยู่ประมูลได้งานวางสายเคเบิลเป็นสายไฟฟ้าขนาด 115 Kv จากอ.ขนอมไปเกาะสมุย ระยะทางในการวางสายประมาณ 54 กม. เจ้าของงานคือกฟภ. งานก่อสร้างจะเริ่มในปีหน้า(2555) ช่วงนี้เป็นช่วงสั่งผลิตสายไฟฟ้าที่นอรเวย์ ประสบการณ์ตอนนี้ก็นับว่าเป็นงานที่ 3 แล้ว รูปด้านล่างเป็นเครื่องจักรในการวางสายไฟฟ้าใต้ทะเล(Cable Laying Barge) ผลิตและปรับปรุงขึ้นเอง

เครื่องจักรสำหรับวางสายไฟฟ้าใต้ทะเล

  • ส่วนตัวที่ขุดเป็นร่องในการวางสายเรียกว่า Jet Sled ซึ่งอุปกรณ์ตัวนี้ที่จะติดตั้ง USBL เพื่อหาพิกัดใต้น้ำ

Jet Sled ที่ติดตั้งอุปกรณ์ USBL

  • สนนราคาของ USBL ประมาณสองล้านบาท ราคาขนาดนี้ไม่ต้องพูดถึงว่าระบบ SBL หรือ LBL ราคาคงปริ๊ดครับ
Categories: Surveying ป้ายกำกับ:, , , , , , ,

การติดตั้งและการใช้งาน Firebird บน Ubuntu/Ubuntu Server

ฐานข้อมูล Firebird

  • Firebird ในฐานะที่เป็นฐานข้อมูล RDBMS จำพวกเดียวกันกับ MySQL, Postgresql ฟรีและเปิดโค๊ดเช่นเดียวกัน ที่สำคัญคือทุกตัวนั้น cross-platform แต่ถ้าดูจำนวนผู้ใช้แล้ว MySQL กินขาดเอาแค่ใช้กับ Web Application ก็ยังไม่มีฐานข้อมูลไหนมาเทียบเคียงได้ จำนวนผู้ใช้ Firebird เป็นรอง Postgresql อยู่พอสมควร
  • ในฐานะความเรียบง่ายและเร็วแล้วผมคิดว่า Firebird น่าจะเป็น choice แรก ดูการทดสอบเปรียบเทียบระหว่าง Firebird,MySQL,Postgresql แต่การเปรียบเทียบพรรค์นี้นะดูเอาเป็น reference ก็แล้วกัน (คล้ายๆกับถามว่ารถ Toyota, Honda ใครเจ๋งกว่ากัน ถกกันไม่จบ)  ดูการเปรียบเทียบที่ postgresql กินขาดได้ที่นี่
  • post ใน blog ตอนนี้ถือว่าเป็นบันทึกช่วยจำของผมก็แล้วกัน ผมมีเกร็ดขำๆเล็กน้อยก็คือชื่อ Firefox ตัว Web browser ที่เราคุ้นเคยกันอยู่ตอนแรกปี 2003 Mozilla Foundation ได้เปลี่ยนชื่อจาก Phoenix มาเป็น Firebird ปรากฏว่ามาชนกับชื่อฐานข้อมูล Firebird ที่มีอยู่ก่อนแล้ว ซึ่งจะทำให้ประชาชนสับสนกันใหญ่ถ้าต้องค้นหาใน Search Engine กว่าจะเปลี่ยนมาใช้ชื่อใหม่คือ Firefox ก็หนึ่งปีให้หลัง

การติดตั้งบน Ubuntu Server

  • ตอนติดตั้ง Ubuntu Server จะไม่มีลิสต์ให้เลือกเหมือนกับ MySQL (มากับ LAMP)  ต้องมาติดตั้งภายหลังซึ่งไม่ได้ยากเย็นอะไรเพราะฐานข้อมูล Firebird มีอยู่ใน repository อยู่แล้ว ก่อนอื่น update ตัว cache repository เสียก่อน

$sudo apt-get update

  • ขณะนี้ Firebird เป็นรุ่น 2.5 ติดตั้งด้วยคำสั่งดังต่อไปนี้ ซึ่งถ้า internet เร็วก็แป๊บเดียวประมาณ 5 MB

$sudo apt-get install firebird2.5-super

การ Config

  • ในขณะติดตั้ง Firebird จะสร้าง user ชื่อ firebird และ group ชื่อ firebird ให้อัตโนมัติตรวจสอบได้ด้วยคำสั่งดังนี้

$cat /etc/passwd

  • จะเห็นบรรทัดที่แสดงชื่อ user “firebird” ดังนี้

firebird:x:113:123:Firebird Database Administator,,,:/var/lib/firebird:/bin/bash

  • ดู directory ชื่อ /var/lib/firebird เอาไว้ให้ดีๆ เป็น home ของ firebird ที่เป็น default ไดเรคทอรี ในอนาคตเราจะนำไฟล์ฐานข้อมูลมาไว้ที่นี่ จากนั้นพิมพ์คำสั่งเพื่อ config ตัว Firebird server ดังนี้

$sudo dpkg-reconfigure firebird2.5-super

  • ขั้นตอนการ config จะถามว่าต้องการรัน Firebird Server ในขณะเริ่มต้น Linux หรือไม่เลือกตอบ <Yes>

  • ขั้นตอนต่อไปป้อน password ปกติแล้วชื่อ root ผู้ดูแล Firebird Server คือ SYSDBA เมื่อป้อน password แล้วให้จดไว้ในที่ปลอดภัย ไม่ควรใช้ masterkey  เพราะเป็นค่า default ทำให้คนเข้ามาเจาะได้ง่าย พ้นขั้นตอนนี้ก็เป็นอันเรียบร้อย

การตั้ง password สำหรับ user ชื่อ firebird

  • ก็อย่างที่ผมบอกไปแล้วว่าตอนติดตั้งจะสร้าง user & group ชื่อ “firebird” มาให้อัตโนมัติ ผมจะป้อน password ของ firebird สมมติว่า “143firebird” ใช้คำสั่งต่อไปนี้

$sudo passwd firebird

Enter new UNIX password:                    #ป้อนคำว่า 143firebird
Retype new UNIX password:                #ป้อน 143firebird อีกครั้ง
passwd: password updated successfully

  • password ของ user & group ชื่อ “firebird” นั้นสำคัญไฉน ในกรณีแชร์ไฟล์ผ่านทาง Samba file server เวลา Remote จากเครื่อง client เข้าไปหา server ของ firebird (client อาจจะเป็นวินโดส์) เพื่อทำการ copy ลบไฟล์ข้อมูลจากไดเรคทอรี home ของ firebird ถ้าเป็นรุ่น 2.5 ชื่อไดเรคทอรีเต็มๆคือ /var/lib/firebird/2.5/data การ remote เข้าจะถูกถาม user และ password ถ้าเป็นตัวอย่างของผม user ก็ป้อน firebird ส่วน password ป้อน 143firebird เข้าไปก็จะ remote เข้าไปได้ (เกือบลืมไปถ้าแชร์ด้วย samba จะต้องเพิ่ม user ให้ตรงกับของระบบคือ user ชื่อ firebird ด้วยคำสั่ง #sudo smbpassswd -a firebird ป้อน password ให้ตรงกันด้วยคือ 143firebird)

การ copy ฐานข้อมูล Firebird ไปไว้ที่ Home

  • หลังจากติดตั้ง Ubuntu server แล้ว จะเป็น command line ล้วนๆ สมมติว่าเรามีฐานข้อมูล Firebird อยู่แล้วต้องการ copy ไปไว้ที่ /var/lib/firebird/2.5/data ผ่านคำสั่ง sudo cp ตัวอย่างเคสเราเอาข้อมูลใส่ใน thumb drive เสียบเข้าเครื่อง server จะไม่มีการ mount ให้อัตโนมัติเหมือน Ubuntu Desktop จะต้องเมาท์ด้วยมือ สมมติว่าเมาท์แล้วทำการ copy ข้อมูลดังต่อไปนี้

$sudo cp employeedb.fdb /var/lib/firebird/2.5/data

การเปลี่ยนสิทธิ์ของไฟล์ฐานข้อมูล

  • เมื่อ copy ไปแล้วด้วยสิทธิ์ของ root สิทธิของไฟล์ก็จะเป็นของ root ไปด้วยต้องทำการเปลี่ยนสิทธิ์มาเป็น user & group ชื่อ “firebird” ไมงั้นโปรแกรมจำพวก Administrative Tools เช่น FlameRobin, EMS SQL Manager for Firebird หรือ Firebird Maestro จะไม่สามารถใช้ฐานข้อมูลได้ การเปลี่ยนสิทธิ์ใช้คำสั่งบรรทัดด้านล่างต่อไปนี้

$sudo chown firebird.firebird /var/lib/firebird/2.5/data/employeedb.fdb

Firebird Administrative Tools

  • ฝั่ง Linux ไม่ค่อยจะมี Administrative Tools หลากหลายเช่นเดียวกับฝั่งวินโดส์ เพราะทูลส์ที่ว่าเป็นด้านการค้าเช่น EMS SQL Manager for Firebird หรือ Firebird Maestro ที่เป็นทูลส์ มีอายุการใช้งานเต็มเวอร์ชั่นอยู่ 1 เดือนหลังจากนั้นจะเป็น free version ปิดฟีเจอร์หลายอย่างหลังจากผ่านไปแล้ว 30 วัน แต่ผมค่อนข้างชอบใจมากทั้งคู่
  • FlameRobin เป็น Administrative Tools เหมือนกันแต่ฟีเจอร์น้อยกว่ามาก cross-platform ได้ ไม่มีฟีเจอร์สำหรับแก้ไขข้อมูลได้ การติดตั้งใน Ubuntu ทำได้ด้วยคำสั่ง

$apt-get install flamerobin

การ Connect ฐานข้อมูล Firebird Server ด้วย Lazarus

  • ก็ขอเขียนสักหน่อย ความจริงไม่ได้ตั้งใจว่าจะเกี่ยวกับโปรแกรมมิ่งสักเท่าไหร่ ก็จากที่ผมเขียนมาด้านบนว่าถ้าฐานข้อมูลเราเก็บไว้ที่ /var/lib/firebird/2.5/data เราจะใส่ connection string อย่างไรเพื่อให้โปรแกรมที่เขียนไว้บนเครื่อง client ไม่ว่าจะพัฒนา Lazarus ด้วยวินโดส์หรือลินุกซ์ สามารถ connect เข้า Firebird Server ได้
  • สมมติว่า Server อยู่บนวงแลนเดียวกัน Server มี IP Address : 192.168.1.200 ส่วนเครื่อง client ที่รัน Lazarus มี IP Address 192.168.1.20

procedure TfrmMain.TestConnectDatabase;

var
  FDBConnected : TIBConnection;
  FTrans : TSQLTransaction;
begin
  FDBConnected := TIBConnection.Create(NIL);
  FTrans := TSQLTransaction.Create(NIL);

  FDBConnected.Transaction := FTrans;
  FTrans.Database := FDBConnected;

  FDBConnected.Database := 'var/lib/firebird/2.5/data/employeedb.fdb'; //ถ้าไม่ได้ aliases ต้องใส่ path เต็ม
  FDBConnected.HostName := '192.168.1.200';  //Firebird Server อยุ่บน Ubuntu Server บน IP นี้
  FDBConnected.UserName := 'SYSDBA';     //default username
  FDBConnected.Password := 'masterkey';    //default password

  FDBConnected.Active := true;

end;

  • แต่ถ้าฐานข้อมูลไม่ได้อยู่บน Server คืออยู่บนเครื่องเราเองเปลี่ยน Host ดังนี้

FDBConnected.HostName := ‘localhost’;

การ Aliases

  • Alias ถ้าแปลก็คือชื่อ ฉายา หรือนามแฝง เวลาอ้างอิงชื่อ Database ไม่ต้องใส่ path ยาวๆ การ config ทำได้โดยการไปแก้ไขไฟล์ aliases.conf ด้วยคำสั่ง

$sudo nano /etc/firebird/2.5/aliases.conf

  • เพิ่มบรรทัดเข้าไป (สมมติว่าผมมีฐานข้อมูลชื่อ employeedb.fdb)

employee = /var/lib/firebird/2.5/data/employeedb.fdb

  • ทำการ Restart Firebird ใหม่ด้วยคำสั่ง

$sudo /etc/init.d/firebird2.5-super restart

  • เมื่อ alias แล้วการเขียนโปรแกรมด้านบนเปลี่ยน Database ดังนี้ (ไม่ต้องสนใจว่าเก็บที่ไหนใน Server ขอแค่อ้างชื่อได้ถูก)

FDBConnected.Database := ‘employee’;

สรุป

  • สำหรับผมแล้วรัก Firebird เพราะว่าใช้มานานแล้วตั้งแต่ Delphi ไม่ค่อยมีปัญหาฐานข้อมูลสามารถเขียน Trigger, Store procedure รวมทั้ง UDF ได้ ใช้เป็นไฟล์เดี่ยวสามารถสร้าง Table อยู่ภายในได้ตั้งชื่อได้ตามใจชอบ มีความเสถียร จำนวน User สัก 1000-2000 คนผมคิดว่าสบายๆครับ แต่อย่างไรก็ตามขึ้นอยู่กับประสิทธิภาพของเครื่อง Server ด้วย CPU เร็วๆหน่อย แรมมากๆหน่อย คือ Firebird รันเป็น Service เมื่อมี user ทำการ access เข้ามาจะแตกเป็น Thread เพื่อรองรับผู้ใช้ ดังนั้นจะใช้ CPU และแรมมากขึ้น ถ้ามี user  เพิ่มขึ้น
Categories: Lazarus, Linux, Programming, Windows ป้ายกำกับ:, , , , ,

OpenGPSX เข้าไปอยู่ที่ Softpedia ให้ Download ได้ง่ายๆ

OpenGPSX

  • OpenGPSX คือ component ที่ผมพัฒนาด้วย Lazarus เพื่อเชื่อมต่อกับ GPS ในเบื้องต้นผ่านทาง Serial port จุดประสงค์เพื่อให้โปรแกรมเมอร์ท่านอื่นสามารถนำ component ไปใช้งานในโปรแกรมที่ต้องการต่อกับ GPS ได้ง่ายๆ

บ้านเดิมคือ Sourceforge

  • เดิมทีโครงการนี้ผมเปิดโค๊ดไว้ที่นี่ SourceForge ก็ที่ผ่านมาก็มีคนดาวน์โหลดไปพอสมควร ที่ว่าพอสมควรนี้ก็ไม่มากหรอกครับประมาณ 1200 ครั้ง เมื่อเทียบกับ Lazarus ที่ใช้กันในวงแคบก็ถือว่าพอได้ มีคนไทยดาวน์โหลดประมาณ 30% ก็ไม่รู้เป็นอย่างไร ดีหรือว่าแย่ก็ไม่ทราบได้ แต่ที่น่าแปลกคือผมดูสถิติแล้วกับเป็นโปรแกรมเมอร์ทางยุโรปซะเกินครึ่ง ก็แสดงพอมีแฟนๆของ Lazarus อยู่บ้าง

Softpedia ที่อยู่อีกที่ของ OpenGPSX

  • ประมาณ 2 เดือนที่ผ่านมาทางทีมงานของ sourceforge ได้แจ้งผมมาว่าจะเพิ่มช่องทางการดาวน์โหลด โดยนำ OpenGPSX สำหรับวินโดส์มาไว้ใน Softpedia ซึ่งสามารถเข้าไปดาวน์โหลดได้ที่ Softpedia ดูหน้าตาดังรูปด้านล่าง

OpenGPSX บน Softpedia

  • ก็ยังอยากพัฒนาเพิ่มฟีเจอร์บางอย่างให้ OpenGPSX ก็รอโอกาสดีๆคือว่างๆจากงานประจำมากหน่อยครับ
Categories: GPS, Lazarus, Linux, Programming, Windows ป้ายกำกับ:, , , , , ,

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

  • หายหน้าหายตาไปนานทีเดียว จนคนสงสัยว่าจะเลิกเขียน 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 นิดเดียว เมื่อใช้งานบ่อยๆก็จะเป็นเรื่องง่ายๆ
Categories: Lazarus, Linux, Programming, Windows ป้ายกำกับ:, , , , , ,
Follow

Get every new post delivered to your Inbox.

Join 26 other followers