สั่งพิพม์ให้มีคำว่า ต้นฉบับ และ สำเนาเป็นชุด
กระทู้เก่าบอร์ด อ.Yeadram

 9,599   23
URL.หัวข้อ / URL
สั่งพิพม์ให้มีคำว่า ต้นฉบับ และ สำเนาเป็นชุด

อยากได้codeที่พิมพ์Report คำว่า ต้นฉบับ และสำเนา ของ access
ตอนนี้ทำเรื่องใบเสร็จรับเงินอยู่

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

1 @R06019
คุณก็ทำ รายงานเป็น 2 ชุดซิค่ะ
ชุดแรก ต้นฉบับ
ชุดสอง ก็สำเนา

ทำให้เหมือนกันแต่แก้แค่ label เท่านั้น

แล้วก็เีรียกคำสั่ง

docmd.openreport "ต้นฉบับ"
docmd.openreport "สำเนา"
2 @R06020
ไม่อยากทำรายงาน2ชุดนะค่ะ รบกวนด้วยค่ะ
พอมีวิธีแนะนำไหมค่ะ
3 @R06023
พิมพ์บนกระดาษต่อเนื่องแบบมี copy นะเหรอครับ
สงสัยจะไม่ได้ แนะนำให้สั่งทำจากโรงพิมพ์เป็นแบบ pre print form เลยครับ
4 @R06026
ทำชุดเดียวแต่ มีLabel สำเนาถูกต้อง ตรงที่ต้องการ
แล้วสั่งให้ Visible เป็น No ไว้ก่อน แล้วเวลาสั่งปริ้น
เสร็จขั้นตอนก็ให้ ระบุให้ Label นั้น Visible = True
5 @R06035
เรียนคุณunพอยกตัวอย่างได้ไหมค่ะ ยัง งง อยู่ค่ะ
พอดีเพิ่งเริ่มหัดใช้Access ด้วยค่ะ
ขอบคุณมากค่ะ
6 @R06036
1.สร้างรายงานที่ต้องการครับ 1 รายงาน
โดยตรงอักษรที่แตกต่างระหว่างตัวจริงกับสำเนา ให้ใช้ Label เพิ่มขึ้นมา เช่น สำเนาถูกต้อง สมมุติว่าชื่อ LabelTxt แล้วเราสั่ง LabelTxt ตัวนี้ให้การมองเห็นเป็น No ไว้ก่อน
2.ในหน้าฟอร์ม กำหนดกล้องข้อความเปล่าๆ 1 กล่อง สมมุติว่าชื่อ chkprint แล้วซ่อนไว้ให้มองไม่เห็น
3.ที่ตัวรายงาน Event on Open
if Forms!ชื่อฟอร์ม!chkprint=1 Then
Me.LabelTxt.visible = True
end if
4.ที่ปุ่มคำสั่งปริ้น Event on Click
me.chkprint =1
DoCmd.OpenReport "ชื่อรายงาน", acViewNormal, "", "", acNormal
DoCmd.OpenReport "ชื่อรายงาน", acViewNormal, "", "", acNormal

ผมไม่ได้ลองขั้นตอนนะครับ แต่อ่านแล้วน่าจะเข้าใจ ไอเดียนะครับ ลองสลับขั้นตอนดูถ้าไม่ได้
7 @R06037
เรียนคุณ un ขอบคุณค่ะ ทำได้แล้ว
8 @R07341
เรียนคุณ un และ ปอง ผมมีปัญหาเดีวกัน ผมลองทำตามขั้นตอนของคุณ Un แล้วปรากฏว่าขึ้นสำเนาถูกต้องอย่างเดียว
รบกวนช่วยชี้แนะนำเพิ่มเติมหน่อย

สิ่งที่ต้องการ คือ กดพิมพ์รายงานแล้วให้ออกสองแผ่น
แผ่นแรกเป็นต้นฉบับ
แผ่นสองเป็นสำเนา
และเมื่อปริ้นท์ไปแล้วทุกครั้งที่จะกลับมาปริ้นท์ใหม่ให้ปริ้นแค่สำเนาแผ่นเดียว
(ตัวต้นฉบับจะปริ้นท์แค่เฉพาะครั้งแรกเท่านั้น)

