widgets

Jumat, 26 Juli 2013

Desain Query Ms-Access pada Aplikasi Payroll

pada lanjutan posting mengenai aplikasi payroll kali ini kita akan membahas query yang dirancang untuk mendukung aplikasi Payroll.

Ada 7 query yang dirancang atau dibuat yaitu:

1. Karyawan_Qry

Karyawan_Qry adalah query untuk menggabungkan tabel-tabel Karyawan, Departemen, Cabang dan Jabatan. Perintah query pada Karyawan_Qry adalah sebagai berikut:

SELECT
Karyawan.NOMOR_INDUK,
Karyawan.NAMA,
Karyawan.TANGGAL_LAHIR,
Karyawan.JENIS_KELAMIN,
Karyawan.STATUS_PERNIKAHAN,
Karyawan.JUMLAH_ANAK,
Departemen.NAMA_DEPARTEMEN,
Jabatan.NAMA_JABATAN,
Jabatan.LEVEL_JABATAN,
Cabang.NAMA_CABANG,
Karyawan.PENDIDIKAN_TERAKHIR,
Karyawan.GAJI_POKOK,
Karyawan.TANGGAL_DIANGKAT,
(Date()-[TANGGAL_LAHIR])/365 AS UMUR,
(Date()-[TANGGAL_DIANGKAT])/365 AS LAMA_KERJA,
Karyawan.TANGGAL_KELUAR,
Jabatan.TUNJANGAN_JABATAN,
Karyawan.NAMA_BANK,
Karyawan.NOMOR_REKENING,
Karyawan.REKENING_ATAS_NAMA
FROM Departemen
  INNER JOIN (
    Jabatan INNER JOIN (
      Cabang INNER JOIN
        Karyawan ON Cabang.[KODE_CABANG] = Karyawan.[KODE_CABANG])
           ON Jabatan.[KODE_JABATAN] = Karyawan.[KODE_JABATAN])
              ON Departemen.KODE_DEPARTEMEN = Karyawan.KODE_DEPARTEMEN
WHERE (((Karyawan.TANGGAL_KELUAR) Is Null));


Pada query Karyawan_Qry, selain kita menampilkan field-field data yang telah ada di tabel Karyawan, Departemen, Jabatan dan Cabang, kita juga menampilkan data umur karyawan dan masa kerja karyawan.

Umur karyawan diperoleh dari rumus pada query: 
(Date()-[TANGGAL_LAHIR])/365 AS UMUR
Keterangan: rumus ini artinya menghitung selisih jumlah hari dari tanggal saat ini dengan data tanggal lahir karyawan dibagi 365

Masa kerja diperoleh dari rumus pada query: 
(Date()-[TANGGAL_DIANGKAT])/365 AS LAMA_KERJA
Keterangan: rumus ini artinya menghitung selisih jumlah hari dari tanggal saat ini dengan data tanggal karyawan diangkat sebagai karyawan dibagi 365


2. Lembur_Qry

Query Lembur_Qry adalah query untuk menghitung jumlah uang lembur setiap karyawan yang melaksanakan kerja lembur dalam satu bulan periode kerja.

SELECT
Lembur.NOMOR_INDUK,
Std_Hari_Kerja.TAHUN,
Std_Hari_Kerja.BULAN,
Lembur.JUMLAH_JAM_LEMBUR,
Karyawan.GAJI_POKOK,
Round([Lembur].[JUMLAH_JAM_LEMBUR]/172*[Karyawan].[GAJI_POKOK],0) AS UANG_LEMBUR
FROM Karyawan
  INNER JOIN (
    Lembur INNER JOIN
      Std_Hari_Kerja ON (Lembur.TAHUN = Std_Hari_Kerja.TAHUN)
          AND (Lembur.BULAN = Std_Hari_Kerja.BULAN))
            ON Karyawan.NOMOR_INDUK = Lembur.NOMOR_INDUK;

Nilai uang lembur diperoleh dari rumus paad query:
Round([Lembur].[JUMLAH_JAM_LEMBUR]/172*[Karyawan].[GAJI_POKOK],0) AS UANG_LEMBUR
Keterangan: Jumlah jam lembur dalam 1 bulan dibagi 172 dikali dengan gaji pokok.
Angka 172 ini adalah sebagai salah satu contoh kebijakan perusahaan yang menganggap dalam 1 bulan karyawan bekerja selama 172 jam.


