ผู้เขียน หัวข้อ: เครื่องปริ้น Slip กับ AR  (อ่าน 360 ครั้ง)

ออฟไลน์ hot2

  • Newbie
  • *
  • กระทู้: 16
เครื่องปริ้น Slip กับ AR
« เมื่อ: สิงหาคม 16, 2015, 07:46:17 pm »
สวัสดีครับ ขอสอบถามหน่อยครับ (vb6)
1.ขนาดกระดาษ 58(48) x 3276 mm ตั้งค่าโดยโหมด Custom 256
2.การส่งผ่านฟอร์ม กับผ่าน AR อันไหนดีกว่าครับ
ตอนนี้ได้เครื่องปริ้นสลิปมาเล่นอยู่ครับ มึนตึบ สามารถหาตัวอย่างโค้ดจากเว็บไหนได้บ้างครับ
ปล.ลองใช้ AR ทดลองพิมพ์หัวสลิป  กับช่วงของ Detail มันตัดกระดาษเป็นช่วงๆ ยาวมากครับ

บันทึกการเข้า

ออฟไลน์ ทองก้อน ทับทิมกรอบ

  • Administrator
  • *****
  • กระทู้: 245
  • เพศ: ชาย
  • Webmaster G2GNet
Re: เครื่องปริ้น Slip กับ AR
« ตอบกลับ #1 เมื่อ: สิงหาคม 19, 2015, 10:26:29 am »
หลายคนยังไม่เข้าใจในหลักการของ ActiveReport ก็เลยทำให้ไม่สามารถพิมพ์ออกมาได้ตามที่ต้องการ

- การ Design เราต้องย่อขนาดความกว้างจริงลงมาประมาณ 1 ซม. และในส่วนของการลงโค้ดต้องทำการตั้งค่าหน้ากระดาษก่อนที่ Sub ActiveReport_Initialize ตามตัวอย่างเลยครับ ใช้ค่าขนาดกระดาษจริง และแปลงหน่วย Cm เป็น Twip ก่อนด้วยการเทียบค่าบัญญัติไตรยางค์ (หรือใครจะใช้หน่วยอื่นก็ได้)
1440 Twip = 1 Inch หรือ = 2.54 Cm.

- ความยาวของกระดาษในการพิมพ์สลิป ตั้งไว้สักขนาด A4 เลยก็ได้ เพราะหากข้อมูลยาวไม่ถึง เครื่องพิมพ์ก็จะตัดกระดาษออกอัตโนมัติเองครับ

- ตัวที่สำคัญก็คือส่วน Detail เวลาออกแบบ มันควรจะมีชุดรายการพิมพ์อยู่บรรทัดเดียว เพราะเป็นการพิมพ์ซ้ำโดยการเปลี่ยนแถวเท่านั้น ผมมีโค้ดตัวอย่างทางด้านล่างสุดก็ลองทดสอบและเรียนรู้ดูครับ



Private Sub ActiveReport_Initialize()
    PageSettings.Orientation = ddOPortrait
    PageSettings.PaperSize = 256
    PageSettings.LeftMargin = 50
    PageSettings.RightMargin = 100
    PageSettings.BottomMargin = 300
    PageSettings.TopMargin = 300
    PageSettings.PaperWidth = (5.5 * 1440 / 2.54)
    PageSettings.PaperHeight = (297 * 1440 / 2.54)
End Sub

โค้ดการพิมพ์ข้อมูลแบบข้ามฟอร์มเพื่อทำรายงานบน ActiveReport 2.0

บันทึกการเข้า
สิ่งที่ดีกว่าการให้ คือการให้แบบไม่มีที่สิ้นสุด

ออฟไลน์ hot2

  • Newbie
  • *
  • กระทู้: 16
Re: เครื่องปริ้น Slip กับ AR
« ตอบกลับ #2 เมื่อ: สิงหาคม 19, 2015, 04:06:13 pm »
ขอบคุณครับเฮีย ;D ขอทดลองก่อนครับ

บันทึกการเข้า

ออฟไลน์ hot2

  • Newbie
  • *
  • กระทู้: 16
