Salah satu topik yang paling sering dijadikan sebagai studi kasus dalam pemrosesan data per baris adalah bagaimana cara menghitung jumlah saldo di setiap transaksi Penerimaan dan Pengeluaran. Biasanya Anda sering melihat hal ini dalam sebuah pembukuan keuangan sederhana, di mana kedua kolom tadi letaknya selalu berdampingan.
Setiap transaksi ditaruh pada kolomnya masing-masing, dengan tujuan supaya setiap jumlah total transaksi Penerimaan maupun Pengeluaran bisa diketahui dalam satu periode pembukuan yang ditetapkan. Selain itu, di kolom paling kanan biasanya berisi data Saldo yang dihasilkan dari hasil perhitungan antara Saldo transaksi sebelumnya dengan transaksi saat itu.
Dengan cara ini, maka Saldo Akhir dari setiap transaksi yang terjadi dapat diketahui dengan cepat. Kemudian data di baris paling bawah pada kolom Total Saldo Akhir tadi bisa digunakan untuk mencocokkan antara nilai dari hasil perhitungan selisih Total kolom Penerimaan dan kolom Pengeluaran dengan nilai Saldo Akhir di baris transaksi terakhir tadi.
Anda boleh percaya atau tidak, bahwa semua kebutuhan di atas tadi dapat dihasilkan dengan sangat mudah, cepat, dan menyenangkan di Aplikasi Web yang dibangun dengan menggunakan tools PHPMaker. Mengapa? Karena PHPMaker sudah menangani proses pembuatan kolom baru berikut data di dalamnya hanya dengan menggunakan dua server event ListOptions_Load dan ListOptions_Rendered. Masih ingat?
Nah, sebelum ke sana, kita harus merancang terlebih dulu struktur tabel yang digunakan akan dapat menghasilkan tampilan yang sama dengan layout pembukuan keuangan sederhana di atas tadi. Supaya mudah, kita menggunakan database MySQL. Pastikan Anda sudah membuat sebuah Database baru yang bernama buku_keuangan
Ingat, bahwa itu artinya kita tidak harus membuat struktur tabel yang sama persis dengan layout pembukuan keuangan tadi. Dalam hal ini, maka struktur tabel yang akan kita gunakan minimal menjadi seperti ini (misalkan kita sebut dengan tabel transaksi):
-- ---------------------------- -- Table structure for transaksi -- ---------------------------- DROP TABLE IF EXISTS `transaksi`; CREATE TABLE `transaksi` ( `ID` int(11) NOT NULL AUTO_INCREMENT, `Tanggal` datetime NOT NULL, `Nominal` int(11) NOT NULL, `Jenis` enum('K','M') DEFAULT NULL, PRIMARY KEY (`ID`) ) ENGINE=MyISAM AUTO_INCREMENT=8 DEFAULT CHARSET=latin1;
Untuk datanya, maka cukup jalankan SQL berikut:
-- ---------------------------- -- Records of transaksi -- ---------------------------- INSERT INTO `transaksi` VALUES ('1', '2014-12-15 09:55:01', '100000', 'M'); INSERT INTO `transaksi` VALUES ('2', '2014-12-15 09:55:10', '250000', 'M'); INSERT INTO `transaksi` VALUES ('3', '2014-12-15 09:55:22', '40000', 'K'); INSERT INTO `transaksi` VALUES ('4', '2014-12-15 10:05:28', '1000000', 'M'); INSERT INTO `transaksi` VALUES ('5', '2014-12-15 10:05:41', '3000000', 'M'); INSERT INTO `transaksi` VALUES ('6', '2014-12-15 10:05:56', '300000', 'K'); INSERT INTO `transaksi` VALUES ('7', '2014-12-16 10:34:40', '250000', 'K');
Sedangkan untuk menghasilkan layout pembukuan sederhana yang mengandung minimal ada kolom Penerimaan, Pengeluaran yang letaknya saling berdampingan, maka kita cukup menggunakan View berikut (misalkan kita sebut nama View-nya sebagai buku_transaksi), yang dibuat berdasarkan tabel transaksi di atas tadi:
-- ---------------------------- -- View structure for buku_transaksi -- ---------------------------- DROP VIEW IF EXISTS `buku_transaksi`; CREATE VIEW `buku_transaksi` AS SELECT ID, Tanggal, CASE Jenis WHEN 'M' THEN Nominal ELSE 0 END AS Masuk, CASE Jenis WHEN 'K' THEN Nominal ELSE 0 END AS Keluar FROM `transaksi` ;
Pertanyaan selanjutnya adalah, lalu bagaimana dengan kolom Saldo yang terdapat di sebelah kanan? Hehehe… tenang… tenang… kita akan menghasilkan kolom yang baru ini dari dalam project PHPMaker. Untuk itu, maka pastikan Anda sudah membuat sebuah project PHPMaker baru yang diarahkan ke Database buku_keuangan tadi.
Setelah project PHPMaker terbentuk, maka klik objek buku_transaksi yang terdapat di bawah object Views, lalu dari tab Fields, pilih TOTAL dari kolom List -> Aggregate masing-masing untuk field Masuk dan Keluar. Tujuannya, kita akan menampilkan hasil perhitungan Total dari masing-masing kedua kolom tadi.
Langkah selanjutnya, kita menulis sedikit kode PHP ke dalam server event ListOptions_Load yang terdapat di bawah lokasi Server Events -> Table-Specific -> List Page untuk objek buku_transaksi tadi. Fungsi kode di server event ini untuk menambahkan kolom baru yang caption kolomnya bertuliskan Saldo.
Masih pada objek buku_transaksi, pastikan kita menambahkan beberapa baris kode PHP pada server event ListOptions_Rendered. Fungsi kode di server event ini adalah untuk menampilkan data di kolom baru yang bernama Saldo tadi, di mana nilainya diperoleh dari hasil perhitungan antara Saldo Akhir di transaksi sebelumnya dengan transaksi yang berjalan saat itu (apakah Penerimaan atau Pengeluaran).
Terakhir, seperti biasa, silahkan Anda generate semua file script dengan menggunakan PHPMaker.
Jalankan Aplikasi Web yang dihasilkan dari browser favorit Anda, lalu silahkan klik menu buku transaksi, maka Anda akan melihat layout pembukuan sederhana yang terdiri dari 5 kolom, yaitu ID, Tanggal, Masuk, Keluar, dan Saldo.
Di baris paling bawah masing-masing pada kolom Masuk dan Keluar, Anda akan melihat jumlah Totalnya. Sedangkan di baris paling bawah dari kolom Saldo, hasilnya harus sama dengan nilai pada kolom Saldo pada baris transaksi terakhir, dan nilai ini juga harus sama dengan hasil selisih antara kolom Masuk dan Keluar.
Jadi, hasil akhirnya kira-kira tampilannya menjadi seperti ini:
+----+----------------------+-------------------+-------------------+---------------------------+ | ID | Tanggal | Masuk | Keluar | Saldo | +---------------------------+-------------------+-------------------+---------------------------+ | 1 | 2014-12-15 09:55:01 | 100,000 | 0 | 100,000 | | 2 | 2014-12-15 09:55:10 | 250,000 | 0 | 350,000 | | 3 | 2014-12-15 09:55:22 | 0 | 40,000 | 310,000 | | 4 | 2014-12-15 10:05:28 | 1,000,000 | 0 | 1,310,000 | | 5 | 2014-12-15 10:05:41 | 3,000,000 | 0 | 4,310,000 | | 6 | 2014-12-15 10:05:56 | 0 | 300,000 | 4,010,000 | | 7 | 2014-12-16 10:34:40 | 0 | 250,000 | 3,760,000 | +----+----------------------+-------------------+-------------------+---------------------------+ | | Total 4,350,000 | Total 590,000 | Total Saldo: 3,760,000 | +---------------------------+-------------------+-------------------+---------------------------+
Untuk menambah data transaksi yang baru, maka Anda dapat melakukannya dari menu transaksi.
Wow, PHPMaker memang luar biasa hebat dan fleksibelnya, ya? Begitu cepatnya kita bisa menghasilkan tampilan tersebut, cukup hanya dengan mengeset pengaturan Aggregate dari tab Fields dan menambahkan sedikit kode PHP saja ke dalam server event ListOptions_Load dan ListOptions_Rendered.
Sekarang, bayangkanlah jika Anda melakukannya dengan cara-cara konvensional, menulis kode secara manual dari awal sampai akhir, berapa lama waktu yang akan Anda butuhkan? Silahkan dijawab sendiri. Hehehe… 😀
Ingin lihat demonya secara langsung/live? Klik di sini.
Ingin beli file project dan databasenya? Klik di sini.
Anton mengatakan
Kolom Saldo nya tidak tampil di laporan yah?
Masino Sinaga mengatakan
Maksudnya di laporan itu seperti apa ya?
Anton mengatakan
Saya coba buat laporan stok seperti contoh anda, dan saya coba export kedalam excel atau pdf tetapi kolom saldo beserta isinya tidak tampil
Masino Sinaga mengatakan
Oh itu toh maksudnya. Iya benar, kolom kostum yang dibuat dengan ListOptions_Load and ListOptions_Rendered memang tidak akan pernah disertakan pada Export Data.
Anton mengatakan
Ada cara supaya Saldo dapat di export, bos?
Masino Sinaga mengatakan
Sebenarnya Anda dapat mengakalinya dengan cara membuat sebuah Database View dengan kolom tambahan Saldo, lalu Anda menggunakan logik yang sama di atas dengan menulis kode pada server event Row_Rendered untuk mengisi nilai pada kolom Saldo tersebut.
Masino Sinaga mengatakan
Solusi selengkapnya bisa Anda lihat melalui artikel Solusi Supaya Kolom Saldo Bisa Di-Export Datanya di Aplikasi Web dari PHPMaker.
Semoga bermanfaat. 🙂
widodo mengatakan
Pakai Php Runner 6.2 data bisa diexport ke word, excel,xml
Trisoli mengatakan
bisa bantu saya mengaplikasikan cara menghitung saldo ini jika pakai PHPRunner? kebetulan saya sdh terlanjur pakai PHPRunner. mohon bantuannnya terimakasih 🙂
Masino Sinaga mengatakan
Maaf, saya belum bisa membantu, karena sampai saat ini saya belum pernah sama sekali menggunakan PHPRunner. 🙂
rana mengatakan
pak masino bersediakah kasih contoh untuk aplikasi sederhana penukaran point,
misal A mempunyai 7 point dan dia ingin menukar barang XYZ yang senilai 8 point,
saat ingin menukar maka akan ditolak sistem karna point kurang, itu gimana ya pak??
Masino Sinaga mengatakan
Anda bisa menggunakan server event Row_Inserting (saat menambah data) atau Row_Updating (saat mengubah data) untuk memeriksa apakah point cukup atau kurang.
Silahkan baca topik Server Events and Client Scripts dari menu Help PHPMaker untuk informasi lebih lanjut.
rana mengatakan
Terimakasih pak, saya akan coba 🙂
Masino Sinaga mengatakan
Sama-sama.
Utomo mengatakan
pak, saya mau bertanya, saya mempunyai 2 tabel, saya ingin menghitung saldo..
saldo awal ditabel A sebesar 500, saya input penarikan saldo di tabel B sebesar 200. masih ditabel B sisa saldo sebesar 300, nah 300 itu ada ditabel A bukan 500..
saya menginput lagi sama seperti diatas tabel A: 300 dikurang Tabel B: 200 hasil 100 itu ada di tabel A, bukan 300..
apakah sama seperti yang dicontohkan bapak atau saya meletakan kode diatas?
Masino Sinaga mengatakan
Tidak sama. Kalau di artikel ini, nilai Saldo diperoleh dari perhitungan saat memproses baris per baris. Jadi, kolom Saldo dalam hal ini ditambahkan saat menampilkan data di halaman List.
Indra mengatakan
Mas kok kolomnya blank ya, ini script saya :
Masino Sinaga mengatakan
Dobel cek kode Anda, pastikan variabel $GLOBALS[“final_saldo”] memiliki nilai yang valid atau bisa ditampilkan.
michael mengatakan
Napa mau buat tabel transaksi yg baru kok gk jalan pak
Masino Sinaga mengatakan
Baah, manalah aku tau? Gak punya kaki kali dia, makanya gak bisa jalan, hehehe… 😛
ame mengatakan
Thanks, saya sudah berhasil membuat persis seperti ini.
Satu pertanyaan menggelitik, gmn jika kita ingin menampilkan langsung column Saldo dihalaman add/edit transaksi (bukan di view) ? Adakah pertimbangan khusus kenapa dia musti dibuatkan view sendiri hanya untuk melihat saldo?
Masino Sinaga mengatakan
Karena jika nilai Saldo ditampilkan di form Add/Edit, maka Anda harus menangani lagi proses perhitungan Saldo secara real-time saat si Pengguna memasukkan atau mengubah nilai transaksi di form tersebut.
ame mengatakan
Betul, kebiasaan pengguna excel biasanya begitu. Kemungkinan karena mereka sudah membagi buku keuangan menjadi beberapa akun.
Bagaimana jika ingin membuat saldo yg realtime di form add/edit seperti yg dimaksud? Mohon diulaskan pak, thanks
Masino Sinaga mengatakan
Belum sempat mengulas seperti itu. Silahkan dicoba sendiri saja dulu.
ame mengatakan
Sy sudah download file demonya Pak, very inspiring. Mohon diberikan ulasan bagaimana cara membuat / koneksi tabel tombol ‘Paynow’ seperti yg di demo itu pak? Thanks
Masino Sinaga mengatakan
Ulasannya bisa dilihat melalui file .pmp (PHPMaker Project). File ini bisa Anda download dari situs ilovephpmaker.com setelah Anda terdaftar (sign-up) menjadi member di sana.
ame mengatakan
Baik pak, sy mau daftar member biar belajar lebih intensif tapi sy gak punya paypal. Gimana caranya?
Masino Sinaga mengatakan
Caranya? Ya dibuat dulu account Paypal-nya.
edri mengatakan
pak, gmn nambahin laporan transaksi perbulan, mohon bantuannya
Masino Sinaga mengatakan
Ya tinggal tambahin saja. Gampang toh?
Charly mengatakan
Mat Siang Pak Masino…
Mohon bantuan cara membuat penjumlahan saldo seperti diatas, tetapi ada tambahan kolom sebagai kriteria untuk menghasilkan nilai saldo. kalau contoh di atas nilai saldo akan ditambah / dikurang berdasarkan inputan transaksi
Id | KodePaket | Nilai | Jumlah | Bulan
1 | A-1 | 2 | 2 | Januari
2 | A-1 | 4 | 6 | Februari
3 | A-2 | 4 | 4 | Januari
4 | A-2 | 3 | 7 | Februari
5 | A-2 | 2 | 9 | Maret
yang mana kolom Jumlah akan secara otomatis bertambah sesuai kolom Nilai berdasarkan kolom KodePaket yang diinput. sehingga pada saat filter berdasarkan bulan = “Januari” hasil yang diharapkan:
Id | KodePaket | Nilai | Jumlah | Bulan
1 | A-1 | 2 | 2 | Januari
3 | A-2 | 4 | 4 | Januari
yang mana pada saat filter berdasarkan bulan = “Februari” hasil yang diharapkan:
Id | KodePaket | Nilai | Jumlah | Bulan
2 | A-1 | 4 | 6 | Februari
4 | A-2 | 3 | 7 | Februari
yang mana pada saat filter berdasarkan bulan = “Maret” hasil yang diharapkan:
Id | KodePaket | Nilai | Jumlah | Bulan
5 | A-2 | 2 | 9 | Maret
yang mana nilai kolom Jumlah baris terakhir adalah hasil dari penjumlahan kolom Nilai bulan sebelumnya.
Mohon bantuannya Pak Masino…
Masino Sinaga mengatakan
Apakah seperti ini yang dimaksud? –> http://www.masinosinaga.com/phpmaker/solusi-supaya-kolom-saldo-bisa-di-export-datanya-di-aplikasi-web-dari-phpmaker/#comment-24986
Charly mengatakan
Makasih banyak Pak Masino, sangat2 membantu.
Masino Sinaga mengatakan
Sama-sama.
Heri mengatakan
Ada link videonya kah?