Pages

Info Saya

----------------------

TENTANG SAYA

Nama saya Lengkapnya adalah Yudi Permana, Saya memang Bukan Seorang Blogger, Desainer atau Apapun Tapi Saya Hanya Seseorang Yang Ingin Selalu Belajar dan Ingin Tahu Sesuatu Yang Baru. Saya hanya Bisa Mengutak Atik yang ada Tanpa Tau Apa Maksud dan Tujuannya. Mohon Untuk Tidak Tersinggung Bila Ada Sesuatu yang sama Dari Blog Ini...

----------------------

Membuat Struk Penjualan dengan Delphi

بِسْــــــــــــــــمِ اﷲِالرَّحْمَنِ اارَّحِيم

Membuat Struk Penjualan dengan Delphi.Pasti semua tau struk penjualan kan, yang sering ke minimarket pasti dong. Nah bagaimana kita bikin struk sepeti itu dengan delphi ? bagi yang sudah tau pasti dah jago" y ilmunya. :D Bedanya apa sih dengan Faktur penjualan ? tanya saja sama mbah gogle, ane juga gx paham. Tapi yang pasti ane punya coding untuk membuat Struk seperti yang ada di minimarket itu, jadi pas pengePrint an itu sesuai banyaknya data yang akan diprint.
Kalau pake quick report (misal) jika kita Print maka si kertas itu akan tetap menggulung aampe akhir kertas tapi ini tidak dan si printer akan berhenti sesuai nyaknya data atau item. Akh panjang lebar pasti sudah tau kan maksudnya.....
Ane nyoba pake Print LX-300, karena gx ada lagi yang lain..wkwkk....

Pertama Tambahkan di USES Winspool dan Printers ;
Buat Prosedure dan function,seperti dibawah ini..
Procedure cetak(Const line: String);
Function FormatString(Const VField, VItem : string; Const VLength : Integer; Const VSpace: Char): string;

Lalu coding selanjutnya >>

function TFPenjualan.FormatString(Const VField, VItem : string ; Const VLength : Integer; Const VSpace: Char): string;
var
_SStart : String;
_SStop : String;
_Length : LongInt;
Begin
_SStart := VField;
_SStop := VItem;
_Length := Length(_SStart)+Length(_SStop);
Result := '';
While _Length + Length(Result) < VLength Do
Result := Result + VSpace;
Result := _SStart + Result + _SStop;
End;

Procedure TFPenjualan.cetak(Const line: string);
Var
  BytesWritten : DWORD;
  hPrinter, DevMod : THandle;
  DocInfo : TDocInfo1;
  Device, Drv, Port : Array[0..255] of char;
begin
  Printer.PrinterIndex := -1;
  Printer.GetPrinter(Device, Drv, Port, DevMod);
  If Not WinSpool.OpenPrinter(@Device, hPrinter, nil) Then
    Raise Exception.Create('Printer tidak ada ...');
  Try
    DocInfo.pDocName := 'Struk Penjualan';
    DocInfo.pOutputFile := Nil;
    DocInfo.pDatatype := 'RAW';
    If StartDocPrinter(hPrinter,1,@DocInfo) = 0 Then
      Abort;
    Try
    Printer.Canvas.Font.Size:=6;
      If Not WritePrinter(hPrinter, @line[1], Length(line),BytesWritten) Then
        Abort;
    Finally
      EndPagePrinter(hPrinter);
    End;
  Finally
     Winspool.ClosePrinter(hPrinter);
  End;
end;

Contoh Penggunaanya :

Procedure TFPenjualan.BitCetakClick(Sender: TObject);
Const Enter = #13+#10;
begin
if EdFaktur.Text='' then
else
Begin
  ADOCetak1.Close;
  ADOCetak1.SQL.Clear;
  ADOCetak1.SQL.Add('Select*from tblpenjualan where nofaktur="'+EdFaktur.Text+'"');
  ADOCetak1.Open;

  ADOCetak2.Close;
  ADOCetak2.SQL.Clear;
  ADOCetak2.SQL.Add('Select*from tbldetailpenjualan where nofaktur="'+EdFaktur.Text+'" order by namabarang');
  ADOCetak2.Open;