Re: เครื่องปริ้น Slip กับ AR
« ตอบกลับ #3 เมื่อ: สิงหาคม 20, 2015, 12:33:37 pm »
จากที่ได้ลองงมอยู่กับ AR (เฉพาะปริ้นสลิป) ยังคงไม่ประสบผมสำเร็จครับ ดังนี้ครับ
1.ลองตั้งค่าความยาวกระดาษ A4 ปริ้นช่วง Detail ได้ แต่จะสรุปยอดไม่ได้ครับ มันตัดกระดาษยาว
2.User Error ครับ 55555

เลยลองปลุกไฟราคะอีกรอบ โดยใช้ Object Printer (ค้นหาจากอากู๋ ตัดแปะๆ ได้ผลแฮะ) ปรากฏว่าปริ้นได้ตามต้องการ แต่ยังมีส่วนที่ยังไม่สมบูรณ์เลยเอาโค้ดมาแปะไว้ให้พี่น้องช่วยกันแนะนำครับ อาจมีผิดพลาด

ผมปริ้นผ่าน CutePDF ก่อนที่จะปริ้นจริงครับ ค่าความคาดเคลื่อนจากการปริ้นจริงไม่มากครับ
แต่ถ้าท่านใดจะปริ้นแนะนำให้ตรวจสอบกับสภาพแวดล้อมของโปรแกรมของท่านเองด้วยครับ

Private Sub PrintSlip()
Const intLINE_START_POS As Integer = 0 'ค่าคงที่ของฟิลที่จะแสดง หามาจากเน็ตครับ
Dim StrH1, StrH2, StrH3, StrH4, StrH5, StrH6, StrH7 As String 'เก็บค่าสตริงที่ใช้บ่อยไว้ปริ้นส่วนหัวและท้ายของสลิป
Dim Data1, Data2, Data3, Data4 As String 'เก็บค่าฟิลจาก Grid ไว้ส่ง print
Dim Grow As Integer
Dim PRN As Printer

StrH1 = "ร้านXXXXXXXXX"
StrH2 = "ต.XXXX อ.XXXXXX จ.XXXXXXX"
StrH3 = "โทร xxx-xxxxxxx"
StrH4 = "Sell ID :: "
StrH5 = "......................................................."
StrH6 = "**ขอบคุณที่ใช้บริการ**"
StrH7 = Now


'Set Printer ให้เป็นตัวที่เราใช้แม้ว่าจะไม่ถูก Set Defualt  ไว้ ***1
    If Printers.Count > 0 Then
        For Each PRN In Printers
            If PRN.DeviceName = "XP-58C" Then 'กำหนดชื่อเครื่องปริ้นที่ใช้ ผมใช้ของจีน คุณภาพพอใช้
                Set Printer = PRN
                Exit For
            End If
        Next PRN
    End If

'Head ปริ้นหัวของสลิป
StrH4 = StrH4 & lblid.Caption
Printer.FontName = "Ms San Serif"
Printer.Font.Size = 12
Printer.CurrentX = (Printer.Width) \ 2 - (Printer.TextWidth(StrH1)) \ 2
Printer.Print StrH1
Printer.Font.Size = 10
Printer.CurrentX = (Printer.Width) \ 2 - (Printer.TextWidth(StrH2)) \ 2
Printer.Print StrH2
Printer.CurrentX = (Printer.Width) \ 2 - (Printer.TextWidth(StrH3)) \ 2
Printer.Print StrH3
Printer.CurrentX = (Printer.Width) \ 2 - (Printer.TextWidth(StrH4)) \ 2
Printer.Print StrH4
Printer.CurrentX = (Printer.Width) \ 2 - (Printer.TextWidth(StrH5)) \ 2
Printer.Print StrH5

'Detail
Printer.Font.Size = 7

For Grow = 1 To SGGrid.RowCount - 1 'วนลูปจาก Grid และปรับแต่งข้อมูลก่อนปริ้น
Data1 = SGGrid.CellAt(Grow, 6)
If Len(SGGrid.CellAt(Grow, 3)) > 15 Then
  Data2 = Mid(SGGrid.CellAt(Grow, 3), 1, 15) & ".."
  Else
  Data2 = SGGrid.CellAt(Grow, 3)
