Aplikasi Penggajian VB 6.0

 

Setelah membuat program penerimaan karyawan, kita lanjutkan ke pembuatan program penggajian karyawan.

Normalisasi File

Program penggajian ini dirancang dengan Normaliasi level ketiga (3NF) dengan bentuk seperti gambar berikut.

 

Program penggajian ini menyimpan data ke dua tabel yaitu tabel Gaji dan DetailGaji seperti terlihat pada tabel-tabel berikut ini.

Tabel Gaji

Gaji

NomorSlp

Tanggal

Jam

Pendapatan

Potongan

GajiBersih

NIP

KodeKsr

0709090001

09/09/07

11:43:32 PM

1350000

360000

990000

199607152

KSR01

 

Tabel DetailGaji

DetailGaji

NomorSlp

KodePrk

Jumlah

0709090001

001

1000000

0709090001

002

200000

0709090001

003

150000

0709090001

101

135000

0709090001

102

100000

0709090001

103

125000

Database Dan Tabel

Untuk mengetahui file database dan struktur masing-masing tabel berikut type data dan kunci primer maupun kunci tamunya silakan buka CD pendukung buku ini.

Membuat Module

Untuk memulai membuat program penggajian, aktifkanlah VB kemudian awali dengan membuat module lalu ketik coding berikut ini.

Coding  :

 

Public Conn As New ADODB.Connection

Public RSPerkiraan As ADODB.Recordset

Public RSDetail As ADODB.Recordset

Public RSGaji As ADODB.Recordset

Public RSKasir As ADODB.Recordset

Public RSPegawai As ADODB.Recordset

 

Public Sub BukaDB()

Set Conn = New ADODB.Connection

Set RSPerkiraan = New ADODB.Recordset

Set RSDetail = New ADODB.Recordset

Set RSGaji = New ADODB.Recordset

Set RSKasir = New ADODB.Recordset

Set RSPegawai = New ADODB.Recordset

Conn.Open "PROVIDER=Microsoft.Jet.OLEDB.4.0;Data Source=" & App.Path & "\ADOGaji.mdb"

End Sub

 

Dengan asumsi form login, data pegawai, data perkiraan dan kasir telah dibuat, kini saatnya membuat form penggajian dengan bentuk seperti gambar 8.3.

Transaksi Penggajian

Ilustrasi pada program ini adalah sebagai berikut:

1.              Nomor slip gaji muncul secara otomatis, berubah setiap hari dan setiap ganti transaksi setelah slip gaji sebelumnya disimpan.

2.              Nama kasir dan kode kasir muncul secara otomatis dari hasil login. Kode kasir tidak ditampilkan dalam form (LblKodeKsr.Visible = False).

3.              Tanggal dan jam muncul secara otomatis diambil dari sistem komputer, oleh karena itu diharapkan mengecek kembali validasi tanggal dan jam komputer sebelum program dijalankan.

4.              Hal pertama yang harus dilakukan adalah memilih NIP kemudian menekan enter, jika bulan ini NIP tersebut telah menerima gaji maka akan muncul pesan bahwa NIP tersebut telah menerima gaji (mencegah penerimaan gaji dua kali dalam satu bulan).

5.              Saat melakukan penggajian kode perkiraan (pembayaran) dapat dilakukan dalam Grid atau memilih dari list kemudian menekan enter. Setelah itu isilah jumlah pembayarannya.

6.              Khusus untuk pajak, disini kami asumsikan sebesar 10% dari total pendapatan dan akan menjadi potongan bagi pemdapatan hingga akhirnya ditemukan gaji bersihnya.

 

 

Coding :

'tampilkan waktu

Private Sub Timer1_Timer()

LblJam = Time$

End Sub

 

Private Sub Form_Activate()

DT.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source= " & App.Path & "\ADOGaji.mdb"

DT.RecordSource = "Transaksi"

Set DataGrid1.DataSource = DT

DataGrid1.Refresh

 

'jika kode kasir tidak terdeteksi tampilkan pesan ...lalu tampilkan form login

If LblKodeKsr = "" Then

    MsgBox "Kasir tidak terdeteksi"

    Login.Show

    Exit Sub

End If

'kode dan nama kasir diambil dari login

