Selasa, 03 Maret 2009

Cara Create Persediaan Barang By Stored Procedure SQL SERVER 2005

-- =============================================
-- Author:
-- Create date: <12/02/2009>
-- Description:
-- =============================================
ALTER PROCEDURE [dbo].[SpPersedianDetail]
-- Add the parameters for the stored procedure here
(
@KODEBARANG NVARCHAR(10)
)

AS

DECLARE @ID INT, @KETERANGAN NVARCHAR(50)
DECLARE @TOTALHARGAAWAL MONEY, @TOTALHARGAMASUK MONEY, @TOTALHARGAAKHIR MONEY, @TOTALHARGATEMP MONEY
DECLARE @AKHIR INT, @HARGAAWAL MONEY, @MASUK INT, @HARGAHPP MONEY
DECLARE @KELUAR INT, @HARGAKELUAR MONEY, @TOTALHARGAKELUAR MONEY
DECLARE @SALDOAKHIR INT, @PERSEDIAAN MONEY

DECLARE @KODESEM NVARCHAR(10),@STOCKSEM INT, @HARGASEM MONEY, @TOTALSEM MONEY
BEGIN

SET NOCOUNT ON;

CREATE TABLE #TEMPAWAL
(
KODEBARANG NVARCHAR(10),
HPPTEMP MONEY,
SALDOTEMP INT,
PERSEDIAANTEMP MONEY
)ON [PRIMARY]

INSERT INTO #TEMPAWAL (KODEBARANG, HPPTEMP, SALDOTEMP,PERSEDIAANTEMP)
SELECT KODEBARANG , HARGA,STOCK, TOTALHARGAAWAL FROM MSTSALDOAWAL
--SELECT * FROM #TEMPAWAL


DECLARE OPENPART CURSOR FOR
SELECT ID,KODEBARANG , KETERANGAN FROM INVENTORY WHERE KODEBARANG=@KODEBARANG
ORDER BY ID

OPEN OPENPART

CREATE TABLE #TEMP
(
ID INT,
KODEBARANG NVARCHAR(10),
KETERANGAN NVARCHAR(50),
TOTALHARGAAWAL MONEY,
MASUK INT,
TOTALHARGAMASUK MONEY,
KELUAR INT,
HARGAKELUAR MONEY,
TOTALHARGAKELUAR MONEY,
AKHIR INT,
HARGAHPP MONEY,
TOTALHARGAAKHIR MONEY

) ON [PRIMARY]

FETCH NEXT FROM OPENPART INTO @ID,@KODEBARANG,@KETERANGAN

WHILE @@FETCH_STATUS=0
BEGIN
SELECT @TOTALHARGAAWAL=TOTALHARGAAWAL,@AKHIR=AWAL FROM INVENTORY
WHERE ID=@ID AND KODEBARANG=@KODEBARANG AND KETERANGAN=@KETERANGAN

SELECT @TOTALHARGAMASUK=TOTALHARGAMASUK FROM INVENTORY
WHERE ID=@ID AND KODEBARANG=@KODEBARANG AND KETERANGAN=@KETERANGAN

SELECT @TOTALHARGAAKHIR=TOTALHARGAAWAL FROM INVENTORY
WHERE ID=@ID AND KODEBARANG=@KODEBARANG AND KETERANGAN=@KETERANGAN

SELECT @AKHIR=AWAL FROM INVENTORY
WHERE ID=@ID AND KODEBARANG=@KODEBARANG AND KETERANGAN=@KETERANGAN

SELECT @MASUK=MASUK FROM INVENTORY
WHERE ID=@ID AND KODEBARANG=@KODEBARANG AND KETERANGAN=@KETERANGAN

SELECT @KELUAR=KELUAR FROM INVENTORY
WHERE ID=@ID AND KODEBARANG=@KODEBARANG AND KETERANGAN=@KETERANGAN

