create trigger [dbo].[ICStockBill_ProcessSOFreeQty1] ON [dbo].[ICStockBill]
for insert,update
as
set nocount on
/******************************************************************************
* TABLE NAME: ICStockBill *
* TRIGGER NAME: ICStockBill_ProcessSOFreeQty1 * *
* CREATED BY: *
* CREATION DATE: 2007/08/01 17:04 *
* DESCRIPTION: *
******************************************************************************/
if exists (select * from Inserted as i join Deleted as d on i.FInterID=d.FInterID join ICStockBillEntry as e on i.FInterID=e.FInterID
where isnull(e.FEntrySelfB0158,0)<>0 and i.FTranType=21 and i.FCheckerID<>0 and isnull(d.FCheckerID,0)=0)
begin
declare @id int,
@entry int
declare @FROB int --紅藍單標誌
exec GetICMaxNum 'ICStockBill', @id output
if @@error<>0 or isnull(@id, -1)=-1
begin
if @@trancount > 0
rollback
return
end
insert ICStockBill (FBrNo, FInterID, FTranType, FOrgBillInterID, FDate, FBillNo, FExplanation, FDeptID, FEmpID, FSupplyID,
FFManagerID, FSManagerID, FBillerID, FCheckerID, FCheckDate, FSaleStyle, FROB, FUpStockWhenSave,
FPOStyle, FPurposeID, FMarketingStyle, FFetchAdd, FRefType, FUse, FBillTypeID, FStatus)
select i.FBrNo, @id, 29, i.FInterID, i.FDate, i.FBillNo+'B', '銷售出庫單'+rtrim(i.FBillNo)+'備品出庫', i.FDeptID, i.FEmpID, i.FSupplyID,
i.FFManagerID, i.FSManagerID, i.FBillerID, i.FCheckerID, i.FCheckDate, i.FSaleStyle, i.FROB, i.FUpStockWhenSave,
null, i.FPurposeID, i.FMarketingStyle, i.FFetchAdd, i.FRefType, i.FUse, 1000, 1
from Inserted as i
join Deleted as d on i.FInterID=d.FInterID
where i.FTranType=21 and i.FCheckerID<>0 and isnull(d.FCheckerID,0)=0
--狀態由0變成1時,即審覈時
if @@error<>0
begin
rollback
return
end
declare @FBrNo int, @FItemID int, @FQty decimal(28,10), @FPrice decimal(28,10), @FAuxQty decimal(28,10), @FAuxPrice decimal(28,10),
@FBatchNo varchar(200), @FNote varchar(255), @FUnitID int, @FDCSPID int, @FDCStockID int, @FKFDate datetime, @FKFPeriod int, @FAuxPropID int
declare temp_cursor cursor for
select e.FBrNo, e.FItemID, round(e.FEntrySelfB0158*u.FCoefficient, b.FQtyDecimal), e.FPrice, e.FEntrySelfB0158, e.FAuxPrice,
e.FBatchNo, e.FNote, e.FUnitID, e.FDCSPID, e.FDCStockID, e.FKFDate, e.FKFPeriod, e.FAuxPropID
from ICStockBillEntry as e
join Inserted as i on e.FInterID=i.FInterID
join Deleted as d on i.FInterID=d.FInterID
join t_ICItemBase as b on e.FItemID=b.FItemID
join t_MeasureUnit as u on e.FUnitID=u.FItemID
where e.FEntrySelfB0158<>0 and i.FTranType=21 and i.FCheckerID<>0 and isnull(d.FCheckerID,0)=0
order by e.fentryid
--狀態由0變成1時,即審覈時
if @@error<>0
begin
rollback
return
end
open temp_cursor
fetch temp_cursor into @FBrNo, @FItemID, @FQty, @FPrice, @FAuxQty, @FAuxPrice, @FBatchNo,
@FNote, @FUnitID, @FDCSPID, @FDCStockID, @FKFDate, @FKFPeriod, @FAuxPropID
select @entry = 0
while(@@fetch_status = 0)
begin
select @entry = @entry + 1
if @FQty>0
select @FROB=1
else
select @FROB=-1
insert ICStockBillEntry (FBrNo, FInterID, FEntryID, FItemID, FQty, FPrice, FAuxQty, FAuxPrice, FAmount,
FBatchNo, FNote, FUnitID, FDCSPID, FDCStockID, FKFDate, FKFPeriod, FAuxPropID)
values (@FBrNo, @id, @entry, @FItemID, @FQty, 0.01, @FAuxQty, 0, 0,
@FBatchNo, @FNote, @FUnitID, @FDCSPID, @FDCStockID, @FKFDate, @FKFPeriod, @FAuxPropID)
if @@error<>0
begin
rollback
return
end
fetch temp_cursor into @FBrNo, @FItemID, @FQty, @FPrice, @FAuxQty, @FAuxPrice, @FBatchNo,
@FNote, @FUnitID, @FDCSPID, @FDCStockID, @FKFDate, @FKFPeriod, @FAuxPropID
end
end
insert ICInventory (FBrNo, FItemID, FBatchNo, FStockID, FStockPlaceID, FKFDate, FKFPeriod, FAuxPropID)
select r.FBrNo, r.FItemID, r.FBatchNo, r.FDCStockID, r.FDCSPID, r.FKFDate, r.FKFPeriod, r.FAuxPropID
from ICInventory as v
right join (select distinct e.FBrNo, e.FItemID, e.FBatchNo, e.FDCStockID, e.FDCSPID,
FKFDate=(case when e.FKFDate is null then '' else convert(char(10), e.FKFDate, 20) end),
e.FKFPeriod, e.FAuxPropID
from ICStockBillEntry as e
join ICStockBill as s on e.FInterID=s.FInterID
join Inserted as i on s.FOrgBillInterID=i.FInterID
join Deleted as d on i.FInterID=d.FInterID
where s.FTranType=29 and s.FCheckerID<>0 and i.FTranType=21 and isnull(i.FCheckerID,0)<>isnull(d.FCheckerID,0))as r
on v.FItemID=r.FItemID and v.FBatchNo=r.FBatchNo and v.FStockID=r.FDCStockID and v.FStockPlaceID=r.FDCSPID and v.FKFDate=r.FKFDate
and v.FKFPeriod=r.FKFPeriod and v.FAuxPropID=r.FAuxPropID
where v.FItemID is null
--更改庫存
if @@error<>0
begin
rollback
return
end
update v set FQty = v.FQty - r.FQty
from ICInventory as v join
(select e.FBrNo, e.FItemID, e.FBatchNo, e.FDCStockID, e.FDCSPID,
FKFDate=(case when e.FKFDate is null then '' else convert(char(10), e.FKFDate, 20) end),
e.FKFPeriod, e.FAuxPropID, FQty=sum(case when isnull(d.FCheckerID,0)=0 then e.FQty else -e.FQty end)
from ICStockBillEntry as e
join ICStockBill as s on e.FInterID=s.FInterID
join Inserted as i on s.FOrgBillInterID=i.FInterID
join Deleted as d on i.FInterID=d.FInterID
where s.FTranType=29 and s.FCheckerID<>0 and i.FTranType=21 and isnull(i.FCheckerID,0)<>isnull(d.FCheckerID,0)
group by e.FBrNo, e.FItemID, e.FBatchNo, e.FDCStockID, e.FDCSPID, e.FKFDate, e.FKFPeriod, e.FAuxPropID) as r
on v.FItemID=r.FItemID and v.FBatchNo=r.FBatchNo and v.FStockID=r.FDCStockID
and v.FStockPlaceID=r.FDCSPID and v.FKFDate=r.FKFDate and v.FKFPeriod=r.FKFPeriod and v.FAuxPropID=r.FAuxPropID
--更改庫存
if @@error<>0
begin
rollback
return
end
update s set FCheckerID=0
from ICStockBill as s
join Inserted as i on s.FOrgBillInterID=i.FInterID
join Deleted as d on i.FInterID=d.FInterID
where s.FTranType=29 and s.FCheckerID<>0 and i.FTranType=21 and isnull(i.FCheckerID,0)=0 and d.FCheckerID<>0
--反審覈
if @@error<>0
begin
rollback
return
end
delete s
from ICStockBill as s join Inserted as i on s.FOrgBillInterID=i.FInterID join Deleted as d on i.FInterID=d.FInterID
where s.FTranType=29 and i.FTranType=21 and isnull(i.FCheckerID,0)=0 and d.FCheckerID<>0
if @@error<>0
begin
rollback
return
end
set nocount off
k3 生成備品出庫單的觸發器
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.