LblKodeKsr = Login.TxtKodeKsr

LblNamaKsr = Login.TxtNamaKsr

'memanggil nomor slip gaji otomatis

Call Auto

'memanggil prosedur agar tabel transaksi dikosongkan

Call Tabel_Kosong

DT.Recordset.MoveFirst

Combo1.SetFocus

If DataGrid1.Columns(1) <> vbNullString Then DataGrid1.Col = 3

End Sub

 

Private Sub Form_Load()

'buka database

Call BukaDB

'buka tabel perkiraan

RSPerkiraan.Open "select * from Perkiraan", Conn

RSPerkiraan.Requery

List1.Clear

'tampilkan data kode dan nama perkiraan di list

Do Until RSPerkiraan.EOF

    List1.AddItem RSPerkiraan!KodePrk & Space(2) & RSPerkiraan!NamaPrk

    RSPerkiraan.MoveNext

Loop

'buka tabel pegawai

RSPegawai.Open "select * from Pegawai", Conn

RSPegawai.Requery

Combo1.Clear

'tampilkan NIP di combo

Do Until RSPegawai.EOF

    Combo1.AddItem RSPegawai!NIP

    RSPegawai.MoveNext

Loop

 

LblKodeKsr = Login.TxtKodeKsr

LblNamaKsr = Login.TxtNamaKsr

'aktifkan tanggal hari ini

LblTanggal = Date

End Sub

 

Private Sub Auto()

Call BukaDB

'baca nomor slip gaji terakhir

RSGaji.Open "select * from Gaji Where NomorSlp In(Select Max(NomorSlp)From Gaji)Order By NomorSlp Desc", Conn

RSGaji.Requery

    Dim Urutan As String * 10

    Dim Hitung As Long

    With RSGaji

        If .EOF Then

            Urutan = Right(Date, 2) + Mid(Date, 4, 2) + Left(Date, 2) + "0001"

            LblNomorSlp = Urutan

        Else

            If Left(!NomorSlp, 6) <> Right(Date, 2) + Mid(Date, 4, 2) + Left(Date, 2) Then

                Urutan = Right(Date, 2) + Mid(Date, 4, 2) + Left(Date, 2) + "0001"

            Else

                Hitung = (!NomorSlp) + 1

                Urutan = (Right(Date, 2) + Mid(Date, 4, 2) + Left(Date, 2)) + Right("0000" & Hitung, 4)

            End If

        End If

        LblNomorSlp = Urutan

    End With

End Sub

 

'jika dalam tabel transaksi masih ada data

'hapus data tersebut

Function Tabel_Kosong()

If Not DT.Recordset.RecordCount = 0 Then

    DT.Recordset.MoveFirst

    Do While Not DT.Recordset.EOF

        DT.Recordset.Delete

        DT.Recordset.MoveNext

    Loop

End If

'tampilkan 1 nomor transaksi dalam Grid

For i = 1 To 1

    DT.Recordset.AddNew

    DT.Recordset!Nomor = i

    DT.Recordset.Update

Next i

DataGrid1.Col = 1

End Function

 

'menambah baris transaksi setelah baris diatasnya diisi

Function Tambah_Baris()

For i = DT.Recordset.RecordCount To DT.Recordset.RecordCount

    DT.Recordset.AddNew

    DT.Recordset!Nomor = i + 1

    DT.Recordset.Update

Next i

End Function

 

Private Sub Combo1_KeyPress(KeyAscii As Integer)

If KeyAscii = 13 Then

    If Combo1 = "" Then

        MsgBox "NIP Kosong"

        Exit Sub

        Combo1.SetFocus

    Else

        'cari data gaji berdasarkan NIP dan Bulannya bulan sekarang

        Call BukaDB

        RSGaji.Open "Select * from Gaji where Nip='" & Combo1 & "' and cdate(month(tanggal))='" & CDate(Month(LblTanggal)) & "'", Conn

        'jika ditemukan tampilkan pesan

        If Not RSGaji.EOF Then

            MsgBox "Nip     : " & Combo1 & " " & Chr(13) & _

            "Nama : " & LblNamaPgw & " " & Chr(13) & _

            "Bulan ini telah menerima gaji"

            Combo1.SetFocus

            Exit Sub

        End If

            DataGrid1.SetFocus

        End If

    End If

 