INSERT INTO #TEMP VALUES (@ID,@KODEBARANG, @KETERANGAN, @TOTALHARGAAWAL,@MASUK, @TOTALHARGAMASUK,@KELUAR,0,0, @AKHIR ,0,@TOTALHARGAAKHIR)

IF EXISTS (SELECT HARGAAWAL FROM INVENTORY WHERE (ID=@ID) AND (KODEBARANG=@KODEBARANG) AND (KETERANGAN='SALDOAWAL'))
BEGIN
SET @HARGAAWAL = (SELECT HARGAAWAL FROM INVENTORY WHERE ID=@ID AND KODEBARANG=@KODEBARANG AND KETERANGAN='SALDOAWAL')

UPDATE #TEMP
SET HARGAHPP=@HARGAAWAL
WHERE (ID=@ID) AND (KODEBARANG=@KODEBARANG) AND (KETERANGAN='SALDOAWAL')
END

IF EXISTS (SELECT ID,KODEBARANG,KETERANGAN FROM #TEMP WHERE (ID=@ID) AND (KODEBARANG=@KODEBARANG) AND (KETERANGAN='LPB'))
BEGIN
--SET @AKHIR=(SELECT SALDOTEMP FROM MSTSALDOAWAL WHERE KODEBARANG=@KODEBARANG)
SET @AKHIR=(SELECT SALDOTEMP FROM #TEMPAWAL WHERE KODEBARANG=@KODEBARANG)
SET @MASUK =(SELECT MASUK FROM #TEMP WHERE (ID=@ID) AND (KODEBARANG=@KODEBARANG) AND (KETERANGAN='LPB'))

SET @AKHIR=@AKHIR+@MASUK

--SET @TOTALHARGAAKHIR=(SELECT PERSEDIAANTEMP FROM MSTSALDOAWAL WHERE (KODEBARANG=@KODEBARANG))
SET @TOTALHARGAAKHIR=(SELECT PERSEDIAANTEMP FROM #TEMPAWAL WHERE (KODEBARANG=@KODEBARANG))
SET @TOTALHARGAMASUK =(SELECT TOTALHARGAMASUK FROM #TEMP WHERE (ID=@ID) AND (KODEBARANG=@KODEBARANG) AND (KETERANGAN='LPB'))
SET @TOTALHARGAAKHIR=@TOTALHARGAAKHIR + @TOTALHARGAMASUK

SET @HARGAHPP=@TOTALHARGAAKHIR / @AKHIR

UPDATE #TEMP
SET AKHIR=@AKHIR,TOTALHARGAAKHIR=@TOTALHARGAAKHIR, HARGAHPP=@HARGAHPP
WHERE (ID=@ID) AND (KODEBARANG=@KODEBARANG) AND (KETERANGAN='LPB')

--UPDATE MSTSALDOAWAL --PAKAI TABEL TEMPERORY UNTUK MEMBACA STOCK YANG TERAKHIR
--SET SALDOTEMP=@AKHIR
--WHERE KODEBARANG=@KODEBARANG

UPDATE #TEMPAWAL --PAKAI TABEL TEMPERORY UNTUK MEMBACA STOCK YANG TERAKHIR
SET SALDOTEMP=@AKHIR
WHERE KODEBARANG=@KODEBARANG

--UPDATE MSTSALDOAWAL --PAKAI TABEL TEMPERORY
--SET PERSEDIAANTEMP=@TOTALHARGAAKHIR
--WHERE KODEBARANG=@KODEBARANG

UPDATE #TEMPAWAL --PAKAI TABEL TEMPERORY
SET PERSEDIAANTEMP=@TOTALHARGAAKHIR
WHERE KODEBARANG=@KODEBARANG

--UPDATE MSTSALDOAWAL --PAKAI TABEL TEMPERORY
--SET HPPTEMP=@HARGAHPP
--WHERE KODEBARANG=@KODEBARANG

UPDATE #TEMPAWAL --PAKAI TABEL TEMPERORY
SET HPPTEMP=@HARGAHPP
WHERE KODEBARANG=@KODEBARANG

END

IF EXISTS (SELECT ID,KODEBARANG,KETERANGAN FROM #TEMP WHERE (ID=@ID) AND (KODEBARANG=@KODEBARANG) AND (KETERANGAN='BPB'))
BEGIN
--SET @HARGAHPP=(SELECT HPPTEMP FROM MSTSALDOAWAL WHERE KODEBARANG=@KODEBARANG)
--SET @SALDOAKHIR=(SELECT SALDOTEMP FROM MSTSALDOAWAL WHERE KODEBARANG=@KODEBARANG)
--SET @PERSEDIAAN= (SELECT PERSEDIAANTEMP FROM MSTSALDOAWAL WHERE KODEBARANG=@KODEBARANG)

SET @HARGAHPP=(SELECT HPPTEMP FROM #TEMPAWAL WHERE KODEBARANG=@KODEBARANG)
SET @SALDOAKHIR=(SELECT SALDOTEMP FROM #TEMPAWAL WHERE KODEBARANG=@KODEBARANG)
SET @PERSEDIAAN= (SELECT PERSEDIAANTEMP FROM #TEMPAWAL WHERE KODEBARANG=@KODEBARANG)

UPDATE #TEMP
SET HARGAKELUAR=@HARGAHPP,HARGAHPP=@HARGAHPP
WHERE (ID=@ID) AND (KODEBARANG=@KODEBARANG) AND (KETERANGAN='BPB')

SET @KELUAR =(SELECT KELUAR FROM #TEMP WHERE (ID=@ID) AND (KODEBARANG=@KODEBARANG) AND (KETERANGAN='BPB'))
SET @HARGAKELUAR =(SELECT HARGAKELUAR FROM #TEMP WHERE (ID=@ID) AND (KODEBARANG=@KODEBARANG) AND (KETERANGAN='BPB'))

SET @TOTALHARGAKELUAR=@KELUAR * @HARGAKELUAR
SET @AKHIR=@SALDOAKHIR-@KELUAR
SET @PERSEDIAAN=@PERSEDIAAN-@TOTALHARGAKELUAR

UPDATE #TEMP
SET TOTALHARGAKELUAR=@TOTALHARGAKELUAR, AKHIR=@AKHIR, TOTALHARGAAKHIR=@PERSEDIAAN
WHERE (ID=@ID) AND (KODEBARANG=@KODEBARANG) AND (KETERANGAN='BPB')

--UPDATE MSTSALDOAWAL --PAKAI TABEL TEMPERORY UNTUK UPDATE STOCK TERAKHIR , BACA PERSEDIAAN YANG TERAKHIR
--SET SALDOTEMP=@AKHIR
--WHERE KODEBARANG=@KODEBARANG

UPDATE #TEMPAWAL --PAKAI TABEL TEMPERORY UNTUK UPDATE STOCK TERAKHIR , BACA PERSEDIAAN YANG TERAKHIR
SET SALDOTEMP=@AKHIR
WHERE KODEBARANG=@KODEBARANG

--UPDATE MSTSALDOAWAL --PAKAI TABEL TEMPERORY UNTUK UPDATE PERSEDIAANTEMP TERAKHIR , BACA PERSEDIAAN YANG TERAKHIR
--SET PERSEDIAANTEMP=@PERSEDIAAN
--WHERE KODEBARANG=@KODEBARANG

UPDATE #TEMPAWAL --PAKAI TABEL TEMPERORY UNTUK UPDATE PERSEDIAANTEMP TERAKHIR , BACA PERSEDIAAN YANG TERAKHIR
SET PERSEDIAANTEMP=@PERSEDIAAN
WHERE KODEBARANG=@KODEBARANG

END
FETCH NEXT FROM OPENPART INTO @ID,@KODEBARANG, @KETERANGAN
END
CLOSE OPENPART
DEALLOCATE OPENPART

SELECT * FROM #TEMP --WHERE KODEBARANG=@KODEBARANG

END

Tidak ada komentar:

Posting Komentar