Description
Properties
| Name | Value |
|---|---|
| ANSI Nulls ON | True |
| Quoted Identifier ON | True |
| Encrypted | False |
| Execute As | |
| Null on Null Input | False |
| Schema Bound | False |
| Assembly |
Parameters
| Name | Data Type | Length | Description |
|---|---|---|---|
| @tgstart | date | 3 | |
| @tgend | date | 3 |
SQL Script
SET QUOTED_IDENTIFIER, ANSI_NULLS ON
GO
CREATE FUNCTION dbo.f_mutasi_mpk
(
@tgstart date, @tgend date
)
RETURNS @mutasibb table (
kodebarang varchar(100) null
,namabarang varchar(100) null
,qty_saldoawal float null
,qty_in float null
,qty_out float null
,saldo_akhir float null
,unit varchar(100) null
,stock_opname float null
,adj float null
,selisih float null
)
AS
begin
declare @end_date_new_mesin date
SELECT top(1) @end_date_new_mesin= end_date
FROM dt_ms_cost_final_avg
WHERE (ms_cost_final_avg_id = 0)
set @end_date_new_mesin='2017-09-01';
if @tgstart>=@end_date_new_mesin
begin
insert into @mutasibb (
kodebarang
,namabarang
,unit
,qty_saldoawal
,qty_in
,qty_out
,saldo_akhir
,stock_opname
,adj
, selisih
)
SELECT
kodebarang
, namabarang
, unit
, qty_saldoawal
, qty_in
, qty_out
, saldo_akhir
, stock_opname
, qty_penyesuaian
, selisih
FROM dbo.vw_fn_ms_mutasi_mesin(@tgstart,@tgend,0) AS vw_fn_ms_mutasi_mesin_1
end
else
begin
declare @datesta date
declare @stsstockopname int, @dtsto date
set @datesta=(select top 1 date_stockawal from tbl_dt_mpk_stockawal group by date_stockawal order by date_stockawal desc)
set @stsstockopname = 0
if (
select count(*) from (
select count(*) as cnt from [dbo].[tbl_stock_opname] a
where a.[date_stock_opname] = (select max([date_stock_opname]) from [dbo].[tbl_stock_opname] b
where b.[date_stock_opname] <= @tgstart and b.typebahan = 'MPK'
) and a.typebahan = 'MPK'
group by part_name_customs
) as x
) > 0
begin
set @stsstockopname = 1
set @dtsto = (select max(dt) from (
select [date_stock_opname] as dt from [dbo].[tbl_stock_opname] a
where a.[date_stock_opname] = (select max([date_stock_opname]) from [dbo].[tbl_stock_opname] b
where b.[date_stock_opname] <= @tgstart and b.typebahan = 'MPK'
) and a.typebahan = 'MPK'
group by part_name_customs, [date_stock_opname]
) as x)
set @datesta=dateadd(day, 1, @dtsto)
end
declare @tgstartx date
if (select count(*) from [tbl_stock_opname] where typebahan = 'MPK' and [date_stock_opname] between @tgstart and @tgend) > 0
begin
set @tgstartx = (
select max(date_stock_opname) from [tbl_stock_opname] where typebahan = 'MPK' and [date_stock_opname] between @tgstart and @tgend
)
if (@tgend <> @tgstartx)
begin
set @tgstart = dateadd(day, 1, @tgstartx)
end
end
-- declare @tgmax date
--if (select count(*) from [tbl_stock_opname] where typebahan = 'MPK' and [date_stock_opname] between @tgstart and @tgend) > 0
--begin
-- set @tgmax = (select max(date_stock_opname) from [tbl_stock_opname] where typebahan = 'MPK' and [date_stock_opname] between @tgstart and @tgend)
-- if @tgend <> @tgmax
-- begin
-- set @tgstart = (
-- select max(date_stock_opname) from [tbl_stock_opname] where typebahan = 'MPK' and [date_stock_opname] between @tgstart and @tgend
-- )
-- set @stsstockopname = 1
-- set @dtsto = (select max(dt) from (
-- select [date_stock_opname] as dt from [dbo].[tbl_stock_opname] a
-- where a.[date_stock_opname] = (select max([date_stock_opname]) from [dbo].[tbl_stock_opname] b
-- where b.[date_stock_opname] <= @tgstart
-- ) and a.typebahan = 'MPK'
-- group by part_name_customs, [date_stock_opname]
-- ) as x)
-- set @datesta=dateadd(day, 1, @dtsto)
-- end
--end
;with
ct_kodebrg (kodebarang, namabarang,satuan) as
(
select [kode_brg]
,[nama_barang]
,[satuan] from [tbl_dt_mesindanalatkantor_code]
) ,
ct_saldo_awal
(kodebarang, qty) as (
select part_no, sum(qty) from tbl_dt_mpk_stockawal where date_stockawal=@datesta
group by part_no
),
ct_brg_in(
kodebarang, qty
) as (
select part_no, sum(qty_in) from tbl_dt_mpk_in
where date_in between @tgstart and @tgend
group by part_no
),
ct_brg_out(
kodebarang, qty
) as (
select part_no, sum(qty_out) from dbo.tbl_dt_mpk_out
where date_out between @tgstart and @tgend
group by part_no
),
ct_brg_in_periode(
kodebarang, qty
) as (
select part_no, sum(qty_in) from tbl_dt_mpk_in
where date_in between @datesta and dateadd(DAY, -1, @tgstart)
group by part_no
),
ct_brg_out_periode(
kodebarang, qty
) as (
select part_no, sum(qty_out) from dbo.tbl_dt_mpk_out
where date_out between @datesta and dateadd(DAY, -1, @tgstart)
group by part_no
),
cte_stock_opname_awal(
part_no, qty
) as (
select part_no, sum(qty) from [dbo].[tbl_stock_opname] a
where a.[date_stock_opname] = (select max([date_stock_opname]) from [dbo].[tbl_stock_opname] b
where b.[date_stock_opname] < @tgstart and b.typebahan = 'MPK'
) and a.typebahan = 'MPK'
group by part_no
),
cte_stock_opname_akhir(
part_no, qty
) as (
select part_no, sum(qty) from [dbo].[tbl_stock_opname] a
where a.[date_stock_opname] = (select max([date_stock_opname]) from [dbo].[tbl_stock_opname] b
where b.[date_stock_opname] <= @tgend and b.typebahan = 'MPK'
) and a.typebahan = 'MPK'
group by part_no
),
cte_stock_opname_count(
part_no, cnt, [date_stock_opname]
) as (
select part_no, count(*) AS cnt, [date_stock_opname] from [dbo].[tbl_stock_opname] a
where a.[date_stock_opname] = (select max([date_stock_opname]) from [dbo].[tbl_stock_opname] b
where b.[date_stock_opname] < @tgstart and b.typebahan = 'MPK'
) and a.typebahan = 'MPK'
group by part_no, [date_stock_opname]
) ,
cte_stock_opname_tgl_akhir(
part_no, qty
) as (
select part_no, sum(qty) from [dbo].[tbl_stock_opname] a
where a.[date_stock_opname] = (select max([date_stock_opname]) from [dbo].[tbl_stock_opname] b
where b.[date_stock_opname] = @tgend and b.typebahan = 'MPK'
) and a.typebahan = 'MPK'
group by part_no
)
insert into @mutasibb (
kodebarang
,namabarang
,unit
,qty_saldoawal
,qty_in
,qty_out
,saldo_akhir
,stock_opname
,adj
)
select ct_kodebrg.kodebarang, ct_kodebrg.namabarang, ct_kodebrg.satuan,
-- (isnull(ct_saldo_awal.qty, 0) + (isnull(ct_brg_in_periode.qty,0) - isnull(ct_brg_out_periode.qty,0))) as qty_sta
case when isnull(cte_stock_opname_count.cnt,0) = 0 then
(isnull(ct_saldo_awal.qty,0) + (isnull(ct_brg_in_periode.qty,0)) - (isnull(ct_brg_out_periode.qty,0) ))
else
case when cte_stock_opname_count.date_stock_opname=dateadd(day, -1, @tgstart) then
isnull(cte_stock_opname_awal.qty,0)
else
(isnull(cte_stock_opname_awal.qty,0) + (isnull(ct_brg_in_periode.qty,0) - (isnull(ct_brg_out_periode.qty,0) )))
end
end as qty_sta
,isnull(ct_brg_in.qty, 0) as qty_in
,isnull(ct_brg_out.qty, 0) as qty_out
,(
(case when isnull(cte_stock_opname_count.cnt,0)= 0 then
(isnull(ct_saldo_awal.qty,0) + (isnull(ct_brg_in_periode.qty,0) - isnull(ct_brg_out_periode.qty,0) ))
else
case when cte_stock_opname_count.date_stock_opname=dateadd(day, -1, @tgstart) then
isnull(cte_stock_opname_awal.qty,0)
else
(isnull(cte_stock_opname_awal.qty,0) + (isnull(ct_brg_in_periode.qty,0) - (isnull(ct_brg_out_periode.qty,0) )))
end
end
+
((isnull(ct_brg_in.qty,0))) - (isnull(ct_brg_out.qty,0)))
) as saldo_akhir
,
case when (select count(*) from [tbl_stock_opname] where [date_stock_opname] = @tgend and typebahan = 'MPK') = 0 then 0 else isnull(cte_stock_opname_akhir.qty,0) end as sto
,case when cte_stock_opname_tgl_akhir.qty is null then 0 else
cte_stock_opname_tgl_akhir.qty -
(
(case when isnull(cte_stock_opname_count.cnt,0)= 0 then
(isnull(ct_saldo_awal.qty,0) + (isnull(ct_brg_in_periode.qty,0) - isnull(ct_brg_out_periode.qty,0) ))
else
case when cte_stock_opname_count.date_stock_opname=dateadd(day, -1, @tgstart) then
isnull(cte_stock_opname_awal.qty,0)
else
(isnull(cte_stock_opname_awal.qty,0) + (isnull(ct_brg_in_periode.qty,0) - (isnull(ct_brg_out_periode.qty,0) )))
end
end
+
((isnull(ct_brg_in.qty,0))) - (isnull(ct_brg_out.qty,0)))
)
end
-- ,((isnull(ct_saldo_awal.qty,0) + (isnull(ct_brg_in_periode.qty,0) - isnull(ct_brg_out_periode.qty,0)) + (isnull(ct_brg_in.qty,0)) - isnull(ct_brg_out.qty,0))) as saldo_akhir
from ct_kodebrg
left outer join ct_saldo_awal on ct_kodebrg.kodebarang=ct_saldo_awal.kodebarang
left outer join ct_brg_in on ct_kodebrg.kodebarang=ct_brg_in.kodebarang
left outer join ct_brg_out on ct_kodebrg.kodebarang=ct_brg_out.kodebarang
left outer join ct_brg_in_periode on ct_kodebrg.kodebarang=ct_brg_in_periode.kodebarang
left outer join ct_brg_out_periode on ct_kodebrg.kodebarang=ct_brg_out_periode.kodebarang
left outer join cte_stock_opname_awal on ct_kodebrg.kodebarang = cte_stock_opname_awal.part_no
left outer join cte_stock_opname_akhir on ct_kodebrg.kodebarang = cte_stock_opname_akhir.part_no
left outer join cte_stock_opname_tgl_akhir on ct_kodebrg.kodebarang = cte_stock_opname_tgl_akhir.part_no
left outer join cte_stock_opname_count on ct_kodebrg.kodebarang = cte_stock_opname_count.part_no
end
--group by ct_kodebrg.kodebarang, ct_kodebrg.namabarang, ct_kodebrg.satuan
return
end
GO
GO
CREATE FUNCTION dbo.f_mutasi_mpk
(
@tgstart date, @tgend date
)
RETURNS @mutasibb table (
kodebarang varchar(100) null
,namabarang varchar(100) null
,qty_saldoawal float null
,qty_in float null
,qty_out float null
,saldo_akhir float null
,unit varchar(100) null
,stock_opname float null
,adj float null
,selisih float null
)
AS
begin
declare @end_date_new_mesin date
SELECT top(1) @end_date_new_mesin= end_date
FROM dt_ms_cost_final_avg
WHERE (ms_cost_final_avg_id = 0)
set @end_date_new_mesin='2017-09-01';
if @tgstart>=@end_date_new_mesin
begin
insert into @mutasibb (
kodebarang
,namabarang
,unit
,qty_saldoawal
,qty_in
,qty_out
,saldo_akhir
,stock_opname
,adj
, selisih
)
SELECT
kodebarang
, namabarang
, unit
, qty_saldoawal
, qty_in
, qty_out
, saldo_akhir
, stock_opname
, qty_penyesuaian
, selisih
FROM dbo.vw_fn_ms_mutasi_mesin(@tgstart,@tgend,0) AS vw_fn_ms_mutasi_mesin_1
end
else
begin
declare @datesta date
declare @stsstockopname int, @dtsto date
set @datesta=(select top 1 date_stockawal from tbl_dt_mpk_stockawal group by date_stockawal order by date_stockawal desc)
set @stsstockopname = 0
if (
select count(*) from (
select count(*) as cnt from [dbo].[tbl_stock_opname] a
where a.[date_stock_opname] = (select max([date_stock_opname]) from [dbo].[tbl_stock_opname] b
where b.[date_stock_opname] <= @tgstart and b.typebahan = 'MPK'
) and a.typebahan = 'MPK'
group by part_name_customs
) as x
) > 0
begin
set @stsstockopname = 1
set @dtsto = (select max(dt) from (
select [date_stock_opname] as dt from [dbo].[tbl_stock_opname] a
where a.[date_stock_opname] = (select max([date_stock_opname]) from [dbo].[tbl_stock_opname] b
where b.[date_stock_opname] <= @tgstart and b.typebahan = 'MPK'
) and a.typebahan = 'MPK'
group by part_name_customs, [date_stock_opname]
) as x)
set @datesta=dateadd(day, 1, @dtsto)
end
declare @tgstartx date
if (select count(*) from [tbl_stock_opname] where typebahan = 'MPK' and [date_stock_opname] between @tgstart and @tgend) > 0
begin
set @tgstartx = (
select max(date_stock_opname) from [tbl_stock_opname] where typebahan = 'MPK' and [date_stock_opname] between @tgstart and @tgend
)
if (@tgend <> @tgstartx)
begin
set @tgstart = dateadd(day, 1, @tgstartx)
end
end
-- declare @tgmax date
--if (select count(*) from [tbl_stock_opname] where typebahan = 'MPK' and [date_stock_opname] between @tgstart and @tgend) > 0
--begin
-- set @tgmax = (select max(date_stock_opname) from [tbl_stock_opname] where typebahan = 'MPK' and [date_stock_opname] between @tgstart and @tgend)
-- if @tgend <> @tgmax
-- begin
-- set @tgstart = (
-- select max(date_stock_opname) from [tbl_stock_opname] where typebahan = 'MPK' and [date_stock_opname] between @tgstart and @tgend
-- )
-- set @stsstockopname = 1
-- set @dtsto = (select max(dt) from (
-- select [date_stock_opname] as dt from [dbo].[tbl_stock_opname] a
-- where a.[date_stock_opname] = (select max([date_stock_opname]) from [dbo].[tbl_stock_opname] b
-- where b.[date_stock_opname] <= @tgstart
-- ) and a.typebahan = 'MPK'
-- group by part_name_customs, [date_stock_opname]
-- ) as x)
-- set @datesta=dateadd(day, 1, @dtsto)
-- end
--end
;with
ct_kodebrg (kodebarang, namabarang,satuan) as
(
select [kode_brg]
,[nama_barang]
,[satuan] from [tbl_dt_mesindanalatkantor_code]
) ,
ct_saldo_awal
(kodebarang, qty) as (
select part_no, sum(qty) from tbl_dt_mpk_stockawal where date_stockawal=@datesta
group by part_no
),
ct_brg_in(
kodebarang, qty
) as (
select part_no, sum(qty_in) from tbl_dt_mpk_in
where date_in between @tgstart and @tgend
group by part_no
),
ct_brg_out(
kodebarang, qty
) as (
select part_no, sum(qty_out) from dbo.tbl_dt_mpk_out
where date_out between @tgstart and @tgend
group by part_no
),
ct_brg_in_periode(
kodebarang, qty
) as (
select part_no, sum(qty_in) from tbl_dt_mpk_in
where date_in between @datesta and dateadd(DAY, -1, @tgstart)
group by part_no
),
ct_brg_out_periode(
kodebarang, qty
) as (
select part_no, sum(qty_out) from dbo.tbl_dt_mpk_out
where date_out between @datesta and dateadd(DAY, -1, @tgstart)
group by part_no
),
cte_stock_opname_awal(
part_no, qty
) as (
select part_no, sum(qty) from [dbo].[tbl_stock_opname] a
where a.[date_stock_opname] = (select max([date_stock_opname]) from [dbo].[tbl_stock_opname] b
where b.[date_stock_opname] < @tgstart and b.typebahan = 'MPK'
) and a.typebahan = 'MPK'
group by part_no
),
cte_stock_opname_akhir(
part_no, qty
) as (
select part_no, sum(qty) from [dbo].[tbl_stock_opname] a
where a.[date_stock_opname] = (select max([date_stock_opname]) from [dbo].[tbl_stock_opname] b
where b.[date_stock_opname] <= @tgend and b.typebahan = 'MPK'
) and a.typebahan = 'MPK'
group by part_no
),
cte_stock_opname_count(
part_no, cnt, [date_stock_opname]
) as (
select part_no, count(*) AS cnt, [date_stock_opname] from [dbo].[tbl_stock_opname] a
where a.[date_stock_opname] = (select max([date_stock_opname]) from [dbo].[tbl_stock_opname] b
where b.[date_stock_opname] < @tgstart and b.typebahan = 'MPK'
) and a.typebahan = 'MPK'
group by part_no, [date_stock_opname]
) ,
cte_stock_opname_tgl_akhir(
part_no, qty
) as (
select part_no, sum(qty) from [dbo].[tbl_stock_opname] a
where a.[date_stock_opname] = (select max([date_stock_opname]) from [dbo].[tbl_stock_opname] b
where b.[date_stock_opname] = @tgend and b.typebahan = 'MPK'
) and a.typebahan = 'MPK'
group by part_no
)
insert into @mutasibb (
kodebarang
,namabarang
,unit
,qty_saldoawal
,qty_in
,qty_out
,saldo_akhir
,stock_opname
,adj
)
select ct_kodebrg.kodebarang, ct_kodebrg.namabarang, ct_kodebrg.satuan,
-- (isnull(ct_saldo_awal.qty, 0) + (isnull(ct_brg_in_periode.qty,0) - isnull(ct_brg_out_periode.qty,0))) as qty_sta
case when isnull(cte_stock_opname_count.cnt,0) = 0 then
(isnull(ct_saldo_awal.qty,0) + (isnull(ct_brg_in_periode.qty,0)) - (isnull(ct_brg_out_periode.qty,0) ))
else
case when cte_stock_opname_count.date_stock_opname=dateadd(day, -1, @tgstart) then
isnull(cte_stock_opname_awal.qty,0)
else
(isnull(cte_stock_opname_awal.qty,0) + (isnull(ct_brg_in_periode.qty,0) - (isnull(ct_brg_out_periode.qty,0) )))
end
end as qty_sta
,isnull(ct_brg_in.qty, 0) as qty_in
,isnull(ct_brg_out.qty, 0) as qty_out
,(
(case when isnull(cte_stock_opname_count.cnt,0)= 0 then
(isnull(ct_saldo_awal.qty,0) + (isnull(ct_brg_in_periode.qty,0) - isnull(ct_brg_out_periode.qty,0) ))
else
case when cte_stock_opname_count.date_stock_opname=dateadd(day, -1, @tgstart) then
isnull(cte_stock_opname_awal.qty,0)
else
(isnull(cte_stock_opname_awal.qty,0) + (isnull(ct_brg_in_periode.qty,0) - (isnull(ct_brg_out_periode.qty,0) )))
end
end
+
((isnull(ct_brg_in.qty,0))) - (isnull(ct_brg_out.qty,0)))
) as saldo_akhir
,
case when (select count(*) from [tbl_stock_opname] where [date_stock_opname] = @tgend and typebahan = 'MPK') = 0 then 0 else isnull(cte_stock_opname_akhir.qty,0) end as sto
,case when cte_stock_opname_tgl_akhir.qty is null then 0 else
cte_stock_opname_tgl_akhir.qty -
(
(case when isnull(cte_stock_opname_count.cnt,0)= 0 then
(isnull(ct_saldo_awal.qty,0) + (isnull(ct_brg_in_periode.qty,0) - isnull(ct_brg_out_periode.qty,0) ))
else
case when cte_stock_opname_count.date_stock_opname=dateadd(day, -1, @tgstart) then
isnull(cte_stock_opname_awal.qty,0)
else
(isnull(cte_stock_opname_awal.qty,0) + (isnull(ct_brg_in_periode.qty,0) - (isnull(ct_brg_out_periode.qty,0) )))
end
end
+
((isnull(ct_brg_in.qty,0))) - (isnull(ct_brg_out.qty,0)))
)
end
-- ,((isnull(ct_saldo_awal.qty,0) + (isnull(ct_brg_in_periode.qty,0) - isnull(ct_brg_out_periode.qty,0)) + (isnull(ct_brg_in.qty,0)) - isnull(ct_brg_out.qty,0))) as saldo_akhir
from ct_kodebrg
left outer join ct_saldo_awal on ct_kodebrg.kodebarang=ct_saldo_awal.kodebarang
left outer join ct_brg_in on ct_kodebrg.kodebarang=ct_brg_in.kodebarang
left outer join ct_brg_out on ct_kodebrg.kodebarang=ct_brg_out.kodebarang
left outer join ct_brg_in_periode on ct_kodebrg.kodebarang=ct_brg_in_periode.kodebarang
left outer join ct_brg_out_periode on ct_kodebrg.kodebarang=ct_brg_out_periode.kodebarang
left outer join cte_stock_opname_awal on ct_kodebrg.kodebarang = cte_stock_opname_awal.part_no
left outer join cte_stock_opname_akhir on ct_kodebrg.kodebarang = cte_stock_opname_akhir.part_no
left outer join cte_stock_opname_tgl_akhir on ct_kodebrg.kodebarang = cte_stock_opname_tgl_akhir.part_no
left outer join cte_stock_opname_count on ct_kodebrg.kodebarang = cte_stock_opname_count.part_no
end
--group by ct_kodebrg.kodebarang, ct_kodebrg.namabarang, ct_kodebrg.satuan
return
end
GO