End Sub

 

Private Sub Combo1_Click()

Call BukaDB

'cari pegawai berdasarkan NIP

RSPegawai.Open "Select * from pegawai where nip='" & Combo1 & "'", Conn

'jika tidak ditemukan munculkan pesan

If RSPegawai.EOF Then

    MsgBox "Nip tidak terdaftar"

    Combo1.SetFocus

Else

    'jika ditemukan tampilkan datanya

    LblNamaPgw = RSPegawai!NamaPgw

    LblBagian = RSPegawai!Bagian

    Combo1.SetFocus

End If

End Sub

 

'mencari data perkiraan berdasarkan kode yang ada di list

Private Sub list1_keyPress(KeyAscii As Integer)

If KeyAscii = 13 Then

    If DataGrid1.SelText <> Left(List1, 3) Then

        DataGrid1.SelText = Left(List1, 3)

        Call BukaDB

        RSPerkiraan.Open "Select * from perkiraan where KodePrk='" & Left(List1, 3) & "'", Conn

        RSPerkiraan.Requery

        If Not RSPerkiraan.EOF Then

            'jika kode perkiraannya 101, maka pajaknya lansgung terisi 10%

            'dari total pendapatan

            If Left(List1, 3) = "101" Then

                DT.Recordset!Kode = RSPerkiraan!KodePrk

                DT.Recordset!Nama = RSPerkiraan!NamaPrk

                DT.Recordset!Jumlah = LblPendapatan * 0.1

                DT.Recordset.Update

                Call Tambah_Baris

                DT.Recordset.MoveLast

                LblPendapatan = Format(GajiKotor, "###,###,###")

                LblPotongan = Format(Potongan, "###,###,###")

                LblTotal = Format(GajiKotor - Potongan, "###,###,###")

                DataGrid1.SetFocus

                DataGrid1.Col = 1

            Else

                'jika kodenya bukan 101, maka jumlahnya harus diisi manual

                DT.Recordset!Kode = RSPerkiraan!KodePrk

                DT.Recordset!Nama = RSPerkiraan!NamaPrk

                DT.Recordset.Update

                DataGrid1.SetFocus

                DataGrid1.Col = 3

                DataGrid1.Refresh

            End If

        End If

    End If

End If

End Sub

 

Private Sub DataGrid1_Keypress(KeyAscii As Integer)

If Not (KeyAscii >= Asc("0") And KeyAscii <= Asc("9") Or KeyAscii = vbKeyBack Or KeyAscii = vbKeyTab Or KeyAscii = vbKeyReturn) Then KeyAscii = 0

End Sub

 

Private Sub DataGrid1_AfterColEdit(ByVal ColIndex As Integer)

If DataGrid1.Col = 1 Then

    'cari data perkiraan berdasarkan kode supaya muncul nama perkiraannya

    Call BukaDB

    RSPerkiraan.Open "Select * from perkiraan where kodeprk= '" & DT.Recordset!Kode & "'", Conn

    RSPerkiraan.Requery

    If RSPerkiraan.EOF Then

        MsgBox "Kode Perkiraan tidak terdaftar" & Chr(13) & _

        "Lihat daftar di kanan " & Chr(13) & _

        "Pilih datanya, lalu tekan Enter"

        List1.SetFocus

        Exit Sub

    End If

    'jika kode ditemukan tampilkan nama perkirannya

    DT.Recordset!Kode = RSPerkiraan!KodePrk

    DT.Recordset!Nama = RSPerkiraan!NamaPrk

    DataGrid1.SetFocus

    DataGrid1.Col = 3

    Exit Sub

End If

 

'jika jumlah nominal elah diisi, tampilkan total pendapatan

'tampilkan total potongan dan gaji bersihnya

If DataGrid1.Col = 3 Then

    DT.Recordset!Jumlah = DT.Recordset!Jumlah

    DT.Recordset.Update

    Call Tambah_Baris

    DT.Recordset.MoveNext

    DataGrid1.SetFocus

    DataGrid1.Col = 1

    DT.Recordset.MoveLast

    LblPendapatan = Format(GajiKotor, "###,###,###")

    LblPotongan = Format(Potongan, "###,###,###")

    LblTotal = Format(GajiKotor - Potongan, "###,###,###")

