Skip to main content

Membuat Fungsi Untuk Menghitung Pajak Penghasilan PPh 21 di MS Access

Mengetahui berapa jumlah pajak penghasilan PPh 21 yang harus dibayarkan oleh seorang wajib pajak adalah hal yang penting. Tarif PPh 21 dipotong dari jumlah Penghasilan Kena Pajak yang dibulatkan ke bawah ke ribuan penuh. Jadi, misalkan jumlah Penghasilan Kena Pajak adalah Rp 12.345.678, maka pembulatan ke bawah ke ribuan penuh menjadi Rp 12.345.000.

Berikut adalah penghasilan dan persentase tarif pajak PPh 21 berdasarkan Pasal 17 ayat (1) huruf a Peraturan Direktur Jenderal Pajak Nomor PER-32/PJ/2015:
  1. Wajib Pajak dengan penghasilan tahunan sampai dengan Rp 50.000.000,- adalah 5%
  2. Wajib Pajak dengan penghasilan tahunan di atas Rp 50.000.000,- sampai dengan Rp 250.000.000,- adalah 15%
  3. Wajib Pajak dengan penghasilan tahunan di atas Rp 250.000.000,- sampai dengan Rp 500.000.000,- adalah 25%
  4. Wajib Pajak dengan penghasilan tahunan di atas Rp 500.000.000,- adalah 30%
  5. Untuk Wajib Pajak yang tidak memiliki NPWP, dikenai tarif 20% lebih tinggi dari mereka yang memiliki NPWP.
Dengan menggunakan tarif pajak PPh 21 sesuai dengan PER-32/PJ/2015, kita bisa membuat sendiri, fungsi untuk menghitung pajak penghasilan PPh 21 di MS Access. Ikuti petunjuk di bawah ini.

Buatlah sebuah tabel. Namailah tabel di Access itu sama dengan tblTarifPajak. Berikut ini adalah nama field dan properti yang dibutuhkan:
  1. Field Name= noLapisan
    1. Data Type= AutoNumber
    2. Caption= Lapisan Nomor
  2. Field Name= jumlahMinimum
    1. Data Type= Currency
    2. Format= Standard
    3. Decimal Places=0
    4. Caption= Jumlah Minimum
  3. Field Name= jumlahMaksimum
    1. Data Type= Currency
    2. Format= Standard
    3. Decimal Places=0
    4. Caption= Jumlah Maksimum
  4. Field Name= pctTarif
    1. Data Type= Number
    2. Field Size= Decimal
    3. Format= Percent
    4. Precision= 7
    5. Scale= 5
    6. Decimal Places= Auto
    7. Caption= Persentase Tarif
  5. Field Name= akumulasiPajak
    1. Data Type= Calculated
    2. Expression= IIf([jumlahMaksimum]=0,0,([jumlahMaksimum]-[jumlahMinimum])*[pctTarif])
    3. Result Type= Currency
    4. Format= Standard
    5. Decimal Places=0
    6. Caption= Jumlah Maksimum
Buka properti tabel dengan cara menekan tombol Property Sheet seperti pada gambar di atas. Lalu, pada bagian Validation Rule, isikan aturan validasinya = [jumlahMaksimum]>[jumlahMinimum] Or jumlahMaksimum=0. Aturlah Validatio Text= Jumlah Maksimum harus lebih besar dari Jumlah Minimum atau sama dengan 0. Validasi pada bagian tabel ini akan berfungsi saat sebuah record selesai di-update.

Setelah selesai mendesain tabel, isikan data berikut ini:
tblTarifPajak
noLapisan Jumlah Minimum Jumlah Maksimum Persentase Tarif
1 0 50.000.000 5%
2 50.000.000 250.000.000 15%
3 250.000.000 500.000.000 25%
4 500.000.000 0.00 30%

Nilai dari tabel di atas diambil dari peraturan perpajakan  sesuai dengan PER-32/PJ/2015. Sampai saat ini, format tarif pajak selalu sama, yaitu terdiri dari beberapa lapisan. Masing-masing lapisan mempunyai batas bawah (jumlah minimum) dan batas atas (jumlah maksimum)  dan persentase tarif yang nilainya disesuaikan (bisa berubah) dengan perkembangan perekonomian nasional. Jadi, bila ada perubahan tarif, kita hanya perlu memperbaharui nilai data setiap lapisan di atas. Kolom/field akumulasiPajak, karena mempunyai tipe data Calculated, nilainya tidak perlu dimasukkan. Kolom itu akan otomatis terisi saat jumlah minimum dan maksimum terisi.

Selanjutnya, kita membuat sebuah modul yang berisi fungsi berikut ini:

Function hitungPPH21(lngRupiah As Currency) As Currency
  Dim dbs As DAO.Database
  Dim rs As DAO.Recordset
  Dim lngSisa, lngJumlahMinimum, lngAkumulasiPajak As Currency
  Dim lngAkumulasiPajakAkhir, lngAkumulasiPajak1, lngPPH As Currency
  Dim sglTarif As Single
  Set dbs = CurrentDb
  If dbs.OpenRecordset("SELECT COUNT(akumulasiPajak) FROM tblTarifPajak WHERE akumulasiPajak=0", dbOpenSnapshot).Fields(0).Value <> 1 Then
      MsgBox "Ada kesalahan dalam penyusunan daftar tarif PPH", vbCritical
      hitungPPH21 = 0
      Exit Function
  End If
  Set rs = dbs.OpenRecordset("SELECT * FROM tblTarifPajak ORDER BY jumlahMinimum", dbOpenSnapshot)
  lngAkumulasiPajak = 0
  lngAkumulasiPajak1 = 0
  Do While Not rs.EOF
      lngJumlahMinimum = rs.Fields("jumlahMinimum").Value
      If lngRupiah > rs.Fields("jumlahMinimum").Value Then
          lngSisa = lngRupiah - rs.Fields("jumlahMinimum").Value
          sglTarif = rs.Fields("pctTarif").Value
          lngPPH = lngSisa * sglTarif
          If rs.Fields("akumulasiPajak").Value <> 0 Then
              If lngPPH < rs.Fields("akumulasiPajak").Value Then
                  lngAkumulasiPajak = lngAkumulasiPajak1 + lngPPH
              Else
                  lngAkumulasiPajak = lngAkumulasiPajak + rs.Fields("akumulasiPajak").Value
                  lngAkumulasiPajak1 = lngAkumulasiPajak
              End If
          Else
              lngAkumulasiPajak = lngAkumulasiPajak + lngPPH
          End If
      End If
      lngAkumulasiPajakAkhir = rs.Fields("akumulasiPajak").Value
      rs.MoveNext
  Loop
  If lngAkumulasiPajakAkhir <> 0 Then
      MsgBox "Ada kesalahan dalam penyusunan daftar tarif PPH", vbCritical
      hitungPPH21 = 0
      Exit Function
  End If
  hitungPPH21 = lngAkumulasiPajak
End Function


Simpanlan modul di atas dengan nama sesuai selera. Kita dapat menjalankan fungsi hitungPPH21 pada sebuah form seperti gambar di atas. Bila fungsi itu dijalankan di Immediate Window, maka hasilnya adalah sebagai berikut.
?hitungPPH21 (250000000)
 32500000 

Comments

  1. Hasil hitungpph21 nya #Name? ada error dimana yah

    ReplyDelete

Post a Comment

Posting Terpopuler

Format Untuk Field Dengan Tipe Data Number dan Currency di MS Access

Normalisasi, Denormalisasi, dan Anomali Database