学习过程中偶遇一文,个人感觉蛮不错的,有启发,共发出给有兴趣的朋友参考或启发:
【背景】:
客户提出的一个关于各个店面销售授权的需求:因为每个店面都设立了一个仓库,所以就出现了A,B,C,D…..等仓库,但这些仓库信息是公开化的也就是在录销售单的时候店面可以随便选择,我是B店的销售员但我可以选择C店进行出库(如果店员素质好的话不会这么有意选错的)。一旦仓库信息选择出错后,仓库库存信息不准确,月底盘点盘盈盘亏随之而来。仓管开始翻单找原因,熟悉的人员还算快找一两下就知道什么原因了,不熟悉的人员只能干瞪眼,无从下手。
【分析】:
为了避免这种错误,可以通过SQL脚本来控制仓库授权,实现制单人必须在仓库指定的授权人名里面才可以出库要不然拒绝保存出库单。
【处理】:
第一步:
1、备份账套
2、打开查询分析器
3、选择账套对应数据库
4、输入以下SQL语句(然后按F5执行)
--====================================================================
---向仓库表添加应“授权”字段
Alter Table t_stock Add xiaolu varchar(255)
go
Insert into t_FieldDescription(FTableID,FFieldName,FFieldType,FDescription,FDescription_CHT,FDescription_EN,FSefDefSign)
values(9,'xiaolu','string','授权','授权','授权',1)
go
insert into t_itempropdesc(fitemclassid,fpropid,fname,fsqlcolumnname,fdatatype,fprecision,fscale,factualtype,factualsize
,fbehavior,fbrno,fsearch,faction,fsaverule,fdefaultvalue,fviewmask,ffilterfield,fisshownlist)
values(
5,102,'授权','xiaolu',200,255,0,200,255,null,0,0,null,null,null,0,0,0)
go
---添加完成
--====================================================================
5、执行完成后,效果图如下:
[按案例还没有进行详细的测试,如果存在什么异常请及时恢复备份账套.本案例不对数据后果负责]
第二步:
1、对仓库进行对应的授权,记住!仓库授权是空的话没有办法在销售单中使用。必须手工添加上去。
2、进入用户管理,对需要控制的操作员进行基础资料授权,把他们修改基础资料的权限取消掉,要不然的话这个授权就起不到效果了。
第三步:
建立解发器
1、打开查询分析器
2、选择账套对应数据库
3、把刚才查询分析器里面的语句清除
4、输入以下SQL语句(然后按F5执行)
--====================================================================
create trigger icstockbill_xiaolu
ON [dbo].[ICStockBill]
for insert,update---在保存或修改时触发
AS
declare @fuhao varchar(255)
declare @fitemid int
declare @len int
declare @d int
declare @length int
declare @fname varchar(255)
declare @f102 varchar(255)
declare @fDcstockid int
declare @fbillerid int
declare @quan int
declare @ftrantype int
select @f102=xiaolu,@fitemid=fitemid from t_stock where xiaolu is not null
select @fDcstockid=fDcstockid,@fbillerid=fbillerid,@ftrantype=ftrantype from inserted
set @fuhao='|'
create table #
(
fitemid int,
fuserid int,
f_102 varchar(255)
)
while ( charindex(@fuhao,@f102)>0)
begin
set @length=charindex(@fuhao,@f102)
insert into #
select @fitemid,0,left(@f102,@length-1)
set @f102=stuff(@f102,1,@length,null)
end
set @length=len(@f102)
insert into #
select @fitemid,0,left(@f102,@length)
update # set fuserid=u.fuserid from # a,t_user u where a.f_102=u.fname
--fbillerid 制单人 fdcstockid 仓库代码
set @quan=(select u.fbillerid from inserted u where exists(select * from # a where u.fbillerid=a.fuserid and
u.fDcstockid=a.fitemid))
drop table #
--判断销售单对应仓库如果没有该操作员记录则提示授权
if (@quan is null) and (@ftrantype=21)
begin
rollback tran
RAISERROR ('该仓库您的名字没有被授权,请重新选择仓库!或者联系管理员授权',18,18);
End
--====================================================================
--执行完成
效果图:
|