End If

End Sub

 

'encari total pendapatan

Function GajiKotor()

    Set RSGajiKotor = New ADODB.Recordset

    RSGajiKotor.Open "Select sum(Jumlah) as TTLPendapatan from Transaksi where left(kode,1)=0", Conn

    GajiKotor = RSGajiKotor!TTLPendapatan

End Function

 

'mencari total potongan

Function Potongan()

    Set RSPotongan = New ADODB.Recordset

    RSPotongan.Open "Select sum(Jumlah) as TTLPotongan from Transaksi where left(kode,1)=1", Conn

    Potongan = RSPotongan!TTLPotongan

End Function

 

Private Sub Bersihkan()

LblNamaPgw = ""

LblBagian = ""

LblPendapatan = ""

LblPotongan = ""

LblTotal = ""

End Sub

 

Private Sub CmdSimpan_Keypress(KeyAscii As Integer)

If KeyAscii = 27 Then DataGrid1.SetFocus

End Sub

 

Private Sub CmdSimpan_Click()

If Combo1 = "" Then

    MsgBox "NIP karyawan belum diisi"

    Combo1.SetFocus

    Exit Sub

ElseIf LblPendapatan = "" Then

    MsgBox "Data belum lengkap"

    Exit Sub

Else

    Pesan = MsgBox("Data sudah benar..?", vbYesNo, "Konfirmasi")

    'simpan data ke tabel gaji pada bagian header dan footer

    '(disimpan hanya sekali saja)

    If Pesan = vbYes Then

        Dim SimpanGaji As String

        SimpanGaji = "insert into gaji (NomorSlp,tanggal,jam,nip,pendapatan,potongan,gajibersih,kodeksr) values " & _

        "('" & LblNomorSlp & "','" & CDate(LblTanggal) & "','" & LblJam & "', " & _

        "'" & Combo1 & "','" & LblPendapatan & "','" & LblPotongan & "', " & _

        "'" & LblTotal & "','" & LblKodeKsr & "')"

        Conn.Execute (SimpanGaji)

       

        'simpan data berulang-ulang ke tabel detailgaji

        'yg disimpan adalah nomor slip, kode perkiraan dan jumlah nominalnya

        DT.Recordset.MoveFirst

        Do Until DT.Recordset.EOF

            If DT.Recordset!Kode <> vbNullString Then

                Dim simpandetail As String

                simpandetail = "insert into detailgaji(NomorSlp,KodePrk,Jumlah) values " & _

                "('" & LblNomorSlp & "','" & DT.Recordset!Kode & "','" & DT.Recordset!Jumlah & "')"

                Conn.Execute (simpandetail)

            End If

            DT.Recordset.MoveNext

        Loop

        Bersihkan

        Form_Activate

        Call CetakLayar

    Else

        DataGrid1.SetFocus

    End If

End If

End Sub

 

Private Sub CmdBatal_Click()

Bersihkan

Form_Activate

End Sub

 

Private Sub CmdTutup_Click()

CmdBatal_Click

Unload Me

End Sub

 

 

Sub CetakLayar()

Tampilkan.Show

Dim MGrs As String

Tampilkan.Font = "Courier New"

'cari data gaji dengan nomor slip terakhir

Call BukaDB

RSGaji.Open "select * from Gaji Where NomorSlp In(Select Max(NomorSlp)From Gaji)Order By NomorSlp Desc", Conn

'cari data kasir yang kodenya ada di tabel gaji

RSKasir.Open "select * from kasir where kodeksr='" & RSGaji!KodeKsr & "'", Conn

RSKasir.Requery

'cari data pegawai yang nip-nya ada di tabel gaji

RSPegawai.Open "select * from pegawai where NIP='" & RSGaji!NIP & "'", Conn

RSPegawai.Requery

Tampilkan.Print

Tampilkan.FontBold = True

Tampilkan.Print

Tampilkan.FontBold = False

'cetak nomor slip,tanggal,nip dan seterusnya

Tampilkan.Print Tab(5); "Nomor Slip :  "; RSGaji!NomorSlp

Tampilkan.Print Tab(5); "Tanggal    :  "; Format(RSGaji!Tanggal, "DD-MMMM-YYYY")