adocetak2.First;
mySQLTable1.Open;
cetak(''+ENTER);
cetak(mySQLTable1Nama_Perusahaan.Value+ENTER+ENTER);
Cetak('No Faktur    : '+ADOCetak1NoFaktur.Value+Enter);
Cetak('No Pelanggan : '+ADOCetak1NoPelanggan.Value+Enter);
Cetak('Kasir        : '+ADOCetak1namauser.Value+Enter);
Cetak('Tanggal      : '+FormatDateTime('dd/MM/yyyy HH:MM:ss',now)+Enter);
Cetak('----------------------------------'+Enter);
Cetak('Barang   QTY  Harga  Diskon  Total'+Enter);
Cetak('----------------------------------'+Enter);
    while Not adocetak2.Eof do
    begin
cetak(ADOCetak2NamaBarang.Value+ENTER);
cetak('         '+inttostr(ADOCetak2Unit.Value)+' x '+FormatString('',FormatCurr('###,###,##0',ADOCetak2Harga.Value),5,' ')+
'   '+FormatString(FloatToStr(ADOCetak2Diskon.Value),FormatCurr('###,###,##0',ADOCetak2SubTotal.Value),12,' ')+Enter);
    adocetak2.next
    end;
Cetak('---------------------------------'+Enter);
Cetak('Total'+'                  :'+FormatString('',FormatCurr('###,###,##0',ADOCetak1Total.Value),9,' ')+Enter);
Cetak('Bayar'+'                  :'+FormatString('',FormatCurr('###,###,##0',ADOCetak1Bayar.Value),9,' ')+Enter);
Cetak('Kembali'+'                :'+FormatString('',FormatCurr('###,###,##0',ADOCetak1Kembali.Value),9,' ')+Enter+Enter);
Cetak('Harga sudah termasuk PPN'+Enter);
Cetak('---------------------------------'+Enter);
Cetak('Terima Kasih atas kunjungan Anda'+Enter+Enter+Enter);
Cetak(Enter+Enter+Enter)
End;


end;

NB : ADOCetak1   > Menyeleksi Tabel Penjualan dengan nofaktur yang akan dicetak
        ADOCetak2   > Menampilkan detail penjual sesuai nofaktur yang dicari AdoCetak1
        mySQLTable1 > Untuk Menampilkan data perusahaan/Toko

Yakin agan" pasti  bisa mengutak-atiknya,sore" dah lelah nih gax bisa banyak bicara.

Ditulis Oleh : Antas Delphi ~ Blogger

Anda sedang membaca sebuah artikel yang berjudul Membuat Struk Penjualan dengan Delphi,, Semoga artikel tersebut bermanfaat untuk anda, kalau mau share silahkan saja dan tidak ada tuntutan apapun dari saya !! Dan semua artikel disini tidak ada unsur untuk melakukan pembajakan dari pihak manapun tapi cuma untuk share saja.

:: Thank you for visiting ! ::

Comments
4 Comments

4 comments:

  1. bro kalau mau passin untuk cetak di kertas yang telah ada gimana?saya pakai fastreport.ada solusinya mas bro

    ReplyDelete
    Replies
    1. gx pernah pake fastRepot mas, saya pernah baca tutorial supaya si kertas sama dengan yang kita bikin dilaporan yaitu dengan cara buat lagi ukuran kertas diprinternya..
      coba berkunjung kesini :

      http://djuliar.blogspot.com/2011/03/setting-kertas-struk-untuk-printer-lx.html

      Delete
  2. bisa minta contohnya mas, yg sudah di build.

    ReplyDelete

Jangan Lupa Memberikan Komentar, Namun Tolong Agar Menggunakan Bahasa Yang BAIK dan SOPAN Terima Kasih...