ขอขอบคุถณอาจารย์ทุกท่านล่วงหน้าครับ
9 @R07347
โจทย์
1 ต้องรู้ว่า เป็นการพิมพ์ ครั้งแรก หรือไม่
    โดยการสร้าง ฟิลด์ที่ ตารางใบเสร็จ สมมุติชื่อ chkFirstPrint เป็น text ความยาว 1 ตัวอักษร (ถ้าพิมพ์ครั้งแรก เราจะ update ให้เป็น Y ถ้าพิมพ์ครั้งถัดไป จะตรวจสอบว่าพิมพ์ครั้งแรกหรือยังจากค่านี้)
2 พิมพ์รายงานครั้งเดียว แต่ออก 2 แผ่น แผ่นแรกเป็น"ต้นฉบับ" แผ่นที่ สองเป็น"สำเนา"
    ความแตกต่างของรายงานอยู่ที่ตัวอักษร
    สิ่งที่ต้องทำคือ ตรวจสอบค่า ในฟิลด์ chkFirstPrint ตารางใบเสร็จ ว่า เป็น "Y" หรือไม่
     ถ้าไม่ใช่ มีค่า ="" หรือ Null ให้พิมพ์ 2 ครั้ง โดยส่งค่า "ต้นฉบับ" และ "สำเนา" ไปด้วย
if IsNull(DlookUp("[chkFirstPrint]","ชื่อตารางใบเสร็จ","[ฟิลด์เลขที่ใบเสร็จ]= " & เลขที่ใบเสร็จ)) then
    mysql="Update ชื่อตารางใบเสร็จ Set chkFirstPrint = 'Y' " & _
               "Where ชื่อฟิลด์เลขที่ใบเสร็จ = " & เลขที่ใบเสร็จ
   docmd.runsql mysql
DoCmd.OpenReport "ชื่อรายงาน", acViewNormal, "", "", acNormal,"ต้นฉบับ"
DoCmd.OpenReport "ชื่อรายงาน", acViewNormal, "", "", acNormal,"สำเนา"
     
Else
DoCmd.OpenReport "ชื่อรายงาน", acViewNormal, "", "", acNormal,"สำเนา"
Endif

3 ที่รายงาน เขียน Event Procedure ที่
Private Sub   Report_Open    
     IF Not IsNull(Openargs) then
' ชื่อ label ที่ต้องการ ให้พิมพ์ คำว่าต้นฉบับ/สำเนา สมมุติชื่อ lblTopic จะได้ว่า
          lblTopic.Caption=Openargs
     End if
End sub

ยังไม่ได้ทดลองนะครับ ลองทำดูว่า work หรือไม่ ติดปัญหาตรงไหน
10 @R07348
เรียน คุณ ditasilk

ขึ้น error = "Compile error:"
                 "Syntax error"

ตรงบรรทัด    mysql="Update ชื่อตารางใบเสร็จ Set chkFirstPrint = 'Y' " & _
                    "Where ชื่อฟิลด์เลขที่ใบเสร็จ = " & เลขที่ใบเสร็จ

ผมใช้ access 2007

รบกวนด้วยครับ
11 @R07349
1 เพิ่ม บรรทัด
dim mysql as string    
ก่อน mysql ="Update ......
2 ขอประโยค คำสั่งนี้ ที่คุณน้องใหม่ เขียนเป็นประโยคของตัวเอง post ให้ดูหน่อยครับ ว่า
     2.1 ชื่อตาราง ชื่ออะไร
     2.2 ชื่อฟิลด์เลขที่ใบเสร็จ
     2.3 เลขที่ใบเสร็จ เก็บข้อมูลเป็นประเภท Numberic หรือ text
12 @R07350
1. Private Sub Command31_Click()
Dim mysq1 As String
If IsNull(DLookup("chkFirstPrint", "invoiceACC", "InvoiceNo=" & InvoiceNo)) Then
    mysq1 = "Update InvoiceACC set chkFirstPrint = 'y' " &
        "where InvoiceNo = " & InvoiceNo
    DoCmd.RunSQL mysql
