กระทู้เก่าบอร์ด อ.Yeadram
1,555 3
URL.หัวข้อ /
URL
ให้พิมพ์ข้อมูลที่แสดงอยู่ขณะนั้นและให้รู้ว่าได้พิม
เรียนถามท่านอาจารย์ทุกท่านครับ
คืออยากจะทราบว่าจะต้องเขียนโค๊ดหรือกำหนดอย่างไรที่ให้โปรแกรมพิมพ์ข้อมูลลงใน report
จากข้อมูลที่เรากำลังดูอยู่ (ใน Form)
ที่ผมทำอยู่ในขณะนี้คือ สร้างคิวรี ขึ้นมาแล้วกำหนดให้ใส่ parameter ลงไป ถ้าเลขที่เอกสารที่ใส่ตรงกับเลขที่เอกสารที่บันทึกในโปรแกรมก็จะแสดงข้อมูลตาม แบบ report
ถ้าต้องพิมพ์ report หลายเลขที่ ก็ต้องเปิด-ปิดแล้วก็ใส่เลขให้ตรง ถ้าจำเลขเอกสารผิดก็ต้องเปิด-ปิดใหม่
และอีกข้อนึงคือจะทำอย่างไรให้รู้ว่าได้พิมพ์เอกสารชุดนั้นไปแล้ว
ที่ผมทำในขณะนี้คือกำหนดเพิ่มในตารางข้อมูลหลัก เป็น checkbox (Yes/No) ถ้าเปิดดูแล้วพิมพ์แล้วก็ให้คลิ๊กใน checkbox แล้วก็กำหนดในคิวรีให้แสดงเฉพาะข้อมูลที่เป็น No เท่านั้น
ไม่ทราบพอจะมีวิธีอื่นที่รัดกุมกว่านี้หรือสะดวกกว่านี้ไหมครับ
ขอความกรุณาด้วยครับ ขอบพระคุณครับ
คืออยากจะทราบว่าจะต้องเขียนโค๊ดหรือกำหนดอย่างไรที่ให้โปรแกรมพิมพ์ข้อมูลลงใน report
จากข้อมูลที่เรากำลังดูอยู่ (ใน Form)
ที่ผมทำอยู่ในขณะนี้คือ สร้างคิวรี ขึ้นมาแล้วกำหนดให้ใส่ parameter ลงไป ถ้าเลขที่เอกสารที่ใส่ตรงกับเลขที่เอกสารที่บันทึกในโปรแกรมก็จะแสดงข้อมูลตาม แบบ report
ถ้าต้องพิมพ์ report หลายเลขที่ ก็ต้องเปิด-ปิดแล้วก็ใส่เลขให้ตรง ถ้าจำเลขเอกสารผิดก็ต้องเปิด-ปิดใหม่
และอีกข้อนึงคือจะทำอย่างไรให้รู้ว่าได้พิมพ์เอกสารชุดนั้นไปแล้ว
ที่ผมทำในขณะนี้คือกำหนดเพิ่มในตารางข้อมูลหลัก เป็น checkbox (Yes/No) ถ้าเปิดดูแล้วพิมพ์แล้วก็ให้คลิ๊กใน checkbox แล้วก็กำหนดในคิวรีให้แสดงเฉพาะข้อมูลที่เป็น No เท่านั้น
ไม่ทราบพอจะมีวิธีอื่นที่รัดกุมกว่านี้หรือสะดวกกว่านี้ไหมครับ
ขอความกรุณาด้วยครับ ขอบพระคุณครับ
3 Reply in this Topic. Dispaly 1 pages and you are on page number 1
1 @R00681
ลองเอาตัวอย่างมาให้ดูหน่อยครับ หาก สงสัยสอบถามได้(ไม่เก่งครับ) ตอบได้ก็จะตอบ Wsti11@hotmail.com
2 @R00682
ให้บริหารผ่าน FORM จะสะดวกที่สุด ส่วนการ CHECK YES/NO ให้เขียนคำสั่งเพิ่ม ใน FORM หลังจาก PRINT แล้ว
3 @R00683
ถามเพิ่มเติมก่อน สำหรับประเด็นแรก
รายงานเป็นลักษณะ 1 หน้า ต่อเอกสาร 1 เลขที่
เมื่อต้องการปริ๊นท์เลขที่ใด ก็สั่งเลขที่นั้น แต่พอจะสั่งเลขที่ใหม่ ต้องปิดรายงาน แล้วเรียกใหม่อีกครั้ง
หรือ หากต้องการปริ๊นท์รวดเดียว 3 เลขที่ก็ต้องเปิด-ปิด กันสามครั้ง ทำให้ไม่ได้รับความสะดวกเท่าที่ควร ต้องการหาวิธีแก้ไข ใช่มั้ยครับ ผมเข้าใจถูกมั้ย
ถ้าเป็นอย่างที่ผมเข้าใจ ผมแนะนำดังนี้ครับ
คิวรี่ที่คุณสร้างขึ้นเพื่อนำไปเป็น source ของรายงาน ให้เป็นการสร้างขึ้นจากโค้ด ในขณะ Runtime ครับ เมื่อต้องการปริ๊นท์หลายหน้า คุณก็สามารถใส่เงื่อนไขไปในนั้นได้เลยครับ เช่น
where INV_NO ='........' หรือ
where INV_NO BETWEEN '.....' AND '.....' หรือ
where INV_NO IN('....', '.......', '....', '.......',)
ส่วนค่าพารามิเตอร์อื่นๆ ของคุณ ก็สามารถใส่ต่อกันไปได้ครับ ในส่วนของ where
เมื่อได้ sql statement ชุดนี้เตรียมไว้แล้ว ก็ส่งค่าเข้าไปเรียกรายงานครับ อาจจะใส่ไปใน อากิวร์เมนต์สุดท้าย
1 ...DoCmd.OpenReport "ชื่อรายงาน", acViewPreview, , , acWindowNormal, Sql
2....DoCmd.OpenReport "ชื่อรายงาน", acViewNormal, , , , Sql
ไม่ว่าจะสั่งแบบ 1 (โชว์รายงาน) หรือสั่งแบบ 2 (ปริ๊นท์ทันที) ก็สั่งเหมือนกัน แต่ขอแนะนำว่าถ้าเลือกสั่งแบบหลายหน้า ควรสั่งแบบ 2 ไปเลยครับ
ที่นี้มาว่ากันฝั่งรายงานครับ เขียนโค้ดเพื่อให้รับค่า OpenArgs แล้วเอามาใช้ครับ ดังนี้
Private Sub Report_Open(Cancel as interger)
if not isnull(OpenArgs) then me.recordsource = openargs
End Sub
ประเด็นที่สอง ทำอย่างไรให้รู้ว่าได้พิมพ์เอกสารชุดนั้นไปแล้ว
สำหรับตัวผมคิดว่า ที่คุณทำไปแล้ว นั่นเป็นวิธีที่ดีที่สุดแล้วนะครับ คือการสร้างฟิลด์เช็คเข้ามาช่วย
ถ้าสั่งปริ๊นท์ทีละเลขที่ ก็อาจให้ user ติ๋กเอง ก็ได้ แต่ถ้าสั่งปริ๋นท์ทีละหลายเลขที่ ก็อาจใช้ sql statement เข้ามาช่วยครับ ทำเป็น update query ครับ
update ตาราง set ฟิลด์เช็ค = -1 where INV_NO IN(.'....', '.....')
รายงานเป็นลักษณะ 1 หน้า ต่อเอกสาร 1 เลขที่
เมื่อต้องการปริ๊นท์เลขที่ใด ก็สั่งเลขที่นั้น แต่พอจะสั่งเลขที่ใหม่ ต้องปิดรายงาน แล้วเรียกใหม่อีกครั้ง
หรือ หากต้องการปริ๊นท์รวดเดียว 3 เลขที่ก็ต้องเปิด-ปิด กันสามครั้ง ทำให้ไม่ได้รับความสะดวกเท่าที่ควร ต้องการหาวิธีแก้ไข ใช่มั้ยครับ ผมเข้าใจถูกมั้ย
ถ้าเป็นอย่างที่ผมเข้าใจ ผมแนะนำดังนี้ครับ
คิวรี่ที่คุณสร้างขึ้นเพื่อนำไปเป็น source ของรายงาน ให้เป็นการสร้างขึ้นจากโค้ด ในขณะ Runtime ครับ เมื่อต้องการปริ๊นท์หลายหน้า คุณก็สามารถใส่เงื่อนไขไปในนั้นได้เลยครับ เช่น
where INV_NO ='........' หรือ
where INV_NO BETWEEN '.....' AND '.....' หรือ
where INV_NO IN('....', '.......', '....', '.......',)
ส่วนค่าพารามิเตอร์อื่นๆ ของคุณ ก็สามารถใส่ต่อกันไปได้ครับ ในส่วนของ where
เมื่อได้ sql statement ชุดนี้เตรียมไว้แล้ว ก็ส่งค่าเข้าไปเรียกรายงานครับ อาจจะใส่ไปใน อากิวร์เมนต์สุดท้าย
1 ...DoCmd.OpenReport "ชื่อรายงาน", acViewPreview, , , acWindowNormal, Sql
2....DoCmd.OpenReport "ชื่อรายงาน", acViewNormal, , , , Sql
ไม่ว่าจะสั่งแบบ 1 (โชว์รายงาน) หรือสั่งแบบ 2 (ปริ๊นท์ทันที) ก็สั่งเหมือนกัน แต่ขอแนะนำว่าถ้าเลือกสั่งแบบหลายหน้า ควรสั่งแบบ 2 ไปเลยครับ
ที่นี้มาว่ากันฝั่งรายงานครับ เขียนโค้ดเพื่อให้รับค่า OpenArgs แล้วเอามาใช้ครับ ดังนี้
Private Sub Report_Open(Cancel as interger)
if not isnull(OpenArgs) then me.recordsource = openargs
End Sub
ประเด็นที่สอง ทำอย่างไรให้รู้ว่าได้พิมพ์เอกสารชุดนั้นไปแล้ว
สำหรับตัวผมคิดว่า ที่คุณทำไปแล้ว นั่นเป็นวิธีที่ดีที่สุดแล้วนะครับ คือการสร้างฟิลด์เช็คเข้ามาช่วย
ถ้าสั่งปริ๊นท์ทีละเลขที่ ก็อาจให้ user ติ๋กเอง ก็ได้ แต่ถ้าสั่งปริ๋นท์ทีละหลายเลขที่ ก็อาจใช้ sql statement เข้ามาช่วยครับ ทำเป็น update query ครับ
update ตาราง set ฟิลด์เช็ค = -1 where INV_NO IN(.'....', '.....')
Time: 0.3161s