End If
If SGGrid.CellAt(Grow, 6) > 1 Then
  Data3 = "*" & Format(SGGrid.CellAt(Grow, 5), "#,####.#0")
  Else
  Data3 = ""
End If
        Printer.Print Tab(intLINE_START_POS); _ 'ปริ้นค่าที่ปรับแต่งแล้ว
                      Data1; _
                      Tab(4 + intLINE_START_POS); _
                      Data2; _
                      Tab(20 + intLINE_START_POS); _
                      Data3; _
                      Tab(29.25 + intLINE_START_POS); _
                      Format(SGGrid.CellAt(Grow, 7), "#,####.#0")
Next
'FootPage ส่วนท้ายของสลิป
Printer.Font.Size = 9
Printer.CurrentX = (Printer.Width) \ 2 - (Printer.TextWidth(StrH5)) \ 2
Printer.Print StrH5
Printer.Print SGGrid.RowCount - 1 & " รายการ"
Printer.Print "รวม " & Format(TotalPrice, "#,###.#0") & " บาท"
Printer.Print "รับมา " & Format(txtR.Text, "#,###.#0") & " บาท"
Printer.Print "ทอน " & Format(txtR.Text - TotalPrice, "#,###.#0") & " บาท"
Printer.CurrentX = (Printer.Width) \ 2 - (Printer.TextWidth(StrH6)) \ 2
Printer.Print StrH6
Printer.CurrentX = (Printer.Width) \ 2 - (Printer.TextWidth(StrH7)) \ 2
Printer.Print StrH7
Printer.EndDoc
End Sub

สิ่งที่ยังต้องแก้ไขมีดังนี้ครับ
1.เช็คสถานะเครื่องปริ้นว่าออนไลน์หรือไม่ออนไลน์ ยังทำไม่ได้ (น่าจะสำคัญ)
2.ฟอนต์ที่ใช้ในการพิมพ์ อยากหาตังอื่นมาลองบ้าง
เพื่อน พี่ น้อง เชิญแนะนำได้ครับ
ขอบคุณเฮียทอง และเว็บ g2gnet.com ผมได้ความรู้ แรงฮึด ไฟราคะ(5555) จากเฮียทอง และเว็ปนี้มากครับ ขอบคุณอีกครั้งครับ

บันทึกการเข้า

ออฟไลน์ hot2

  • Newbie
  • *
  • กระทู้: 16
Re: เครื่องปริ้น Slip กับ AR
« ตอบกลับ #4 เมื่อ: สิงหาคม 26, 2015, 10:27:20 am »
ปรับโค้ดใหม่ครับ ปริ้นได้ตามนี้ครับ



ท่านที่สนใจนำไปปรับแต่งได้ครับ ใช้กับเครื่องรุ่น XP-58C ครับ
Private Sub PrintSlip()

Dim StrH1, StrH2, StrH3, StrH4, StrH5, StrH6, StrH7 As String
Dim Data1, Data2, Data3 As String
Dim grow As Integer
Dim PRN As Printer

StrH1 = "ร้าน xxxxxxxxxxxxx"
StrH2 = "ต.xxxxx อ.xxxxx จ.xxxxxxx"
StrH3 = "โทร 07x-xxxxxxx"
StrH4 = "Sell ID :: "
StrH5 = "......................................................."
StrH6 = "**ขอบคุณที่ใช้บริการ**"
StrH7 = Now


'Set Printer
    If Printers.Count > 0 Then
        For Each PRN In Printers
            If PRN.DeviceName = "XP-58C" Then
          'If PRN.DeviceName = "CutePDF Writer" Then
                Set Printer = PRN
                Exit For
            End If
        Next PRN
    End If

'Head
StrH4 = StrH4 & lblid.Caption
Printer.FontName = "DilleniaUPC"
Printer.Font.Size = 15
Printer.FontBold = True

Printer.CurrentX = (Printer.Width) \ 2 - (Printer.TextWidth(StrH1)) \ 2
Printer.CurrentY = 0
Printer.Print StrH1

