Debet – Kredit – Saldo

Database : MS SQL Server 2000

Untuk mebuat sebuah laporan buku besar yang memuat Debet – Kredit – Saldo, maka dibutuhkan sebuah Store Procedure. Dalam Store Procedure ini diimplementasikan pemakaian CURSOR. Contoh berikut adalah sebuah strore procedure untuk bisnis pulsa, dimana parameter yang dikirim adalah Kode Outlet dan tanggal.

CREATE PROCEDURE sp_LaporanTrx
@OutletID char(3),
@Tgl char(12)

AS
declare @TrxID varchar(15)
Declare @uraian varchar(50)
declare @TglTrx datetime
declare @debet money
declare @kredit money
declare @saldo money
declare @saldosblm money
declare @status varchar(10)
declare @requester  varchar(20)
declare @err_no int

SET @err_no=0
BEGIN TRAN
DECLARE Laporan  CURSOR FOR
SELECT     *
FROM         (SELECT     MKiosID AS TrxID, ‘Trx : ‘ + ProductID + ‘.’ + HPKonsumen AS Uraian, TglTrx, 0 AS Debet,
                                              CASE WHEN Status = 3 THEN 0 ELSE Harga END AS Kredit,
                                              CASE WHEN Status = 3 THEN ‘Gagal’ WHEN Status = 2 THEN ‘Sukses’ ELSE ‘Pending’ END AS Status, Requester
                       FROM          dbo.tblMKios
                       WHERE      (OutletID = @OutletID) AND (CONVERT(char(12), TglTrx, 112) = @Tgl)
                       UNION
                       SELECT     RefID AS TrxID, Description AS Uraian, TglTransaksi AS TglTrx, Jumlah AS Debet, 0 AS Kredit, ‘Sukses’ AS Status,
                                             ‘System’ AS Requester
                       FROM         dbo.tblOutletDeposit
                       WHERE     (OutletID = @OutletID) AND (CONVERT(char(12), TglTransaksi, 112) =@Tgl)
                       UNION
                       SELECT     OutletID + CONVERT(char(12), Tgl, 112) AS TrxID, ‘Saldo Awal ‘ + CONVERT(char(12), Tgl, 106) AS Uraian, Tgl AS TglTrx, Saldo AS Debet,
                                             0 AS Kredit, ‘Sukses’ AS Status, ‘System’ AS Requester
                       FROM         dbo.tblSaldoHarian
                       WHERE     (OutletID = @OutletID) AND (CONVERT(char(12), Tgl, 112) = @Tgl)) X
ORDER BY TglTrx ASC
–End of Declare

set @saldosblm=0
–drop Table #TempLap
CREATE TABLE #TempLap (TrxID varchar(20) PRIMARY KEY, Uraian varchar(160), TglTrx smalldatetime, Debet money, Kredit Money, Saldo Money, Status varchar(20), Requester varchar(20))

OPEN Laporan
–Proses  per Record
FETCH Laporan  INTO @TrxID, @uraian, @TglTrx, @debet, @kredit, @status, @requester

WHILE (@@FETCH_STATUS=0)
BEGIN
 Set @saldo=@debet-@kredit+@saldosblm
 INSERT INTO #TempLap  VALUES (@TrxID, @uraian, @TglTrx, @debet, @kredit, @Saldo, @status, @requester)
 set @saldosblm =@saldo

 FETCH Laporan  INTO @TrxID, @uraian, @TglTrx, @debet, @kredit, @status, @requester
END
Close Laporan
DEALLOCATE  Laporan
Select * from #TempLap order by TglTrx
if @err_no=0
  commit tran
else
begin
    RaisError(‘SQLServer : Penyimpanan  Gagal!’,16,1)
    rollback tran
   return
end
GO

8 Replies to “Debet – Kredit – Saldo”

  1. Anggap saya punya skrip query, dimana v_raptor_tpm adalah view yang saya olah dari tabel fisik raptor_tpm.
    Masalahnya:
    Respons time Querynya cukup lambat (sekitar 1 menit 42 detik ). Dan yang saya tanya, cara manakah lebih cepat untuk diaksekusi, dengan view atau panggil langsung tabel fisik-nya, dengan konsekuensi skrip queri-nya jauh lebih panjang?

    Regards,

    Lionel

  2. Bung Meteor, pada prinsipnya, query kita gunakan ketika kita ingin menggabungkan beberapa tabel yang tidak bisa di handle dengan single table. Lambatnya query tergantung ke-kompleks-annya. Coba periksa dan sederhanakan kembali query anda, atau buat ke strore procedure. Tks.

  3. View-nya saya create dari satu tabel, dimana kolom saya susun menjadi row.


    TINVDATE TVLMSLD TPW_LN13A TPW_LN_15 TPW_LN_50 TPW_LN_11 TPW_LN_21 TPW_LN_29 TPW_LN_39 TPW_LN_44 TPW_LN_22 TPW_LN_23 TPW_LN_31 TPW_LN_35 TPW_LN_36 TPW_LN_40 TPW_LN44A TPW_LN_46
    20070101 32 204016.32 224928 114347.58 204016.32 204016.32 182838.18 162678.74 161804.02 2 8 5 6 3 10 12 7

    Menjadi

    tgl id nilai
    20070101 6 5
    20070101 4 8
    20070101 10 10
    20070101 16 161804.02
    20070101 13 204016.32
    20070101 18 224928
    20070102 3 2
    20070102 7 6
    20070102 2 294320.11
    20070102 15 294320.11
    20070103 3 2
    20070103 16 231706.24

    regards,

Comments are closed.

RSS
Follow by Email
Facebook
Twitter
Visit Us
Follow Me
INSTAGRAM