Tampilkan.Print Tab(5); "NIP        :  "; RSGaji!NIP

Tampilkan.Print Tab(5); "Nama       :  "; RSPegawai!NamaPgw

Tampilkan.Print Tab(5); "Kasir      :  "; RSKasir!NamaKsr

MGrs = String$(33, "-")

'cetak isi tabel detailgaji berdasarkan nomor slip terakhir

Tampilkan.Print Tab(5); MGrs

RSDetail.Open "select * from DetailGaji Where NomorSlp In(Select max(NomorSlp)From DetailGaji)", Conn

RSDetail.Requery

'If Not RSDetail.EOF Then

RSDetail.MoveFirst

Do While Not RSDetail.EOF

    'Call BukaDB

    Set RSPerkiraan = New ADODB.Recordset

    RSPerkiraan.Open "select * from Perkiraan where KodePrk='" & RSDetail!KodePrk & "'", Conn

    Tampilkan.Print Tab(5); RSPerkiraan!NamaPrk;

    If Left(RSDetail!KodePrk, 1) = "0" Then

        'jika satu digit awal kode perkirannya 0 maka beri tanda plus (+)

        Tampilkan.Print Tab(25); RKanan(RSDetail!Jumlah, "###,###,### +")

    Else

        'jika satu digit awalnya kode perkiraannya 1 maka deri tanda minus (-)

        Tampilkan.Print Tab(25); RKanan(RSDetail!Jumlah, "###,###,### -")

    End If

    RSDetail.MoveNext

Loop

'End If

Tampilkan.Print Tab(5); MGrs

Tampilkan.Print Tab(5); "Pendapatan :";

'cetak pendatapan

Tampilkan.Print Tab(25); RKanan(RSGaji!Pendapatan, "###,###,### +");

Tampilkan.Print Tab(5); "Potongan   :";

'cetak potongan

Tampilkan.Print Tab(25); RKanan(RSGaji!Potongan, "###,###,### -");

Tampilkan.Print Tab(5); MGrs

Tampilkan.Print Tab(5); "Total      :";

'cetak totalnya (pendapatan -potongan)

If RSGaji!Pendapatan = RSGaji!Potongan Then

    Tampilkan.Print Tab(34); RSGaji!Pendapatan - RSGaji!Potongan

Else

    Tampilkan.Print Tab(25); RKanan(RSGaji!Pendapatan - RSGaji!Potongan, "###,###,### +");

End If

Tampilkan.Print Tab(5); MGrs

Tampilkan.Print

Tampilkan.Print Tab(5); "ESC    = Tutup Form Struk Gaji"

Tampilkan.Print Tab(5); "Enter  = Cetak Ke Printer"

End Sub

 

'meratakan angka di kanan

Private Function RKanan(NData, CFormat) As String

RKanan = Format(NData, CFormat)

RKanan = Space(Len(CFormat) - Len(RKanan)) + RKanan

End Function

Slip Gaji

Untuk dapat menampilkan hasil transaksi ke layar, harus ditambahkan sebuah form baru dengan nama TAMPILKAN (nama form bebas). Contoh slip gajinya adalah sebagai berikut.

Laporan Penggajian

Dalam pembuatan laporan, kita dapat melakukan banyak kreasi diantaranya membuat laporan yang bersifat parsial, artinya laporan dibuat per karyawan atau laporan yang bersifat akumulasi, artinya dalam satu halaman terdapat banyak NIP (karyawan). Buatlah form seperti bentuk di bawah ini.

 

 

Coding:

Private Sub Form_Load()

'buatlah looping untuk bulan dari 1-12

'dan tahun mulai tahun 2001 s/d 2020

For i = 1 To 12

    Combo1.AddItem i

    Combo3.AddItem i

Next i

For i = 1 To 20

    Combo2.AddItem 2000 + i

    Combo4.AddItem 2000 + i

Next i

End Sub

 

Private Sub Combo1_Keypress(Keyascii As Integer)

If Combo1 = "" Or Keyascii = 27 Then Unload Me

End Sub

 

'Lap Bulanan

