Description
Properties
| Name | Value |
|---|---|
| ANSI Nulls ON | True |
| Quoted Identifier ON | True |
| Encrypted | False |
| Execute As | |
| Assembly |
Parameters
| Name | Data Type | Length | Description |
|---|---|---|---|
| @nobl | varchar | 20 | |
| @tgbl | date | 3 | |
| @typebc | varchar | 5 | |
| @noinv | varchar | -1 |
SQL Script
SET QUOTED_IDENTIFIER, ANSI_NULLS ON
GO
CREATE PROCEDURE dbo.sp_nonhib_insertcb23_recalculate_new_inv_bl
@nobl as varchar(20), @tgbl as date, @typebc as varchar(5), @noinv as varchar(MAX)
AS
BEGIN
declare @tbl_listinv_bl table ( id_hdr bigint,noinv varchar(60))
declare @sts varchar(2), @desc varchar(50)
declare @ihdr bigint, @inoinv varchar(50)
declare @idata varchar(50)
DECLARE a_cursor CURSOR FOR
select data from dbo.Split( @noinv, CHAR(124))
OPEN a_cursor
FETCH NEXT FROM a_cursor INTO @idata
WHILE @@FETCH_STATUS = 0
BEGIN -- begin here
insert into @tbl_listinv_bl (id_hdr, noinv) values((select data from dbo.Split( @idata, ',') where ID = 1), (select data from dbo.Split( @idata, ',') where ID = 2))
FETCH NEXT FROM a_cursor INTO @idata
END
CLOSE a_cursor
DEALLOCATE a_cursor
--select * from @tbl_listinv_bl
declare @id_bc_in_hdr_processed bigint
set @id_bc_in_hdr_processed = (select [id_bc_in_hdr] from dbo.tbl_bc_in_hdr where nobl=@nobl and tglbl=@tgbl and [typedok] = @typebc)
declare @car varchar(26)
set @car = (select CAR from dbo.tbl_bc_in_hdr where nobl=@nobl and tglbl=@tgbl and [typedok] = @typebc)
declare @pasokneg varchar(50)
set @pasokneg=(select top 1 dbo.tbl_bc_in_hdr.PasokNeg from dbo.tbl_bc_in_hdr where dbo.tbl_bc_in_hdr.id_bc_in_hdr=@id_bc_in_hdr_processed )
declare @tmp_newinvoice table (
serial int,
part_name varchar(95),
qty float,
satuan_bc varchar(3),
jmlkemas int,
DNilInv float
)
-- -- insert invoice yang di kirim
declare @lastserial int
set @lastserial =isnull((
SELECT MAX(Serial) AS serial
FROM tbl_bc_in_dtl
WHERE (id_bc_in_hdr = @id_bc_in_hdr_processed)), 0)
insert into @tmp_newinvoice (serial, part_name, qty, satuan_bc, jmlkemas, DNilInv )
select
( select top 1 serial from tbl_bc_in_dtl where BrgUrai = a.partname and id_bc_in_hdr = @id_bc_in_hdr_processed) ,
a.partname,
SUM(a.INVQTY) AS sumqty,
(ISNULL((select top 1 KD_SAT_BC from dbo.tbl_satuan_bc where KD_SAT_INTERNAL = a.UOMPFX), a.UOMPFX)),
SUM(a.PACK) AS sumpack,
SUM(a.hargacif * a.INVQTY)
FROM
dbo.v_nonhib_inv_dtl a
INNER JOIN @tbl_listinv_bl b ON (a.id_nonhib_hdr = b.id_hdr)
GROUP BY
a.partname,
a.UOMPFX
declare @n int, @serial int
declare @part_name varchar(100)
set @n = @lastserial+1
DECLARE tmp_newinvoice_cursor CURSOR FOR
SELECT serial, part_name from @tmp_newinvoice order by serial
OPEN tmp_newinvoice_cursor
FETCH NEXT FROM tmp_newinvoice_cursor INTO @serial, @part_name
WHILE @@FETCH_STATUS = 0
BEGIN -- begin here
update @tmp_newinvoice set serial = @n where serial is null and part_name=@part_name
set @n = @n+1
FETCH NEXT FROM tmp_newinvoice_cursor INTO @serial, @part_name
END
CLOSE tmp_newinvoice_cursor
DEALLOCATE tmp_newinvoice_cursor
--(select * from @tmp_newinvoice) as x
--------select x.part_name_customs, sum(x.jmlkemas), SUM(x.qty), satuan_bc from @tmp_newinvoice x group by part_name_customs, satuan_bc
--return
---- cek apakah ada data baru
if (select COUNT(*) from @tmp_newinvoice ) > 0
begin
BEGIN TRY
BEGIN TRANSACTION
--delete from tbl_bc_in_dtl where Serial=3 or Serial=4 or Serial=5 or Serial=6 or Serial=7
--- update detil
merge tbl_bc_in_dtl AS t
using (select x.serial, x.part_name, x.jmlkemas, x.qty, x.satuan_bc, x.DNilInv from @tmp_newinvoice x) as s
ON t.serial = s.serial and t.id_bc_in_hdr=@id_bc_in_hdr_processed
--ON t.BrgUrai = s.part_name_customs and t.KdSat = s.satuan_bc
--WHEN MATCHED and t.JnsBarangDtl is null
-- THEN DELETE
WHEN MATCHED THEN
UPDATE SET t.KemasJm=t.KemasJm+s.jmlkemas, t.JmlSat=t.JmlSat+s.qty
WHEN NOT MATCHED BY TARGET THEN
INSERT (serial, id_bc_in_hdr, [CAR], [BrgUrai], KemasJm, JmlSat, KdSat, JnsBarangDtl, TujuanKirimDtl, NoHs,
seriTrp, DNilInv, KemasJn, BrgAsal, kdBrg, penggunaan,
merk, Tipe, SpfLain)
values (s.serial, @id_bc_in_hdr_processed, @car, s.part_name, s.jmlkemas,s.qty, s.satuan_bc, '01','02', isnull( (select top 1 replace(tbl_data_part_hs.hs_code,'.','') from tbl_data_part_hs where tbl_data_part_hs.part_name =s.part_name) , '')
,'0', s.DNilInv, 'BX', @pasokneg, isnull((select top 1 kode_brg from dbo.tbl_custom_name where custom_name=(select top 1 a.part_name_customs from dbo.tbl_data_part_hs a where a.part_name=s.part_name)), '-'),'1',
'-','-','-');
-- update contener
merge tbl_bc_in_con AS t
using (SELECT a.CONTNO as CONTNO FROM tbl_nonhib_dtl a INNER JOIN @tbl_listinv_bl b ON a.id_nonhib_hdr = b.id_hdr GROUP BY a.CONTNO) as s
ON t.ContNo = s.CONTNO
WHEN NOT MATCHED BY TARGET THEN
INSERT (id_bc_in_hdr, CAR, ContNo, ContUkur, ContTipe)
values (@id_bc_in_hdr_processed, @car, s.CONTNO, '40' ,'F' )
;
--update dokumen
merge dbo.tbl_bc_in_dok AS t
using (SELECT b.id_hdr as id_nonhib_hdr, b.noinv as noinv FROM @tbl_listinv_bl b) as s
ON t.DokNo = s.noinv
WHEN NOT MATCHED BY TARGET THEN
INSERT (id_bc_in_hdr, CAR, DokKd,DokNo,DokTg)
values (@id_bc_in_hdr_processed , @car, '380', noinv , (select top 1 tglinv from dbo.tbl_nonhib where id_nonhib_hdr=s.id_nonhib_hdr) )
;
--update header
update tbl_bc_in_hdr set JmCont=(select COUNT(*) as cnt from tbl_bc_in_con where id_bc_in_hdr=@id_bc_in_hdr_processed)
,JmBrg=(select COUNT(*) as cnt from tbl_bc_in_dtl where id_bc_in_hdr=@id_bc_in_hdr_processed)
,NilInv=(select SUM(DNilInv) as asum from tbl_bc_in_dtl where id_bc_in_hdr=@id_bc_in_hdr_processed)
where id_bc_in_hdr=@id_bc_in_hdr_processed
--OUTPUT $action,
--DELETED.serial AS tserial,
--DELETED.JmlSat AS tJmlSat,
--INSERTED.serial AS sserial,
--INSERTED.[BrgUrai] AS SBrgUrai;
--SELECT @@ROWCOUNT;
-- update partnumber detil
insert into tbl_bc_in_dtl_partnumber (
[inv_dtl]
,[inv_hdr_id]
,[id_bc_in_hdr]
,[noinv]
,[car]
,part_no2
,[part_number]
,part_name
,[part_name_customs]
,[bm]
,[qty]
,[unit]
,[harga]
,[kdval]
,[box]
,[pack]
,hscode
,id_partnumber
,seri_detil
) select
dbo.v_nonhib_inv_dtl.id_nonhib_dtl
,dbo.v_nonhib_inv_dtl.id_nonhib_hdr
,@id_bc_in_hdr_processed
,dbo.v_nonhib_inv_dtl.INVOICE_NO
,'-'
,(select top 1 dbo.tbl_data_part_hs.part_no2 from tbl_data_part_hs where tbl_data_part_hs.part_no = dbo.v_nonhib_inv_dtl.partnumberx )
,dbo.v_nonhib_inv_dtl.partnumberx
,(select top 1 dbo.tbl_data_part_hs.part_name from tbl_data_part_hs where tbl_data_part_hs.part_no = dbo.v_nonhib_inv_dtl.partnumberx )
,isnull(dbo.v_nonhib_inv_dtl.partnamecustoms,'-UNKNOWN' + replace(convert(varchar(255) , newid()), '-','')) as part_name_customs
,(isnull((select top 1 dbo.tbl_data_part_hs.bm from tbl_data_part_hs where tbl_data_part_hs.part_name = dbo.v_nonhib_inv_dtl.partnumberx ), 0) ) as bm
,dbo.v_nonhib_inv_dtl.INVQTY
,(ISNULL((select top 1 KD_SAT_BC from dbo.tbl_satuan_bc where KD_SAT_INTERNAL = dbo.v_nonhib_inv_dtl.UOMPFX), dbo.v_nonhib_inv_dtl.UOMPFX))
,(isnull(v_nonhib_inv_dtl.hargacif, 0)) as cekprice -- i dont know from where
,'USD' -- i dont know from where
,0 -- i dont know from where
,dbo.v_nonhib_inv_dtl.PACK
,(isnull((select top 1 dbo.tbl_data_part_hs.hs_code from tbl_data_part_hs where tbl_data_part_hs.part_name = dbo.v_nonhib_inv_dtl.partnumberx ), '000000000') ) as hscode
,(isnull((select top 1 dbo.tbl_data_part_hs.id from tbl_data_part_hs where tbl_data_part_hs.part_no = dbo.v_nonhib_inv_dtl.partnumberx ), 0) ) as idpart
,(select top 1 Serial from tbl_bc_in_dtl where id_bc_in_hdr = @id_bc_in_hdr_processed and BrgUrai= v_nonhib_inv_dtl.partnamecustoms )
FROM @tbl_listinv_bl a INNER JOIN
v_nonhib_inv_dtl ON a.id_hdr = v_nonhib_inv_dtl.id_nonhib_hdr
update dbo.tbl_nonhib set dbo.tbl_nonhib.status = 'DATA PROCESSED' where dbo.tbl_nonhib.nobl = @nobl and dbo.tbl_nonhib.tgbl = @tgbl
INSERT INTO tbl_bc_in_hdr_h_status
(id_bc_in_hdr, statusdok, status_date)
VALUES (@id_bc_in_hdr_processed, (select top 1 tbl_bc_in_hdr.statusdok from tbl_bc_in_hdr where tbl_bc_in_hdr.inv_hdr_id = @id_bc_in_hdr_processed), GETDATE())
COMMIT
END TRY
BEGIN CATCH
-- Whoops, there was an error
IF @@TRANCOUNT > 0
ROLLBACK
-- Raise an error with the details of the exception
DECLARE @ErrMsg nvarchar(4000), @ErrSeverity int
Set @ErrMsg = ERROR_MESSAGE()
set @ErrSeverity = ERROR_SEVERITY()
select @ErrMsg as status,@ErrSeverity as description
RAISERROR(@ErrMsg, @ErrSeverity, 1)
END CATCH
select '00' as status, 'Data BC Added' as description
end -- end if
-- set @sts = '00'
-- set @desc = 'Data Processed'
-- goto msg
--msg:
-- select @sts as status, @desc as description
--MERGE [AS TARGET]
--USING [AS SOURCE]
--ON
--[WHEN MATCHED
--THEN ]
--[WHEN NOT MATCHED [BY TARGET]
--THEN ]
--[WHEN NOT MATCHED BY SOURCE
--THEN ];
END
GO
GO
CREATE PROCEDURE dbo.sp_nonhib_insertcb23_recalculate_new_inv_bl
@nobl as varchar(20), @tgbl as date, @typebc as varchar(5), @noinv as varchar(MAX)
AS
BEGIN
declare @tbl_listinv_bl table ( id_hdr bigint,noinv varchar(60))
declare @sts varchar(2), @desc varchar(50)
declare @ihdr bigint, @inoinv varchar(50)
declare @idata varchar(50)
DECLARE a_cursor CURSOR FOR
select data from dbo.Split( @noinv, CHAR(124))
OPEN a_cursor
FETCH NEXT FROM a_cursor INTO @idata
WHILE @@FETCH_STATUS = 0
BEGIN -- begin here
insert into @tbl_listinv_bl (id_hdr, noinv) values((select data from dbo.Split( @idata, ',') where ID = 1), (select data from dbo.Split( @idata, ',') where ID = 2))
FETCH NEXT FROM a_cursor INTO @idata
END
CLOSE a_cursor
DEALLOCATE a_cursor
--select * from @tbl_listinv_bl
declare @id_bc_in_hdr_processed bigint
set @id_bc_in_hdr_processed = (select [id_bc_in_hdr] from dbo.tbl_bc_in_hdr where nobl=@nobl and tglbl=@tgbl and [typedok] = @typebc)
declare @car varchar(26)
set @car = (select CAR from dbo.tbl_bc_in_hdr where nobl=@nobl and tglbl=@tgbl and [typedok] = @typebc)
declare @pasokneg varchar(50)
set @pasokneg=(select top 1 dbo.tbl_bc_in_hdr.PasokNeg from dbo.tbl_bc_in_hdr where dbo.tbl_bc_in_hdr.id_bc_in_hdr=@id_bc_in_hdr_processed )
declare @tmp_newinvoice table (
serial int,
part_name varchar(95),
qty float,
satuan_bc varchar(3),
jmlkemas int,
DNilInv float
)
-- -- insert invoice yang di kirim
declare @lastserial int
set @lastserial =isnull((
SELECT MAX(Serial) AS serial
FROM tbl_bc_in_dtl
WHERE (id_bc_in_hdr = @id_bc_in_hdr_processed)), 0)
insert into @tmp_newinvoice (serial, part_name, qty, satuan_bc, jmlkemas, DNilInv )
select
( select top 1 serial from tbl_bc_in_dtl where BrgUrai = a.partname and id_bc_in_hdr = @id_bc_in_hdr_processed) ,
a.partname,
SUM(a.INVQTY) AS sumqty,
(ISNULL((select top 1 KD_SAT_BC from dbo.tbl_satuan_bc where KD_SAT_INTERNAL = a.UOMPFX), a.UOMPFX)),
SUM(a.PACK) AS sumpack,
SUM(a.hargacif * a.INVQTY)
FROM
dbo.v_nonhib_inv_dtl a
INNER JOIN @tbl_listinv_bl b ON (a.id_nonhib_hdr = b.id_hdr)
GROUP BY
a.partname,
a.UOMPFX
declare @n int, @serial int
declare @part_name varchar(100)
set @n = @lastserial+1
DECLARE tmp_newinvoice_cursor CURSOR FOR
SELECT serial, part_name from @tmp_newinvoice order by serial
OPEN tmp_newinvoice_cursor
FETCH NEXT FROM tmp_newinvoice_cursor INTO @serial, @part_name
WHILE @@FETCH_STATUS = 0
BEGIN -- begin here
update @tmp_newinvoice set serial = @n where serial is null and part_name=@part_name
set @n = @n+1
FETCH NEXT FROM tmp_newinvoice_cursor INTO @serial, @part_name
END
CLOSE tmp_newinvoice_cursor
DEALLOCATE tmp_newinvoice_cursor
--(select * from @tmp_newinvoice) as x
--------select x.part_name_customs, sum(x.jmlkemas), SUM(x.qty), satuan_bc from @tmp_newinvoice x group by part_name_customs, satuan_bc
--return
---- cek apakah ada data baru
if (select COUNT(*) from @tmp_newinvoice ) > 0
begin
BEGIN TRY
BEGIN TRANSACTION
--delete from tbl_bc_in_dtl where Serial=3 or Serial=4 or Serial=5 or Serial=6 or Serial=7
--- update detil
merge tbl_bc_in_dtl AS t
using (select x.serial, x.part_name, x.jmlkemas, x.qty, x.satuan_bc, x.DNilInv from @tmp_newinvoice x) as s
ON t.serial = s.serial and t.id_bc_in_hdr=@id_bc_in_hdr_processed
--ON t.BrgUrai = s.part_name_customs and t.KdSat = s.satuan_bc
--WHEN MATCHED and t.JnsBarangDtl is null
-- THEN DELETE
WHEN MATCHED THEN
UPDATE SET t.KemasJm=t.KemasJm+s.jmlkemas, t.JmlSat=t.JmlSat+s.qty
WHEN NOT MATCHED BY TARGET THEN
INSERT (serial, id_bc_in_hdr, [CAR], [BrgUrai], KemasJm, JmlSat, KdSat, JnsBarangDtl, TujuanKirimDtl, NoHs,
seriTrp, DNilInv, KemasJn, BrgAsal, kdBrg, penggunaan,
merk, Tipe, SpfLain)
values (s.serial, @id_bc_in_hdr_processed, @car, s.part_name, s.jmlkemas,s.qty, s.satuan_bc, '01','02', isnull( (select top 1 replace(tbl_data_part_hs.hs_code,'.','') from tbl_data_part_hs where tbl_data_part_hs.part_name =s.part_name) , '')
,'0', s.DNilInv, 'BX', @pasokneg, isnull((select top 1 kode_brg from dbo.tbl_custom_name where custom_name=(select top 1 a.part_name_customs from dbo.tbl_data_part_hs a where a.part_name=s.part_name)), '-'),'1',
'-','-','-');
-- update contener
merge tbl_bc_in_con AS t
using (SELECT a.CONTNO as CONTNO FROM tbl_nonhib_dtl a INNER JOIN @tbl_listinv_bl b ON a.id_nonhib_hdr = b.id_hdr GROUP BY a.CONTNO) as s
ON t.ContNo = s.CONTNO
WHEN NOT MATCHED BY TARGET THEN
INSERT (id_bc_in_hdr, CAR, ContNo, ContUkur, ContTipe)
values (@id_bc_in_hdr_processed, @car, s.CONTNO, '40' ,'F' )
;
--update dokumen
merge dbo.tbl_bc_in_dok AS t
using (SELECT b.id_hdr as id_nonhib_hdr, b.noinv as noinv FROM @tbl_listinv_bl b) as s
ON t.DokNo = s.noinv
WHEN NOT MATCHED BY TARGET THEN
INSERT (id_bc_in_hdr, CAR, DokKd,DokNo,DokTg)
values (@id_bc_in_hdr_processed , @car, '380', noinv , (select top 1 tglinv from dbo.tbl_nonhib where id_nonhib_hdr=s.id_nonhib_hdr) )
;
--update header
update tbl_bc_in_hdr set JmCont=(select COUNT(*) as cnt from tbl_bc_in_con where id_bc_in_hdr=@id_bc_in_hdr_processed)
,JmBrg=(select COUNT(*) as cnt from tbl_bc_in_dtl where id_bc_in_hdr=@id_bc_in_hdr_processed)
,NilInv=(select SUM(DNilInv) as asum from tbl_bc_in_dtl where id_bc_in_hdr=@id_bc_in_hdr_processed)
where id_bc_in_hdr=@id_bc_in_hdr_processed
--OUTPUT $action,
--DELETED.serial AS tserial,
--DELETED.JmlSat AS tJmlSat,
--INSERTED.serial AS sserial,
--INSERTED.[BrgUrai] AS SBrgUrai;
--SELECT @@ROWCOUNT;
-- update partnumber detil
insert into tbl_bc_in_dtl_partnumber (
[inv_dtl]
,[inv_hdr_id]
,[id_bc_in_hdr]
,[noinv]
,[car]
,part_no2
,[part_number]
,part_name
,[part_name_customs]
,[bm]
,[qty]
,[unit]
,[harga]
,[kdval]
,[box]
,[pack]
,hscode
,id_partnumber
,seri_detil
) select
dbo.v_nonhib_inv_dtl.id_nonhib_dtl
,dbo.v_nonhib_inv_dtl.id_nonhib_hdr
,@id_bc_in_hdr_processed
,dbo.v_nonhib_inv_dtl.INVOICE_NO
,'-'
,(select top 1 dbo.tbl_data_part_hs.part_no2 from tbl_data_part_hs where tbl_data_part_hs.part_no = dbo.v_nonhib_inv_dtl.partnumberx )
,dbo.v_nonhib_inv_dtl.partnumberx
,(select top 1 dbo.tbl_data_part_hs.part_name from tbl_data_part_hs where tbl_data_part_hs.part_no = dbo.v_nonhib_inv_dtl.partnumberx )
,isnull(dbo.v_nonhib_inv_dtl.partnamecustoms,'-UNKNOWN' + replace(convert(varchar(255) , newid()), '-','')) as part_name_customs
,(isnull((select top 1 dbo.tbl_data_part_hs.bm from tbl_data_part_hs where tbl_data_part_hs.part_name = dbo.v_nonhib_inv_dtl.partnumberx ), 0) ) as bm
,dbo.v_nonhib_inv_dtl.INVQTY
,(ISNULL((select top 1 KD_SAT_BC from dbo.tbl_satuan_bc where KD_SAT_INTERNAL = dbo.v_nonhib_inv_dtl.UOMPFX), dbo.v_nonhib_inv_dtl.UOMPFX))
,(isnull(v_nonhib_inv_dtl.hargacif, 0)) as cekprice -- i dont know from where
,'USD' -- i dont know from where
,0 -- i dont know from where
,dbo.v_nonhib_inv_dtl.PACK
,(isnull((select top 1 dbo.tbl_data_part_hs.hs_code from tbl_data_part_hs where tbl_data_part_hs.part_name = dbo.v_nonhib_inv_dtl.partnumberx ), '000000000') ) as hscode
,(isnull((select top 1 dbo.tbl_data_part_hs.id from tbl_data_part_hs where tbl_data_part_hs.part_no = dbo.v_nonhib_inv_dtl.partnumberx ), 0) ) as idpart
,(select top 1 Serial from tbl_bc_in_dtl where id_bc_in_hdr = @id_bc_in_hdr_processed and BrgUrai= v_nonhib_inv_dtl.partnamecustoms )
FROM @tbl_listinv_bl a INNER JOIN
v_nonhib_inv_dtl ON a.id_hdr = v_nonhib_inv_dtl.id_nonhib_hdr
update dbo.tbl_nonhib set dbo.tbl_nonhib.status = 'DATA PROCESSED' where dbo.tbl_nonhib.nobl = @nobl and dbo.tbl_nonhib.tgbl = @tgbl
INSERT INTO tbl_bc_in_hdr_h_status
(id_bc_in_hdr, statusdok, status_date)
VALUES (@id_bc_in_hdr_processed, (select top 1 tbl_bc_in_hdr.statusdok from tbl_bc_in_hdr where tbl_bc_in_hdr.inv_hdr_id = @id_bc_in_hdr_processed), GETDATE())
COMMIT
END TRY
BEGIN CATCH
-- Whoops, there was an error
IF @@TRANCOUNT > 0
ROLLBACK
-- Raise an error with the details of the exception
DECLARE @ErrMsg nvarchar(4000), @ErrSeverity int
Set @ErrMsg = ERROR_MESSAGE()
set @ErrSeverity = ERROR_SEVERITY()
select @ErrMsg as status,@ErrSeverity as description
RAISERROR(@ErrMsg, @ErrSeverity, 1)
END CATCH
select '00' as status, 'Data BC Added' as description
end -- end if
-- set @sts = '00'
-- set @desc = 'Data Processed'
-- goto msg
--msg:
-- select @sts as status, @desc as description
--MERGE
--USING
--ON
--[WHEN MATCHED
--THEN
--[WHEN NOT MATCHED [BY TARGET]
--THEN
--[WHEN NOT MATCHED BY SOURCE
--THEN
END
GO
Depends On
13Used By
No items found