ขอโค๊ดพิมพ์ รายงาน หลังบันทึก record นั้นจบ
กระทู้เก่าบอร์ด อ.Yeadram

 3,337   8
URL.หัวข้อ / URL
ขอโค๊ดพิมพ์ รายงาน หลังบันทึก record นั้นจบ

เอาเป็นว่ามีการบันทึกเรคคอร์ด ขายสินค้า บันทึกเสร็จแล้ว กดปุ่มsave และกดปุ่ม prin ถ้าต้องการพิมพ์บิล invoice_id ใบนั้น
ขอคำแนะนำเขียนโค๊ดทีครับ ผมไม่รู้ว่าจะใช้code Me! .....

8 Reply in this Topic. Dispaly 1 pages and you are on page number 1

1 @R01405
ณ เรคคอร์ด ปัจจุบัน
ฟิลด์เลขที่เอกสาร ชื่อ Invoice_id
คอนโทรลที่แสดง ชื่อ txInvoice_id   ผูกกับฟิลด์ชื่อ Invoice_id

ในส่วนของรายงาน มี recordsource จากที่ใดๆ ก็ตาม อย่างน้อยๆ ต้องมีฟิลด์ เลขที่เอกสาร สมมติ ว่าชื่อฟิลด์ว่า rpInvoice_id

---------------------------------------------
คำสั่งที่ใช้เปิดรายงาน เลขที่บิลปัจจุบันคือ
DoCmd.OpenReport "ชื่อรายงาน", acViewPreview, , "[rpInvoice_id] = '" & txInvoice_id & "'", acWindowNormal

ถ้าไม่ต้องการดู แต่ให้ไหลออกเครื่องปริ๊นท์เลย ตรง อาร์กิวเมนต์ที่สอง
ให้เปลี่ยนจาก acViewPreview ให้เป็น acNormal
---------------------------------------------

ทั้งนี้ขึ้นอยู่กับการทำงานในส่วนคำสั่ง บันทึก ว่าคุณได้สั่งมันเลื่อนเรคคอร์ดด้วยหรือไม่ ถ้าสั่งบันทึก แต่ไม่ได้เลื่อนเรคคอร์ดหนีไปไหน รายงานก็จะออกมาได้เป็นเลขที่ ที่ถูกต้อง กรณีนี้ ไม่ว่าคุณจะอ้างเอาชื่อฟิลด์ หรือชื่อคอนโทรลก็ไม่น่ามีปัญหาอะไร
ได้ทั้ง "[rpInvoice_id] = '" & txInvoice_id & "'"
หรือ "[rpInvoice_id] = '" & Invoice_id & "'"

กรณีการบันทึกแล้วมีการเลื่อนเรคคอร์ดด้วย ผมแนะนำให้อ้างถึง ชื่อคอนโทรล เพราะเป็นสิ่งที่มองเห็นๆ จะได้รู้ทันทีก่อนจะสั่ง ว่า เลขที่บิลบนหน้าฟอร์ม ขณะนั้น มันเลขที่อะไร
"[rpInvoice_id] = '" & txInvoice_id & "'"

ผมพยายามตั้งชื่อให้เห็นชัดนะครับ
- rpInvoice_id   คือชื่อฟิลด์ที่เป็น source ของรายงาน (ไม่ใช่ชื่อคอนโทรลบนรายงาน)
- txInvoice_id คือ ชื่อคอนโทรลบนฟอร์ม ที่ผูกไว้กับฟิลด์ Invoice_id
- Invoice_id คือ ชื่อฟิลด์ ของ source ของฟอร์มปัจจุบัน
ทั้งนี้เพื่อให้แยกแยะง่ายๆ ว่า เรากำลังอ้างอะไร ถึงอะไร
แต่ในความเป็นจริงๆ ถ้าคุณสร้างฟอร์ม สร้างรายงานด้วย วิซาร์ด มันจะตั้งชื่อทั้งหมดที่กล่าวมา เป็นคำเดียวกันหมดเลย นั่นแหละที่ผมคิดว่าทำให้ คนที่เริ่มจะหัดเขียนโค้ดใหม่ๆ งง ศึกษาจากไหนๆ ก็เห็นเขียนเป็นคำเดียวกันหมด เลยไม่รู้หลักการอ้างอิง ไม่รู้ว่าคำสั่งในบรรทัดนี้พูดถึงออบเจคอะไรกันแน่

แต่ถ้าศึกษาได้รู้หลักมันแล้ว คุณจะตั้งชื่อทั้งหมดเป็นคำเดียวกันก็ได้ ไม่มีใครห้าม การแยกชื่อก็เพื่อให้รู้หลักการอ้างเท่านั้นเองครับ
2 @R01407
ในส่วนข้อสงสัย ที่เกียวกับการใช้ me!
แยกออกก่อนนะครับ บอกตรงๆ ผมไม่ค่อยได้ใช้นักหรอก เครื่องหมาย ปรัศนีย์ (!) น่ะ ผมไม่ค่อยเข้าใจมันนัก และไม่เห็นประโยชน์และความสำคัญมันเลย บ่อยครั้งที่ลองใช้ แล้วมัน error คงเป็นเพราะเหตุผลแรกนั่นแหละครับ คือเราไม่เข้าใจมัน เลยใช้มันผิดๆ ถูกๆ

ผมจะใช้ จุด แทนครับ
me.Invoice_id

