Author: sirima.sa

  • 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

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

  • Toad : หากันจนเจอ (pass ที่เคย save ไว้)

    เคยไหม ที่คุณลืม password ที่คุณเคยเซฟไว้ใน Toad

    เคยไหม ที่วันนึงคุณต้องการใช้ password เหล่านั้นแต่คุณจำไม่ได้ ดูก็ไม่ได้ เพื่อนก็จำไม่ได้!!!

    วันนี้เรามีทริกที่จะสามารถดู password ที่เราเคย save ไว้ใน toad ได้ มาดูกันเล้ยยย!!!

    • ขั้นตอน 1 เลือก Schema ใดก็ได้ที่เรา login ได้ มาสักอัน
    • ขั้นตอน 2 เลือกเมนู DB Links และกดปุ่ม สร้าง
    • ขั้นตอน 3 ตั้งชื่อ DB Link (ตั้งอะไรก็ได้เพราะไม่ได้เอาไปใช้จริง) จากนั้นเลือก Database ที่ต้องการทราบ Password สุดท้ายกดปุ่ม “Show SQL”
    • ขั้นตอนสุดท้าย ดูที่บรรทัด identified by “xxx” โดย xxx คือ Password ที่เราต้องการ

    แค่นี้เองค่ะ หวังว่าคงจะเป็นประโยชน์สำหรับผู้พัฒนาหลาย ๆ ท่าน
    ที่ต้องกลับไปต่อฐานข้อมูลดั้งเดิมที่เราเคย save password ไว้แล้วลืมนะคะ 🙂

    ออ…Version Toad ที่ใช้คือ 9.6.0.27 นะคะ
    ไม่แน่ใจว่า Version ที่สูงกว่านี้ยังใช้วิธีนี้ได้อีกรึเปล่า ><

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

  • 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 หน้าค่าาาาาา 🙂

  • รู้จักฟังก์ชัน Excel ตอนที่ 2 เรื่อง ตระกูลท่าน Count (COUNTIF, COUNTIFS)

    พบกันอีกครั้งนะคะ กับ Excel ตอน ตระกูลท่าน Count ตอนที่ 2 ค่ะ สำหรับตอนที่ 2 นี้จะเป็นการแนะนำการใช้ Function COUNTIF และ COUNTIFS มาเริ่มกันเลยค่ะ

    COUNTIF

    เป็น Function ที่ใช้สำหรับนับข้อมูลตามเงื่อนไขที่เราต้องการ 1 เงื่อนไข เช่น

    • ต้องการนับจำนวนคนที่ได้เกรด A : เงื่อนไขคือ “คนที่ได้เกรด A”
    • ต้องการนับจำนวนคนที่ได้คะแนนมากกว่า 75 : เงื่อนไขคือ “คะแนนมากกว่า 75”

    รูปแบบ Function คือ COUNTIF(range, criteria)

    • range คือ ช่วงข้อมูลที่ต้องการนับจำนวน
    • criteria คือ เงื่อนไขที่ต้องการ

    ตัวอย่าง

    จากตัวอย่าง สิ่งที่ต้องการคือ หาจำนวนคนที่ได้เกรด A ดังนั้น

    • range คือ ช่วง D3 ถึง D7
    • criteria คือ “A”

    ดังนั้นสิ่งที่จะได้เมื่อเขียน Function คือ =COUNTIF(D3:D7,”A”) ผลลัพธ์ที่ได้คือ 2 ดังภาพ

     


    COUNTIFS

    เป็น Function ที่ใช้สำหรับนับข้อมูลตามเงื่อนไขที่เราต้องการโดยเงื่อนไขนั้นมีมากกว่า 1 เงื่อนไข เช่น

    • ต้องการนับจำนวนคนที่ได้เกรด A และเป็นเพศหญิง : เงื่อนไขคือ “คนที่ได้เกรด A” และ “เพศหญิง”
    • ต้องการนับจำนวนเด็กเข้าอบรมได้คะแนนมากกว่า 60 แต่น้อยกว่า 79 : เงื่อนไขคือ “คะแนนมากกว่า 60 แต่น้อยกว่า 79”

    รูปแบบ Function คือ COUNTIF(range_criteria1, criteria1, [range_criteria2, criteria2],…)

    • range_criteria1 คือ ช่วงข้อมูลที่ต้องการนับจำนวนของเงื่อนไขที่ 1 ค่านี้จำเป็นต้องระบุ
    • criteria1 คือ เงื่อนไขที่ต้องการ เงื่อนไขแรก ค่านี้จำเป็นต้องระบุ
    • range_criteria2 คือ ช่วงข้อมูลที่ต้องการนับจำนวนของเงื่อนไขที่ 2 ค่านี้ไม่จำเป็นต้องระบุ
    • criteria2 คือ เงื่อนไขที่ต้องการ เงื่อนไขที่สอง ค่านี้ไม่จำเป็นต้องระบุ
    • สามารถระบุเงื่อนไขที่ต้องการได้เรื่อย ๆ

    ตัวอย่าง

    จากตัวอย่าง สิ่งที่ต้องการคือ หาจำนวนคนที่ได้เกรด A และได้คะแนนมากกว่า 90 ดังนั้น

    เงื่อนไขแรก

    • range_criteria1 คือ ช่วง D3 ถึง D7
    • criteria1 คือ “A”

    เงื่อนไขที่สอง

    • range_criteria2 คือ ช่วง E3 ถึง E7
    • criteria2 คือ “>=90”

    ดังนั้นสิ่งที่จะได้เมื่อเขียน Function คือ =COUNTIFS(D3:D7,”A”,E3:E7,”>=90″) ผลลัพธ์ที่ได้คือ 1 ดังภาพ

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

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

  • รู้จักฟังก์ชัน Excel ตอนที่ 1 เรื่อง ตระกูลท่าน Count

    หลาย ๆ ท่านคงใช้ Excel อยู่ในชีวิตประจำวันไม่มากก็น้อย อาจจะชินตากับ Function Count กันอยู่บ่อย ๆ แต่ Function นี้ ไม่ได้มาเดี่ยว ๆ นะคะ ยังมีญาติ ๆ ในตระกูลอีกเพียบเลย มาดูกันค่ะว่า มีอะไรบ้าง และแต่ละ Function นั้นทำงานกันอย่างไรค่ะ

    1. COUNT
    2. COUNTA
    3. COUNTBLANK
    4. COUNTIF
    5. COUNTIFS

    Function ตระกูล Count หลัก ๆ ที่ผู้เขียนใช้งานจะมี 5 Function ข้างต้นนะคะ สำหรับในตอนที่ 1 นี้ ผู้เขียนจะนำเสนอ 3 ฟังก์ชันแรกก่อนก็คือ COUNT, COUNTA และ COUNTBLANK ค่ะ ส่วนอีก 2 Function สามารถติดตามต่อได้ในตอนที่ 2 นะคะ

     

    COUNT 

    สำหรับฟังก์ชันนี้ จะใช้สำหรับนับจำนวนเฉพาะตัวเลข โดยไม่นับตัวอักษรและช่องว่าง ที่อยู่ในช่วงที่เรากำหนด(range) หรือเลือกทีละค่า(value) ตามที่เราต้องการ

    รูปแบบ Function แบบ value คือ COUNT(value1, [value2],…)

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

    ตัวอย่าง

    ภาพที่ 1 การเลือกทีละค่าเพื่อนับจำนวนโดยใช้ Function Count

     

    รูปแบบ Function แบบ range คือ COUNT(value1, [value2],…)

    • value1 คือ ค่าข้อมูลแรกที่ต้องการนับจำนวนในที่นี้คือใส่เป็นช่วง การระบุคือ จุดเริ่มต้น:จุดสิ้นสุด ค่านี้จำเป็นต้องระบุ
    • value2 คือ ค่าข้อมูลที่สอง ที่ต้องการนับจำนวน ไม่จำเป็นต้องระบุ
    • สามารถเลือกค่าได้เรื่อย ๆ

    ตัวอย่าง

    ภาพที่ 2 การเลือกค่าเป็นช่วงเพื่อนับจำนวนโดยใช้ Function Count

    ผลลัพธ์ที่ได้

    หมายเหตุ เนื่องจาก จากภาพที่ 1 และ 2 มีการเลือกค่าเท่ากับการเลือกแบบช่วงดังนั้นค่าที่ได้จะเท่ากันค่ะ

    จากผลลัพธ์ที่ได้ จะเห็นได้ว่า Function Count จะนับเฉพาะตัวเลขเท่านั้น ส่วนตัวอักษรหรือช่องว่าง จะไม่ถูกนับค่ะ

    ซึ่งจะเห็นได้ว่า ข้อมูลคำนำหน้า เกรดและคะแนน จะนับได้แค่ 0 เนื่องจากมีช่องว่างข้อมูลและข้อมูลใน Column นั้นเป็นตัวอักษรค่ะ


    COUNTA

    สำหรับฟังก์ชันนี้ จะใช้สำหรับนับจำนวนข้อมูลทั้งหมดทั้งตัวอักษรและตัวเลข แต่ไม่นับช่องว่าง ที่อยู่ในช่วงที่เรากำหนด(range) หรือเลือกทีละค่า(value) ตามที่เราต้องการดังภาพค่ะ

    รูปแบบ Function แบบ value คือ COUNTA(value1, [value2],…)

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

    ตัวอย่าง

    จากผลลัพธ์ที่ได้ จะเห็นได้ว่า Function CountA จะนับข้อมูลทั้งหมด ยกเว้นช่องว่าง จะไม่ถูกนับค่ะ

    ซึ่งจะเห็นได้ว่า ข้อมูลเกรดและคะแนน จะนับได้แค่ 4 เนื่องจากมีช่องว่างข้อมูลละช่อง


    COUNTBLANK

    สำหรับฟังก์ชันนี้ จะใช้สำหรับนับจำนวนเฉพาะช่องว่าง ที่อยู่ในช่วงที่เรากำหนด(range)

    รูปแบบ Function แบบ value คือ COUNTBLANK(range)

    • range คือ ช่วงของข้อมูลที่ต้องการ

    ตัวอย่าง

    จากผลลัพธ์ที่ได้ จะเห็นได้ว่า Function CountBlank จะนับเฉพาะข้อมูลที่เป็นช่องว่างค่ะ

    ซึ่งจะเห็นว่าข้อมูลในที่นี้มีช่องเกรดและช่องคะแนน ที่มีช่องว่าง Column ละช่อง

     

    สำหรับในตอนที่ 1 ก็ขอจบลงเพียงเท่านี้ สามารถติดตาม Function COUNTIF และ COUNTIFS ต่อได้ในตอนที่ 2 ค่ะ 

  • วิธีการ set property ของ radio button ใน Dojo

    เนื่องจากช่วงนี้ ผู้เขียนมีโอกาสได้เข้ามาอยู่ในแวดวงของ Dojo และได้ประสบกับปัญหาในการที่จะ set property ของ Dojo ซึ่งในที่นี้คือ Radio Button หลังจากที่ได้ลองผิด ลองถูก Error กันหัวหมุน  จนสุดท้ายได้เจอทางออก  เลยอยากจะบันทึกไว้สำหรับตัวเองมาดูในอนาคต และเผื่อท่านอื่นที่ประสบปัญหาเดียวกัน มาเจอจะได้ลองนำไปใช้งานกันดูค่ะ Let’s GO!!!

     

    เนื่องจาก Radio Button เป็น Control ภายใต้ dijit/form/RadioButton ดังนั้น การเขียนคำสั่งเพื่อ set property จึงได้เป็นดังนี้

    dijit.byId(‘control_id‘).set(‘control_prop‘, value);

    control_id : id ของ control นั้น ๆ

    control_prop : property ของ control ที่ต้องการกำหนดค่า

    value : ค่าที่ต้องการกำหนด

     

    ตัวอย่างเช่น ต้องการกำหนดให้ radio button ที่มี id=”rdBtn1″ ไม่สามารถใช้งานแต่ยังแสดง(disable) และ

    id=”rdBtn2″ มีค่าโดยปริยายเป็นเลือกไว้ จะเขียน Code ได้ดังนี้

    dijit.byId(‘rdBtn1’).set(‘disabled’, true); 

    dijit.byId(‘rdBtn2’).set(‘checked’, true); 

     

    ซึ่ง properties ของ control ต่าง ๆ สามารถดูเพิ่มเติมได้จากเว็ปเพจของ Dojo ตามลิงค์นี้ค่ะ Dojo Documentation

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

  • วิธีสลับสีแถวข้อความใน 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 นั้นจะไม่มีสี

     

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

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