วันพฤหัสบดีที่ 4 กรกฎาคม พ.ศ. 2556

มาทำรายงานกัน (ต่อ)


มาทำรายงานกัน (ต่อ)


บทความที่แล้วพูดถึง  “วิธีการคิด” ภาพรวม ... อาจจะดูซับซ้อนไปนิด (ดูบ่อยๆ ก็คุ้นๆน๊ะครับ)
ตย.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 ก็ต้องกำหนดยุ่งยากคล้ายกัน)
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 ครั้ง  หัวกระดาษจะมองไม่เห็น 
       (ทางแก้ไขคือ  พิมพ์เส้นใต้  "ก่อน"  พิมพ์อักษร)