delete from temporary.tmp_bukubesar_final where iduser = 564;
do $$
DECLARE nomorakun VARCHAR;
DECLARE rownumber BIGINT ;
DECLARE debet1 BIGINT ;
DECLARE kredit1 BIGINT ;
DECLARE saldoakhir1 BIGINT ;
DECLARE tipeakun INTEGER ;
loopakun cursor for select nomor_akun from acc_account_number where "level"=3 and nomor_akun between '1.100.01.001' and '1.270.02.001' order by nomor_akun;
hitungsaldo CURSOR FOR SELECT
ROW_NUMBER,
debet,
kredit,
saldoakhir
FROM
temporary.tmp_bukubesar where iduser = 564
ORDER BY
ROW_NUMBER ;
begin
open loopakun;
loop
FETCH next from loopakun INTO nomorakun;
EXIT WHEN NOT FOUND;
--- tampung data detail tiap akun
delete from temporary.tmp_bukubesar where iduser = 564;
INSERT INTO temporary.tmp_bukubesar SELECT
ROW_NUMBER () OVER (
ORDER BY
tanggal_jurnal,
kodejurnal
),
564,
kodejurnal,
tanggal_jurnal,
debet,
kredit,
saldoakhir,
nomor_rekening,
keterangan,
nomorakun
FROM
(
SELECT
'' kodejurnal,
(
SELECT
CAST ('2020-04-01' AS DATE) - INTERVAL '1 day'
) tanggal_jurnal,
NULL debet,
NULL kredit,
(
SELECT
COALESCE (
SUM (
acc_end_of_month_detail.end_balanace
),
0
) AS saldoeom
FROM
acc_end_of_month_detail
JOIN acc_account_number ON acc_end_of_month_detail.nomor_akun = acc_account_number. ID
WHERE
acc_account_number.nomor_akun = nomorakun
AND acc_end_of_month_detail.ending_date = (
SELECT
COALESCE (
MAX (acc_end_of_month.tgl_eom),
'2000-01-01'
)
FROM
acc_end_of_month
WHERE
acc_end_of_month.tgl_eom < '2020-04-01'
AND acc_end_of_month_detail.year_month = (
SELECT
MAX (year_month)
FROM
acc_end_of_month_detail
WHERE
acc_end_of_month_detail.year_month < '202004'
AND acc_end_of_month_detail.id_bpr = 1
AND acc_end_of_month_detail.id_bpr_cabang = 1
)
AND acc_end_of_month.id_bpr = 1
AND acc_end_of_month.id_bpr_cabang = 1
)
AND acc_end_of_month_detail.id_bpr = 1
AND acc_end_of_month_detail.id_bpr_cabang = 1
) + (
SELECT
COALESCE (
SUM (
CASE
WHEN acc_account_number.tipe_akun = 0
OR acc_account_number.tipe_akun = 3 THEN
(
acc_journal_detail.debet_amount - acc_journal_detail.credit_amount
)
ELSE
(
acc_journal_detail.credit_amount - acc_journal_detail.debet_amount
)
END
),
0
)
FROM
acc_journal_detail
JOIN acc_account_number ON acc_journal_detail.id_akun = acc_account_number. ID
JOIN acc_journal ON acc_journal. ID = acc_journal_detail.id_jurnal
WHERE
CAST (tanggal_jurnal AS DATE) > (
SELECT
COALESCE (
(
MAX (
acc_end_of_month_detail.ending_date
)
),
'2000-01-01'
)
FROM
acc_end_of_month_detail
JOIN acc_account_number ON acc_end_of_month_detail.nomor_akun = acc_account_number. ID
WHERE
acc_account_number.nomor_akun = nomorakun
AND acc_end_of_month_detail.ending_date <= '2020-04-01'
AND acc_end_of_month_detail.year_month = (
SELECT
MAX (year_month)
FROM
acc_end_of_month_detail
WHERE
acc_end_of_month_detail.year_month < '202004'
AND acc_end_of_month_detail.id_bpr = 1
AND acc_end_of_month_detail.id_bpr_cabang = 1
)
AND acc_end_of_month_detail.id_bpr = 1
AND acc_end_of_month_detail.id_bpr_cabang = 1
)
AND CAST (tanggal_jurnal AS DATE) < '2020-04-01'
AND acc_account_number.nomor_akun = nomorakun
AND acc_journal.id_bpr = 1
AND acc_journal.id_bpr_cabang = 1
) saldoakhir,
'-' nomor_rekening,
'Saldo Awal' keterangan
UNION ALL
SELECT
aj.kode_jurnal,
aj.tanggal_jurnal,
ajd.debet_amount,
ajd.credit_amount,
0 saldoakhir,
ajd.nomor_rekening,
aj.deskripsi
FROM
acc_journal_detail ajd
JOIN acc_journal aj ON ajd.id_jurnal = aj."id"
JOIN acc_account_number acn ON ajd.id_akun = acn."id"
WHERE
aj.id_bpr = 1
AND aj.id_bpr_cabang = 1
AND aj.tanggal_jurnal >= '2020-04-01'
AND aj.tanggal_jurnal < CAST ('2020-04-02' AS DATE) + INTERVAL '1 day'
AND acn.nomor_akun = nomorakun
ORDER BY
tanggal_jurnal
) bukubesar
ORDER BY
tanggal_jurnal,
kodejurnal;
--- tampung data detail tiap akun
open hitungsaldo;
loop
FETCH NEXT FROM hitungsaldo INTO rownumber, debet1, kredit1, saldoakhir1 ;
EXIT WHEN NOT FOUND ;
SELECT
tipe_akun INTO tipeakun
FROM acc_account_number WHERE nomor_akun = nomorakun;
--- hitung saldo akhir pada setiap detail akun
IF tipeakun IN (0, 3) THEN
UPDATE temporary.tmp_bukubesar
SET saldoakhir = (
SELECT
saldoakhir
FROM
temporary.tmp_bukubesar
WHERE
ROW_NUMBER < rownumber AND iduser = 564
ORDER BY
ROW_NUMBER DESC
LIMIT 1
) + debet1 - kredit1
WHERE
ROW_NUMBER = rownumber
AND ROW_NUMBER > 1
AND iduser = 564 ;
END IF ;
IF tipeakun IN (1, 2) THEN
UPDATE temporary.tmp_bukubesar
SET saldoakhir = (
SELECT
saldoakhir
FROM
temporary.tmp_bukubesar
WHERE
ROW_NUMBER < rownumber AND iduser = 564
ORDER BY
ROW_NUMBER DESC
LIMIT 1
) - debet1 + kredit1
WHERE
ROW_NUMBER = rownumber
AND ROW_NUMBER > 1
AND iduser = 564 ;
END
IF ;
--- hitung saldo akhir pada setiap detail akun
END LOOP;
CLOSE hitungsaldo ;
--- insert data bukber tiap akun ke tabel final
insert into temporary.tmp_bukubesar_final
select * from temporary.tmp_bukubesar where iduser = 564 and noakun=nomorakun order by tanggal_jurnal, kodejurnal;
END LOOP;
CLOSE loopakun ;
END $$;
select * from temporary.tmp_bukubesar_final where iduser = 564 order by noakun, tanggal_jurnal, kodejurnal;
Langganan:
Posting Komentar (Atom)
Dynamic Query - SQL Server
Berikut adalah contoh dari bentuk dari Dynamic Query di SQL Server yang dibungkus ke dalam Store Procedure: USE [Data00] GO SET ANSI_NULLS ...
Popular Posts
-
select round(5.123456 , 2) from dual ==> 5.12 select round(5.87654 , 2) from dual ==> 5.88 select floor(5.89) from dual ==> 5 s...
-
round((case when adjpk.nilai_jaminan<>0 then ((tabkredit.baki*100)/(COALESCE(adjpk.nilai_jaminan,0))) els...
-
USE [DATABASENYA] GO SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO CREATE PROCEDURE [dbo].[SendEmailHardiskSize] as begin ...
Tidak ada komentar:
Posting Komentar