Printer.Font.Size = 13

Printer.CurrentX = (Printer.Width) \ 2 - (Printer.TextWidth(StrH2)) \ 2
Printer.CurrentY = 252
Printer.Print StrH2

Printer.CurrentX = (Printer.Width) \ 2 - (Printer.TextWidth(StrH3)) \ 2
Printer.CurrentY = 475
Printer.Print StrH3

Printer.CurrentX = (Printer.Width) \ 2 - (Printer.TextWidth(StrH4)) \ 2
Printer.CurrentY = 689
Printer.Print StrH4

Printer.FontBold = True
Printer.CurrentX = (Printer.Width) \ 2 - (Printer.TextWidth(StrH5)) \ 2
Printer.CurrentY = 921
Printer.Print StrH5

'Detail
Printer.FontBold = True
Printer.Font.Size = 9.5

Dim AC As Integer
Dim ACC As Double
Const intLINE_START_POS As Integer = 0
ACC = 1144

Printer.CurrentY = ACC

For grow = 1 To SGGrid.RowCount - 1

      Data1 = SGGrid.CellAt(grow, 6)
         
     
      If SGGrid.CellAt(grow, 6) > 1 Then
            Data3 = "*" & Format(SGGrid.CellAt(grow, 5), "#,####.#0")
            Data2 = Mid(SGGrid.CellAt(grow, 3), 1, 15) '& ".."
      Else
            Data2 = Mid(SGGrid.CellAt(grow, 3), 1, 30)
            'Data3 = ""
      End If
                     
      Printer.CurrentX = 0
      Printer.CurrentY = ACC
      Printer.Print Data1
     
      Printer.CurrentX = 270
      Printer.CurrentY = ACC
      Printer.Print Data2
     
      If Data1 > 1 Then
      Printer.CurrentX = 1550
      Printer.CurrentY = ACC
      Printer.Print Data3
      End If
     
      Printer.CurrentX = Printer.ScaleWidth - Printer.TextWidth(Format(SGGrid.CellAt(grow, 7), "#,####.#0"))
      Printer.CurrentY = ACC
      Printer.Print Format(SGGrid.CellAt(grow, 7), "#,####.#0")

ACC = ACC + 175
Next

'FootPage
Printer.Font.Size = 13
Printer.FontBold = True
Printer.CurrentX = (Printer.Width) \ 2 - (Printer.TextWidth(StrH5)) \ 2
Printer.CurrentY = ACC - 80
Printer.Print StrH5

Printer.FontBold = True
Printer.Font.Size = 12
Printer.CurrentY = ACC + 223 - 80
Printer.Print Tab(intLINE_START_POS); _
                        SGGrid.RowCount - 1 & " รายการ;
Printer.CurrentX = Printer.ScaleWidth - Printer.TextWidth("รวม " & Format(TotalPrice, "#,###.#0") & " บาท")
Printer.Print "รวม " & Format(TotalPrice, "#,###.#0") & " บาท"

Printer.CurrentX = Printer.ScaleWidth - Printer.TextWidth("รับมา " & Format(txtR.Text, "#,###.#0") & " บาท")
Printer.CurrentY = ACC + (223 * 2) - 80
Printer.Print "รับมา " & Format(txtR.Text, "#,###.#0") & " บาท"

Printer.CurrentX = Printer.ScaleWidth - Printer.TextWidth("ทอน " & Format(txtR.Text - TotalPrice, "#,###.#0") & " บาท")
Printer.CurrentY = ACC + (223 * 3) - 80
Printer.Print "ทอน " & Format(txtR.Text - TotalPrice, "#,###.#0") & " บาท"

Printer.CurrentX = (Printer.Width) \ 2 - (Printer.TextWidth(StrH6)) \ 2
Printer.CurrentY = ACC + (223 * 4) - 80
Printer.Print StrH6

Printer.CurrentX = (Printer.Width) \ 2 - (Printer.TextWidth(StrH7)) \ 2
Printer.CurrentY = ACC + (223 * 5) - 80
Printer.Print StrH7

Printer.EndDoc
End Sub

บันทึกการเข้า