3. Hari_Kerja_Qry

Query Hari_Kerja_Qry adalah query yang berisi data jumlah hari kerja karyawan. Jumlah hari kerja karyawan ada di kolom HAKER.

SELECT
Cuti.NOMOR_INDUK,
Std_Hari_Kerja.TAHUN,
Std_Hari_Kerja.BULAN,
Std_Hari_Kerja.JUMLAH_HARI_KERJA AS STD_HAKER,
Cuti.JUMLAH_CUTI AS CUTI,
[Std_Hari_Kerja].[JUMLAH_HARI_KERJA]-[Cuti].[JUMLAH_CUTI] AS HAKER,
Cabang.UANG_MAKAN,
[HAKER]*[Cabang].[UANG_MAKAN] AS UANG_MAKAN_TOTAL
FROM (Cabang
  INNER JOIN Karyawan
   ON Cabang.KODE_CABANG = Karyawan.KODE_CABANG)
    INNER JOIN (Cuti INNER JOIN Std_Hari_Kerja
     ON (Cuti.TAHUN = Std_Hari_Kerja.TAHUN)
      AND (Cuti.BULAN = Std_Hari_Kerja.BULAN))
       ON Karyawan.NOMOR_INDUK = Cuti.NOMOR_INDUK
ORDER BY Std_Hari_Kerja.TAHUN, Std_Hari_Kerja.BULAN;

Jumlah hari kerja karyawan dihitung dalam query dengan rumus:
[Std_Hari_Kerja].[JUMLAH_HARI_KERJA]-[Cuti].[JUMLAH_CUTI] AS HAKER
Artinya jumlah standard hari kerja dikurangi jumlah cuti, itulah hari kerja pada bulan tersebut. Data ini digunakan untuk menghitung jumlah uang makan yang harus dibayar kepada karyawan.
Ini rumus perhitungan jumlah uang makan pada query tersebut:
[HAKER]*[Cabang].[UANG_MAKAN] AS UANG_MAKAN_TOTAL

4. Hitung_Gaji_Qry

Query Hitung_Gaji_Qry adalah query untuk perhitungan gaji karyawan.

SELECT
Gaji.NOMOR_INDUK,
Gaji.BULAN,
Gaji.TAHUN,
Gaji.GAJI_POKOK,
Gaji.TUNJANGAN_JABATAN,
Gaji.UANG_MAKAN,
Gaji.UANG_LEMBUR,
[GAJI_POKOK]+[TUNJANGAN_JABATAN]+[UANG_MAKAN]+[UANG_LEMBUR] AS GAJI_KOTOR,
Gaji.PERSEN_POT_PPH,
Gaji.PTKP, 
Round(([GAJI_KOTOR]-[PTKP])*[PERSEN_POT_PPH]/100) AS POT_PPH,
Gaji.PERSEN_POT_JAMSOSTEK,
Gaji.POT_LAIN_LAIN,
[GAJI_POKOK]*[PERSEN_POT_JAMSOSTEK]/100 AS POT_JAMSOSTEK,
[GAJI_KOTOR]-[POT_PPH]-[POT_JAMSOSTEK]-[POT_LAIN_LAIN] AS GAJI_BERSIH
FROM Gaji;

Untuk menghitung gaji kotor dihitung dengan rumus:
[GAJI_POKOK]+[TUNJANGAN_JABATAN]+[UANG_MAKAN]+[UANG_LEMBUR] AS GAJI_KOTOR
Untuk menghitung potongan pajak penghasilan dihitung dengan rumus:
Round(([GAJI_KOTOR]-[PTKP])*[PERSEN_POT_PPH]/100) AS POT_PPH
Untuk menghitung potongan jamsostek dengan rumus:
[GAJI_POKOK]*[PERSEN_POT_JAMSOSTEK]/100 AS POT_JAMSOSTEK
Untuk menghitung gaji bersih dihitung dengan rumus:
[GAJI_KOTOR]-[POT_PPH]-[POT_JAMSOSTEK]-[POT_LAIN_LAIN] AS GAJI_BERSIH