Private Sub Combo2_Click()

    'buka database

    Call BukaDB

    'cari data yang tanggal dan bulannya dipilih di Combo1 dan Combo2

    RSGaji.Open "select * from Gaji where month(tanggal)='" & Val(Combo1) & "' and year(tanggal)='" & (Combo2) & "'", Conn

    'jika tidak cocok, munculkan pesan

    If RSGaji.EOF Then

        MsgBox "Data tidak ditemukan"

        Exit Sub

        Combo1.SetFocus

    End If

    'jika ditemukan panggil file laporan yang

    'datanya bulannya=Combo1 dan tahunnya= Combo2

    CR.SelectionFormula = "Month({Gaji.Tanggal})=" & Val(Combo1.Text) & " and Year({Gaji.Tanggal})=" & Val(Combo2.Text)

    CR.ReportFileName = App.Path & "\Lap Gaji.rpt"

    CR.WindowState = crptMaximized

    CR.RetrieveDataFiles

    CR.Action = 1

End Sub

 

Private Sub Combo3_Keypress(Keyascii As Integer)

If Combo3 = "" Or Keyascii = 27 Then Unload Me

End Sub

 

'Lap Bulanan

Private Sub combo4_Click()

    'buka database

    Call BukaDB

    'cari data yang tanggal dan bulannya dipilih di Combo1 dan combo4

    RSGaji.Open "select * from Gaji where month(tanggal)='" & Val(Combo3) & "' and year(tanggal)='" & (Combo4) & "'", Conn

    'jika tidak cocok, munculkan pesan

    If RSGaji.EOF Then

        MsgBox "Data tidak ditemukan"

        Exit Sub

        Combo1.SetFocus

    End If

    'jika ditemukan panggil file laporan yang

    'datanya bulannya=Combo1 dan tahunnya= combo4

    CR.SelectionFormula = "Month({Gaji.Tanggal})=" & Val(Combo3.Text) & " and Year({Gaji.Tanggal})=" & Val(Combo4.Text)

    CR.ReportFileName = App.Path & "\Lap Gaji1.rpt"

    CR.WindowState = crptMaximized

    CR.RetrieveDataFiles

    CR.Action = 1

End Sub

 

Dengan program di atas dihasilkan laporan dengan bentuk seperti dua gambar berikut.

 

Rincian Penggajian

Program ini berfungsi untuk melihat kembali data penggajian yang telah disimpan. Buatlah form dengan bentuk seperti gambar di bawah ini.

 

Coding:

Private Sub CmdCetak_KeyPress(Keyascii As Integer)

If Keyascii = 27 Then Unload Me

End Sub

 

Private Sub Combo1_Keypress(Keyascii As Integer)

If Keyascii = 27 Then Unload Me

End Sub

 

Private Sub Form_Load()

Call BukaDB

Combo1.Clear

RSGaji.Open "Select Distinct NomorSlp from Gaji", Conn

 

 

Do Until RSGaji.EOF

    Combo1.AddItem RSGaji!NomorSlp

    RSGaji.MoveNext

Loop

Conn.Close

End Sub

 

Private Sub Combo1_Click()

Call BukaDB

RSGaji.Open "select * from Gaji where NomorSlp='" & Combo1.Text & "'", Conn

RSPegawai.Open "select * from Pegawai where NIP='" & RSGaji!NIP & "'", Conn

If Not RSPegawai.EOF Then

    TxtNIP = RSPegawai!NIP

    TxtNama = RSPegawai!NamaPgw

    TxtBagian = RSPegawai!Bagian

End If

 

DTDetail.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source= " & App.Path & "\ADOGaji.mdb"

DTDetail.RecordSource = "select NamaPrk as [Nama Pembayaran],Jumlah from Perkiraan,DetailGaji where DetailGaji.kodePrk=Perkiraan.kodePrk and NomorSlp='" & Combo1.Text & "'"

Set DataGrid1.DataSource = DTDetail

DTDetail.Refresh

DataGrid1.Refresh

 

TxtPendapatan = Format(GajiKotor, "##,###,###")

TxtPotongan = Format(Potongan, "##,###,###")

TxtTotal = Format(GajiKotor - Potongan, "##,###,###")

Conn.Close

End Sub

 

