Print Out Nota POS Dengan VB6

Berikut ini adalah contoh program VB6 untuk membuat print out untuk struk atau nota pos dengan menggunakan printer POS EPSON TMU220 dengan auto cutter, berikut ini adalah class clsPrintNota:


Dim mHeader1 As String
Dim mHeader2 As String
Dim mHeader3 As String
Dim mFooter As String
Dim mTanggal As String
Dim mNomor As String
Dim mSales As String
Dim mItem() As RowField
Dim mItemCount As Integer
Dim mPrinterName As String
Dim mDiskonPersen As String
Dim mDiskonNilai As String
Dim mPPNPersen As String
Dim mPPNNilai As String
Dim mSubTotal As String
Dim mTotal As String

Private Type RowField
    NamaBarang As String
    Qty As String
    HargaSatuan As String
    HargaTotal As String
End Type

Private Sub Class_Initialize()
    mDiskonPersen = "0%"
    mDiskonNilai = "0"

    mPPNPersen = "0%"
    mPPNNilai = "0"
End Sub

Public Property Let Header1(ByVal param As String)
    mHeader1 = param
End Property

Public Property Let Header2(ByVal param As String)
    mHeader2 = param
End Property

Public Property Let Header3(ByVal param As String)
    mHeader3 = param
End Property

Public Property Let Footer(ByVal param As String)
    mFooter = param
End Property

Public Property Let Tanggal(ByVal param As String)
    mTanggal = param
End Property

Public Property Let Nomor(ByVal param As String)
    mNomor = param
End Property

Public Property Let Sales(ByVal param As String)
    mSales = param
End Property

Public Property Get ItemCount() As Integer
    ItemCount = mItemCount
End Property

Public Property Let PrinterName(param As String)
    mPrinterName = param
End Property

Public Sub SetDiskon(ByVal persen As String, ByVal nilai As String)
    mDiskonPersen = persen
    mDiskonNilai = nilai
End Sub

Public Sub SetPPN(ByVal persen As String, ByVal nilai As String)
    mPPNPersen = persen
    mPPNNilai = nilai
End Sub

Public Property Let SubTotal(ByVal param As String)
    mSubTotal = param
End Property

Public Property Let Total(ByVal param As String)
    mTotal = param
End Property

Public Sub AddItem(ByVal param1 As String, ByVal param2 As String, ByVal param3 As String, ByVal param4 As String)
    ReDim Preserve mItem(mItemCount)

    mItem(mItemCount).NamaBarang = param1
    mItem(mItemCount).Qty = param2
    mItem(mItemCount).HargaSatuan = param3
    mItem(mItemCount).HargaTotal = param4
    mItemCount = mItemCount + 1
End Sub

Public Sub PrintNota()
    Const PAPER_WIDTH As Integer = 40
    Const RIGHT_MARGIN As Integer = 37
    Const LEFT_MARGIN As Integer = 0
    Const CENTER_MARGIN As Integer = 20

    Dim GARIS1 As String
    Dim GARIS2 As String
    Dim GARIS_PLUS As String
    Dim GARIS_MINUS As String
    Dim Qty As String
    Dim i As Integer

    GARIS1 = String$(PAPER_WIDTH, "-")
    GARIS2 = String$(PAPER_WIDTH, "=")
    GARIS_PLUS = String$(PAPER_WIDTH - 4, "-") & " (+)"
    GARIS_MINUS = String$(PAPER_WIDTH - 4, "-") & " (-)"

    On Error GoTo errH
    Open mPrinterName For Output As #1

    'Begin print
    Print #1, Chr$(&H1B); "@";
    Print #1, Tab((PAPER_WIDTH - Len(mHeader1)) / 2); mHeader1
    Print #1, Tab((PAPER_WIDTH - Len(mHeader2)) / 2); mHeader2
    Print #1, Tab((PAPER_WIDTH - Len(mHeader3)) / 2); mHeader3
    Print #1, GARIS2

    Print #1, Tab(LEFT_MARGIN); "Tanggal : "; mTanggal
    Print #1, Tab(LEFT_MARGIN); "Nomor   : "; mNomor
    Print #1, Tab(LEFT_MARGIN); "Sales   : "; mSales
    Print #1, GARIS1
    For i = 0 To mItemCount - 1
        Qty = mItem(i).Qty & " x " & mItem(i).HargaSatuan
        Print #1, Tab(LEFT_MARGIN); Left$(mItem(i).NamaBarang, RIGHT_MARGIN - LEFT_MARGIN)
        Print #1, Tab(CENTER_MARGIN - (Len(Qty))  2); Qty;
        Print #1, Tab(RIGHT_MARGIN - Len(mItem(i).HargaTotal)); mItem(i).HargaTotal
    Next i
    Print #1, GARIS_PLUS
    Print #1, Tab(LEFT_MARGIN); "SUB TOTAL"; Tab(RIGHT_MARGIN - Len(mSubTotal)); mSubTotal
    Print #1, Tab(LEFT_MARGIN); "DISKON(" & mDiskonPersen & ")"; Tab(RIGHT_MARGIN - Len(mDiskonNilai)); mDiskonNilai
    Print #1, Tab(LEFT_MARGIN); "PPN(" & mPPNPersen & ")"; Tab(RIGHT_MARGIN - Len(mPPNNilai)); mPPNNilai
    Print #1, GARIS_PLUS

    Print #1, Tab(LEFT_MARGIN); "TOTAL"; Tab(RIGHT_MARGIN - Len(mTotal)); mTotal
    Print #1, GARIS2
    Print #1, Tab((PAPER_WIDTH - Len(mFooter)) / 2); mFooter;
    Print #1, Chr$(&HA);
    Print #1, Chr$(&H1D); "V"; Chr$(66); Chr$(0);

    Close #1
    Exit Sub