DoCmd.OpenReport "ReportAcc", acViewNormal, "", "", acWindowNormal, "ต้นฉบับบ" <= (ไม่รู้ว่าพิมพ์ตามนี้หรือเปล่า)
DoCmd.OpenReport "ReportAcc", acViewNormal, "", "", acWindowNormal, "สำเนา" <= (ไม่รู้ว่าพิมพ์ตามนี้หรือเปล่า)

       
Else
DoCmd.OpenReport "ReportAcc", acViewNormal, "", "", acWindowNormal, "สำเนา" <= (ไม่รู้ว่าพิมพ์ตามนี้หรือเปล่า)

End If

End Sub

2. ชื่อตาราง = invoiceACC
    ชื่อฟิลด์เลขที่ในเสร็จ = InvoiceNo
    เลขที่ใบเสร็จ = autonumber

รบกวนลงรายละเอียดหน่อยนะครับผมมือใหม่ไม่ค่อยเข้าใจ ยังไงก็แนะนำด้วยนะครับ เป็นพระคุณอย่างสูง
13 @R07351
If IsNull(DLookup("[chkFirstPrint]", "invoiceACC", "InvoiceNo=" & InvoiceNo)) Then
ให้ใส่ก้ามปูกำกับชื่อฟิลด์

mysq1 = "Update InvoiceACC set chkFirstPrint = 'y' " &
        "where InvoiceNo = " & InvoiceNo
กรณีเขียนบรรทัดเดียวกัน ไม่ต้องมี &
mysq1 = "Update InvoiceACC set chkFirstPrint = 'y' where InvoiceNo = " & InvoiceNo
กรณีเขียนไม่อยู่ในบรรทัดเดียวกัน ต้องมี    & _
เชื่อมการขึ้นบรรทัดใหม่

DoCmd.RunSQL mysql1
คุณน้องใหม่ตั้งชื่อ mysql1 เวลาอ้างอิงต้องใช้ชื่อเดียวกันครับ

DoCmd.OpenReport "ReportAcc", acViewNormal, , , acWindowNormal, "ต้นฉบับ"
DoCmd.OpenReport "ReportAcc", acViewNormal, , , acWindowNormal, "สำเนา"
คำว่า ต้นฉบับ และ สำเนา เป็นค่าที่ส่งไปให้ รายงาน เพื่อพิมพ์คำ ๆนี้
คุณลองเปลี่ยนเป็น อย่างอื่นดูซิครับ เช่นชื่อตัวเอง แล้วเปิดรายงานดู จะเห็นชื่อตัวเองในรายงาน จะได้เข้าใจมากขึ้น


14 @R07352
เพิ่มอีกจุด ที่ใส่ก้ามปู
If IsNull(DLookup("[chkFirstPrint]", "invoiceACC", "[InvoiceNo]=" & InvoiceNo)) Then
ให้ใส่ก้ามปูกำกับชื่อฟิลด์
15 @R07374
ได้แล้วครับ คุณ ditasilk นี้สุดยอดเลยครับ

แต่ขอรบกวนอีกสักสองอย่างนะครับคื่อ
1. เมื่อสั่งปริ้นท์ในครั้งแรกสามารถแสดง "ต้นฉบับ" ได้แต่แสดงแค่แผ่นเดียวไม่แสดงแผ่นที่สองที่เป็นสำเนา

2. ทุกครั้งสั่งพิมพ์ในครั้งแรก จะขึ้นหน้าต่างปอปอัพแจ้ง ให้กด "Yes" หรือ "No" เพื่ออัพเดทเรคคอร์ด (ครั้งต่อไปจะไม่แจ้ง) อยากจะให้ไม่ต้องมีหน้าต่างถาม   

ด้วยความเคารพ ขอบคุณครับ   
16 @R07375
ข้อ 1 พิมพ์แผ่นเดียวหรือครับ ผมไม่ได้ทดลองดูครับ
ข้อ 2 เปิด ms access --> TOOLS(เครื่องมือ)--->OPTION(ตัวเลือก)

----> tab แก้ไข/ค้นหา อยู่ติดกับ TAB General(ทั่วไป)
---->.ในกรอบ ยืนยัน (confirm) เอา เครื่องหมายใน check box ตรง action       query ออก   กด ok
ทดสอบดูครับว่า ยังแสดงอาการอยู่อีกรึเปล่า