Function GajiKotor()

    Set RSGajiKotor = New ADODB.Recordset

    RSGajiKotor.Open "Select sum(Jumlah) as TTLPendapatan from DetailGaji where left(kodeprk,1)=0 and NomorSlp='" & Combo1 & "'", Conn

    GajiKotor = RSGajiKotor!TTLPendapatan

End Function

 

Function Potongan()

    Set RSPotongan = New ADODB.Recordset

    RSPotongan.Open "Select sum(Jumlah) as TTLPotongan from DetailGaji where left(kodeprk,1)=1 and NomorSlp='" & Combo1 & "'", Conn

    Potongan = RSPotongan!TTLPotongan

End Function

 

 

Private Sub Bersihkan()

TxtNamaPgw = ""

TxtBagian = ""

TxtPendapatan = ""

TxtPotongan = ""

TxtTotal = ""

End Sub

 

Private Sub CmdBatal_Click()

Bersihkan

Form_Activate

End Sub

 

Private Sub CmdTutup_Click()

CmdBatal_Click

Unload Me

End Sub

 

Private Sub CmdCetak_click()

If Combo1 = "" Then

    MsgBox "Nomor slip gaji kosong"

    Exit Sub

    Combo1.SetFocus

End If

Pesan = MsgBox("Printer sudah siap..?", vbYesNo, "Konfirmasi")

If Pesan = vbYes Then

Dim MGrs As String

Printer.Font = "Courier New"

Call BukaDB

RSGaji.Open "select * from Gaji Where NomorSlp ='" & Combo1 & "'", Conn

RSKasir.Open "select * from kasir where kodeksr='" & RSGaji!KodeKsr & "'", Conn

RSKasir.Requery

RSPegawai.Open "select * from pegawai where NIP='" & RSGaji!NIP & "'", Conn

RSPegawai.Requery

Printer.Print

Printer.FontBold = True

Printer.Print

Printer.FontBold = False

Printer.CurrentX = 0

Printer.CurrentY = 0

Printer.Print Tab(5); "Nomor Slip :  "; RSGaji!NomorSlp

Printer.Print Tab(5); "Tanggal    :  "; Format(RSGaji!Tanggal, "DD-MMMM-YYYY")

Printer.Print Tab(5); "NIP        :  "; RSGaji!NIP

Printer.Print Tab(5); "Nama       :  "; RSPegawai!NamaPgw

Printer.Print Tab(5); "Kasir      :  "; RSKasir!NamaKsr

MGrs = String$(33, "-")

Printer.Print Tab(5); MGrs

 

RSDetail.Open "select * from DetailGaji Where NomorSlp ='" & Combo1 & "'", Conn

RSDetail.Requery

RSDetail.MoveFirst

Do While Not RSDetail.EOF

    Set RSPerkiraan = New ADODB.Recordset

    RSPerkiraan.Open "select * from Perkiraan where KodePrk='" & RSDetail!KodePrk & "'", Conn

    Printer.Print Tab(5); RSPerkiraan!NamaPrk;

    If Left(RSDetail!KodePrk, 1) = "0" Then

        Printer.Print Tab(25); RKanan(RSDetail!Jumlah, "###,###,### +")

    Else

        Printer.Print Tab(25); RKanan(RSDetail!Jumlah, "###,###,### -")

    End If

    RSDetail.MoveNext

Loop

Printer.Print Tab(5); MGrs

Printer.Print Tab(5); "Pendapatan :";

Printer.Print Tab(25); RKanan(RSGaji!Pendapatan, "###,###,### +");

Printer.Print Tab(5); "Potongan   :";

Printer.Print Tab(25); RKanan(RSGaji!Potongan, "###,###,### -");

Printer.Print Tab(5); MGrs

Printer.Print Tab(5); "Total      :";

If RSGaji!Pendapatan = RSGaji!Potongan Then

    Printer.Print Tab(34); RSGaji!Pendapatan - RSGaji!Potongan

Else

    Printer.Print Tab(25); RKanan(RSGaji!Pendapatan - RSGaji!Potongan, "###,###,### +");

End If

Printer.Print Tab(5); MGrs

Printer.Print

Printer.EndDoc

End If

End Sub

 

Private Function RKanan(NData, CFormat) As String

RKanan = Format(NData, CFormat)

RKanan = Space(Len(CFormat) - Len(RKanan)) + RKanan

End Function