errH:
    'MsgBox Err.Description
    Dim jwb As Integer
    jwb = MsgBox("Printer ERROR!" & vbCrLf & "Betulkan printer, lalu klik OK", vbOKCancel, "Printer Error")
    If jwb = vbOK Then
        Resume
    End If
End Sub

Berikut adalah contoh penggunaannya:

Private Sub PrintNota()
    Dim oPrint As New clsPrintNota

    oPrint.PrinterName = "LPT1"
    oPrint.Header1 = "Nama perusahaan"
    oPrint.Header2 = "Alamat"
    oPrint.Header3 = "Telp"
    oPrint.Footer = ".:Terimakasih:."

    oPrint.Nomor = "001"
    oPrint.Tanggal = "20-01-2009"
    oPrint.Sales = "ARL"

    oPrint.SetDiskon "10%", "-35.000"
    oPrint.SetPPN "10%", "31.500"
    oPrint.SubTotal = "350.000"
    oPrint.Total = "346.500"

    oPrint.AddItem "HP Nokia 3310", "1", "150.000", "150.000"
    oPrint.AddItem "HP Nokia 3315", "1", "200.000", "200.000"
    oPrint.PrintNota
End Sub

Call PrintNota()
About these ads

42 Tanggapan

  1. Kalo untuk TMU220 yang pake Port USB gmn bro ?

    • Saya sih belum nyoba untuk yang menggunakan usb, tapi kira-kira caranya sama saja hanya tinggal menyesuaikan aja dengan nomor port untuk usb tersebut… misal com1 atau com2 atau selainnya.. :D

  2. kalau cara print out langsung dr tombol “Print” di form nyamisalnya, tapi nanti yg di print itu databse yg udah dibuat di ms access gimana ya listing programnya??

    • Skenarionya saya rasa sangat mudah sekali, tinggal lakukan pengambilan data dari database kemudian hasil data tersebut dimasukkan kedalam kelas yang sudah dibuat seperti contoh diatas… :D

  3. wah, akhirnya saya temukan juga caranya.
    hehe…

    apa bisa di jelaskan lebih detil?
    karena saya ingin benar-benar mengerti, bukan cuma mau copas aja.
    ^_^

    • Metode seperti diatas digunakan untuk melakukan print langsung melalui port printer itu sendiri tanpa melalui driver, dengan cara membuka port sesuai dengan nama port yang digunakan oleh printer tersebut, hal ini dilakukan dengan perintah berikut:

      Open mPrinterName For Output As #1

      kemudian command-commad berikutnya mengirimkan karakter yang akan diprint dengan perintah:

      Print (Nomor Referensi Koneksi), (karakter yang akan dipriint)

      Jika telah selesai tutup objek koneksi printer yang telah digunakan dengan perintah:

      Close (Nomor Referensi Koneksi)

      semua proses itu saya enkapsulasi dalam kelas sehingga mudah digunakan, begitulah inti dari alur class yang saya buat. :D

  4. thanks bro sangat membantu
    terus bagaimana caranya biar judul tulisannya menjadi lebih besar ya mas? please help…

  5. sama aja kok kodinganna pake usb kek pake serial kek atau paralel.. semua sama aja kok.. saya sudah coba. dan jalan.. tapi di C Sharp.

  6. mantap juga brow, gw coba di rumah, eh brow sbenernya data report or cristal report bisa gak dibuat print out nota di atas kerta biasa, mohon confrim nya yach……

    • bisa tapi kalo pake reporting tools seperti crysyal report atau data report print outnya melalui driver printer, sehingga untuk pengaturannya juga di atur oleh driver akibatnya autocutternya gak bisa jalan dengan sempurna, dan proses print outnya tidak secepat dengan direct print.

  7. klo tipe printer yang bisa auto cutter gmana itu perintahnya seperti apa ?..

    • kode diatas sudah support printer auto cutter kok… :D, perintah untuk mengeksekusi autocutternya yang ini:

      Print #1, Chr$(&H1D); “V”; Chr$(66); Chr$(0);

  8. Mantap infonya, numpang tanya nih mas, apa kode autocutter tersebut berrfungsi disemua printer autocutter? bagaimana kalau kita tidak menggunakan printer autocutter apa akan terjadi error jika menyisipkan kode tersebut? tks pencerahannya :)

    • saya belum nyoba sih kalo non autocutter, mungkin temen-temen yang lain ada yang udah nyoba, bisa share infonya disini :D, tapi kalo misalkan terjadi error kan tinggal kita delete aja baris program yang mengeksekusi autocutter-nya.

  9. Bagaimaian kalau yg isi datanya di MsFlexgrid?

    oPrint.AddItem “HP Nokia 3310″, “1”, “150.000”, “150.000”

    menjadi spt apa??

    ak lagi coba mas.

  10. Mas, jika printer tidak connect kok tidak masuk ke bagian errH ya?

    trus di coding yang ini

    132
    Print #1, Tab(CENTER_MARGIN – (Len(Qty)) 2); Qty;

    itu (Len(Qty)) dibagi 2 y?

    thx

    • ah masak sih, di tempat saya kedetect kok kan udah ada baris code: On Error GoTo errH, jadi jika terjadi error langsung jump to errH, kalo yang baris program 132 itu di bagi 2, supaya center, memang disitu mungkin gak keliatan simbol “/” tapi kalo di view source akan keliatan kok.

  11. sama aja koq mas.. saya dah view source tetep ndak keluar.. hehe.. ndak apa2..

    btw kalau itu printernya di LPT1.. kalau mau pilih printernya gmana mas? jadi misalnya printernya tidak di komputer saya. melainkan di komputer yg lain. lewat LAN begitu.. thx

  12. mas tanya lagi…maap merepotkan >.<

    kalau printernya tidak dalam kondisi nyala koq ndak masuk di bagian error ya..

    kecuali kalau nama printernya tidak ada di komputer baru masuk di bagian error..

    thx

    • owh gitu ya, belum ngetest sih untuk kondisi seperti itu, :), mungkin bisa coba-coba diedit aja source code nya dengan memanfaatkan error number nya.

  13. Kalo mau ganti huruf (diperkecil/diperbesar) gmn mas? biar ngirit kertas.
    trims

    • Wah kalo itu belum nyoba2 saya mas, coba diliat aja di manual printernya ada kok, :D. manulanya bisa cari di google, atau mungkin dari agan-agan yang lain bisa bantu….? :D

  14. kertasnya ngegulung gk mas klo dah selesai print

    • oowh gitu ya, tapi kalo di printer saya fine-fine aja kok, mungkin settingan drivernya kali gan, coba di oprek2 lagi setingannya. :D

  15. gimana cara membuat kalau memakai database saya blm bisa buat ni..

  16. Kalo pake TM-U210PD gmn mas?

  17. info yg sangat bermanfaat gan… makasih bnyak share nya… BTW ane nyoba pake lx-300.. stelah print n sobek, print berikutnya ada ruang kosong bagian atas… ane coba googling nyari scrip buat gulung balik kertanya.. tapi lum ada hasil… barang kali master Arul tau scripnya mohon bantuanya gan… makasih banyak sbelumnya…

  18. waduh… gada respon neh…

    • Wah kalo itu saya belum pernah nemu caranya gan, tapi saya punya trik, begini… jadi diruang kosong tersebut saya isi header atau informasi struk misalnya nama toko atau sejenisnya, yang diprint pada akhir baris yang tentunya di gunakan pada print out setelahnya, semoga bisa membantu…

  19. nice info gan, kalo cara mengatur font size nya gimana gan?

  20. gan..
    klo make usb di laptop setingannya gmn bang?

  21. mas blh mnta kodingnya ga untuk auto cutter di vb6,program punya saya print langsungnya udah jln cuma auto cutter nya blm,gmn koding auto cutter nya mas??

    • pakai kode ini

      Print #1, Chr$(&H1D); “V”; Chr$(66); Chr$(0);

      • mas saya joko,pengen bisa ngeprint pakai printer tm u220b,yg ada auto cutternya,tanpa pakai drivernya,pengkodeannya gmn yah,bila saya pakai 2textbox dan 1 garis lurus,dgn vb6.0

        trimakasih sblmnya…

  22. AGAN, saya pakai printer Star port USB tidak bisa gan?

    mohon bantuannya.

Berikan Balasan

Isikan data di bawah atau klik salah satu ikon untuk log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Logout / Ubah )

Twitter picture

You are commenting using your Twitter account. Logout / Ubah )

Facebook photo

You are commenting using your Facebook account. Logout / Ubah )

Google+ photo

You are commenting using your Google+ account. Logout / Ubah )

Connecting to %s

Ikuti

Get every new post delivered to your Inbox.

%d blogger menyukai ini: