Tag: crystal report

  • upgrade crystal report version 10 ไปเป็น version 13

    เนื่องด้วยตอนนี้ crystal report version 10 มันเก่ามากแล้วทางผู้เขียนเลยอยากจะ upgrade crystal report version 10 ไปเป็น version 13 ดังนั้นจึงสรุปขั้นตอนไว้เพื่อเป็นแนวทางการทำงานของคนที่มีปัญหาเดียวกัน ดังนี้

    ขั้นตอนที่ 1 แก้ web.config ใน project web application โดยเปลี่ยนเลข version จาก 10.2.3600.0 เป็น 13.0.2000.0

    ขั้นตอนที่ 2 copy folder crystalreportviewers13 ใส่ไว้ที่ project web application

    ขั้นตอนที่ 3 แก้ page ที่เรียกใช้ crystal report โดยเปลี่ยนเลข version จาก 10.2.3600.0 เป็น 13.0.2000.0

    ขั้นตอนที่ 4 แก้ page ที่เรียกใช้ crystal report โดยเพิ่มการเรียก JavaScript ในส่วนของ tag head

    ขั้นตอนที่ 5 ลองเรียกใช้ page ที่มี crystal report ได้ผลลัพธ์ดังรูป

    ทางผู้เขียนหวังว่าจะมีประโยชน์ในการ upgrade crystal report version 10 ไปเป็น version 13 ใน source code ที่เรียกใช้ version เก่านะคะ

  • Crystal Report : Report หลายตัวหัวท้ายต่าง แต่ตรงกลาง Code เหมือนกัน จัดการอย่างไร (WinApp)

    หลาย ๆ ครั้งที่ท่านมีรายงานมากกว่า 1 ฉบับที่มีรูปร่างหน้าตาส่วนหัวกระดาษหรือท้ายกระดาษที่ต่างกัน แต่ส่วนของ Detail นั้นเหมือนกันอย่างกับแกะ และเจ้าส่วน Detail นี้ ดั๊นนนน เป็นเจ้า Detail ที่มีเงื่อนไขเยอะแยะ ยุบยับซับซ้อนซ่อนเงื่อน ถ้าจะให้สร้าง File เพื่อวาง Report Viewer เป็น 2 File หรือตามจำนวนรายงานก็ใช่ที่

    จากการที่ประสบพบเจอมากับตัว ส่วนหัว ส่วนท้าย ดั๊นนน ไม่คล้ายไม่เหมือนเลย แต่ข้อมูลตรงกลางนั้น ต้องใช้ข้อมูลชุดเดียวกัน เหมือนกัน ทีนี้ถึงกับกุมขมับเลยว่าจะทำยังไงดี ได้คำปรึกษาแนะนำจากพี่ชายที่แสนดี @wachirawit-j มาช่วยชี้แจงแถลงไข ถึงต้องรีบจัดการเก็บข้อมูลไว้ เผื่อครั้งหน้าเจออีกแล้วลืมจะได้กลับมาอ่านซ้ำ ไปดูกันเล้ยยยยยย

    ReportClass cr = new ReportClass();

    ตัวแปร cr ที่ประกาศนี้ จะเป็นตัวแปรที่ไว้ใช้ในอนาคตทั้งไฟล์ เป็นตัวแปรที่เป็นตัวเก็บค่าว่า จะเป็น Crystal Report File ตัวไหนและใช้สำหรับกำหนดค่า FormulaField เพื่อใช้กับ Report File นั้น ๆ ตัวอย่าง

    cr.DataDefinition.FormulaFields["ffType"].Text = "'Normal'";

    Code ข้างต้นเป็นการกำหนดค่าให้กับ Formula Field ที่ชื่อว่า ffType ในฝั่ง Crystal Report โดยกำหนดให้มีค่าเท่ากับข้อความว่า “Normal” ซึ่งจะเห็นว่ามีการใช้ตัวแปร cr ในการดำเนินการ

    Code ส่วนอื่น ๆ ที่มีการกำหนดค่าก็จะมีการเรียกตัวแปร cr นี้เหมือนกัน ซึ่ง cr จะเป็นตัวที่บอกว่าคือ Crystal Report File ไหน

    private class CRModel
    {
       public RptNormal crNormal {get; set;}
       public RptSpecial crSpecial {get; set;}
    }

    Code ข้างต้นเป็นการสร้าง Class ชื่อว่า CRModel มีสมาชิกภายใน Class 2 Report นั่นคือ RptNormal.rpt กำหนดให้ใช้ตัวแปร crNormal และ RptSpecial.rpt กำหนดให้ใช้ตัวแปร crSpecial

    จากนั้นในส่วนของการตรวจสอบว่าจะใช้ Report ตัวไหนหรือการกำหนด report ให้กับ Reportsource เป็นดังนี้

    if(rptType == "normal") //ตรวจสอบว่าเป็นรายงานประเภทปกติ?
    {
       crModel.crNormal = new RptNormal(); //กำหนด crNormal ให้เป็นรายงาน RptNormal
       SetValue(crModel, rptType); //เรียก Method กำหนดค่าต่าง ๆ ในรายงาน
       crystalReportViewer1.ReportSource = crModel.crNormal; //กำหนด Reportsource ให้มีค่าเป็น crNormal
    }
    else
    {
       crModel.crSpecial = new RptSpecial(); //กำหนด crNormal ให้เป็นรายงาน RptSpecial
       SetValue(crModel, rptType); //เรียก Method กำหนดค่าต่าง ๆ ในรายงาน
       crystalReportViewer1.ReportSource = crModel.crSpecial; //กำหนด Reportsource ให้มีค่าเป็น crSpecial
    }
    private void SetValue(CRModel objCR, string rptType)
    {
       if(rptType == "normal")
       {
          cr = objCR.crNormal
       }
       else
       {
          cr = objCR.crSpecial
       }
    
       #Region Code ส่วนกำหนดค่าให้กับ cr 
    
          cr.DataDefinition.FormulaFields["ff1"].Text = "'123'";
          cr.DataDefinition.FormulaFields["ff2"].Text = "'456'";
    
       #endRegion
    }

    เพียงเท่านี้ก็จะสามารถจัดการ Code ที่ File เดียวได้แล้ว เย้!

    ถ้าผู้อ่านมีวิธีที่ดีกว่า สะดวกกว่า สามารถแนะนำได้นะคะ จะขอบคุณยิ่งเลยค่า ^/\^ และหวังว่าจะมีประโยชน์ต่อผู้อ่านไม่มากก็น้อยนะคะ จนกว่าจะพบกันใหม่ สวัสดีค่ะ 🙂

  • Crystal Report : รูปที่ใส่ไป ทำไม size ถึงกลับไป(ใหญ่)เท่าเดิม

    เคยหรือไม่ ที่ใส่รูปลงไปในรายงาน จากนั้นหากต้องการ Config ค่าของรูปนั้น เมื่อจัดการเสร็จ กด OK ออกมา รูปที่ท่านใส่ไปนั้น กลับขยายกลายร่างกลับสู่ขนาดจริง

    ซึ่งบางครั้งหากท่านไม่ได้มีการย่อขนาดรูปให้ตรงตามที่ต้องการก่อนแต่ใช้วิธี Config ในส่วนของ Object Picture แทน ท่านอาจจะเจอปัญหานี้กันบ้าง

    วิธีแก้ไขง่ายมากๆๆๆๆๆๆๆ หลาย ๆ ท่านอาจจะคาดไม่ถึง หรือหลาย ๆ ท่านอาจจะรู้แล้ว แต่ผู้เขียนเพิ่งได้กลับมาจับ Crystal Report อีกครั้ง ได้เจอปัญหานี้เข้า เลยอยากมาแชร์ และเป็นการบันทึกไว้อ่านเองด้วย มาดูกันเลยค่ะว่า วิธีจัดการมีขั้นตอนอย่างไร ท่านผู้อ่านอย่าเพิ่งตกใจกับความง่ายยยยยยย นี้นะคะ ไปกันเล้ยยยยย ^^

    เมื่อท่านลาก Object Picture มาแล้ว ให้เลือก Menu Format Object ที่ ๆ ท่านเข้าไป Config รูปปกติค่ะ

    จากนั้นที่ Tab Picture เมื่อท่านตั้งค่าทุกอย่างเสร็จแล้วอย่าเพิ่งกดปุ่ม OK นะคะ เบรกก๊อนนน ><

    ให้สลับกลับไปที่ Tab Common ก่อนค่ะ

    สังเกตดี ๆ นะคะ ที่วงไว้สีแดง ๆ หนา ๆ ตัวนี้เลยค่ะ Can Grow เจ้าปัญหา ให้กลับมาดูก่อนนะคะ ว่ามีเครื่องหมายถูกอยู่ข้างหน้ารึเปล่า ถ้าไม่มี ไม่เป็นไรค่ะ นั่นคือสิ่งที่ถูกต้องแล้ว ให้กด OK ออกได้เล้ยยย แต่ถ้ามีเครื่องหมายถูกอยู่ เอาออกด่วน ๆๆๆๆ เลยค่ะ ไม่งั้น รูปที่ท่านใส่ไว้ ก็จะ Grow กลับสู่ขนาดดั้งเดิม ซึ่งหากท่านใส่ไว้แบบไม่ปรับขนาดมาก่อน แล้วมีขนาดใหญ่มาก ก็จะเป็นปัญหาได้ค่ะ

    หวังว่าจะเป็นประโยชน์ต่อผู้อ่านไม่มากก็น้อยนะคะ 🙂

  • Crystal Report : Term & Condition หรือ Privacy Policy ที่ต้องมีต่อท้ายรายงาน ทำได้อย่างไร

    หลาย ๆ ครั้งที่เราพิมพ์เอกสาร แล้วจำเป็นต้องมีเอกสารแนบท้ายกระดาษเป็นพวก Term & Condition หรือ Privacy Policy

    ซึ่งเอกสารพวกนี้จะอยู่ท้ายสุดของเอกสาร และทุกครั้งเมื่อมีการพิมพ์เอกสารชุดอื่น ๆ ก็จำเป็นต้องมีเอกสารเดียวกันนี้แนบท้ายไป

    เนื่องจากช่วงนี้ได้มีการเข้ามาจับ Crystal Report อีกครั้ง จึงได้มีโอกาสได้ทำเอกสารแนบท้ายนี้ จึงต้องการเขียนไว้สำหรับเตือนความจำและอยากส่งต่อให้กับผู้ที่กำลังทำได้ทราบต่อไป

    อ่ะ เรามาเริ่มกันเลย อันดับแรก เริ่มจากสร้างรายงานที่เป็นไฟล์เอกสารแนบท้าย สร้างและจัดรูปแบบให้เรียบร้อย เพราะต่อไปนี้ ไฟล์เอกสารแนบท้ายเหล่านี้ จะกลายไปเป็น Subreport ของรายงานหลัก โดยไปที่ส่วนของ Report Footer คลิกขวา เลือก Insert -> Subreport

    ระบบจะมีหน้าต่าง Subreport มาให้ระบุไฟล์ Crystal Report ที่ต้องการให้เป็น Subreport ซึ่งให้เลือกไฟล์ที่เราสร้างไว้

    จากนั้นจะได้ Subreport วางไว้ในส่วนของ Section Report Footer เรียบร้อย

    ขั้นตอนต่อไปเป็นการ Config ให้สามารถแสดง Subreport เป็นหน้าสุดท้ายโดย คลิกขวาที่แถบ Section เลือก Section Export ไปที่ Report Footer -> Tab Paging ให้ ทำเครื่องหมาย / หน้า New Page Before

    แต่เนื่องจากเราวาง Subreport ไว้ที่ Section Report Footer ทำให้เมื่อลอง Preview จะพบว่า หัวกระดาษและท้ายกระดาษส่วนอื่นแสดงด้วย ดังนั้นเราต้องมาจัดการในส่วนอื่น ๆ โดยเขียน Formula ใน Section อื่น ๆ ที่แสดงทุกหน้า เช่น Section Report Header, Section Page Header เป็นต้น ในที่นี้จะจัดการส่วน Section Page Header a จากนั้นทางขวา ในส่วนของ Suppress คลิกที่ x-2 เพื่อทำการเขียน Formula

    จะพบหน้าต่าง Formula จากนั้น เขียนคำสั่งดังภาพด้านล่าง ซึ่งเป็นคำสั่งตรวจสอบว่า ถ้าหน้าปัจจุบัน คือหน้าสุดท้าย ให้ทำการซ่อน Section Page Header จากนั้นกด Save and close เพื่อปิด และเขียนคำสั่งเดียวกันนี้ใน Section ส่วนอื่น ๆ ที่ต้องการซ่อนในหน้าสุดท้ายจนครบ

    จากนั้นทดลอง Run ดูจะพบว่า หน้าสุดท้ายที่ต้องการให้แสดง Term & Condition หรือ Privacy Policy จะไม่มี Section ส่วนอื่นมากวนใจ

    หวังว่าบทความนี้จะมีประโยชน์ต่อผู้อ่านไม่มากก็น้อยนะคะ 🙂

  • Crystal Report : Suppress การซ่อน/แสดง Section

    ปกติแล้วการจัดรายงานใน Crystal Report จะมีการแบ่งเป็น 5 ส่วนดังนี้ค่ะ

    Report Header Section

    เป็นส่วนที่อยู่บนส่วนหัวรายงาน แสดงแค่หน้าแรกเพียงหน้าเดียวเท่านั้น

    Page Header Section

    เป็นส่วนที่แสดงต่อจากส่วน Report Header Section แสดงอยู่ทุกหน้า

    Details Section

    ส่วนแสดงรายละเอียดที่ต้องการ สามารถจัดกลุ่มข้อมูล แบ่งรายงานเป็น 2 ส่วนและอื่น ๆ ได้

    Page Footer Section

    เป็นส่วนที่แสดงในรายงานทุกหน้าอยู่บนส่วนท้ายของรายงาน

    Report Footer Section

    เป็นส่วนที่อยู่ส่วนท้ายสุดของรายงานจะแสดงแค่หน้าสุดท้ายเท่านั้น

    ซึ่งในแต่ละ Section นั้นสามารถมี Section ย่อย ๆ ได้มากกว่า 1 Section ย่อยดังภาพ

    ซึ่งเราสามารถแสดงหรือซ่อน Section ย่อย ๆ เหล่านี้ได้ตามเงื่อนไขที่เราต้องการ โดยใช้เมนู “Suppress” จัดการ ดังนี้ค่ะ

    คลิกขวาที่ Section ใดก็ได้ เลือกเมนู “Section Expert”

    จะพบกับหน้าจอ Section Expert ดังภาพโดยหน้าจอจะแบ่งเป็น 2 ส่วน

    👈 ซ้ายมือ เป็นส่วนแสดงรายการ section ทั้งหมดของเราที่มีสามารถเพิ่ม ลบ หรือย้าย Section ขึ้นและลงตามที่ต้องการได้

    👉 ขวามือ จะแบ่งเป็น Tab ย่อย ๆ ในวันนี้ส่วนที่ผู้เขียนต้องการนำเสนออยู่ที่ Tab “Common”

    ที่ Tab “Common” หาบรรทัดที่ชื่อว่า “Suppress (No Drill-Down)”

    ดูที่ด้านขวา

    ถ้าสัญลักษณ์ “x-2” เป็น สีฟ้า แสดงว่า เรา ไม่ได้ มีการเขียนคำสั่งให้ซ่อนตามเงื่อนไข

    ถ้าสัญลักษณ์ “x-2” เป็น สีแดง แสดงว่า มี การเขียนคำสั่งให้ซ่อนตามเงื่อนไข

    จากรูปด้านล่างสามารถอธิบายได้ว่า ให้ซ่อน Page Header a โดยไม่มีเงื่อนไข

    ส่วนรูปด้านล่างสามารถอธิบายได้ว่า ให้ซ่อน Page Header l โดยมีเงื่อนไข ซึ่งสามารถกดเข้าไปดูเงื่อนไขที่เขียนไว้ได้

    ส่วนของคำสั่งที่เขียนไว้

    สามารถอธิบายได้ดังนี้

    เงื่อนไขคือ ถ้า Formula Field “@hdLang” มีค่าเป็น “E” และ ไม่ใช่รายงานหน้าแรก

    ผลลัพธ์ที่ต้องการ

    ✅ถ้าตรงตามเงื่อนไข ให้แสดง Page Header l

    ❌ถ้าไม่ตรงตามเงื่อนไข ให้ซ่อน Section นี้

    เพียงเท่านี้ ก็สามารถจัดการการซ่อนหรือแสดง Section ตามเงื่อนไขต่าง ๆ ได้ตามต้องการ o(*°▽°*)o d=====( ̄▽ ̄*)b

  • Crystal Report : Grid กับการจัดรูปแบบรายงาน

    ปกติแล้วการจัดรายงานใน Crystal Report ตัวหน้ากระดาษหรือหน้าจอนั้น จะเป็นหน้ากระดาษสีขาวปกติ ทำให้การจัดข้อความที่มีระยะเยื้องนั้นจัดได้ค่อนข้างยาก ตรงกันรึยังนะ หรือยังไม่ตรง นี่คือ 1 ในปัญหาของผู้เขียนเช่นกัน 🤣

    ดังนั้นวันนี้ ผู้เขียนจะมาแนะนำการตั้งค่า Grid เพื่อให้การขยับ Object ในรายงานของเราง่ายขึ้น ขั้นตอนดังนี้ค่ะ

    1️⃣ คลิกขวาพื้นที่โล่ง ๆ เลือกเมนู “Design”


    2️⃣ ต่อด้วยเมนู “Default Setting”



    3️⃣ ใน Tab “Layout” สังเกตส่วนด้านขวาที่ชื่อว่า “Grid”
    👀 จะพบ Checkbox “Show Grid” ให้ ✅ ไว้
    👀 ในส่วนของ Grid Size เราสามารถกำหนดได้ว่าจะให้ตัวกระดาษรายงานของเราแสดง Grid ถี่แค่ไหน ในที่นี้ผู้เขียนให้ความละเอียดมากสุดเลยกำหนดไว้ที่ 0.157



    4️⃣หลังจากกำหนดค่าทุกอย่างเสร็จแล้วกลับมาหน้ารายงานเดิมจะพบว่า หน้าจอเราดำมืด ไม่ต้องตรงใจค่ะ เป็นเพราะค่า Grid ที่เรากำหนดไว้ถี่มาก หน้าจอเลยกลายเป็นท่านเปา วิธีการก็คือ ไปขยายหน้าจอค่ะ โดยไปที่เมนูบาร์ด้านบน จะพบค่าที่ Default อยู่ที่ 200% ให้ขยายเป็น 400% หรือตามที่ต้องการเลยค่ะ



    ✨หน้าจอหลังจากขยายก็จะเห็นดังภาพนะคะ เราสามารถจัด Object ให้ตรงตามที่เราต้องการได้เล้ย ^^



  • CrystalReport : ข้อมูลส่วน DetailSection กับการแสดงผลส่วน PageFooterSection

    เนื่องจากผู้เขียนได้รับมอบหมายให้มีการตรวจสอบข้อมูลว่า ถ้ามีข้อมูลใน Field1 ขึ้นต้นด้วยเครื่องหมาย “*” ต้องแสดงข้อความที่ส่วนท้ายของรายงานทุกแผ่นว่า “มีข้อมูลที่มีเครื่องหมาย * นำหน้า”

    ผู้เขียนจึงได้ทำการสร้าง Formula Field ขึ้นมาทั้งหมด 4 อัน คือ

    1. ffCountSubjectStar : ใช้สำหรับเก็บค่าจำนวนข้อมูลใน Field1 ที่ขึ้นต้นด้วย *
    2. ffResetCountStarSubject : ใช้สำหรับ Reset ค่าเมื่อขึ้นหน้าใหม่
    3. ffSumStarSubjectCode : ใช้สำหรับเก็บค่าจำนวนรวมของ Field1 ที่ขึ้นต้นด้วย *
    4. ffPageFooter : ใช้สำหรับเก็บข้อความที่ต้องการให้แสดงท้ายกระดาษ

    1. ffCountSubjectStar

    WhilePrintingRecords;
    Global numberVar
    isStarSubjectCode;

    if (Left({@Field1 },1) = “*”) then
    isStarSubjectCode := 1
    else isStarSubjectCode := 0

    โค้ดส่วนนี้เป็นการตรวจสอบว่าถ้า Field1 นั้นมี * นำหน้า ให้เก็บค่านั้นไว้ในตัวแปร isStarSubjectCode โดย Formula Field นี้จะต้องนำไปใช้ในส่วนของ DetailSection เนื่องจากต้องมีการตรวจสอบข้อมูลทุก Record


    2. ffResetCountStarSubject

    WhilePrintingRecords;

    Global numberVar isStarSubjectCode := 0;
    Global numberVar countStarSubjectCode := 0;

    โค้ดส่วนนี้เป็นส่วนที่ใช้สำหรับ Reset ค่าตัวแปร โดยกำหนดค่าเริ่มต้นให้ตัวแปร ให้เท่ากับ 0 โดย Formula Field นี้จะต้องนำไปใช้ในส่วนของ Page Header เนื่องจากต้องมีการตรวจสอบข้อมูลทุก Record


    3. ffSumStarSubjectCode

    whileprintingrecords; //ทำราย Rec ที่มีการพิมพ์
    Global numberVar countStarSubjectCode;
    Global numberVar isStarSubjectCode;

    countStarSubjectCode := countStarSubjectCode + isStarSubjectCode

    โค้ดส่วนนี้เป็นการนับจำนวน Field1 ที่มี * นำหน้า ให้เก็บผลรวมไว้ในตัวแปร countStarSubjectCode โดย Formula Field นี้จะต้องนำไปใช้ในส่วนของ DetailSection เนื่องจากต้องมีการตรวจสอบข้อมูลทุก Record


    4. ffPageFooter

    ” มีข้อมูลที่มีเครื่องหมาย * นำหน้า”

    เก็บข้อมูลที่ต้องการให้แสดงในส่วนของ PageFooter โดย Formula Field นี้จะต้องนำไปใช้ในส่วนของ PageFooterSection

    ผู้เขียนหวังว่าบทความครั้งนี้จะเป็นประโยชน์ต่อผู้อ่านไม่มากก็น้อย แล้วพบกันใหม่ครั้งหน้าจ้าาาาา ^^

  • CrystalReport : จัดการกราฟซ่อนแอบ

    จากที่ผู้เขียนช่วงนี้ได้มีการทำกราฟใน Crystal Report ทำไปทำมาผลปรากฎว่า
    กราฟไม่แสดงรูปซะงั้น (ไหงเป็นแบบนี้ได้หว่าาาาาา T T)

    จึงได้ลองค้นหาข้อมูลและพบว่า ต้องเพิ่ม Config เพิ่มเติมเข้าไปใน
    ” Web.config “
    ตาม Code ด้านล่างเลยจ้าาาา

    ส่วนแรก

    “System.web” ส่วน “httpHandlers”
    โดย Version จะต้องเป็น Version Crystal Report ที่เราใช้งานอยู่ อย่าลืมตรวจสอบให้ตรงกันด้วยนะ

    <configuration>
     <system.web> 
       <httpHandlers>       
          <add verb="GET" path="CrystalImageHandler*"/type="CrystalDecisions.Web.CrystalImageHandler, CrystalDecisions.Web, Version=13.0.2000.0, Culture=neutral, PublicKeyToken=692fbea5521e1304"/>     
       </httpHandlers>   
     </system.web>
    </configuration>

    ส่วนที่สอง

    “System.webServer” ส่วน “handlers”
    โดย Version จะต้องเป็น Version Crystal Report ที่เราใช้งานอยู่ อย่าลืมตรวจสอบให้ตรงกันด้วยนะ

    <configuration>
     <system.webServer>
       <validation validateIntegratedModeConfiguration="false"/>
         <handlers>
           <add name="CrystalImageHandler.aspx_GET" verb="GET" path="CrystalImageHandler*" type="CrystalDecisions.Web.CrystalImageHandler, CrystalDecisions.Web, Version=13.0.2000.0, Culture=neutral, PublicKeyToken=692fbea5521e1304" preCondition="integratedMode"/>
         </handlers>
     </system.webServer>
    </configuration>

    หวังว่า Blog นี้จะช่วยเหลือท่านที่ประสบปัญหาเดียวกันอยู่นี้ไม่มากก็น้อยนะคะ

    แล้วพบกันใหม่ Blog หน้าค่าาาาาา 🙂

  • วิธีสลับสีแถวข้อความใน Crystal Report เมื่อมีการจัด Group

    ในการอ่านหรือดูรายงานหนึ่ง ๆ นั้น แม้ข้อมูลจะมีการจัดเป็นข้อ ๆ แล้วหรือมีการจัดกลุ่มข้อความนั้นแล้วก็ตาม แต่เมื่อข้อมูลมีจำนวนมาก ก็อาจทำให้เราวิงเวียน ตาลายได้

    ดังนั้นในฐานะผู้จัดทำรายงานคนหนึ่ง ก็พยายามหาทางให้ผู้ใช้สามารถอ่านรายงานได้ง่าย โดยการใส่สีข้อความสลับบรรทัดนั่นเอง 

     

    โดยปกตินั้น การใส่สีสลับบรรทัดสามารถทำได้โดยวิธีง่าย ๆ นั้นคือ

    if row mod 2 = 0 then   //ตรวจสอบว่าแถวนั้นเป็นแถวคู่หรือไม่

       color(240,240,240)    //ถ้าใช่แสดงสี

    else crNocolor             //ถ้าไม่ใช่ไม่ต้องแสดงสี

    ซึ่งจะทำให้ได้ผลลัพธ์ดังรูป

    สลับสี ก่อน

    จากรูปจะเห็นได้ว่า ข้อมูลมีการสลับสีแล้ว แต่เนื่องจากข้อมูลถูก Group จะพบว่า ข้อมูลที่มี 1 record ก็มีการสลับสีด้วย ซึ่งผู้เขียนไม่ต้องการให้มีการสลับสีกรณีที่ข้อมูลมีเพียง 1 ดังนั้นผู้เขียนจึงปรับวิธีการเขียนใหม่ดังนี้

    1. เพิ่ม Formula Fields
      1. ตัวที่ 1 ตั้งชื่อว่า ffRowCount เขียน Code ภายในดังนี้

        shared numbervar
        rowcnt;
        rowcnt := rowcnt+1;

      2. ตัวที่ 2 ตั้งชื่อว่า ffRowReset เขียน Code ภายในดังนี้

        shared numbervar
        rowcnt:
        rowcnt := 0;

    2. นำตัวที่ 1.1 ใส่ไว้ในส่วนของ Details และเลือก Suppress
    3. นำตัวที่ 1.2 ใส่ไว้ในส่วนของ Group 2(คณะ) เนื่องจากต้องการให้มีการ reset เมื่อมีการเปลี่ยน Group และเลือก Suppress
    4. ส่วนของ Details ให้จัดการดังนี้
      1. Click ขวา เลือก Section Expert
      2. Click เลือก Tab Color
      3. ทำเครื่องหมาย / หน้า Background Color
      4. กดปุ่ม x-2 หลักช่องสี
      5. เขียน Code ดังนี้

        shared numbervar rowcnt;
        if remainder(rowcnt,2) = 0 then
           color(240,240,240)
        else crNocolor

    5. จากนั้นลอง run ผลลัพธ์ดังรูป
      สลับสี หลัง

    จะเห็นได้ว่า ข้อมูลที่มีเพียง 1 record นั้นจะไม่มีสี

     

    ผู้เขียนหวังว่าบทความนี้จะเป็นประโยชน์ไม่มากก็น้อยสำหรับผู้อ่านนะคะ

    แล้วพบกันใหม่ตอนหน้าค่ะ