5. Gaji_Prepare_Qry

Query Gaji_Prepare_Qry adalah query untuk persiapan perhitungan gaji karyawan. Query Gaji_Prepare_Query mengambil source dari query Karyawan_Qry, Hari_Kerja_Qry dan Lembur_Qry. 

SELECT
Karyawan_Qry.*,
Hari_Kerja_Qry.BULAN,
Hari_Kerja_Qry.TAHUN,
Hari_Kerja_Qry.HAKER,
Hari_Kerja_Qry.UANG_MAKAN_TOTAL AS UANG_MAKAN,
Lembur_Qry.JUMLAH_JAM_LEMBUR AS JAM_LEMBUR,
Lembur_Qry.UANG_LEMBUR,
Potongan_Lain_Lain.JUMLAH AS POT_LAIN_LAIN
FROM ((Karyawan_Qry
  LEFT JOIN Hari_Kerja_Qry
   ON Karyawan_Qry.NOMOR_INDUK = Hari_Kerja_Qry.NOMOR_INDUK)
    LEFT JOIN Lembur_Qry
     ON Karyawan_Qry.NOMOR_INDUK = Lembur_Qry.NOMOR_INDUK)
      LEFT JOIN Potongan_Lain_Lain
       ON Karyawan_Qry.NOMOR_INDUK = Potongan_Lain_Lain.NOMOR_INDUK;


6. Periode_Gaji_Qry

Query Periode_Gaji_Qry adalah query untuk menampilkan data bulan dan tahun transaksi gaji yang sudah pernah diproses. Query ini berfungsi untuk mencegah pemrosesan gaji yang sudah ada. Aplikasi akan memberi tahu user bahwa bulan dan tahun periode gaji sudah pernah diproses atau belum. 

SELECT
Gaji.TAHUN,
Gaji.BULAN,
Count(Gaji.NOMOR_INDUK) AS JML_KARYAWAN
FROM Gaji
GROUP BY Gaji.TAHUN, Gaji.BULAN;



7. Cetak_Slip_Gaji_Qry

Query Cetak_Slip_Gaji_Qry adalah query sumber data untuk mencetak slip gaji karyawan.

SELECT
Gaji.NOMOR_INDUK,
Karyawan.NAMA,
Gaji.BULAN,
Gaji.TAHUN,
Gaji.JABATAN,
Gaji.CABANG,
Gaji.DEPARTEMEN,
Gaji.GAJI_POKOK,
Gaji.TUNJANGAN_JABATAN,
Gaji.TUNJANGAN_KELUARGA,
Gaji.UANG_MAKAN,
Gaji.UANG_LEMBUR,
[Gaji].[GAJI_POKOK]+[TUNJANGAN_JABATAN]+[TUNJANGAN_KELUARGA]+[UANG_MAKAN]+[UANG_LEMBUR] AS GAJI_KOTOR,
Gaji.PTKP,
([GAJI_KOTOR]-[PTKP])*[PERSEN_POT_PPH]/100 AS POTONGAN_PPH,
[Gaji].[GAJI_POKOK]*[PERSEN_POT_JAMSOSTEK]/100 AS POTONGAN_JAMSOSTEK,
Gaji.POT_LAIN_LAIN,
[POTONGAN_PPH]+[POTONGAN_JAMSOSTEK]+[POT_LAIN_LAIN] AS TOTAL_POTONGAN,
Gaji.NAMA_BANK,
Gaji.NOMOR_REKENING,
Gaji.REKENING_ATAS_NAMA,
[GAJI_KOTOR]-[TOTAL_POTONGAN] AS GAJI_BERSIH
FROM Karyawan INNER JOIN Gaji
ON Karyawan.NOMOR_INDUK = Gaji.NOMOR_INDUK;

1 komentar:

  1. Maaf pak saya ada keluhan mengenai datasheet. pada table datasheet, contoh jika penomoran telah di lakukan maka setelah enter apakah bisa data yang lama menjadi no 2 sedangkan data baru menjadi 1.. terimah kasih sebelumnya

    BalasHapus