ส่วนข้อ 1
สั่งพิมพ์ครั้งที่ 1
DoCmd.OpenReport "ReportAcc", acViewNormal, , , acWindowNormal, "ต้นฉบับ"
สั่งพิมพ์ครั้งที่ 2
DoCmd.OpenReport "ReportAcc", acViewNormal, , , acWindowNormal, "สำเนา

ถ้ายังไม่ได้เดี๋ยวหาวิธีอื่นดู แต่ขอทดสอบดูก่อน ตอนนี้ยังไม่ว่างเลยครับ
เขียน ระบบ inventory ให้น้องๆ อยู่
17 @R07376
ครับได้แผ่นเดียว

DoCmd.OpenReport "reportacc", acViewPreview, , "[InvoiceNo] = [Forms]![invoiceacc1].[InvoiceNo]", acWindowNormal, "ต้นฉบับ"
DoCmd.OpenReport "reportacc", acViewPreview, , "[InvoiceNo] = [Forms]![invoiceacc1].[InvoiceNo]", acWindowNormal, "สำเนา"
(ผมเพิ่มติมในส่วนที่ให้แสดงเฉพราะหน้าฟอร์มปัจจุบันเท่านั้นลงไป) ไม่ทราบเกียวหรือเปล่าแต่ไม่น่าใช่ แต่ทุกอย่างโอเคหมดยกเว้นที่ไม่ปริ้นท์สองแผ่นเท่านั้นครับ
18 @R07378
'กำหนดตัวแปร i เป็นจำนวนเต็ม
   Dim i As Integer
'สั่งให้ เปิด report 2 รอบ โดยใช้ For .... Next
' เริ่มตั้งแต่ i=1 ไปจนถึง 2
   For i = 1 To 2
       'สั่งให้เปิด report แล้ว พิมพ์
       'ตอนส่งค่า ให้ตรวจสอบค่า i
       ' ถ้า=1 ให้ส่งคำว่า ต้นฉบับ
       ' ถ้า=2 ให้ส่งคำว่า สำเนา
       DoCmd.OpenReport "reportacc", acViewNormal, "", "", acWindowNormal, IIf(i = 1, "ต้นฉบับ", "สำเนา")
   Next

ตรวจสอบแล้ว ใช้ได้จริงครับ
ต้องฉลองกันหน่อยนะครับ   
วันพ่อ อย่าลืมดูแลพ่อ ด้วยนะครับ

19 @R07385
ไม่ทราบว่าผมใส่แบบนี้ถูกไหมครับ
ใส่แล้วมันก็ยังไม่ผ่านเหมือนเดินครับ
Private Sub Command31_Click()
Dim i As Integer
Dim mysq1 As String
If IsNull(DLookup("[chkFirstPrint]", "invoiceACC", "[InvoiceNo]=" & InvoiceNo)) Then
    mysq1 = "Update InvoiceACC set [chkFirstPrint] = 'y' " & _
        "where InvoiceNo = " & InvoiceNo
    DoCmd.RunSQL mysq1
    For i = 1 To 2
DoCmd.OpenReport "reportacc", acViewPreview, , "[InvoiceNo] = [Forms]![invoiceacc1].[InvoiceNo]", acWindowNormal, IIf(i = 1, "µé¹©ºÑº", "ÊÓà¹Ò")
    Next
End If
End Sub
20 @R07386
แนะนำคุณน้องใหม่อย่างนี่ครับ
1 ทำตาม ที่แนะนำก่อน เช่นสั่งให้พิมพ์ acViewNormal อย่าพึ่งไป acViewPreview
2 เอา Condition ออกก่อน
แล้วลองทำตามดูว่า
1 กดครั้งเดียว พิมพ์ 2 ใบ
2 ใบแรกเป็น ต้นฉบับ ใบที่สองเป็น สำเนา
ให้เป็นตามนี้ก่อน
แล้วค่อย apply ใส่ เงื่อนไข หรืออื่น ๆ
จะได้งานตามที่ต้องการ ครับ
@ ประกาศใช้งานเว็บบอร์ดใหม่ => บอร์ดเรียนรู้ Access สำหรับคนไทย
แล้วจะใส่ลิ้งอ้างอิงมาที่โพสต์เก่านี้หรือไม่ก็ตามสะดวกครับ
Time: 0.3069s