ABSTRAK
Dalam satu hari, sebuah toko atau departemen store dapat melakukan
ratusan transaksi penjualan. Manajemen transaksi yang pertama kali dilakukan
adalah dengan pencatatan dan perhitungan bukti penjualan yang tidak lain
dilakukan oleh manusia. Salah satu kendala dalam proses pencatatan tersebut
adalah terdapatnya Human Error.
Dari permasalahan tersebut, diperlukan suatu mesin transaksi yang dapat
melakukan pencatatan dan perhitungan penjualan yang disebut Cash Register.
Walaupun dalam prakteknya masih tetap diperlukan tenaga manusia, sebagian
pekerjaan seperti perhitungan laba rugi, penyimpanan bukti transaksi, dan laporan
penjualan dapat dikerjakan oleh aplikasi Cash Register dalam waktu yang singkat.
Untuk meningkatkan pelayanan terhadap konsumen, toko atau departemen
store menyediakan fasilitas berupa kartu Member. Kartu Member tersebut dapat
digunakan sebagai alat pembayaran secara kredit dengan mengintegrasikan kartu
kredit. Aplikasi Cash Register yang dibuat, menyediakan fasilitas sistem Member
tersebut dan menggunakan alat Barcode sebagai bantuan dalam memasukkan data
barang pada saat transaksi berlangsung.
Setelah dilakukan percobaan transaksi dalam berbagai kondisi, didapatkan
ABSTRACT
In one day, retail store or department store could do hundreds sales
transaction. The first transaction management which done by human is calculating
and recording many of invoice number. One of the problem by doing the
management is Human Error.
From the early problem, the transaction machine called Cash Register is
needed to help process which are calculating and recording invoice numbers.
Although when practicing the transaction machine still need human resources,
half of the process still can be done by Cash Register within short of time.
For increasing the service to consumer, retail store or department store
provide the facility which are Member card. The card can be used as credit
payment tool by integrating it with credit card. Application within Cash Register
should provide the member system facility and using barcode reader as tool for
data input when the transaction remains.
After doing transaction with many condition, the application Cash Register
DAFTAR ISI
ABSTRAK ... i
ABSTRACT... ii
KATA PENGANTAR ... iii
DAFTAR ISI... v
DAFTAR GAMBAR ... viii
DAFTAR TABEL... x
DAFTAR LAMPIRAN... xi
BAB 1 PENDAHULUAN ... 1
1.1
Latar Belakang Masalah... 1
1.2
Perumusan Masalah ... 2
1.3
Tujuan ... 2
1.4
Pembatasan Masalah ... 2
1.5
Sistematika Penulisan ... 3
BAB 2 LANDASAN TEORI... 4
2.1
Sejarah Delphi... 4
2.2
Sekilas tentang Delphi... 5
2.3
Tipe Data dan Operator pada Delphi ... 7
2.4
Aliran Program, Subrutin, dan Unit pada Delphi... 14
2.4.1
Percabangan ... 14
2.4.2
Pengulangan ... 16
2.4.3 Prosedur dan Fungsi... 17
2.4.4
Unit... 18
2.5
Sistem Basis Data... 19
2.7
Komponen VCL pada Delphi ... 23
BAB 3 PERANCANGAN SOFTWARE... 25
3.1
Kode Barcode... 25
3.2
Cara Kerja Transaksi dan Software... 26
3.3
Susunan Database ... 29
3.3.1 Database Umum ... 29
3.3.2 Database Transaksi ... 30
3.3.3 Database Backup... 33
3.3.4
Database
Print ... 34
3.3.5
Relasi
Database ... 34
3.4
Pembagian Form ... 35
3.5
Realisasi Software... 35
3.5.1 Form Security (FSecurity) ... 35
3.5.2 Form Transaksi (FTransaksi) ... 38
3.5.3 Form Menu dan MenuSP (FMenu dan FMenuSP) ... 45
3.5.4
Module
CBDB ... 46
3.5.5 Form Item Data (FItemData) ... 47
3.5.6
Form
Kasir
(FKasir)... 51
3.5.7 Form Member (FMember) ... 53
3.5.8
Form
Help ... 56
3.5.9
Form
EOD
(FEOD)... 56
3.5.10
Form
Financial
(FFinancial) ... 57
3.5.11 Unit File Utility (FileUtil)... 59
BAB 4 DATA PENGAMATAN ... 60
4.1
Transaksi ... 60
4.1.1
Transaksi Tunai Tanpa Kartu Member ... 62
4.1.2
Transaksi Kredit Tanpa Kartu Member ... 63
4.1.4
Transaksi Tunai Tanpa Kartu Member dengan
Discount dan Tax per Item... 65
4.1.5
Transaksi Tunai dengan Kartu Member dan
Promo
Discount... 66
4.1.6
Laporan Financial... 67
4.1.7
Penutupan Buku Harian (EOD) ... 68
4.2
Sistem Menu ... 69
4.2.1
Set Sistem Waktu ... 69
4.2.2
Print Barcode... 69
4.3
Validitas Data Barang ... 71
4.4
Laporan Perubahan Data Barang ... 72
BAB 5 KESIMPULAN DAN SARAN ... 76
5.1
Kesimpulan ... 76
5.2
Saran... 76
DAFTAR GAMBAR
Gambar 2.1 IDE dari Delphi ... 7
Gambar 2.2 Arsitektur basis data Delphi ... 21
Gambar 2.3 Tampilan BDE Administrator ... 22
Gambar 2.4 Daftar driver basis data pada BDE Administrator ... 23
Gambar 2.5 Komponen VCL Delphi 6.0 ... 24
Gambar 3.1 Pemakaian kode Barcode ... 25
Gambar 3.2 Pemakaian kode Barcode untuk kartu Member ... 25
Gambar 3.3 Bagan cara kerja transaksi secara umum... 27
Gambar 3.4 Flowchart software secara umum... 28
Gambar 3.5 Relasi database umum dan database transaksi ... 34
Gambar 3.6 Tampilan form Security ... 35
Gambar 3.7 Flowchart form Security ... 37
Gambar 3.8 Tampilan form Transaksi ... 38
Gambar 3.9 Flowchart TbTransaksi... 41
Gambar 3.10 Tampilan form MenuSP ... 45
Gambar 3.11 Tampilan form Menu ... 45
Gambar 3.12 Tampilan Module CBDB ... 47
Gambar 3.13 Tampilan form Item Data... 48
Gambar 3.14 Tampilan form Print Barcode... 50
Gambar 3.15 Tampilan form Tambah Data Barang... 50
Gambar 3.16 Tampilan form Tambah Stock Barang ... 51
Gambar 3.17 Tampilan form Ganti Data Barang... 51
Gambar 3.18 Tampilan form Kasir ... 52
Gambar 3.19 Tampilan form Kasir untuk ganti kode dan jenis akses. ... 52
Gambar 3.20 Tampilan form Tambah Data Kasir ... 53
Gambar 3.21 Tampilan form Member ... 54
Gambar 3.22 Tampilan form Tambah Member ... 54
Gambar 3.23 Tampilan form Financial... 57
Gambar 4.1 Data barang untuk uji transaksi... 61
Gambar 4.2 Kartu Member yang digunakan dalam uji transaksi... 61
Gambar 4.3 Transaksi tunai tanpa kartu Member... 62
Gambar 4.4 Transaksi kredit tanpa kartu Member... 63
Gambar 4.5 Transaksi kredit dengan kartu Member... 64
Gambar 4.6 Transaksi tunai dengan promo discount... 65
Gambar 4.7 Transaksi kredit dengan discount dan tax. ... 66
Gambar 4.8 Laporan Financial... 67
Gambar 4.9 Tampilan form Transaksi. ... 68
Gambar 4.10 Penutupan Buku Harian ... 68
Gambar 4.11 Set sistem waktu... 69
Gambar 4.12 Print Barcode... 70
Gambar 4.13 Label hasil print Barcode ... 70
Gambar 4.14 Data barang sebelum transaksi... 71
Gambar 4.15 Data barang setelah transaksi ... 72
Gambar 4.16 Form PerubahanItem ... 73
Gambar 4.17 Data barang sebelum dirubah... 74
Gambar 4.18 Data barang akan dirubah... 74
Gambar 4.19 Data barang setelah dirubah ... 75
DAFTAR TABEL
Tabel 2.1 Macam-macam tipe bilangan bulat fundamental ... 8
Tabel 2.2 Macam-macam tipe bilangan bulat generik ... 8
Tabel 2.3 Macam-macam tipe bilangan real ... 8
Tabel 2.4 Macam-macam tipe boolean ... 9
Tabel 2.5 Macam-macam tipe karakter... 9
Tabel 2.6 Macam-macam tipe String ... 9
Tabel 2.7 Operator aritmetik tunggal ... 11
Tabel 2.8 Operator aritmetik biner... 11
Tabel 2.9 Operator manipulasi bit... 12
Tabel 2.10 Operator Boolean ... 13
Tabel 2.11 Operator pembanding... 14
Tabel 3.1 Daftar Barcode yang digunakan dalam program ... 26
Tabel 3.2 Susunan field dari TbItem... 29
Tabel 3.3 Susunan field dari TbKasir ... 29
Tabel 3.4 Susunan field dari TbMember... 30
Tabel 3.5 Susunan field dari TbTransaksi... 31
Tabel 3.6 Susunan field dari TbTransaksiAkhir ... 31
Tabel 3.7 Susunan field dari TbFinancial ... 32
Tabel 3.8 Susunan field dari TbRutin ... 32
Tabel 3.9 Susunan field dari TbItemChg ... 33
DAFTAR LAMPIRAN
Lampiran A.1 Listing Program FSecurity... A-1
Lampiran A.2 Listing Program FTransaksi ... A-4
Lampiran A.3 Listing Program FMenu... A-32
Lampiran A.4 Listing Program FMenuSP ... A-34
Lampiran A.5 Listing Program FItemData ... A-38
Lampiran A.6 Listing Program FTmbhItem ... A-42
Lampiran A.7 Listing Program FGntItem... A-46
Lampiran A.8 Listing Program FTmbhStck ... A-51
Lampiran A.9 Listing Program FInputDiscP ... A-54
Lampiran A.10 Listing Program FBarcode... A-56
Lampiran A.11 Listing Program FKasir ... A-60
Lampiran A.12 Listing Program FTmbhKasir... A-65
Lampiran A.13 Listing Program FMember ... A-68
Lampiran A.14 Listing Program FTmbhMember... A-70
Lampiran A.15 Listing Program FFinancial ... A-75
Lampiran A.16 Listing Program FFinancialCashier... A-80
Lampiran A.17 Listing Program FEOD... A-85
Lampiran A.18 Listing Program FSetWaktu ... A-90
Lampiran A.19 Listing Program Frame FTime ... A-92
Lampiran A.20 Listing Program FPerubahanItem... A-93
Lampiran A.21 Listing Program FJudul ... A-95
Lampiran A.22 Listing Program FInputPin ... A-98
Lampiran A.23 Listing Program FEODIjin ... A-101
Lampiran A.24 Listing Program FDataTransaksi... A-104
Lampiran B.1 Listing Program FileUtil ... B-1
LAMPIRAN
A
Lampiran A.1 Listing Program FSecurity
===================================================================
unit CBSecurity; interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls;
type
TFSecurity = class(TForm) Shape1: TShape;
EKodeAkses: TEdit; EKodeKasir: TEdit; Label2: TLabel; Label1: TLabel;
procedure EKodeKasirChange(Sender: TObject);
procedure FormKeyPress(Sender: TObject; var Key: Char); procedure FormActivate(Sender: TObject);
procedure FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
procedure FormKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState);
procedure FormCreate(Sender: TObject); private
{ Private declarations } public
{ Public declarations } end;
var
FSecurity: TFSecurity; Hapus: Boolean;
KodeKasir, NamaKasirKerja: String; JenisKasirAkses: Byte;
implementation
uses CBDatabase, FileUtil, CBTransaksi, CBMenuSP, CBMenu; {$R *.DFM}
procedure TFSecurity.EKodeKasirChange(Sender: TObject); begin
if Length(EKodeKasir.Text) = 6 then EKodeAkses.SetFocus; end;
procedure TFSecurity.FormKeyPress(Sender: TObject; var Key: Char); begin
if ( (Key <> '1') and (Key <> '2') and (Key <> '3') and (Key <> '4') and (Key <> '5') and (Key <> '6') and (Key <> '7') and (Key <> '8') and (Key <> '9') and (Key <> '0') and (Key <> Chr(Vk_Escape)) ) then begin
if (Length(EKodeKasir.Text) = 6) and (Length(EKodeAkses.Text) = 6) then begin
CBDB.TbKasir.Locate('Kode',EKodeKasir.Text,[]);
ShowMessage('Kode Kasir Salah!!') else if not
(EKodeAkses.Text = BacaKodeAkses(CBDB.TbKasir['KodeAkses']).KodeAkses) then ShowMessage('Kode Akses Salah!!')
else begin
JenisKasirAkses := BacaKodeAkses(CBDB.TbKasir['KodeAkses']).JenisAkses; NamaKasirKerja := CBDB.TbKasir['Nama'];
KodeKasir := CBDB.TbKasir['Kode'];
if JenisKasirAkses = SuperVisor then IjinEOD := DiIjinKan else IjinEOD := DiTolak;
if Key = TMasukTrans then begin
if JenisKasirAkses = Editor then
ShowMessage('Maaf Anda Bukan Kasir!, Tekan ENTER!') else
begin
IsFTransaksiActivated := False; FSecurity.Visible := False; FTransaksi.Visible := False; FTransaksi.Visible := True; end
end
else if Key = TMasukMenu then begin
if JenisKasirAkses = Cashier then
ShowMessage('Maaf Anda Bukan Editor!, Tekan ENTER!') else
begin
FSecurity.Visible := False;
if JenisKasirAkses = SuperVisor then FMenuSP.Visible := True else if JenisKasirAkses = Editor then FMenu.Visible := True; end
end else begin
JenisKasirAkses := 0; NamaKasirKerja := ''; KodeKasir := ''; SalahTekanTombol; end
end end
else SalahTekanTombol; Hapus := True;
end;
end; // End Procedure FormKeyPress
procedure TFSecurity.FormActivate(Sender: TObject); begin
OpenAllDatabase; OpenAllTable; Hapus := False; EKodeKasir.SetFocus;
end; // End Procedure FormActivate
procedure TFSecurity.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
and (Key = TKeluar) then begin
CloseAllDatabase;
if (MessageDlg('Matikan Komputer (Shut Down)?',
mtConfirmation, [mbYes, mbNo], 0) = mrYes) then Power(EWX_SHUTDOWN); Application.Terminate;
end
end; // End Procedure FormKeyDown
procedure TFSecurity.FormKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
if Hapus = True then begin
EKodeKasir.Text := ''; EKodeAkses.Text := ''; EKodeKasir.SetFocus; Hapus := False; end
end; // End Procedure FormKeyUp
procedure TFSecurity.FormCreate(Sender: TObject); begin
Brush.Style := bsClear;
Lampiran A.2 Listing Program FTransaksi
===================================================================
unit CBTransaksi; interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, Grids, DBGrids, ExtCtrls, CBFrTime, StdCtrls, DB, DBTables, ShellAPI; type
TFTransaksi = class(TForm) DBGrid1: TDBGrid;
FrTime1: TFrTime; LTanggal: TLabel; LKasir: TLabel; Label1: TLabel; Label10: TLabel; LDisc: TLabel; Label12: TLabel; SubTotal: TEdit; Disc: TEdit; Total: TEdit; LTunai: TLabel; LKembali: TLabel; Tunai: TEdit; Kembali: TEdit; Control: TEdit; Timer1: TTimer; Timer2: TTimer; LViewer: TLabel; LStatus: TLabel; Viewer: TEdit; Shape1: TShape; LMember: TLabel;
procedure SalahTombol;
procedure FrTime1Timer1Timer(Sender: TObject); procedure FormActivate(Sender: TObject);
procedure FormKeyPress(Sender: TObject; var Key: Char); procedure FormKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState);
procedure FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
procedure Timer1Timer(Sender: TObject); procedure Timer2Timer(Sender: TObject); procedure IsiTbRutin(Ket: String); procedure ViewSubTotal(Ket: Byte); procedure ViewTotal(Ket: Byte); procedure ViewControlTotal;
procedure ViewControlTunaiKredit; procedure ViewDisc(Total: Currency); procedure ViewTunaiKembali(Ket: Byte); procedure FilterTrans(Ket: Byte); procedure IsiTbRKasir(Ket: Byte); procedure KosongkanTbStruk;
procedure ViewKasirTanggalJam;
procedure FormCreate(Sender: TObject); procedure IsiTbTrans(Ket: Byte);
procedure HitungJmlItem(Ket: Byte); procedure DeleteLastRecordTbTrans; procedure DeleteLastRecordTbTransAkhir; procedure ResetJmlItem;
procedure IsiTbTransAkhir(Ket: Byte); procedure PrintStruk(Ket: Byte); procedure UpdateStock(Ket: Byte); procedure IsiTbPMember;
private
{ Private declarations } public
end; const
ScreenHeight: Integer = 600; ScreenWidth: Integer = 480; var
FTransaksi: TFTransaksi;
Tombol, StatusOK, EOD, Hapus, ItemDiscTax, Berhasil, IjinEOD,
IsTunaiKredit, Member, IsFTransaksiActivated, TekanAda, Tekan: Boolean; Count, JmlItem, JmlItemCor, JmlItemVoid, JmlItemRtn,
CopyItemQty, JmlItemTax, JmlItemDisc, State, NomorNota: Integer; Hasil: Word;
CopyItemHarga, JmlReturn, JmlCorrect, JmlVoid, CopyItemHargaDisc: Currency; NamaMember, MemberID, FindKode, TempTotal, CopyItemKode, CopyItem: String; CopyItemDisc: Real;
implementation
uses CBDatabase, CBSecurity, FileUtil, CBHTrans, CBEOD, CBItemData, CBFinancial, CBEODIjin, CBInputPIN, CBFinancialCashier;
{$R *.DFM}
procedure TFTransaksi.IsiTbPMember; begin
CBDB.TbPMember.Open; CBDB.TbPMember.First; CBDB.TbPMember.Edit;
CBDB.TbPMember['MEMBERID'] := MemberID; CBDB.TbPMember['NAMA'] := NamaMember; CBDB.TbPMember.Post;
CBDB.TbPMember.Close; end;
procedure TFTransaksi.SalahTombol; begin
ShowMessage('Salah Tekan Tombol, Tekan ENTER'); Hapus := True;
end; // End Procedure SalahTombol
procedure TFTransaksi.PrintStruk(Ket: Byte); begin
if (ItemDiscTax = True) or (State = BeginTransaction)
or (State = AlreadyInStatusZeroCount) or (State = AlreadyInQtyZeroCount) or (State = AlreadyInKodeZeroCount) then
JalankanProgram('STRUK1.EXE') else JalankanProgram('STRUK2.EXE') else if Ket = Pembayaran then
if (ItemDiscTax = True) then JalankanProgram('AKHIR1.EXE') else JalankanProgram('AKHIR2.EXE')
else if Ket = Discount then JalankanProgram('DISC.EXE') else if Ket = Correction then JalankanProgram('CORR.EXE') else if Ket = RePrint then
if (State = BeginTransaction) then JalankanProgram('REPRN1.EXE') else JalankanProgram('REPRINT.EXE')
else if Ket = Feed then JalankanProgram('FEED.EXE') else if Ket = Eject then JalankanProgram('EJECT.EXE') else if Ket = VOIDSales then
if (ItemDiscTax = True) then JalankanProgram('VOID1.EXE') else JalankanProgram('VOID2.EXE')
else if Ket = Validasi then JalankanProgram('VALIDATE.EXE') else if Ket = PrintMember then JalankanProgram('MEMBER.EXE'); end; // End Procedure PrintStruk
procedure TFTransaksi.IsiTbTransAkhir(Ket: Byte); begin
if (Ket = TunaiKredit) or (Ket = Normal) or (Ket = Credit) or (Ket = VOIDSales) then begin
if (State = AlreadyInKode) or (State = AlreadyInKodeZeroCount) then CBDB.TbTransAkhir.Append else CBDB.TbTransAkhir.Edit;
CBDB.TbTransAkhir['TransNota'] := NomorNota; CBDB.TbTransAkhir['TransTanggal'] := Date(); CBDB.TbTransAkhir['TransJam'] := Time();
CBDB.TbTransAkhir['TransSubTotal'] := StrCurrToCurr(SubTotal.Text); CBDB.TbTransAkhir['TransKembali'] := StrCurrToCurr(Kembali.Text); CBDB.TbTransAkhir['KasirNama'] := NamaKasirKerja;
if LDisc.Caption = SDisc then
CBDB.TbTransAkhir['TransHargaDisc'] := StrCurrToCurr(Disc.Text) else if LDisc.Caption = STax then
CBDB.TbTransAkhir['TransHargaTax'] := StrCurrToCurr(Disc.Text); if Ket = Normal then
begin
CBDB.TbTransAkhir['TransTotal'] := StrCurrToCurr(Total.Text); CBDB.TbTransAkhir['TransTunai'] := StrCurrToCurr(Tunai.Text); end
else if Ket = TunaiKredit then begin
CBDB.TbTransAkhir['TransTotal'] := StrCurrToCurr(Total.Text); CBDB.TbTransAkhir['TransTunai'] := StrCurrToCurr(Tunai.Text); CBDB.TbTransAkhir['TransCredit'] := StrCurrToCurr(Kembali.Text); end
else if Ket = VOIDSales then
CBDB.TbTransAkhir['TransVOID'] := (-1)*StrCurrToCurr(Total.Text) else if Ket = Credit then
begin
CBDB.TbTransAkhir['TransTotal'] := StrCurrToCurr(Total.Text); CBDB.TbTransAkhir['TransCredit'] := StrCurrToCurr(Tunai.Text); end;
HitungJmlItem(Ket);
CBDB.TbTransAkhir['JmlItem'] := JmlItem;
CBDB.TbTransAkhir['TransVOID'] := JmlVoid; CBDB.TbTransAkhir['JmlItemTax'] := JmlItemTax; CBDB.TbTransAkhir['JmlItemDisc'] := JmlItemDisc; CBDB.TbTransAkhir['JmlItemCor'] := JmlItemCor; CBDB.TbTransAkhir['JmlItemRtn'] := JmlItemRtn; CBDB.TbTransAkhir['JmlItemVOID'] := JmlItemVoid;
if Member = OK then CBDB.TbTransAkhir['MemberID'] := MemberID; CBDB.TbTransAkhir.Post;
end else begin
CBDB.TbTransAkhir.Append;
CBDB.TbTransAkhir['TransSubTotal'] := StrCurrToCurr(SubTotal.Text); if Ket = TaxRp then
begin
CBDB.TbTransAkhir['TransHargaTax'] := StrToCurr(Control.Text);
CBDB.TbTransAkhir['TransTotal'] := CBDB.TbTransAkhir['TransSubTotal'] + CBDB.TbTransAkhir['TransHargaTax'];
end
else if Ket = DiscRp then begin
CBDB.TbTransAkhir['TransHargaDisc'] := StrToCurr(Control.Text);
CBDB.TbTransAkhir['TransTotal'] := CBDB.TbTransAkhir['TransSubTotal'] - CBDB.TbTransAkhir['TransHargaDisc'];
end
else if Ket = TaxPersen then begin
CBDB.TbTransAkhir['TransTax'] := StrToInt(Control.Text);
CBDB.TbTransAkhir['TransHargaTax'] := CBDB.TbTransAkhir['TransSubTotal'] * (CBDB.TbTransAkhir['TransTax'] / 100);
CBDB.TbTransAkhir['TransTotal'] := CBDB.TbTransAkhir['TransSubTotal'] + CBDB.TbTransAkhir['TransHargaTax'];
end
else if Ket = DiscPersen then begin
CBDB.TbTransAkhir['TransDisc'] := StrToInt(Control.Text);
CBDB.TbTransAkhir['TransHargaDisc'] := CBDB.TbTransAkhir['TransSubTotal'] * (CBDB.TbTransAkhir['TransDisc'] / 100);
CBDB.TbTransAkhir['TransTotal'] := CBDB.TbTransAkhir['TransSubTotal'] - CBDB.TbTransAkhir['TransHargaDisc'];
end;
CBDB.TbTransAkhir.Post; end;
end; // End Procedure IsiTbTransAkhir procedure TFTransaksi.ResetJmlItem; begin
JmlItem := 0; JmlItemDisc := 0; JmlItemTax := 0; JmlItemCor := 0; JmlItemVoid := 0; JmlItemRtn := 0; JmlReturn := 0; JmlCorrect := 0; JmlVoid := 0;
end; // End Procedure ResetJmlItem
procedure TFTransaksi.HitungJmlItem(Ket: Byte); begin
CBDB.TbTrans.First;
while not CBDB.TbTrans.Eof do begin
if (Ket = Normal) or (Ket = Credit) then begin
if CBDB.TbTrans['TransItemHargaDiscTax'] <> 0 then
JmlItemDisc := JmlItemDisc + CBDB.TbTrans['TransItemQty']; if CBDB.TbTrans['TransSts'] = StatusReturn then
begin
JmlItemRtn := JmlItemRtn + CBDB.TbTrans['TransItemQty']; JmlReturn := JmlReturn + CBDB.TbTrans['TransTotal']; end;
if CBDB.TbTrans['TransSts'] = StatusCorr then begin
JmlItemCor := JmlItemCor + CBDB.TbTrans['TransItemQty']; JmlCorrect := JmlCorrect + CBDB.TbTrans['TransTotal']; end;
if CBDB.TbTrans['TransSts'] = StatusVOID then begin
JmlItemVoid := JmlItemVoid + CBDB.TbTrans['TransItemQty']; JmlVoid := JmlVoid + CBDB.TbTrans['TransTotal'];
end; end
else if Ket = VOIDSales then begin
if CBDB.TbTrans['TransItemHargaDiscTax'] <> 0 then
JmlItemDisc := JmlItemDisc + CBDB.TbTrans['TransItemQty']; if CBDB.TbTrans['TransSts'] = StatusReturn then
begin
JmlItemRtn := JmlItemRtn + CBDB.TbTrans['TransItemQty']; JmlReturn := JmlReturn + CBDB.TbTrans['TransTotal']; UpdateStock(Min);
end;
if CBDB.TbTrans['TransSts'] = StatusCorr then begin
JmlItemCor := JmlItemCor + CBDB.TbTrans['TransItemQty']; JmlCorrect := JmlCorrect + CBDB.TbTrans['TransTotal']; UpdateStock(Min);
end;
if CBDB.TbTrans['TransSts'] = Status then UpdateStock(Add); if CBDB.TbTrans['TransSts'] = StatusVOID then UpdateStock(Min); JmlItemVoid := JmlItemVoid + CBDB.TbTrans['TransItemQty'];
end;
JmlItem := JmlItem + CBDB.TbTrans['TransItemQty']; CBDB.TbTrans.Next;
end;
if CBDB.TbTransAkhir['TransHargaDisc'] <> 0 then begin
JmlItemDisc := CBDB.TbTransAkhir['JmlItem'];
IsiTbRutin('Nota ke-' + Trim(IntToStr(NomorNota)) +
' Di Discount Sebesar Rp ' + CurrToStr(CBDB.TbTransAkhir['TransHargaDisc']) + ', Kasir ' + NamaKasirKerja + ' (' + KodeKasir + ')');
end;
if CBDB.TbTransAkhir['TransHargaTax'] <> 0 then begin
JmlItemTax := CBDB.TbTransAkhir['JmlItem'];
IsiTbRutin('Nota ke-' + Trim(IntToStr(NomorNota)) + ' Kena Pajak Sebesar Rp ' + CurrToStr(CBDB.TbTransAkhir['TransHargaTax']) + ', Kasir '
+ NamaKasirKerja + ' ('+KodeKasir+')'); end;
procedure TFTransaksi.DeleteLastRecordTbTransAkhir; begin
CBDB.TbTransAkhir.Last; CBDB.TbTransAkhir.Delete;
end; // End Procedure DeleteLastRecordTbTransAkhir procedure TFTransaksi.DeleteLastRecordTbTrans; begin
CBDB.TbTrans.Last; CBDB.TbTrans.Delete;
end; // End Procedure DeleteLastRecordTbTrans procedure TFTransaksi.IsiTbTrans(Ket: Byte); begin
if Ket = BarangCampuran then begin
if CBDB.TbTrans['ItemHarga'] <> 0 then CBDB.TbTrans.Append else CBDB.TbTrans.Edit;
CBDB.TbTrans['TransNota'] := NomorNota; CBDB.TbTrans['Item'] := BarangAMT;
CBDB.TbTrans['ItemKode'] := Control.Text; CBDB.TbTrans.Post;
end
else if Ket = Normal then begin
if CBDB.TbTrans['ItemHarga'] <> 0 then CBDB.TbTrans.Append else CBDB.TbTrans.Edit;
CBDB.TbTrans['TransNota'] := NomorNota;
CBDB.TbTrans['ItemKode'] := CBDB.TbItem[FindKode]; CBDB.TbTrans['ItemHarga'] := CBDB.TbItem['ItemHarga']; CBDB.TbTrans['Item'] := CBDB.TbItem['Item'];
if CBDB.TbTrans['TransSts'] = Status then begin
CBDB.TbTrans['TransSubTotal'] := CBDB.TbItem['ItemHarga'] * CBDB.TbTrans['TransItemQty'];
Count := Count + CBDB.TbTrans['TransItemQty']; UpdateStock(Min);
end else begin
CBDB.TbTrans['TransSubTotal'] := -1 * (CBDB.TbItem['ItemHarga'] * CBDB.TbTrans['TransItemQty']);
IsiTbRutin('Transaksi Item ' + CBDB.TbTrans['TransSts'] + ' di Nota ke-' + Trim(IntToStr(NomorNota)
+ ', Kode:' + CBDB.TbTrans['ItemKode'])); Count := Count - CBDB.TbTrans['TransItemQty']; UpdateStock(Add);
end;
if (Member = OK) and (CBDB.TbItem['PromoDisc'] <> 0) then begin
CBDB.TbTrans['TransItemDiscTax'] := CBDB.TbItem['PromoDisc']; ItemDiscTax := AdaDiscTax;
end;
CBDB.TbTrans['TransItemHargaDiscTax'] := CBDB.TbTrans['TransSubTotal'] * (CBDB.TbTrans['TransItemDiscTax'] / 100);
CBDB.TbTrans['TransTotal'] := CBDB.TbTrans['TransSubTotal'] - CBDB.TbTrans['TransItemHargaDiscTax'];
CBDB.TbTrans.Post; end
begin
CBDB.TbTrans.Edit;
CBDB.TbTrans['TransItemDiscTax'] := StrToInt(Control.Text);
CBDB.TbTrans['TransItemHargaDiscTax'] := CBDB.TbTrans['TransSubTotal'] * (CBDB.TbTrans['TransItemDiscTax'] / 100);
CBDB.TbTrans['TransTotal'] := CBDB.TbTrans['TransSubTotal'] - CBDB.TbTrans['TransItemHargaDiscTax'];
CBDB.TbTrans.Post; end
else if Ket = Qty then begin
if CBDB.TbTrans['ItemHarga'] <> 0 then CBDB.TbTrans.Append else CBDB.TbTrans.Edit;
CBDB.TbTrans['TransItemQty'] := StrToInt(Control.Text); CBDB.TbTrans['TransNota'] := NomorNota;
CBDB.TbTrans.Post; end
else if (Ket = Sts) or (Ket = Rtn) or (Ket = Vod) then begin
if CBDB.TbTrans['ItemHarga'] <> 0 then CBDB.TbTrans.Append else CBDB.TbTrans.Edit;
CBDB.TbTrans['TransNota'] := NomorNota;
if Ket = Sts then CBDB.TbTrans['TransSts'] := Status
else if Ket = Rtn then CBDB.TbTrans['TransSts'] := StatusReturn else CBDB.TbTrans['TransSts'] := StatusVOID;
CBDB.TbTrans.Post; end
else if Ket = HargaAMT then begin
CBDB.TbTrans.Edit;
CBDB.TbTrans['ItemHarga'] := StrToCurr(Control.Text); if CBDB.TbTrans['TransSts'] = Status then
begin
CBDB.TbTrans['TransSubTotal'] := CBDB.TbTrans['ItemHarga'] * CBDB.TbTrans['TransItemQty'];
Count := Count + CBDB.TbTrans['TransItemQty']; IsiTbRutin('Transaksi Barang Campuran Rp ' + CurrToStr(CBDB.TbTrans['TransTotal'])
+ ' di Nota ke-' + Trim(IntToStr(NomorNota))); end
else begin
CBDB.TbTrans['TransSubTotal'] := (-1) * (CBDB.TbTrans['ItemHarga'] * CBDB.TbTrans['TransItemQty']);
Count := Count - CBDB.TbTrans['TransItemQty'];
IsiTbRutin('Transaksi Item ' + CBDB.TbTrans['TransSts']
+ ' Barang Campuran Rp ' + CurrToStr(CBDB.TbTrans['TransTotal']) + ' di Nota ke-' + Trim(IntToStr(NomorNota)));
end;
CBDB.TbTrans['TransItemHargaDiscTax'] := CBDB.TbTrans['TransSubTotal'] * (CBDB.TbTrans['TransItemDiscTax'] / 100);
CBDB.TbTrans['TransTotal'] := CBDB.TbTrans['TransSubTotal'] - CBDB.TbTrans['TransItemHargaDiscTax'];
CBDB.TbTrans.Post; end
else if (Ket = CorrMin) or (Ket = CorrAdd) then begin
CBDB.TbTrans.Append;
CBDB.TbTrans['TransNota'] := NomorNota; CBDB.TbTrans['ItemKode'] := CopyItemKode; CBDB.TbTrans['ItemHarga'] := CopyItemHarga; CBDB.TbTrans['Item'] := CopyItem;
if Ket = CorrMin then CBDB.TbTrans['TransSubTotal'] := (-1) * CopyItemHarga * CBDB.TbTrans['TransItemQty']
else CBDB.TbTrans['TransSubTotal'] := CopyItemHarga * CBDB.TbTrans['TransItemQty'];
CBDB.TbTrans['TransItemHargaDiscTax'] := CBDB.TbTrans['TransSubTotal'] * (CBDB.TbTrans['TransItemDiscTax'] / 100);
CBDB.TbTrans['TransTotal'] := CBDB.TbTrans['TransSubTotal'] - CBDB.TbTrans['TransItemHargaDiscTax'];
CBDB.TbTrans.Post;// end;
end; // End Procedure IsiTbTrans
procedure TFTransaksi.ViewKasirTanggalJam; begin
LTanggal.Caption := FormatDateTime('dddd, d mmmm yyyy',Date); FrTime1.LTime.Caption := TimeToStr(Now());
LKasir.Caption := NamaKasirKerja;
end; // End Procedure ViewKasirTanggalJam procedure TFTransaksi.RubahState(Ket: Byte); begin
if Ket = StsBeginTransaction then begin
State := BeginTransaction;
LStatus.Caption := 'Masukkan Qty atau PLU'; end
else if Ket =
StsBeginTransactionOrStsAlreadyInKodeOrStsAlreadyInKodeZeroCount then begin
if (Count = 0) or (State = AlreadyInQtyZeroCount) then begin
if (CBDB.TbTrans.RecordCount = 0) then State := BeginTransaction else State := AlreadyInKodeZeroCount;
end // T K A1133
else State := AlreadyInKode;// E A1133 -- T E A1133 LStatus.Caption :=
'Masukkan Qty ; Kode PLU ; Disc ; Tekan + Untuk Pembayaran'; end
else if Ket = StsAlreadyInQty then begin
State := AlreadyInQty; // Untuk PLU LStatus.Caption := 'Masukkan Kode PLU'; end
else if Ket = StsAlreadyInQtyOrStsAlreadyInQtyZeroCount then begin
if (State = AlreadyInKodeZeroCount) or (State = AlreadyInStatusZeroCount) then State := AlreadyInQtyZeroCount
else if (State = AlreadyInStatus) or (State = AlreadyInKode) or (State = BeginTransaction) then State := AlreadyInQty; LStatus.Caption := 'Masukkan Qty atau Kode PLU';
end
else if Ket = StsAlreadyInKode then begin
State := AlreadyInKode;
if ItemDiscTax = True then LStatus.Caption :=
else LStatus.Caption :=
'Masukkan Qty ; Kode PLU ; Disc ; Tekan + Untuk Pembayaran'; end
else if Ket = StsEndTransaction then begin
State := EndTransaction;
LStatus.Caption := 'Tekan Spasi Untuk Membuka Transaksi Baru'; end
else if Ket = StsAlreadyInAmtKode then begin
State := AlreadyInAmtKode; // Untuk AMT
LStatus.Caption := 'Masukkan Jumlah Harga, Tekan [AMT] Untuk Konfirmasi'; end
else if Ket = StsAlreadyInAMTKodeOrStsAlreadyInAMTKodeZeroCount then begin
if (State = AlreadyInStatusZeroCount) or (State = BeginTransaction)
or (State = AlreadyInQtyZeroCount) then State := AlreadyInAMTKodeZeroCount else State := AlreadyInAMTKode;
LStatus.Caption := 'Masukkan Jumlah Harga, Tekan [AMT] Untuk Konfirmasi'; end
else if Ket = StsAlreadyInDiscTaxNota then begin
State := AlreadyInDiscTaxNota; // Untuk Pembayaran atau Corr LStatus.Caption := 'Tekan [CASH] Untuk Pembayaran Tunai'; end
else if Ket = StsAlreadyInStatusOrStsAlreadyInStatusZeroCount then begin
if (State = AlreadyInKode) or (State = AlreadyInStatus) then State := AlreadyInStatus
else State := AlreadyInStatusZeroCount;
LStatus.Caption := 'Masukkan Qty atau Kode PLU'; end
else if Ket = StsEODNotCompleted then begin
State := EODNotCompleted;
LStatus.Caption := 'Tekan [F2] untuk Izin EOD, [F9] untuk EOD'; end
end; // End Procedure RubahState
procedure TFTransaksi.IsiTbKeterangan(Ket: Byte); begin
CBDB.TbKeterangan.Open; CBDB.TbKeterangan.First; CBDB.TbKeterangan.Edit;
CBDB.TbKeterangan['KASIR'] := NamaKasirKerja; CBDB.TbKeterangan['JAM'] := TimeToStr(Now());
CBDB.TbKeterangan['TANGGAL'] := FormatDateTime('dddd, dd-mm-yy',Date); if Ket = Normal then
CBDB.TbKeterangan['NOMORNOTA'] := NomorNota else if Ket = RePrint then
CBDB.TbKeterangan['NOMORNOTA'] := NomorNota - 1; CBDB.TbKeterangan.Post;
CBDB.TbKeterangan.Close;
end; // End Procedure IsiTbKeterangan
procedure TFTransaksi.IsiTbStrukAkhir(Ket: Byte); begin
begin
CBDB.TbStrukAkhir['TAX'] := CBDB.TbTransAkhir['TransTax']; CBDB.TbStrukAkhir['HARGATAX'] :=
CurrToCurrStr(CBDB.TbTransAkhir['TransHargaTax']); CBDB.TbStrukAkhir['KEMBALI'] :=
CurrToCurrStr(CBDB.TbTransAkhir['TransKembali']);
CBDB.TbStrukAkhir['TUNAI'] := CurrToCurrStr(CBDB.TbTransAkhir['TransTunai']); CBDB.TbStrukAkhir['HARGADISC'] :=
CurrToCurrStr(CBDB.TbTransAkhir['TransHargaDisc']);
CBDB.TbStrukAkhir['DISC'] := CBDB.TbTransAkhir['TransDisc']; CBDB.TbStrukAkhir['SUBTOTAL'] :=
CurrToCurrStr(CBDB.TbTransAkhir['TransSubTotal']);
CBDB.TbStrukAkhir['TOTAL'] := CurrToCurrStr(CBDB.TbTransAkhir['TransTotal']); CBDB.TbStrukAkhir['CREDIT'] :=
CurrToCurrStr(CBDB.TbTransAkhir['TransCredit']); end
else if Ket = VOIDSales then
CBDB.TbStrukAkhir['TOTAL'] := CurrToCurrStr(CBDB.TbTransAkhir['TransVOID']) else if Ket = Validasi then
CBDB.TbStrukAkhir['TOTAL'] := StrCurrToCurrStr(Total.Text); CBDB.TbStrukAkhir.Post;
CBDB.TbStrukAkhir.Close;
end; // End Procedure IsiTbStrukAkhir
procedure TFTransaksi.IsiTbStruk(Ket: Byte); begin
CBDB.TbStruk.Open; CBDB.TbStruk.Last;
if Ket = Discount then CBDB.TbStruk.Edit else if Ket = Normal then
begin
CBDB.TbStruk.Append;
CBDB.TbStruk['ITEMKODE'] := CBDB.TbTrans['ItemKode']; CBDB.TbStruk['ITEM'] := CBDB.TbTrans['Item'];
CBDB.TbStruk['QTY'] := CBDB.TbTrans['TransItemQty'];
CBDB.TbStruk['HARGA'] := CurrToCurrStr(CBDB.TbTrans['ItemHarga']); CBDB.TbStruk['STATUS'] := CBDB.TbTrans['TransSts'];
end;
CBDB.TbStruk['HARGADISC'] :=
CurrToCurrStr(CBDB.TbTrans['TransItemHargaDiscTax']); CBDB.TbStruk['DISC'] := CBDB.TbTrans['TransItemDiscTax'];
CBDB.TbStruk['SUBTOTAL'] := CurrToCurrStr(CBDB.TbTrans['TransSubTotal']); CBDB.TbStruk['TOTAL'] := CurrToCurrStr(CBDB.TbTrans['TransTotal']);
CBDB.TbStruk.Post; CBDB.TbStruk.Close;
end; // End Procedure IsiTbStruk
procedure TFTransaksi.KosongkanTbStruk; begin
CBDB.TbStruk.Exclusive := True; CBDB.TbStruk.EmptyTable;
CBDB.TbStruk.Exclusive := False;
end; // End Procedure KosongkanTbStruk
procedure TFTransaksi.IsiTbRKasir(Ket: Byte); begin
if Ket = Masuk then begin
CBDB.TbRKasir.Append;
CBDB.TbRKasir['JamIn'] := Time();
CBDB.TbRKasir['KasirNama'] := NamaKasirKerja; CBDB.TbRKasir['Tanggal'] := Date();
end
else if Ket = Keluar then begin
CBDB.TbRKasir.Last; CBDB.TbRKasir.Edit;
CBDB.TbRKasir['JamOut'] := Time(); end;
CBDB.TbRKasir.Post;
end; // End Procedure IsiTbKasir
procedure TFTransaksi.UpdateStock(Ket: Byte); begin
if Length(CBDB.TbTrans['ItemKode']) > 6 then FindKode := Barcode else FindKode := Kode;
if CBDB.TbItem.Locate(FindKode, CBDB.TbTrans['ItemKode'], []) = True then begin
CBDB.TbItem.Edit; if Ket = Min then begin
CBDB.TbItem['ItemStock'] := CBDB.TbItem['ItemStock'] - CBDB.TbTrans['TransItemQty'];
if CBDB.TbItemChg.Locate(Kode, CBDB.TbItem['ItemKode'], []) = True then begin
CBDB.TbItemChg.Edit;
if CBDB.TbItemChg['Keterangan'] = 'Item Change' then CBDB.TbItemChg['Keterangan'] := 'Stock & Item Change'; end
else begin
CBDB.TbItemChg.Append;
CBDB.TbItemChg['Keterangan'] := 'Stock Change'; end;
CBDB.TbItemChg['ItemKode'] := CBDB.TbItem['ItemKode'];
CBDB.TbItemChg['StockChange'] := CBDB.TbItemChg['StockChange'] - CBDB.TbTrans['TransItemQty'];
CBDB.TbItemChg['StockOut'] := CBDB.TbItemChg['StockOut'] + CBDB.TbTrans['TransItemQty'];
CBDB.TbItemChg['Tanggal'] := Date(); CBDB.TbItemChg.Post;
IsiTbRutin('Stock Berkurang '
+ IntToStr((-1) * CBDB.TbTrans['TransItemQty']) + ', Kode Barang (' + CBDB.TbTrans['ItemKode'] + ')');
end
else if Ket = Add then begin
CBDB.TbItem['ItemStock'] := CBDB.TbItem['ItemStock'] + CBDB.TbTrans['TransItemQty'];
if CBDB.TbItemChg.Locate(Kode, CBDB.TbItem['ItemKode'], []) = True then begin
CBDB.TbItemChg.Edit;
if CBDB.TbItemChg['Keterangan'] = 'Item Change' then CBDB.TbItemChg['Keterangan'] := 'Stock & Item Change'; end
else begin
CBDB.TbItemChg['Keterangan'] := 'Stock Change'; end;
CBDB.TbItemChg['ItemKode'] := CBDB.TbItem['ItemKode'];
CBDB.TbItemChg['StockChange'] := CBDB.TbItemChg['StockChange'] + CBDB.TbTrans['TransItemQty'];
CBDB.TbItemChg['StockOut'] := CBDB.TbItemChg['StockOut'] - CBDB.TbTrans['TransItemQty'];
CBDB.TbItemChg['Tanggal'] := Date(); CBDB.TbItemChg.Post;
IsiTbRutin('Stock Bertambah ' + IntToStr(CBDB.TbTrans['TransItemQty']) + ', Kode Barang (' + CBDB.TbTrans['ItemKode'] +')');
end;
CBDB.TbItem.Post; end
end; // End Procedure UpdateStock
procedure TFTransaksi.FilterTrans(Ket: Byte); begin
CBDB.TbTrans.Filtered := False; if Ket = Normal then
CBDB.TbTrans.Filter := 'TransNota=' + QuotedStr(IntToStr(NomorNota)+'') else if Ket = RePrint then
CBDB.TbTrans.Filter := 'TransNota=' + QuotedStr(IntToStr(NomorNota-1)+''); CBDB.TbTrans.Filtered := True;
end; // End Procedure FilterTrans
procedure TFTransaksi.ViewTunaiKembali(Ket: Byte); begin
if Ket = Pas then begin
Tunai.Text := Total.Text; Kembali.Text := 'Rp 0'; end
else if Ket = KembaliUang then begin
Tunai.Text := CurrStrToStrCurr(IntToCurrStr(StrToInt(Control.Text))); Kembali.Text :=
CurrStrToStrCurr((IntToCurrStr(StrCurrMinStrCurr(Tunai.Text,Total.Text)))); end
else if Ket = TunaiSisa then begin
Tunai.Text := CurrStrToStrCurr(IntToCurrStr(StrToInt(Control.Text))); LKembali.Caption := 'Sisa:';
Kembali.Text :=
CurrStrToStrCurr((IntToCurrStr(StrCurrMinStrCurr(Total.Text,Tunai.Text)))); end
else if Ket = TunaiKredit then begin
Tunai.Text := CurrStrToStrCurr(IntToCurrStr(StrToInt( Copy(Control.Text,1,Length(Control.Text) - 1)))); LKembali.Caption := 'Credit:';
Kembali.Text :=
CurrStrToStrCurr((IntToCurrStr(StrCurrMinStrCurr(Total.Text,Tunai.Text)))); end
else if Ket = Reset then begin
Tunai.Text := 'Rp 0'; Kembali.Text := 'Rp 0';
end; // End Procedure ViewTunaiKembali
procedure TFTransaksi.ViewDisc(Total: Currency); begin
Disc.Text := CurrStrToStrCurr((IntToCurrStr(StrCurrAddCurr(Disc.Text,Total)))); end; // End Procedure ViewDisc
procedure TFTransaksi.ViewControlTotal; begin
Control.Text := Total.Text; Viewer.Text := Control.Text; Control.ReadOnly := True; Timer1.Enabled := True;
end; // End Procedure ViewControlTotal procedure TFTransaksi.ViewControlKembali; begin
Control.Text := StrCurrToCurrStr(Kembali.Text); Control.ReadOnly := True;
Timer2.Enabled := True;
end; // End Procedure ViewControlKembali procedure TFTransaksi.ViewControlTunaiKredit; begin
Control.Text := 'Rp 0'; Control.ReadOnly := True; Timer2.Enabled := True;
end; // End Procedure ViewControlTunaiKredit procedure TFTransaksi.ViewTotal(Ket: Byte); begin
if Ket = Min then Total.Text :=
CurrStrToStrCurr((IntToCurrStr(StrCurrMinStrCurr(SubTotal.Text,Disc.Text)))) else if Ket = Add then Total.Text :=
CurrStrToStrCurr((IntToCurrStr(StrCurrAddStrCurr(SubTotal.Text,Disc.Text)))) else if Ket = Equal then
begin
Total.Text := SubTotal.Text;
ViewDisc(StrCurrToCurr(Disc.Text) * -1); end;
end; // End Procedure ViewTotal
procedure TFTransaksi.ViewSubTotal(Ket: Byte); begin
if Ket = Add then SubTotal.Text := CurrStrToStrCurr((IntToCurrStr( StrCurrAddCurr(SubTotal.Text,CBDB.TbTrans['TransTotal']))))
else if Ket = Min then SubTotal.Text := CurrStrToStrCurr((IntToCurrStr( StrCurrMinCurr(SubTotal.Text,CBDB.TbTrans['TransTotal']))));
end; // End Procedure ViewSubTotal
procedure TFTransaksi.IsiTbRutin(Ket: String); begin
CBDB.TbRutin.Append;
CBDB.TbRutin['Keterangan'] := Ket; CBDB.TbRutin['Tanggal'] := Date(); CBDB.TbRutin['Jam'] := Time(); CBDB.TbRutin.Post;
end; // End Procedure IsiTbRutin
FrTime1.Timer1Timer(Sender);
end; // End Procedure FrTime1Timer1Timer
procedure TFTransaksi.FormActivate(Sender: TObject); begin
if IsFTransaksiActivated = False then begin
ViewKasirTanggalJam; Control.Text := ''; Count := 0;
IsTunaiKredit := NotOK; Member := NotOK;
IsFTransaksiActivated := True; RubahState(StsBeginTransaction); Control.SetFocus;
LMember.Caption := NoMember; //SetTombolFunction;
// Cek Keadaan Transaksi Terakhir
// Jika TbTrans Tidak Kosong Berarti Ada Transaksi yang Belum Selesai // Misal: Belum EOD, Belum Bayar, Input Barang Belum Selesai
if (CBDB.TbTrans.RecordCount <> 0) then begin // Statement If Ke-2
CBDB.TbTransAkhir.First;
// Jika Tanggal Terakhir TransaksiAkhir Tidak Sama dengan Tanggal Hari Ini // Dan Ada Data Transaksi Akhir Berarti Belum Dilakukan EOD
if (CBDB.TbTransAkhir['TransTanggal'] <> Date()) and (CBDB.TbTransAkhir.RecordCount <> 0) then
begin // Statement If Ke-3
ShowMessage('Transaksi Belum di EOD, Tekan ENTER'); IsiTbRutin('Transaksi Belum Di-EOD Pada Tanggal '+ DateToStr(CBDB.TbTransAkhir['TransTanggal']));
if JenisKasirAkses = SuperVisor then IjinEOD := DiIjinKan else if (IjinEOD = DiTolak) then
ShowMessage('Anda Belum Dapat Izin EOD!! Tanyakan Supervisor Anda!!'); RubahState(EODNotCompleted);
end // End Statement If Ke-3
// Jika Tanggal TransaksiAkhir Sama dengan Tanggal Hari Ini atau Tidak Ada // TransaksiAkhir Berarti Transaksi Belum Selesai
// Kemungkinan: Belum Bayar, Input Barang Belum Selesai else if (CBDB.TbTransAkhir['TransTanggal'] = Date()) or (CBDB.TbTransAkhir.RecordCount = 0) then
begin // Statement Else If Ke-3 CBDB.TbTrans.Last;
CBDB.TbTransAkhir.Last;
// Jika NomorNota TransaksiAkhir Tidak Sama Dengan Nomor Nota Transaksi // Berarti Transaksi Belum Selesai
// Kemungkinan: Belum Bayar, Input Barang Belum Selesai
if (CBDB.TbTransAkhir['TransNota'] <> CBDB.TbTrans['TransNota']) then begin
ShowMessage('Transaksi Belum Selesai, Tekan ENTER'); NomorNota := CBDB.TbTrans['TransNota'];
FilterTrans(Normal); IsiTbRKasir(Masuk);
// Jika Transaksi ItemHarga Kosong Berarti
// Belum Memasukkan Kode PLU Tapi Input Sudah Berlangsung if CBDB.TbTrans['ItemHarga'] = 0 then
begin
// Jika Transaksi ItemQty Tidak Kosong Berarti Sudah Input Qty if CBDB.TbTrans['TransItemQty'] <> 0 then
begin
RubahState(StsAlreadyInQty);
// Jika Transaksi ItemKode Sama Dengan AMTItemKode Berarti // Belum Memasukkan Harga AMT
if CBDB.TbTrans['ItemKode'] = AMTKode then RubahState(StsAlreadyInAmtKode);
end end
// Jika Harga Tidak Kosong Berarti Kode PLU Sudah Dimasukkan else
begin
// Jika ItemHargaDiscTax Tidak Kosong Berarti Ada Dicount atau Tax if CBDB.TbTrans['TransItemHargaDiscTax'] <> 0 then ItemDiscTax := True else ItemDiscTax := False;
RubahState(StsAlreadyInKode); end;
CBDB.TbTrans.First;
while not CBDB.TbTrans.Eof do begin
ViewSubTotal(Add); ViewTotal(Min); CBDB.TbTrans.Next; end;
ViewControlTotal;
// Apakah ada kartu Member CBDB.TbPMember.Open;
if CBDB.TbPMember.RecordCount <> 0 then begin
Member := OK;
MemberID := CBDB.TbPMember['MEMBERID']; LMember.Caption := 'MemberID: ' + MemberID; end;
CBDB.TbPMember.Close; end
// Jika NomorNota TransaksiAkhir Sama Dengan Nomor Nota Transaksi // Berarti Transaksi Sudah Selesai
else begin
NomorNota := CBDB.TbTransAkhir['TransNota'] + 1; ShowMessage('Mulai Transaksi Hari ' +
FormatDateTime('dddd, d mmmm yyyy',Date) + ' yang ke ' + IntToStr(NomorNota));
FilterTrans(Normal); IsiTbRKasir(Masuk);
IsiTbRutin('Kasir ' + NamaKasirKerja
+ ', (' + KodeKasir + ') Masuk Transaksi'); IsiTbKeterangan(Normal);
ViewTunaiKembali(Reset); end
end // End Statement Else If Ke-3 end // End Statement If Ke-2
// Jika TbTrans Kosong Berarti Belum Ada Transaksi else
begin
NomorNota := 1;
ShowMessage('Mulai Transaksi Hari ' +
FormatDateTime('dddd, d mmmm yyyy',Date) + ' yang Pertama'); FilterTrans(Normal);
IsiTbRKasir(Masuk);
IsiTbRutin('Kasir ' + NamaKasirKerja + ', (' + KodeKasir + ') Masuk Transaksi');
IsiTbKeterangan(Normal); PrintStruk(Keterangan); end;
end
else FilterTrans(Normal);
end; // End Procedure FormActivate
procedure TFTransaksi.FormKeyPress(Sender: TObject; var Key: Char); begin
if not ((Key in ['a', 'd'..'z']) or (Key in ['A', 'D'..'Z'])) then begin
// Jika tombol Minus (-) ditekan -> Untuk Discount Item Persen if Key = TDiscItemPersen then
begin
if ItemDiscTax = AdaDiscTax then
ShowMessage('Discount Sudah Ada, Masukkan Item Baru, Tekan ENTER!!') else
begin
if ((State = AlreadyInKode) or (State = AlreadyInKodeZeroCount)) and (CBDB.TbTrans['TransSts'] <> StatusCorr) then
try
if Control.Text = '' then SalahTombol else if (StrToInt(Control.Text) > 100) or (StrToInt(Control.Text) <= 0) then
ShowMessage('Salah Memasukkan Jumlah Discount, Tekan ENTER') else
begin
ViewSubTotal(Min); ViewTotal(Min);
IsiTbTrans(Discount); ViewSubTotal(Add); ViewTotal(Min);
ItemDiscTax := AdaDiscTax; ViewControlTotal;
LStatus.Caption :=
'Masukkan Qty ; Kode PLU ; Tekan + Untuk Pembayaran'; IsiTbStruk(Discount);
PrintStruk(Discount); end
except ShowMessage('Salah Memasukkan Angka, Tekan ENTER'); end
Hapus := True; end;
// Jika tombol Multiply (*) ditekan -> Untuk Qty if Key = TQty then
begin
if (State = AlreadyInKodeZeroCount) or (State = BeginTransaction) or (State = AlreadyInKode) or (State = AlreadyInStatusZeroCount) or (State = AlreadyInStatus) or (State = AlreadyInQty)
or (State = AlreadyInQtyZeroCount) then begin
try begin
if Control.Text = '' then SalahTombol else
begin
if not ((CBDB.TbTrans['TransSts'] <> Status) and ((State = AlreadyInStatusZeroCount) or
(State = AlreadyinQtyZeroCount) or
(((State = AlreadyInStatus) or (State = AlreadyInQty)) and ((1 + Count - CBDB.TbTrans['TransItemQty']) < 0))))
then begin
IsiTbTrans(Qty);
RubahState(StsAlreadyInQtyOrStsAlreadyInQtyZeroCount); end
end end except begin
ShowMessage('Salah Memasukkan Jumlah Qty, Tekan ENTER');
if (CBDB.TbTrans.State = dsEdit) or (CBDB.TbTrans.State = dsInsert) then TbTrans.Cancel;
end end end
else SalahTombol; Hapus := True; end;
// Jika Titik Ditekan --> '000' if Key = TTripleZero then
begin
Control.Text := Control.Text + '000'; Tekan := True;
end;
// Jika Titik Ditekan --> '00' if Key = TDoubleZero then begin
Control.Text := Control.Text + '00'; Tekan := True;
end; end else begin
end; // End Procedure FormKeyPress
procedure TFTransaksi.FormKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
if Hapus = True then begin
Control.Text := ''; Hapus := False; end;
if Tekan = True then begin
Control.Text := Copy(Control.Text,2,Length(Control.Text)-1); Control.SelStart := Length(Control.Text);
Control.SetFocus; Tekan := False; end;
if Key = TCash then begin
Control.Text := '';
Control.Text := StrCurrToCurrStr(Kembali.Text); end;
end; // End Procedure FormKeyUp
procedure TFTransaksi.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
// Jika tombol Plus (+) ditekan -> Untuk Pembayaran Tunai if Key = TCash then
begin // Statement If Ke-3
if (State = AlreadyInKode) or (State = AlreadyInDiscTaxNota) or (State = AlreadyInKodeZeroCount) then
begin
StatusOK := OK; try
begin
if Control.Text <> '' then begin
if (StrToInt(Control.Text) - StrCurrToInt(Total.Text)) < 0 then begin
ViewTunaiKembali(TunaiSisa);
if (MessageDlg('Pembayaran Kurang!!, Apakah Sisa Pembayaran ' + Kembali.Text + ' Dibayar secara Kredit?',
mtConfirmation, [mbYes, mbNo], 0) = mrYes) then begin
if Member <> OK then begin
ViewTunaiKembali(TunaiKredit); IsiTbTransAkhir(TunaiKredit);
IsiTbRutin('Validasi TunaiKredit ke-' + Trim(IntToStr(NomorNota)) + ', Kredit Rp ' + CurrToStr(CBDB.TbTransAkhir['TransCredit']) + ', Tunai Rp ' + CurrToStr(CBDB.TbTransAkhir['TransTunai']) + ', Kasir ' + NamaKasirKerja + ' (' + KodeKasir + ')'); RubahState(StsEndTransaction);
IsiTbStrukAkhir(Normal); PrintStruk(Pembayaran); Member := NotOK;
end else begin
IsTunaiKredit := OK;
FInputPIN.Visible := True; end
end
else ViewTunaiKembali(Reset); StatusOK := NotOK;
end
else if StrCurrToInt(Total.Text) < 0 then begin
ShowMessage('Total Penjualan Tidak Boleh Minus!!, Tekan ENTER'); StatusOK := NotOK;
end
else ViewTunaiKembali(KembaliUang); Hapus := True;
end else
if StrCurrToInt(Total.Text) < 0 then begin
ShowMessage('Total Penjualan Tidak Boleh Minus!!, Tekan ENTER'); Hapus := True;
StatusOK := NotOK; end
else ViewTunaiKembali(Pas); if StatusOK = OK then
begin
IsiTbTransAkhir(Normal);
IsiTbRutin('Validasi Transaksi ke-' + Trim(IntToStr(NomorNota)) + ', Tunai Rp ' + CurrToStr(CBDB.TbTransAkhir['TransTotal']) + ', Kasir ' + NamaKasirKerja + ' ('+KodeKasir+')');
ViewControlKembali; Tekan := True;
RubahState(StsEndTransaction); IsiTbStrukAkhir(Normal);
PrintStruk(Pembayaran); Member := NotOK;
end end except begin
ShowMessage('Salah Memasukkan Angka, Tekan ENTER'); Hapus := True;
end end end
else SalahTombol;
end; // End Statement If Ke-3
// Jika tombol Space ditekan -> Buka Transaksi Baru if Key = TNewTransaction then
begin
if State = EndTransaction then begin
Disc.Text := 'Rp 0'; Total.Text := 'Rp 0'; Tunai.Text := 'Rp 0'; Kembali.Text := 'Rp 0'; Control.ReadOnly := False; Viewer.Text := '';
LDisc.Caption := SNorm; LTunai.Caption := 'Tunai'; LMember.Caption := NoMember; NomorNota := NomorNota + 1; FilterTrans(Normal);
Count := 0;
RubahState(StsBeginTransaction); IsiTbKeterangan(Normal);
PrintStruk(Keterangan); Hapus := True;
CBDB.TbMember.Close; ViewTunaiKembali(Reset); CBDB.TbPMember.Close;
CBDB.TbPMember.Exclusive := True; CBDB.TbPMember.EmptyTable;
CBDB.TbPMember.Exclusive := False; end
end;
// Jika tombol Esc ditekan -> Untuk Keluar if Key = TKeluar then
begin
if not ((State = BeginTransaction) or (State = EODNotCompleted)) then SalahTombol
else begin
if State = BeginTransaction then begin
IsiTbRKasir(Keluar);
IsiTbRutin('Kasir ' + NamaKasirKerja + ', (' + KodeKasir + ') Keluar Transaksi');
CBDB.TbTrans.Filtered := False; end;
FTransaksi.Visible := False; FSecurity.Visible := False; FSecurity.Visible := True;
FSecurity.EKodeKasir.Text := ''; FSecurity.EKodeAkses.Text := ''; FSecurity.SetFocus;
end end;
if (Key = TKode) and (Control.Text <> '') then begin
if (State = BeginTransaction) and ((Copy(Control.Text,1,1) = 'C') or (Copy(Control.Text,Length(Control.Text),1) = 'B')
or (Copy(Control.Text,1,1) = 'c')
or (Copy(Control.Text,Length(Control.Text),1) = 'b')) then begin
MemberId := Copy(Control.Text,2,Length(Control.Text) - 2); CBDB.TbMember.Open;
if (CBDB.TbMember.Locate('MemberID',MemberID,[]) <> True) or (Member = OK) then
if Member = OK then ShowMessage('Member Sudah Ada!') else
begin
ShowMessage('Member Tidak Ditemukan!'); Member := NotOK;
end;
Hapus := True; end
else begin
if CBDB.TbMember['Valid'] = False then begin
ShowMessage('Member Tidak Aktif!'); Member := NotOK;
end else begin
Member := OK;
ShowMessage('Member Cahaya Baru, Nama: ' + CBDB.TbMember['Nama'] + ', ID: ' + MemberID);
LMember.Caption := 'MemberID: ' + MemberID; // Isi TbPrintMember
CBDB.TbPMember.Open; CBDB.TbPMember.Append;
CBDB.TbPMember['MEMBERID'] := CBDB.TbMember['MemberID']; CBDB.TbPMember['NAMA'] := CBDB.TbMember['Nama'];
CBDB.TbPMember.Post; // PrintStruk(PrintMember); CBDB.TbPMember.Close; end
end end
else if (State = AlreadyInKodeZeroCount) or (State = BeginTransaction) or (State = AlreadyInKode) or (State = AlreadyInStatusZeroCount) or (State = AlreadyInQty) or (State = AlreadyInQtyZeroCount) or (State = AlreadyInStatus) then
begin
if (State = BeginTransaction) and (CBDB.TbTrans.RecordCount = Kosong) then begin
KosongkanTbStruk;
IsiTbRutin('Mulai Transaksi ke-'+Trim(IntToStr(NomorNota))); end;
if Control.Text = AMTKode then begin
IsiTbTrans(BarangCampuran);
RubahState(StsAlreadyInAMTKodeOrStsAlreadyInAMTKodeZeroCount); end
else begin
if Length(Control.Text) < 7 then FindKode := Kode
else if Length(Control.Text) < 16 then FindKode := Barcode else Control.Text := Copy(Control.Text,1,15);
if CBDB.TbItem.Locate(FindKode,Control.Text,[]) = True then begin
ItemDiscTax := NoDiscTax; IsiTbTrans(Normal);
IsiTbStruk(Normal); PrintStruk(Transaksi); RubahState
(StsBeginTransactionOrStsAlreadyInKodeOrStsAlreadyInKodeZeroCount); end
else ShowMessage('Kode PLU/BarCode Tidak Terdaftar, Tekan ENTER'); end
end
else SalahTombol; Hapus := True; end;
// Jika tombol F5 ditekan -> Status Barang Normal if Key = TStatusNormal then
begin
if (State = AlreadyInKodeZeroCount) or (State = BeginTransaction) or (State = AlreadyInKode) or (State = AlreadyInStatus)
or (State = AlreadyInQty) or (State = AlreadyInQtyZeroCount) or (State = AlreadyInStatusZeroCount) then
begin
IsiTbTrans(Sts); Hapus := True;
RubahState(StsAlreadyInStatusOrStsAlreadyInStatusZeroCount); end
end;
// Jika tombol F6 ditekan -> Status Barang Rtn if Key = TStatusReturn then
begin
if (State = AlreadyInKodeZeroCount) or (State = BeginTransaction) or (State = AlreadyInKode) or (State = AlreadyInStatus)
or (State = AlreadyInQty) or (State = AlreadyInQtyZeroCount) or (State = AlreadyInStatusZeroCount) then
begin
IsiTbTrans(Rtn); Hapus := True;
RubahState(StsAlreadyInStatusOrStsAlreadyInStatusZeroCount); end
end;
// Jika tombol F7 ditekan -> Status Barang Void if Key = TStatusVOID then
begin
if (((State = AlreadyInStatus) or (State = AlreadyInQty)
or (State = AlreadyInStatusZeroCount) or (State = AlreadyInQtyZeroCount)) and ((1 + Count - CBDB.TbTrans['TransItemQty']) > 0))
or (State = AlreadyInKode) then begin
IsiTbTrans(Vod); Hapus := True;
RubahState(StsAlreadyInStatusOrStsAlreadyInStatusZeroCount); end
end;
// Jika tombol F3 ditekan -> Cari Item
if (Key = TCariItem) and (State <> EODNotCompleted) then begin // K B
// Untuk AMT Khusus Barang Campuran if Key = TAMT then
begin
if (State = AlreadyInAmtKode) or (State = AlreadyInAMTKodeZeroCount) then begin
try begin
IsiTbTrans(HargaAMT); ViewSubTotal(Add); ViewTotal(Min); ViewControlTotal; IsiTbStruk(Normal); PrintStruk(Transaksi); RubahState
(StsBeginTransactionOrStsAlreadyInKodeOrStsAlreadyInKodeZeroCount); ItemDiscTax := False;
end except begin
ShowMessage('Salah Memasukkan Angka, Tekan ENTER'); Hapus := True;
CBDB.TbTrans.Cancel; RubahState
(StsBeginTransactionOrStsAlreadyInKodeOrStsAlreadyInKodeZeroCount); end
end end
else SalahTombol; end;
// Jika tombol Home ditekan -> Untuk Pajak/Tambahan Nota Rupiah if (Key = TTaxNotaRupiah) or (Key = TTaxNotaPersen) then
begin
if State = AlreadyInKode then begin
if Control.Text = '' then SalahTombol else
begin
if Key = TTaxNotaRupiah then IsiTbTransAkhir(TaxRp) else IsiTbTransAkhir(TaxPersen);
ViewDisc(CBDB.TbTransAkhir['TransHargaTax']); ViewTotal(Add);
ViewControlTotal; LDisc.Caption := STax;
RubahState(StsAlreadyInDiscTaxNota); end
end end;
// Jika tombol PageDown ditekan -> Untuk Discount Nota Persen if (Key = TDiscNotaRupiah) or (Key = TDiscNotaPersen) then begin
if State = AlreadyInKode then begin
if Control.Text = '' then SalahTombol else
begin
if Key = TDiscNotaPersen then IsiTbTransAkhir(DiscPersen) else IsiTbTransAkhir(DiscRp);
ViewControlTotal;
LDisc.Caption := SDisc;
RubahState(StsAlreadyInDiscTaxNota); end
end end;
// Jika tombol Up ditekan -> Untuk Cancel data Transaksi if Key = TCorrection then
begin
if (State = AlreadyInStatusZeroCount) or (State = AlreadyInAMTKodeZeroCount) or (State = AlreadyInQty) or (State = AlreadyInAMTKode)
or (State = AlreadyInStatus) or (State = AlreadyInQtyZeroCount) then begin
DeleteLastRecordTbTrans; RubahState
(StsBeginTransactionOrStsAlreadyInKodeOrStsAlreadyInKodeZeroCount); Hapus := True;
end
else if ((State = AlreadyInKode) or (State = AlreadyInKodeZeroCount)) and (CBDB.TbTrans['TransSts'] <> StatusCorr) then
begin
ViewSubTotal(Min); ViewTotal(Min); ViewControlTotal;
CopyItem := CBDB.TbTrans['Item'];
CopyItemKode := CBDB.TbTrans['ItemKode']; CopyItemHarga := CBDB.TbTrans['ItemHarga']; CopyItemQty := CBDB.TbTrans['TransItemQty']; CopyItemDisc := CBDB.TbTrans['TransItemDiscTax'];
CopyItemHargaDisc := CBDB.TbTrans['TransItemHargaDiscTax']; if CBDB.TbTrans['TransSts'] = Status then
Count := Count - CBDB.TbTrans['TransItemQty'] else Count := Count + CBDB.TbTrans['TransItemQty']; if CBDB.TbTrans['ItemKode'] = AMTKode then
begin
IsiTbRutin('Batalkan Transaksi Barang Campuran Item ' + CBDB.TbTrans['TransSts'] + ' di Nota ke-' +
Trim(IntToStr(NomorNota) + ', Kode:' + CBDB.TbTrans['ItemKode'])); IsiTbTrans(CorrMin);
end else begin
IsiTbRutin('Batalkan Transaksi Item ' + CBDB.TbTrans['TransSts'] + ' di Nota ke-' + Trim(IntToStr(NomorNota) + ', Kode:'
+ CBDB.TbTrans['ItemKode']));
if CBDB.TbTrans['TransSts'] = Status then begin
UpdateStock(Add); IsiTbTrans(CorrMin); end
else begin
UpdateStock(Min); IsiTbTrans(CorrAdd); end
end;
(StsBeginTransactionOrStsAlreadyInKodeOrStsAlreadyInKodeZeroCount); end
else if State = AlreadyInDiscTaxNota then begin
DeleteLastRecordTbTransAkhir; ViewTotal(Equal);
ViewControlTotal;
LDisc.Caption := SNorm; State := AlreadyInKode; end
else if State = BeginTransaction then begin
LMember.Caption := NoMember; Member := NotOK;
end
else if CBDB.TbTrans['TransSts'] = StatusCorr then begin
ShowMessage('Transaksi Sudah Dikoreksi! Tekan ENTER!'); Hapus := True;
end end;
// Jika tombol Dowm ditekan -> untuk RePrint if Key = TRePrint then
begin
if State = EndTransaction then PrintStruk(RePrint) else if (State = BeginTransaction) and
(CBDB.TbTransAkhir.RecordCount = Kosong) then ShowMessage('Belum Ada Transaksi, Tekan ENTER') else if State = BeginTransaction then
begin
FilterTrans(RePrint); IsiTbKeterangan(RePrint); PrintStruk(RePrint);
RubahState(StsEndTransaction); NomorNota := NomorNota - 1; end
else SalahTombol; end;
// Jika tombol Left ditekan -> Untuk Pembayaran Credit if Key = TCredit then
begin
if Member = OK then FInputPIN.Visible := True else
begin
if (State = AlreadyInKode) or (State = AlreadyInDiscTaxNota) then begin
ViewTunaiKembali(Pas); IsiTbTransAkhir(Credit);
IsiTbRutin('Validasi Transaksi ke-' + Trim(IntToStr(NomorNota)) + ', Kredit Rp ' + CurrToStr(CBDB.TbTransAkhir['TransTotal']) + ', Kasir ' + NamaKasirKerja + ' (' + KodeKasir + ')'); RubahState(StsEndTransaction);
LTunai.Caption := 'Credit:'; ViewControlKembali;
Hapus := True;
IsiTbStrukAkhir(Normal); PrintStruk(Pembayaran); Member := NotOK;
else SalahTombol; end
end;
// Jika tombol F10 ditekan -> Financial if Key = TFinancial then
begin
if State = BeginTransaction then begin
if CBDB.TbTransAkhir.RecordCount <> 0 then begin
if Control.Text = KodeKasir then begin
DBGrid1.Visible := False; FFinancial.Visible := True; end
end
else ShowMessage('Belum Ada Transaksi!, Tekan ENTER!'); end
else SalahTombol; Hapus := True; end;
// Jika tombol F9 ditekan -> EOD if Key = TEOD then
begin
if ((State = BeginTransaction) or (State = EODNotCompleted)) and (Control.Text = KodeKasir) then
begin
if (CBDB.TbTransAkhir.RecordCount = 0) then
ShowMessage('Tidak Bisa EOD, Belum Ada Transaksi!') else
begin
if IjinEOD = DiIjinKan then begin
if CheckFileEOD(DateToStr(CBDB.TbTransAkhir['TransTanggal'])) <> '' then
begin
EOD := True;
ShowMessage('Transaksi Hari Ini Sudah Pernah di EOD,' + #13#10 + 'Data Lama Disimpan Pada File ' +
CheckFileEOD(DateToStr(CBDB.TbTransAkhir['TransTanggal']))); end
else EOD := False; FEOD.Visible := False; FEOD.Visible := True; end
else ShowMessage
('Harus Ada Ijin EOD!'); end
end
else ShowMessage('Salah Tekan Tombol! Tekan ENTER!'); Hapus := True;
end;
// Jika Tombol Delete Ditekan --> CLEAR if Key = TClear then
begin
// Jika Tombol F11 Ditekan --> Menggeser 1 Baris pada Printer if Key = TFeed then
begin
PrintStruk(Feed); end;
// Jika tombol F8 ditekan -> Belum Ada Fungsi if Key = TOpenCashDrawer then
begin
PrintStruk(Eject); end;
// Jika tombol F12 ditekan -> VOID Sales if Key = TVOIDSales then
begin
if (State = AlreadyInKode) or (State = AlreadyInDiscTaxNota) then begin
ViewTunaiKembali(Pas); IsiTbTransAkhir(VOIDSales);
IsiTbRutin('Validasi Transaksi ke-' + Trim(IntToStr(NomorNota)) + ', Void Rp ' + CurrToStr(CBDB.TbTransAkhir['TransTotal']) + ', Kasir ' + NamaKasirKerja + ' (' + KodeKasir + ')'); RubahState(StsEndTransaction);
LTunai.Caption := 'VOID'; ViewControlKembali;
IsiTbStrukAkhir(VOIDSales); PrintStruk(VOIDSales); end
else SalahTombol; end;
// Jika tombol F2 ditekan -> IjinEOD if Key = TIjinEOD then
begin
if ((State = BeginTransaction) or (State = AlreadyInKode) or (State = EODNotCompleted) or (State = EndTransaction)) and (JenisKasirAkses <> SuperVisor) then
begin
FEODIjin.Visible := False; FEODIjin.Visible := True; end
else SalahTombol; end;
// Jika tombol F1 ditekan -> Help if Key = THelp then
begin
FHTrans.Visible := False; FHTrans.Visible := True; end;
// Jika tombol F4 ditekan -> Validasi if Key = TValidasi then
begin
if (State = EndTransaction) or (State = AlreadyInKode) or (State = AlreadyInDiscTaxNota) then
begin
if (State = AlreadyInKode) or (State = AlreadyInDiscTaxNota) then IsiTbStrukAkhir(Validasi)
NomorNota := NomorNota-1; RubahState(StsEndTransaction); end;
IsiTbKeterangan(Normal); PrintStruk(Validasi); end
end;
end; // End Procedure FormKeyDown
procedure TFTransaksi.Timer1Timer(Sender: TObject); begin
Control.Text := ''; Timer1.Enabled := False; Control.ReadOnly := False; end;
procedure TFTransaksi.Timer2Timer(Sender: TObject); begin
Timer2.Enabled := False; end;
procedure TFTransaksi.FormCreate(Sender: TObject); var
x, y: LongInt; begin
//Brush.Style := bsClear; {FTransaksi.Scaled := True;
x := getSystemMetrics(SM_CXSCREEN); y := getSystemMetrics(SM_CYSCREEN);
if (x <> ScreenHeight) or (y <> ScreenWidth) then begin
Ftransaksi.Height := FTransaksi.Height * x div ScreenHeight; Ftransaksi.Width := FTransaksi.Width * y div ScreenWidth; scaleBy(x,ScreenHeight);
end;} //Scale Resolusi end;
Lampiran A.3 Listing Program FMenu
=====