มาทำรายงานกัน (ต่อ)
บทความที่แล้วพูดถึง
“วิธีการคิด” ภาพรวม ... อาจจะดูซับซ้อนไปนิด (ดูบ่อยๆ ก็คุ้นๆน๊ะครับ)
ตย.1 สร้างรายงาน ที่อ่านข้อมูล 100 %) ต่อไปนี้
รายงานที่ต้องการ
วิเคราะห์ รูปแบบรายงาน
จากแนวคิด ต้องออกแบบรายงาน โดยแบ่งพื้นที่ออกเป็นส่วนๆ
ได้แก่ ส่วนหัวกระดาษ (Head) ส่วนรายละเอียด (Detail) และ
ส่วนท้ายรายงาน (ในที่นี้ ผมไม่ได้ควบคุม Footer)
ส่วนหัว แยกเป็น ส่วนที่เป็น Standard (ประกาศให้รู้ว่า report มาจากอะไร) + ชื่อ Column - แสดงชื่อโปรแกรมที่เรียก (ให้ใช้ ตัวแปรจาก I-spec ด้วย SDS)
- Description
- วัน/เวลา ที่สั่งพิมพ์ วันที่ใช้ ตัวแปรพื้นฐานได้ *DATE
- หน้า (page) O-Spec มีตัวแปรให้
- ชื่อ Column (ขึ้นกับ data)
Tip ใน RPG/400 กำหนด Font ชนิด Underline ไม่ได้
ต้องสั่งพิมพ์ 2 ครั้ง (อักษร, เส้นใต้) มักจะใช้เทคนิคสั่งพิมพ์บรรทัดเดิม (บรรทัดแรก
สั่งพิมพ์ โดย “ไม่ขึ้นบรรทัดใหม่”
-> บรรทัดที่ 2 ตีเส้นใต้ แล้วขึ้นบรรทัดใหม่)
ส่วนรายการ ขึ้นกับ
data
ส่วนท้ายรายงาน บอกให้รู้ว่า สิ้นสุดแล้ว (ถ้าไม่แสดง ทำให้รู้ว่า
โปรแกรมหยุดทำงานแบบผิดปรกติ)
บางโปรแกรมจะเพิ่ม การแสดงสรุปที่จุดนี้ (จำนวนรวม)
ก่อนเขียน โปรแกรม
Q1: จะพิมพ์บน
รูปแบบกระดาษอย่างไร ? (ยุคใหม่ คือ
กระดาษ A4)
A1: เครื่อง Main
Frame. Mini Comp จะมี Line Printer ซึ่งพิมพ์ได้เร็ว
และใช้งานได้นาน (แพงด้วย) เช่น พิมพ์ pay
slip, รายงานสรุป (ที่ต้องเก็บไว้อ้างอิง) เป็นต้น
รูปแบบกระดาษ ของ AS/400 ที่มีมาให้คือ QPRINT, QSYSPRT, QUSRPRT
ดูรายละเอียดได้ด้วยคำสั่ง DSPFD QPRINT (ปรกติจะดูช่องที่แสดง)
Q2: จะพิมพ์ตำแหน่ง อะไร ? (ดูไม่ auto
–
ถ้าไปลองทำให้เหมือนใน MS Office ก็ต้องกำหนดยุ่งยากคล้ายกัน)รูปแบบกระดาษ ของ AS/400 ที่มีมาให้คือ QPRINT, QSYSPRT, QUSRPRT
ดูรายละเอียดได้ด้วยคำสั่ง DSPFD QPRINT (ปรกติจะดูช่องที่แสดง)
A2: การสั่งพิมพ์ ต้องควบคุมทีละ บรรทัด! เช่น
“เมื่อกระดาษ พร้อมจะพิมพ์”
เริ่มต้นพิมพ์ ส่วนหัวกระดาษ ให้เลื่อนกระดาษขึ้นไป 2 บรรทัด
ก่อนพิมพ์
ส่วนหัวกระดาษ ให้พิมพ์ข้อความ,ตัวแปร ที่ตำแหน่ง ... (นับจากท้าย หรือ นับถัดไป)
ส่วนหัวกระดาษ พิมพ์บรรทัดแรกเสร็จ ต้องพิมพ์ “ซ้ำ” อีกครั้ง แล้วจึงขึ้นบรรทัดใหม่
Source Code
คำอธิบาย Source Code
Format ของ Date ใช้แบบ YYYYMMDDใช้ File=SQ010L1 ,Input = อ่านอย่างเดียว ,Field อ้างอิงจาก External (ไม่กำหนดใน I-Spec) ,เปิดใช้ Key
ใช้ Printer File=QPRINT ,Output = บันทึกอย่างเดียว ,Field กำหนดในเอง (ใน O-Spec)
, ความกว้าง 132 อักษร, ใช้ *inOF เป็นตัวบอกว่าถึง OverFlow ของ Printer File แล้ว
, ควบคุมการเปิด/ปิด Printer File เอง (User Control)
ดึงชื่อ โปรแกรมผ่าน เป็นตัวแปร (ไม่ต้องไป fix ค่าใน O-spec)
ประกาศ F-Spec … UC ต้องสั่ง OPEN ก่อนใช้งาน Printer File
ก่อนพิมพ์ HED010 (Skip Before) เลื่อนกระดาษ 3 บรรทัด
ก่อนพิมพ์ HED010 (Space Before) เลื่อนกระดาษ (0 บรรทัด)
หลังพิมพ์ HED010 (Space After) เลื่อนกระดาษ 1 บรรทัด (ขึ้นบรรทัดใหม่)B = Blank ให้ Clear ค่านี้หลังพิมพ์
2= Edit Code(2) รูปแบบการพิมพ์ (มี comma, ไม่แสดงเครื่องหมาย -, ถ้าค่าเป็น 0 จะแสดงช่องว่าง, … (ดูตารางด้านล่าง)
รายงานที่ดูจาก OutQ
สังเกต เนื่องจากใช้เทคนิค พิมพ์ทับ 2 ครั้ง หัวกระดาษจะมองไม่เห็น
(ทางแก้ไขคือ พิมพ์เส้นใต้ "ก่อน" พิมพ์อักษร)
(ทางแก้ไขคือ พิมพ์เส้นใต้ "ก่อน" พิมพ์อักษร)