การใช้ me น่าจะให้ อาจารย์สันติสุข แนะนำนะครับ ท่านจะละเอียดกว่า
แต่ตามที่ผมเข้าใจคือ ถ้าโค้ดที่เราเขียน เขียนฝังไว้กับ ฟอร์มใดๆ หรือ รายงานใดๆ (มีสองอย่างเท่านั้นนะครับ คือฟอร์มกับรายงาน)
การนำหน้าด้วย me. หมายถึง การอ้างถึง สิ่งต่างๆ ที่อยู่บนฟอร์มนั้นๆ หรือรายงานนั้นๆ เท่านั้น
คำว่าสิ่งต่างๆ ที่พูดถึง ก็ได้แก่
1 ชื่อฟิลด์ทุกๆ ฟิลด์ ที่มีใน source ของฟอร์ม หรือของรายงานนั้นๆ
2 ชื่อคอนโทรล ทุกๆ คอนโทรล ที่มีอยู่บนฟอร์ม หรือรายงานนั้นๆ
3 เมธอดของฟอร์ม หรือของรายงานนั้นๆ (คำจำกัดความของ เมธอด อันนี้เริ่มจะเกินความสามารถในการอธิบายของผมแล้วครับ อิอิ)
4 พร็อพเพอร์ตี้ของฟอร์ม หรือของรายงานนั้นๆ (ถ้าเข้าใจ เมธอด ก็คงเข้าใจพร็อพเพอร์ตี้ล่ะ 55)

มือใหม่อาจจะงง เมธอด คืออะไร พร็อพเพอร์ตี้ คืออะไร
เดี๋ยว อ.สันติสุข จะเขียนตำรามาขายนะ เกี่ยวกับเรื่องนี้ เพื่อให้ระดับ
- beginner
- debuger
- programer
เข้าใจกระจ่างขึ้น (555 หมดหน้าทีผมล่ะ)
3 @R01411
ผิดตรงไหนครับ อจ. ใน
ฟอร์มหลัก ทั้ง ฟิลด์และ control คือ voucher_s_id
ในรายงาน cash_tax_voucher ตัวที่ผูกคือ
ฟิลด์ คือ text42   control sourec=voucher_s_id
ผมทดลองทั้ง save ก่อน หรือ save ที่หลัง ก็ไม่ได้ทั้งคู่

Private Sub Command180_Click()
DoCmd.OpenReport "cash_tax_voucher", acViewPreview, , "[voucher_s_id] = '" & voucher_s_id & "'", acWindowNormal
End Sub
4 @R01412
-ต้องเซฟก่อน ข้อมูลถึงจะเข้าตาราง
ถ้าข้อมูลไม่เข้าตาราง report จะแสดงไม่ได้

- ในตัว report ต้องตั้งค่า อนุญาตให้ใช้ตัวกรอง (อยู่ที่แท็บ DATA)

- ถ้ายังไม่ได้อีก มันก็ต้องมี error บ้างล่ะ ขอดู error ด้วยครับ
5 @R01416
ในreport อนุญาตให้ใช้ตัวกรอง แล้ว แต่บรรทัดตัวกรอง ปล่อยว่างไว้
ผลโชว์แต่ฟอร์ม แต่ไม่มีข้อมูล เป็นช่องว่างเฉยๆ ไม่มี error ใดปรากฏ
    อจ.ครับเป็นเพราะ report ผมดึงมาจาก q_voucher ดังนั้นผมควรจะอ้าง voucher_s_id จาก report หรือจาก query ของ q_voucher
6 @R01417
ควรอ้าง ถึง ฟิลด์ในคิวรี่ครับ

- ลองดักเช็คดูครับ ว่า report ได้อะไรไปบ้างจากที่เราสั่ง

Private Sub Report_Open(Cancel as Integer)
debug.print me.recordsource
debug.print me.filter
msgbox "rc = " & recordsource & vbcrlf & vbcrlf & "filter = " & filter
End sub
7 @R01419
ไบดูที่ ตัวกรองใน data ของ report บรรทัดตัวกรอง มันขึ้น([voucher_s_id]=[IV52-02-01-0001] ครับ พิมพ์บิลใหม่ IV ก็เปลี่ยนไปตามที่พิมพ์ แต่report preview โดยไม่มี ข็อมูล เป็น report เปล่า
8 @R01421
อ้าว ทำไมมันเขียนอย่างนั้นล่ะครับ
ต้องไปแก้อะไรใหม่หน่อยนะ
จริงจริง มันต้องเขียนออกให้ได้
([voucher_s_id]='IV52-02-01-0001')
เป๊ะ ๆ ทุกอักขระ ทุกๆ เครื่องหมาย นะครับ
ดูเครื่องหมาย วงเล็บ ต้องมีกี่อัน เครื่องหมาย วงเล็บสี่เหลี่ยม ต้องมีกี่อัน เครื่อง หยดน้ำค้าง ต้องมีกี่อัน เอาให้ได้เป๊ะ เลยครับ ไม่งั้นไปแก้ที่คำสั่งใหม่เลยครับ
@ ประกาศใช้งานเว็บบอร์ดใหม่ => บอร์ดเรียนรู้ Access สำหรับคนไทย
แล้วจะใส่ลิ้งอ้างอิงมาที่โพสต์เก่านี้หรือไม่ก็ตามสะดวกครับ
Time: 0.3069s