DAFTAR PUSTAKA
Berntson, Craig. “Using Windows Component Services (COM+) with Visual FoxPro”, 3M Health Information Systems, Salt Lake City, 2005.
Chafee, A. (2000). One, two, three, or n tiers? Should you hold back the tiers of your application?. [online].
http://www.javaworld.com/javaworld/jw-01-2000/jw-01-ssj-tiers-p2.html.
Diakses terakhir 10 Mei 2011.
Connoly, Thomas M. dan Begg, Carolyn, E. “Database Systems a Practical Approach to Design, Implementation and Management” , Addison Wesley, 2
ndedition , New York , 2002.
Kurniawan, Agus. “Pemrograman COM, DCOM dan COM+ dengan Visual Basic 6.0” : Elex Media Komputindo , Jakarta, 2003
Open Project. Computer Software Definition. [online].
http://www.openprojects.org/index.htm. Diakses terakhir 05 Mei 2011.
PERATURAN DIREKTUR JENDERAL PAJAK NOMOR 57/PJ/2009 TANGGAL 12 OKTOBER 2009 Tentang Perubahan Atas Peraturan Direktur Jenderal Pajak Nomor Per-31/pj/2009 Tentang Pedoman Tekhnis Tata Cara Pemotongan, Penyetoran Dan Pelaporan Pajak Penghasilan Pasal 21 Dan/atau Pajak Penghasilan Pasal 26 Sehubungan Dengan Pekerjaan, Jasa Dan Kegiatan Orang Pribadi
Pressman, Roger. “Software Engineering - A Practitionar's Approach” , McGraw-Hill Science/Engineering/Math, 7th Edition , New York , 2010.
Supardi, Yuniar. “Semua Bisa Menjadi Programer Visual Foxpro 9.0” : Elex Media Komputindo, Jakarta, 2010.
Tamsil, Raymond. “Aplikasi Pengisian SPT masa PPh Pasal 21 dan atau 26, SPT
Tahunan 1770 S & 1770 SS dan Rekonsiliasi Biaya Gaji” : Mitra Wacana Media,
Jakarta, 2010.
LAMPIRAN 1
Lampiran Hasil pengujian black box perhitungan pajak PPh21
a. Percobaan 1
b. Percobaan 2
c. Percobaan 3
d. Percobaan 4
e. Percobaan 5
LAMPIRAN 2 Source Program
DEFINE CLASS bizproses AS SESSION OLEPUBLIC PROCEDURE INIT()
close database set sysmenu on
set exclusive OFF set talk OFF set delete on set escape OFF set safety OFF set date ITALIAN
set exclusive OFF set exact OFF set century ON SET CONSOLE OFF
SET NULLDISPLAY TO '' SET ESCAPE OFF
*SET DEFAULT TO 'G:\MY COLLEGE\SKRIPSI\APLIKASI\com dbf\data' SET DEFAULT TO 'D:\datacom'
SET PATH TO data,;
prgs,;
class,;
bitmap,;
icon,;
forms,;
menu
ENDPROC
* --- PERUSAHAAN ---
PROCEDURE prsh_insert(tcxml AS STRING) AS STRING LOCAL llretval
XMLTOCURSOR(tcXML, "cPerusahaan") SELECT cPerusahaan
SCATTER MEMVAR m.id_prsh = 'ABC123'
SELECT 0 USE mst_prsh APPEND BLANK GATHER MEMVAR USE IN mst_prsh
RETURN '.t.' ENDPROC
PROCEDURE prsh_update(tcxml AS STRING) AS STRING
LOCAL llretval
XMLTOCURSOR(tcXML, "cPerusahaan") SELECT cPerusahaan
SCATTER MEMVAR
SELECT 0
USE mst_prsh GO TOP
IF !EOF() OR !BOF() GATHER MEMVAR USE IN mst_prsh
RETURN '.t.'
ELSE
USE IN mst_prsh
RETURN '.f.' ENDIF
ENDPROC
PROCEDURE prsh_delete(tcxml AS STRING) AS STRING LOCAL llretval
SELECT 0 USE mst_prsh GO TOP
IF !EOF() OR !BOF() DELETE USE IN mst_prsh
RETURN '.t.' ELSE
USE IN mst_prsh
RETURN '.f.' ENDIF
ENDPROC
PROCEDURE prsh_cari(tNRK AS STRING) AS STRING LOCAL llretval, lcXML
SELECT 0 USE mst_prsh
SELECT * FROM mst_prsh WHERE id_prsh = ALLTRIM(tnrk) INTO CURSOR abc USE IN mst_prsh
CURSORTOXML("abc", "lcXML", 1, 0, 0, "1") llretval = lcXML
USE IN abc
RETURN llretval ENDPROC
* --- PEGAWAI ---
PROCEDURE peg_cari(tNRK AS STRING) AS STRING LOCAL llretval, lcXML
SELECT 0
USE mst_pegawai
SELECT * FROM mst_pegawai WHERE nrk= ALLTRIM(tnrk) INTO CURSOR abc READWRITE
USE IN mst_pegawai IF RECCOUNT('abc') = 0
SELECT abc APPEND BLANK
REPLACE tgl_lahir WITH DATE() REPLACE sex WITH 'L'
REPLACE stat_kary WITH '2' REPLACE status_pjk WITH 'K/-' ENDIF
CURSORTOXML("abc", "lcXML", 1, 0, 0, "1") llretval = lcXML
USE IN abc
RETURN llretval ENDPROC
PROCEDURE peg_insert(tcxml AS STRING) AS STRING LOCAL llretval
XMLTOCURSOR(tcXML, "mst_peg") SELECT mst_peg
SCATTER MEMVAR
m.id_pegawai = SYS(2015)
SELECT 0
USE mst_pegawai APPEND BLANK GATHER MEMVAR USE IN mst_pegawai
RETURN '.t.' ENDPROC
PROCEDURE peg_update(tcxml AS STRING) AS STRING
LOCAL llretval
XMLTOCURSOR(tcXML, "mst_pegawai") SELECT mst_pegawai
SCATTER MEMVAR USE IN mst_pegawai
SELECT 0
USE mst_pegawai GO TOP
LOCATE FOR id_pegawai = m.id_pegawai IF !EOF() OR !BOF()
GATHER MEMVAR USE IN mst_pegawai
RETURN '.t.' ELSE
USE IN mst_pegawai RETURN '.f.' ENDIF
ENDPROC
PROCEDURE peg_delete(tcxml AS STRING) AS STRING
LOCAL llretval
XMLTOCURSOR(tcXML, "mst_pegawai") SELECT mst_pegawai
SCATTER MEMVAR USE IN mst_pegawai
SELECT 0
USE mst_pegawai GO TOP
LOCATE FOR id_pegawai = m.id_pegawai IF !EOF() OR !BOF()
DELETE
USE IN mst_pegawai RETURN '.t.' ELSE
USE IN mst_pegawai RETURN '.f.' ENDIF
ENDPROC
* --- GAJIAN ---
PROCEDURE gaji_cari(tNRK AS STRING, tBULAN AS Number, ; tTAHUN AS Number ) AS STRING
LOCAL llretval, lcXML, tid_peg tid_peg = ''
SELECT 0
USE mst_pegawai
SELECT * FROM mst_pegawai WHERE nrk= ALLTRIM(tnrk) INTO CURSOR abc IF RECCOUNT('abc')= 0
tid_peg = '@#$' ELSE
tid_peg = NVL(abc.id_pegawai,' ') ENDIF
USE IN mst_pegawai USE IN abc
SELECT 0
USE gajian
SELECT * FROM gajian WHERE id_pegawai= ALLTRIM(tid_peg) ;
AND bulan = tBULAN ; AND tahun = tTAHUN ;
INTO CURSOR abc USE IN gajian
CURSORTOXML("abc", "lcXML", 1, 0, 0, "1") llretval = lcXML
USE IN abc
RETURN llretval ENDPROC
PROCEDURE gaji_insert(tcxml AS STRING) AS STRING LOCAL llretval
XMLTOCURSOR(tcXML, "tmpgajian") SELECT tmpgajian
SCATTER MEMVAR
m.id_gajian = SYS(2015)
SELECT 0 USE gajian APPEND BLANK GATHER MEMVAR USE IN gajian
RETURN '.t.' ENDPROC
PROCEDURE gaji_update(tcxml AS STRING) AS STRING LOCAL llretval
XMLTOCURSOR(tcXML, "tmpgajian") SELECT tmpgajian
SCATTER MEMVAR USE IN tmpgajian
SELECT 0 USE gajian GO TOP
LOCATE FOR id_gajian = m.id_gajian GATHER MEMVAR
USE IN gajian
RETURN '.t.' ENDPROC
PROCEDURE gaji_delete(tcxml AS STRING) AS STRING LOCAL llretval
XMLTOCURSOR(tcXML, "tmpgajian") SELECT tmpgajian
SCATTER MEMVAR USE IN tmpgajian
SELECT 0 USE gajian
GO TOP
LOCATE FOR id_gajian = m.id_gajian DELETE
USE IN gajian
RETURN '.t.' ENDPROC
* --- hitung PPH21 ---
PROCEDURE cari_pegawai as String LOCAL llretval, lcXML
SELECT 0
USE mst_pegawai
SELECT * FROM mst_pegawai INTO CURSOR abc USE IN mst_pegawai
CURSORTOXML("abc", "lcXML", 1, 0, 0, "1") llretval = lcXML
USE IN abc
RETURN llretval
ENDPROC
*** pegawai yg tidak ada di gajian..
*** default ambil di data pegawai untuk gapoknya
*** simpan di gajian
PROCEDURE hitung_pph( tid_peg AS STRING, ; tBULAN AS Number, ; tTAHUN AS Number, ;
turut AS Number ) AS STRING
** ambil data pegawai SELECT 0
USE mst_pegawai
SELECT * FROM mst_pegawai ;
WHERE id_pegawai= ALLTRIM(tid_peg) INTO CURSOR tmppeg USE IN mst_pegawai
* cek gajian SELECT 0 USE gajian
SELECT * FROM gajian WHERE id_pegawai= ALLTRIM(tid_peg) ;
AND bulan = tBULAN ; AND tahun = tTAHUN ;
INTO CURSOR tmpgaji
* rekap pajak
*!* SELECT 0
*!* USE byrpph
*!* SET ORDER TO 1
SELECT tmpgaji
IF RECCOUNT('tmpgaji') = 0
* tambah di table gajian SELECT gajian
APPEND BLANK
REPLACE no_urut WITH turut REPLACE bulan WITH tbulan REPLACE tahun WITH ttahun REPLACE id_gajian WITH SYS(2015)
REPLACE gapok WITH tmppeg.gapok REPLACE id_pegawai WITH tid_peg
REPLACE status_pjk WITH tmppeg.status_pjk
REPLACE stat_kary WITH tmppeg.stat_kary ELSE
SELECT gajian GO TOP
LOCATE FOR id_gajian = tmpgaji.id_gajian REPLACE no_urut WITH turut
ENDIF
LOCAL lv_pphthp1, lv_pphthp2, lv_pphthp3
LOCAL lv_gapok, lv_bonus, lv_thr, lv_premijkk, ; lv_premijk, lv_tujpajak,;
lv_bruto , lv_lembur, lv_obat,;
lv_sisapkp, lv_pphsthn, lv_pphsbln, ; lv_pph1, lv_pph2, lv_pph3, lv_pph4,;
lv_bijabat, lv_jht, lv_pensiun, lv_cdt, ; lv_koperasi, lv_lain, lv_kurang, lv_netto,;
lv_ptkp, lv_pkpgj,lv_pkpgjbns, lv_pphbonus, ; lv_pphgajibln, lv_pphbruto
**
======================================================================================
** step 1 : pph gaji + bonus / thr (setahun) **
=====================================================================================
STORE 0 TO lv_gapok, lv_bonus, lv_thr, lv_premijkk, lv_premijk, lv_tujpajak,;
lv_bruto , lv_lembur, lv_obat,;
lv_sisapkp, lv_pphsthn, lv_pphsbln, lv_pph1, lv_pph2, lv_pph3, lv_pph4,;
lv_bijabat, lv_jht, lv_pensiun, lv_cdt, lv_koperasi, lv_lain, lv_kurang, lv_netto,;
lv_ptkp, lv_pkp, lv_pkpgjbns , lv_pkpgj, lv_pphthp1
*--- penghasilan bruto ---
&&IF tmpgaji.bonus <> 0
lv_gapok = tmpgaji.gapok * 12 lv_bonus = tmpgaji.bonus lv_thr = tmpgaji.thr lv_lembur = tmpgaji.lembur lv_obat = tmpgaji.obat
lv_premijkk = ( 0.5 / 100 ) * lv_gapok
&& 0.5% dari gapok dbyr prsh lv_premijk = ( 0.3 /100 ) * lv_gapok
&& 0.3% dari gapok dbyr prsh
lv_tujpajak = (250000 * 12 )
&& perusahaan
lv_bruto = lv_gapok + ;
lv_bonus + ;
lv_thr + ;
lv_lembur + ;
lv_obat + ;
lv_premijkk + ;
lv_premijk + ;
lv_tujpajak
*--- Pengurang ---
lv_cdt = tmpgaji.pot_cdt lv_koperasi = tmpgaji.pot_kop lv_lain = tmpgaji.pot_lain
lv_bijabat = ( (5/100) * lv_gapok ) IF lv_bijabat > 108000
lv_bijabat = 108000 * 12 ELSE
lv_bijabat = lv_bijabat * 12 ENDIF
lv_pensiun = 100000 * 12 lv_jht = 200000 * 12
lv_kurang = lv_cdt + ;
lv_koperasi + ;
lv_lain + ;
lv_bijabat + ;
lv_pensiun + ;
lv_jht
lv_netto = lv_bruto - lv_kurang && SETAHUN
*--- PTKP ---
*!* status : K/-,K/1,K/2,K/3,K/I/-,K/I/1,K/I/2,K/I/3,TK/-,TK/1
*!* 1. Tidak Kawin (TK/-)--- Rp 15.480.000,-
*!* 2. Tidak Kawin (TK/1)--- Rp 16.800.000,-
*!* 3. Kawin + anak 0 (K/-)--- Rp. 16.800.000,-
*!* 4. Kawin + anak 1 (K/1)--- Rp. 18.120.000,-
*!* 5. Kawin + anak 2 (K/2)--- Rp. 19.440.000,-
*!* 6. Kawin + anak 3 (K/3)--- Rp. 20.760.000,-
*!* 7. Kawin + istri + anak 0 (K/-)--- Rp. 32.280.000,-
*!* 8. Kawin + istri + anak 1 (K/1)--- Rp. 33.600.000,-
*!* 9. Kawin + istri + anak 2 (K/2)--- Rp. 34.920.000,-
*!*10. Kawin + istri + anak 3 (K/3)--- Rp. 36.240.000,-
DO CASE
CASE tmppeg.status_pjk = 'TK/-'
lv_ptkp = 15840000
CASE tmppeg.status_pjk = 'TK/1'
lv_ptkp = 16800000
CASE tmppeg.status_pjk = 'K/-'
lv_ptkp = 16800000
CASE tmppeg.status_pjk = 'K/1'
lv_ptkp = 18120000
CASE tmppeg.status_pjk = 'K/2'
lv_ptkp = 19440000
CASE tmppeg.status_pjk = 'K/3'
lv_ptkp = 20760000
CASE tmppeg.status_pjk = 'K/I/-'
lv_ptkp = 32280000
CASE tmppeg.status_pjk = 'K/I/1'
lv_ptkp = 33600000
CASE tmppeg.status_pjk = 'K/I/2'
lv_ptkp = 34920000
CASE tmppeg.status_pjk = 'K/I/3'
lv_ptkp = 36240000
ENDCASE
* kalau net setahun tidak melebihi ptkp
* tidak ada pajak
IF lv_netto < lv_ptkp
lv_ptkp = lv_netto ENDIF
*--- PKP --- lv_pkpgjbns = lv_netto - lv_ptkp
*--- PPH 21 ---
DO CASE
CASE lv_pkpgjbns <= 50000000
lv_pphsthn = 0.05 * lv_pkp
CASE BETWEEN(lv_pkpgjbns, 50000001,250000000) lv_pph1 = 50000000 * 0.05
lv_pph2 = ( lv_pkpgjbns- 50000000 ) * 0.15 lv_pphsthn = lv_pph1 + lv_pph2
CASE BETWEEN(lv_pkpgjbns,250000001,500000000) lv_pph1 = 50000000 * 0.05 lv_pph2 = 200000000 * 0.15
lv_pph3 = ( lv_pkpgjbns- 250000000 ) * 0.25 lv_pphsthn = lv_pph1 + lv_pph2 + lv_pph3
CASE lv_pkpgjbns > 500000000
lv_pph1 = 50000000 * 0.05 lv_pph2 = 200000000 * 0.15 lv_pph3 = 250000000 * 0.25
lv_pph4 = ( lv_pkpgjbns- 500000000 ) * 0.3 lv_pphsthn = lv_pph1 + lv_pph2 + lv_pph3 + lv_pph4 ENDCASE
lv_pphthp1 = lv_pphsthn
&&ENDIF
**
======================================================================================
** step 2 : pph gaji (setahun)
**
======================================================================================
STORE 0 TO lv_gapok, lv_bonus, lv_thr, lv_premijkk, lv_premijk, lv_tujpajak,;
lv_bruto , lv_lembur, lv_obat,;
lv_sisapkp, lv_pphsthn, lv_pphsbln, lv_pph1, lv_pph2, lv_pph3, lv_pph4,;
lv_bijabat, lv_jht, lv_pensiun, lv_cdt, lv_koperasi, lv_lain, lv_kurang, lv_netto,;
lv_ptkp, lv_pkp
*--- penghasilan bruto ---
lv_gapok = tmpgaji.gapok * 12
lv_bonus = 0
lv_thr = tmpgaji.thr lv_lembur = tmpgaji.lembur lv_obat = tmpgaji.obat
lv_premijkk = ( 0.5 / 100 ) * lv_gapok
&& 0.5% dari gapok dbyr prsh lv_premijk = ( 0.3 /100 ) * lv_gapok
&& 0.3% dari gapok dbyr prsh lv_tujpajak = (250000 * 12 )
&& perusahaan
lv_bruto = lv_gapok + ;
lv_bonus + ;
lv_thr + ;
lv_lembur + ;
lv_obat + ;
lv_premijkk + ;
lv_premijk + ;
lv_tujpajak
*--- Pengurang ---
lv_cdt = tmpgaji.pot_cdt lv_koperasi = tmpgaji.pot_kop lv_lain = tmpgaji.pot_lain
lv_bijabat = ( (5/100) * lv_gapok ) IF lv_bijabat > 108000
lv_bijabat = 108000 * 12 ELSE
lv_bijabat = lv_bijabat * 12 ENDIF
lv_pensiun = 100000 * 12 lv_jht = 200000 * 12
lv_kurang = lv_cdt + ;
lv_koperasi + ;
lv_lain + ;
lv_bijabat + ;
lv_pensiun+;
lv_jht
lv_netto = lv_bruto - lv_kurang && SETAHUN
*--- PTKP ---
*!* status : K/-,K/1,K/2,K/3,K/I/-,K/I/1,K/I/2,K/I/3,TK/-,TK/1
*!* 1. Tidak Kawin (TK/-)--- Rp 15.480.000,-
*!* 2. Tidak Kawin (TK/1)--- Rp 16.800.000,-
*!* 3. Kawin + anak 0 (K/-)--- Rp. 16.800.000,-
*!* 4. Kawin + anak 1 (K/1)--- Rp. 18.120.000,-
*!* 5. Kawin + anak 2 (K/2)--- Rp. 19.440.000,-
*!* 6. Kawin + anak 3 (K/3)--- Rp. 20.760.000,-
*!* 7. Kawin + istri + anak 0 (K/-)--- Rp. 32.280.000,-
*!* 8. Kawin + istri + anak 1 (K/1)--- Rp. 33.600.000,-
*!* 9. Kawin + istri + anak 2 (K/2)--- Rp. 34.920.000,-
*!*10. Kawin + istri + anak 3 (K/3)--- Rp. 36.240.000,-
DO CASE
CASE tmppeg.status_pjk = 'TK/-'
lv_ptkp = 15840000
CASE tmppeg.status_pjk = 'TK/1'
lv_ptkp = 16800000
CASE tmppeg.status_pjk = 'K/-'
lv_ptkp = 16800000
CASE tmppeg.status_pjk = 'K/1'
lv_ptkp = 18120000
CASE tmppeg.status_pjk = 'K/2'
lv_ptkp = 19440000
CASE tmppeg.status_pjk = 'K/3'
lv_ptkp = 20760000
CASE tmppeg.status_pjk = 'K/I/-'
lv_ptkp = 32280000
CASE tmppeg.status_pjk = 'K/I/1'
lv_ptkp = 33600000
CASE tmppeg.status_pjk = 'K/I/2'
lv_ptkp = 34920000
CASE tmppeg.status_pjk = 'K/I/3'
lv_ptkp = 36240000
ENDCASE
* kalau net setahun tidak melebihi ptkp
* tidak ada pajak
IF lv_netto < lv_ptkp
lv_ptkp = lv_netto ENDIF
*--- PKP --- lv_pkpgj = lv_netto - lv_ptkp
*--- PPH 21 --- DO CASE
CASE lv_pkpgj <= 50000000
lv_pphsthn = 0.05 * lv_pkp CASE BETWEEN(lv_pkpgj ,50000001,250000000)
lv_pph1 = 50000000 * 0.05
lv_pph2 = ( lv_pkpgj - 50000000 ) * 0.15
lv_pphsthn = lv_pph1 + lv_pph2 CASE BETWEEN(lv_pkpgj ,250000001,500000000)
lv_pph1 = 50000000 * 0.05 lv_pph2 = 200000000 * 0.15
lv_pph3 = ( lv_pkpgj - 250000000 ) * 0.25 lv_pphsthn = lv_pph1 + lv_pph2 + lv_pph3 CASE lv_pkpgj > 500000000
lv_pph1 = 50000000 * 0.05 lv_pph2 = 200000000 * 0.15 lv_pph3 = 250000000 * 0.25
lv_pph4 = ( lv_pkpgj - 500000000 ) * 0.3 lv_pphsthn = lv_pph1 + lv_pph2 + lv_pph3 + lv_pph4 ENDCASE
lv_pphthp2 = lv_pphsthn
**
======================================================================================
** step 3 : pph gaji + bonus bulan ini (sebulan)
**
======================================================================================
STORE 0 TO lv_pphbonus, lv_pphgajibln, lv_pphbruto IF tmpgaji.bonus <> 0
lv_pphbonus = lv_pphthp1 - lv_pphthp2 ELSE
lv_pphbonus = 0 ENDIF
lv_pphgajibln = lv_pphthp2 / 12
lv_pphbruto = lv_pphbonus + lv_pphgajibln lv_pphnetto = lv_pphbruto - (lv_tujpajak /12)
SELECT gajian
REPLACE bonus WITH tmpgaji.bonus REPLACE thr WITH tmpgaji.thr REPLACE lembur WITH tmpgaji.lembur REPLACE obat WITH tmpgaji.obat
REPLACE pot_cdt WITH tmpgaji.pot_cdt REPLACE pot_kop WITH tmpgaji.pot_kop REPLACE pot_lain WITH tmpgaji.pot_lain
REPLACE tuj_jkk WITH lv_premijkk REPLACE tuj_jk WITH lv_premijk
REPLACE tuj_pajak WITH lv_tujpajak REPLACE bi_jabat WITH lv_bijabat REPLACE iuran_jht WITH lv_jht
REPLACE iuran_pens WITH lv_pensiun REPLACE ptkp WITH lv_ptkp
REPLACE pkp_gj WITH lv_pkpgj REPLACE pkp_gjbns WITH lv_pkpgjbns
REPLACE pph_gj WITH lv_pphthp2 REPLACE pph_gjbns WITH lv_pphthp1
REPLACE pph_bln WITH lv_pphgajibln REPLACE pph_bonus WITH lv_pphbonus
USE IN gajian RETURN '.t.' ENDPROC
PROCEDURE cari_gajian( tid_peg AS STRING, tTAHUN AS Number ) AS STRING
* Aambil gajian SELECT 0
USE gajian
SELECT * FROM gajian WHERE id_pegawai= ALLTRIM(tid_peg) ;
AND tahun = tTAHUN ;
INTO CURSOR tmpgaji ORDER BY tahun, bulan
CURSORTOXML("tmpgaji", "lcXML", 1, 0, 0, "1") llretval = lcXML
USE IN tmpgaji USE IN gajian
RETURN llretval ENDPROC
PROCEDURE proses_spt( tid_peg AS STRING, tTAHUN AS Number ) AS STRING CREATE CURSOR xSPT( isi01 n(20,0),;
isi02 n(20,0),;
isi03 n(20,0),;
isi04 n(20,0),;
isi05 n(20,0),;
isi06 n(20,0),;
isi07 n(20,0),;
isi08 n(20,0),;
isi09 n(20,0),;
isi10 n(20,0),;
isi11 n(20,0),;
isi12 n(20,0),;
isi13 n(20,0),;
isi14 n(20,0),;
isi15 n(20,0),;
isi16 n(20,0),;
isi17 n(20,0),;
isi18 n(20,0),;
isi19 n(20,0),;
isi20 n(20,0),;
isi21 n(20,0),;
isi22 n(20,0),;
isi22a n(20,0),;
isi22b n(20,0),;
isi23 n(20,0),;
isi23a c(1),;
isi23b c(1),;
isi24 n(20,0),;
isi24a c(1),;
isi24b c(1),;
bulan1 c(2),;
bulan2 c(2),;
isi24b_bln1 c(1),;
isi24b_bln2 c(1),;
isi24b_thn1 c(1),;
isi24b_thn2 c(1),;
isi24b_thn3 c(1),;
isi24b_thn4 c(1),;
tgl1 c(1),;
tgl2 c(1),;
tgl3 c(1),;
tgl4 c(1),;
tgl5 c(1),;
tgl6 c(1),;
tgl7 c(1),;
tgl8 c(1),;
spttahun c(4))
SELECT xSPT APPEND BLANK
GO TOP
SELECT 0 USE gajian
SELECT * FROM gajian WHERE id_pegawai= ALLTRIM(tid_peg) ;
AND tahun = tTAHUN ;
INTO CURSOR tmpgaji ; ORDER BY tahun, bulan USE IN gajian
SELECT tmpgaji GO TOP
xbulan1 = PADL(ALLTRIM(STR(tmpgaji.bulan,2)),2,'0') GO BOTTOM
xbulan2 = PADL(ALLTRIM(STR(tmpgaji.bulan,2)),2,'0')
SELECT xspt
REPLACE spttahun WITH STR(ttahun,4)
REPLACE isi01 WITH isi01 + (tmpgaji.gapok*12)
REPLACE isi03 WITH isi03 + tmpgaji.tuj_jkk + tmpgaji.tuj_jk + tmpgaji.tuj_pajak
REPLACE isi07 WITH isi01 + isi02 + isi03 + isi04 + isi05 + isi06 REPLACE isi08 WITH isi08 + tmpgaji.thr + tmpgaji.bonus
REPLACE isi09 WITH isi07 + isi08
REPLACE isi10 WITH isi10 + tmpgaji.bi_jabat
REPLACE isi12 WITH isi12 + tmpgaji.iuran_jht + tmpgaji.iuran_pens REPLACE isi13 WITH isi10 + isi11 + isi12
REPLACE isi14 WITH isi14 + (isi09 - isi13) REPLACE isi16 WITH isi14 - isi15
REPLACE isi17 WITH isi17 + tmpgaji.ptkp REPLACE isi18 WITH isi16 - isi17
IF tmpgaji.pph_gj <> tmpgaji.pph_gjbns
REPLACE isi19 WITH isi19 + tmpgaji.pph_gjbns ELSE
REPLACE isi19 WITH isi19 + tmpgaji.pph_gj ENDIF
REPLACE isi21 WITH isi19 + isi20 REPLACE bulan1 WITH xbulan1 REPLACE bulan2 WITH xbulan2
xpph = 0 SELECT tmpgaji GO TOP
DO WHILE !EOF()
xpph = xpph + tmpgaji.pph_bln + tmpgaji.pph_bonus SELECT tmpgaji
SKIP
ENDDO
SELECT tmpgaji GO BOTTOM
m.tuj_pajakbln = tmpgaji.tuj_pajak / 12
SELECT xSPT
REPLACE isi22 WITH isi22 + (xpph - m.tuj_pajakbln) REPLACE isi22b WITH isi22b + (xpph - m.tuj_pajakbln)
xkurang = xSPT.isi21 - xSPT.isi22 REPLACE isi23 WITH xkurang IF xkurang <> 0
IF xkurang > 0
REPLACE isi23a WITH 'X' ELSE
REPLACE isi23b WITH 'X' ENDIF
REPLACE isi24b WITH 'X' REPLACE isi24b_bln1 WITH '1'
REPLACE isi24b_bln2 WITH '2'
REPLACE isi24b_thn1 WITH SUBSTR(STR(tTAHUN,4),1,1) REPLACE isi24b_thn2 WITH SUBSTR(STR(tTAHUN,4),2,1) REPLACE isi24b_thn3 WITH SUBSTR(STR(tTAHUN,4),3,1) REPLACE isi24b_thn4 WITH SUBSTR(STR(tTAHUN,4),4,1) REPLACE isi24 WITH xkurang
ENDIF
xtgl = DTOS(DATE())
REPLACE tgl1 WITH SUBSTR(xtgl,7,1) REPLACE tgl2 WITH SUBSTR(xtgl,8,1) REPLACE tgl3 WITH SUBSTR(xtgl,5,1) REPLACE tgl4 WITH SUBSTR(xtgl,6,1) REPLACE tgl5 WITH SUBSTR(xtgl,1,1) REPLACE tgl6 WITH SUBSTR(xtgl,2,1) REPLACE tgl7 WITH SUBSTR(xtgl,3,1) REPLACE tgl8 WITH SUBSTR(xtgl,4,1)
CURSORTOXML("xSPT", "lcXML", 1, 0, 0, "1") llretval = lcXML
USE IN xSPT USE IN tmpgaji
RETURN llretval ENDPROC
ENDDEFINE