You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
467 lines
16 KiB
467 lines
16 KiB
1 year ago
|
if exists(select * from sysobjects where name='p_rz_prepare_sj' and xtype='p')
|
||
|
drop procedure p_rz_prepare_sj
|
||
|
go
|
||
|
create procedure p_rz_prepare_sj
|
||
|
(
|
||
|
@psorgcode varchar(10),
|
||
|
@psbillno varchar(20),
|
||
|
@psparams varchar(200),
|
||
|
@psmsg varchar(2000) out
|
||
|
)
|
||
|
as
|
||
|
begin
|
||
|
set @psmsg=''
|
||
|
return(1)
|
||
|
end
|
||
|
go
|
||
|
|
||
|
if exists(select * from sysobjects where name='p_rz_sj_circle_proc' and xtype='p')
|
||
|
drop procedure p_rz_sj_circle_proc
|
||
|
go
|
||
|
create procedure p_rz_sj_circle_proc
|
||
|
(
|
||
|
@psorgcode varchar(10),
|
||
|
@psbillno varchar(20),
|
||
|
@psproctype varchar(1),
|
||
|
@psmsg varchar(2000) out
|
||
|
)
|
||
|
as
|
||
|
begin
|
||
|
declare @detail_plucode varchar(20)
|
||
|
declare @detail_pluname varchar(40)
|
||
|
declare @detail_plutype varchar(1)
|
||
|
declare @detail_depcode varchar(10)
|
||
|
declare @detail_serialno numeric(19,0)
|
||
|
declare @detail_jtaxrate numeric(19,4)
|
||
|
declare @detail_newprice numeric(19,4)
|
||
|
declare @detail_newvipprice numeric(19,4)
|
||
|
declare @detail_newpfprice numeric(19,4)
|
||
|
declare @detail_newpsprice numeric(19,4)
|
||
|
declare @detail_oldprice numeric(19,4)
|
||
|
declare @detail_newtotal numeric(19,4)
|
||
|
declare @detail_pricediff numeric(19,4)
|
||
|
declare @detail_jprice numeric(19,4)
|
||
|
declare @detail_netjprice numeric(19,4)
|
||
|
declare @detail_counts numeric(19,4)
|
||
|
declare @detail_totaldiff numeric(19,4)
|
||
|
declare @detail_jccost numeric(19,4)
|
||
|
declare @detail_jcnetcost numeric(19,4)
|
||
|
declare @detail_jctotal numeric(19,4)
|
||
|
declare @stock_newtotal numeric(19,4)
|
||
|
declare @stock_cost numeric(19,4)
|
||
|
declare @stock_netcost numeric(19,4)
|
||
|
declare @stock_tzamount numeric(19,4)
|
||
|
declare @pack_packcode varchar(20)
|
||
|
declare @pack_plucounts numeric(19,4)
|
||
|
declare @scurdate varchar(10)
|
||
|
declare @scurtime varchar(8)
|
||
|
declare @sinfo varchar(8000)
|
||
|
declare @ssql varchar(8000)
|
||
|
declare @isupdgoods varchar(1)
|
||
|
|
||
|
select @isupdgoods='1'
|
||
|
select @scurdate=convert(varchar(100),getdate(),120),@scurtime=convert(varchar(100),getdate(),108)
|
||
|
select @isupdgoods=isnull(itemvalue,'1') from t_syscfg where section='SYSTEM' and itemname='BothChange'
|
||
|
|
||
|
declare cur cursor for select d.plucode,d.pluname,d.serialno,d.newprice,d.newvipprice,d.newpfprice,d.newpsprice,d.oldprice,d.newtotal,d.depcode,d.jprice,d.netjprice,d.counts,d.totaldiff
|
||
|
from t_adjprice_body d where billno=@psbillno order by d.plucode,d.serialno
|
||
|
open cur
|
||
|
fetch next from cur into @detail_plucode,@detail_pluname,@detail_serialno,@detail_newprice,@detail_newvipprice,@detail_newpfprice,@detail_newpsprice,
|
||
|
@detail_oldprice,@detail_newtotal,@detail_depcode,@detail_jprice,@detail_netjprice,@detail_counts,@detail_totaldiff
|
||
|
while @@fetch_status=0
|
||
|
begin
|
||
|
set @detail_pricediff=@detail_newprice-@detail_oldprice
|
||
|
set @stock_newtotal=@detail_newtotal
|
||
|
|
||
|
select @stock_cost=case when a.plutype='2' then 0 else b.cost end,
|
||
|
@stock_netcost=case when a.plutype='2' then 0 else b.netcost end,
|
||
|
@stock_tzamount=case when a.plutype='2' then 0 else b.tzamount end,
|
||
|
@detail_jtaxrate=a.jtaxrate,@detail_plutype=a.plutype
|
||
|
from t_plu a,t_plu_org b
|
||
|
where a.plucode=@detail_plucode and a.plucode=b.plucode and b.orgcode=@psorgcode and b.isright='1'
|
||
|
|
||
|
if @detail_newprice is not null
|
||
|
begin
|
||
|
if @isupdgoods='1'
|
||
|
begin
|
||
|
set @ssql='update t_plu set price='+cast(@detail_newprice as varchar)+' where plucode='''+@detail_plucode+''''
|
||
|
exec (@ssql)
|
||
|
if @@error<>0
|
||
|
begin
|
||
|
set @psmsg='更新商品零售价失败'
|
||
|
return(-1)
|
||
|
end
|
||
|
end
|
||
|
update t_plu_org set price=@detail_newprice,sjdate=convert(varchar(10),getdate(),120),chgdate=convert(varchar(20),getdate(),120),total=@stock_newtotal
|
||
|
where plucode=@detail_plucode and orgcode=@psorgcode and isright='1'
|
||
|
if @@error<>0
|
||
|
begin
|
||
|
set @psmsg='更新机构商品零售价失败'
|
||
|
return(-1)
|
||
|
end
|
||
|
end
|
||
|
|
||
|
if @detail_newvipprice is not null
|
||
|
begin
|
||
|
if @isupdgoods='1'
|
||
|
begin
|
||
|
update t_plu set vipprice=@detail_newvipprice where plucode=@detail_plucode
|
||
|
if @@error<>0
|
||
|
begin
|
||
|
set @psmsg='更新商品会员价失败'
|
||
|
return(-1)
|
||
|
end
|
||
|
end
|
||
|
|
||
|
update t_plu_org set vipprice=@detail_newvipprice,sjdate=convert(varchar(10),getdate(),120),chgdate=convert(varchar(20),getdate(),120)
|
||
|
where plucode=@detail_plucode and orgcode=@psorgcode and isright='1'
|
||
|
if @@error<>0
|
||
|
begin
|
||
|
set @psmsg='更新机构商品会员价失败'
|
||
|
return(-1)
|
||
|
end
|
||
|
end
|
||
|
|
||
|
if @detail_newpfprice is not null
|
||
|
begin
|
||
|
if @isupdgoods='1'
|
||
|
begin
|
||
|
update t_plu set pfprice=@detail_newpfprice where plucode=@detail_plucode
|
||
|
if @@error<>0
|
||
|
begin
|
||
|
set @psmsg='更新商品批发价失败'
|
||
|
return(-1)
|
||
|
end
|
||
|
end
|
||
|
|
||
|
update t_plu_org set pfprice=@detail_newpfprice where plucode=@detail_plucode and orgcode=@psorgcode and isright='1'
|
||
|
if @@error<>0
|
||
|
begin
|
||
|
set @psmsg='更新机构商品批发价失败'
|
||
|
return(-1)
|
||
|
end
|
||
|
end
|
||
|
|
||
|
if @detail_newpsprice is not null
|
||
|
begin
|
||
|
if @isupdgoods='1'
|
||
|
begin
|
||
|
update t_plu set psprice=case when plutype='2' then 0 else @detail_newpsprice end where plucode=@detail_plucode
|
||
|
if @@error<>0
|
||
|
begin
|
||
|
set @psmsg='更新商品配送价失败'
|
||
|
return(-1)
|
||
|
end
|
||
|
end
|
||
|
update t_plu_org set psprice=case when @detail_plutype='2' then 0 else @detail_newpsprice end
|
||
|
where plucode=@detail_plucode and orgcode=@psorgcode and isright='1'
|
||
|
if @@error<>0
|
||
|
begin
|
||
|
set @psmsg='更新机构商品配送价失败'
|
||
|
return(-1)
|
||
|
end
|
||
|
end
|
||
|
|
||
|
if @detail_newprice is not null
|
||
|
begin
|
||
|
update t_plupack set pluprice=@detail_newprice where plucode=@detail_plucode
|
||
|
if @@error<>0
|
||
|
begin
|
||
|
set @psmsg='更新商品包中单品的零售价失败'
|
||
|
return(-1)
|
||
|
end
|
||
|
end
|
||
|
|
||
|
if (@psproctype='0') and (@detail_newprice is not null)
|
||
|
begin
|
||
|
declare curplupack cursor for select packcode,counts from t_plupack where plucode=@detail_plucode
|
||
|
open curplupack
|
||
|
fetch next from curplupack into @pack_packcode,@pack_plucounts
|
||
|
while @@fetch_status=0
|
||
|
begin
|
||
|
update t_plupack set packtotal=packtotal+round(@pack_plucounts*@detail_pricediff,2) where packcode=@pack_packcode
|
||
|
if @@error<>0
|
||
|
begin
|
||
|
set @psmsg='更新商品包零售价失败'
|
||
|
return(-1)
|
||
|
end
|
||
|
|
||
|
update t_plu set packprice=packprice+round(@pack_plucounts*@detail_pricediff,2),chgdate=convert(varchar(20),getdate(),120) where plucode=@pack_packcode
|
||
|
if @@error<>0
|
||
|
begin
|
||
|
set @psmsg='更新商品零售价失败'
|
||
|
return(-1)
|
||
|
end
|
||
|
|
||
|
fetch next from curplupack into @pack_packcode,@pack_plucounts
|
||
|
end
|
||
|
close curplupack
|
||
|
deallocate curplupack
|
||
|
end
|
||
|
|
||
|
set @detail_jccost=@stock_cost+@stock_tzamount
|
||
|
set @detail_jcnetcost=@stock_netcost+round(@stock_tzamount/(1+@detail_jtaxrate/100.00),2)
|
||
|
set @detail_jctotal=@stock_newtotal
|
||
|
if @detail_newprice is null
|
||
|
set @detail_newprice=@detail_oldprice
|
||
|
exec p_create_gbk_data @scurdate,@scurtime,@detail_plucode,@detail_depcode,@psbillno,'8',
|
||
|
@detail_jprice,@detail_netjprice,@detail_newprice,@detail_counts,0,0,@detail_totaldiff,
|
||
|
@detail_counts,@detail_jccost,@detail_jcnetcost,@detail_jctotal,@psorgcode,'','',@sinfo out
|
||
|
if @@error<>0
|
||
|
begin
|
||
|
set @psmsg='生成商品台账失败'
|
||
|
return(-1)
|
||
|
end
|
||
|
|
||
|
fetch next from cur into @detail_plucode,@detail_pluname,@detail_serialno,@detail_newprice,@detail_newvipprice,@detail_newpfprice,@detail_newpsprice,
|
||
|
@detail_oldprice,@detail_newtotal,@detail_depcode,@detail_jprice,@detail_netjprice,@detail_counts,@detail_totaldiff
|
||
|
end
|
||
|
close cur
|
||
|
deallocate cur
|
||
|
end
|
||
|
go
|
||
|
|
||
|
if exists(select * from sysobjects where name='p_rz_sj' and xtype='p')
|
||
|
drop procedure p_rz_sj
|
||
|
go
|
||
|
create procedure p_rz_sj
|
||
|
(
|
||
|
@psorgcode varchar(10),
|
||
|
@psbillno varchar(20),
|
||
|
@psparams varchar(200),
|
||
|
@psmsg varchar(2000) out
|
||
|
)
|
||
|
as
|
||
|
begin
|
||
|
declare @sorgcode varchar(10)
|
||
|
declare @scurdate varchar(10)
|
||
|
declare @scurtime varchar(8)
|
||
|
declare @sver varchar(1)
|
||
|
declare @sorgtype varchar(1)
|
||
|
declare @sisdbdeploy varchar(1)
|
||
|
declare @supdlastpfprice varchar(1)
|
||
|
declare @ssql varchar(8000)
|
||
|
declare @sinfo varchar(8000)
|
||
|
declare @irtn int
|
||
|
declare @isplan varchar(1)
|
||
|
declare @sxdate varchar(10)
|
||
|
declare @sxtime varchar(8)
|
||
|
declare @isexec varchar(1)
|
||
|
declare @ischgprc varchar(1)
|
||
|
declare @svalue varchar(200)
|
||
|
declare @iindex int
|
||
|
declare @ivalueno int
|
||
|
|
||
|
set @supdlastpfprice=''
|
||
|
set @isexec=''
|
||
|
set @iindex=1
|
||
|
set @ivalueno=0
|
||
|
set @svalue=''
|
||
|
|
||
|
while @iindex<=len(@psparams)
|
||
|
begin
|
||
|
if substring(@psparams,@iindex,1)<>';'
|
||
|
begin
|
||
|
set @svalue=@svalue+substring(@psparams,@iindex,1)
|
||
|
end
|
||
|
else
|
||
|
begin
|
||
|
set @ivalueno=@ivalueno+1
|
||
|
if @ivalueno=1
|
||
|
set @supdlastpfprice=@svalue
|
||
|
set @svalue=''
|
||
|
end
|
||
|
set @iindex=@iindex+1
|
||
|
if @iindex>len(@psparams)
|
||
|
begin
|
||
|
set @ivalueno=@ivalueno+1
|
||
|
if @ivalueno=2
|
||
|
set @isexec=@svalue
|
||
|
end
|
||
|
end
|
||
|
|
||
|
set @scurdate=convert(varchar(10),getdate(),120)
|
||
|
set @scurtime=convert(varchar(8),getdate(),108)
|
||
|
select @sver=itemvalue from t_syscfg where section='SYSTEM' and itemname='VER'
|
||
|
select @sorgcode=orgcode,@isplan=isplan,@sxdate=sxdate,@sxtime=sxtime from t_adjprice_head where billno=@psbillno
|
||
|
select @sorgtype=orgtype,@sisdbdeploy=isdbdeploy from t_shop where orgcode=@sorgcode
|
||
|
|
||
|
if (@isplan='1' and @isexec='0')
|
||
|
set @ischgprc='0'
|
||
|
else
|
||
|
set @ischgprc='1'
|
||
|
|
||
|
if @ischgprc='1'
|
||
|
begin
|
||
|
if (@sver='0') or (@sver<>'0') and ((@sorgtype='2') or (@sisdbdeploy='1'))
|
||
|
begin
|
||
|
set @ssql='update a set counts=b.gcount+b.ccount,
|
||
|
total=case when c.plutype=''2'' then 0 else round(oldprice*(b.gcount+b.ccount),2) end,
|
||
|
newtotal=isnull(case when c.plutype=''2'' then 0 else round(newprice*(b.gcount+b.ccount),2) end,0),
|
||
|
totaldiff=isnull(case when c.plutype=''2'' then 0 else round(newprice*(b.gcount+b.ccount),2)-round(oldprice*(b.gcount+b.ccount),2) end,0)
|
||
|
from t_adjprice_body a,t_plu_org b,t_plu c
|
||
|
where a.plucode=b.plucode and a.plucode=c.plucode and billno='''+@psbillno+''' and b.gcount+b.ccount<>counts
|
||
|
and b.orgcode='''+@sorgcode+''' and b.isright=''1'''
|
||
|
exec (@ssql)
|
||
|
if @@error<>0
|
||
|
begin
|
||
|
set @psmsg='更新售价调整单表体失败'
|
||
|
return(-1)
|
||
|
end
|
||
|
|
||
|
set @ssql='update a set oldprice=b.price,
|
||
|
total=case when c.plutype=''2'' then 0 else round(b.price*counts,2) end,
|
||
|
totaldiff=newtotal-case when c.plutype=''2'' then 0 else round(b.price*counts,2) end
|
||
|
from t_adjprice_body a,t_plu_org b,t_plu c
|
||
|
where a.plucode=b.plucode and a.plucode=c.plucode and billno='''+@psbillno+''' and oldprice<>b.price
|
||
|
and b.orgcode='''+@sorgcode+''' and b.isright=''1'''
|
||
|
exec (@ssql)
|
||
|
if @@error<>0
|
||
|
begin
|
||
|
set @psmsg='更新售价调整单表体失败'
|
||
|
return(-1)
|
||
|
end
|
||
|
|
||
|
set @ssql='update a set counts=b.counts,total=b.total,newtotal=b.newtotal,totaldiff=b.totaldiff,rzdate='''+@scurdate+''',rztime='''+@scurtime+''',
|
||
|
exectime=convert(varchar(20),getdate(),120)
|
||
|
from t_adjprice_head a,(select billno,sum(counts) as counts,sum(total) as total,
|
||
|
sum(newtotal) as newtotal,sum(totaldiff) as totaldiff from t_adjprice_body where billno='''+@psbillno+''' group by billno) b
|
||
|
where a.billno=b.billno and a.billno='''+@psbillno+''''
|
||
|
exec (@ssql)
|
||
|
if @@error<>0
|
||
|
begin
|
||
|
set @psmsg='更新售价调整单表头失败'
|
||
|
return(-1)
|
||
|
end
|
||
|
|
||
|
exec p_rz_sj_circle_proc @sorgcode,@psbillno,'0',@psmsg out
|
||
|
if @@error<>0
|
||
|
begin
|
||
|
set @psmsg='执行售价记账循环处理失败 '+@psmsg
|
||
|
return(-1)
|
||
|
end
|
||
|
end
|
||
|
else
|
||
|
begin
|
||
|
exec p_rz_sj_circle_proc @sorgcode,@psbillno,'1',@psmsg out
|
||
|
if @@error<>0
|
||
|
begin
|
||
|
set @psmsg='执行售价记账循环处理失败 '+@psmsg
|
||
|
return(-1)
|
||
|
end
|
||
|
end
|
||
|
|
||
|
if @supdlastpfprice='1'
|
||
|
begin
|
||
|
set @ssql='update old set pfsaleno='''+@psbillno+''',rzdate='''+@scurdate+''',
|
||
|
pfprice=new.newpfprice,pfcount=0,zpcount=0,pftotal=0
|
||
|
from t_whsle_cust_info old,
|
||
|
(select plucode,newpfprice from t_adjprice_body where billno='''+@psbillno+''' and newpfprice is not null) new
|
||
|
where old.plucode=new.plucode'
|
||
|
exec (@ssql)
|
||
|
if @@error<>0
|
||
|
begin
|
||
|
set @psmsg='修改上次批发价失败'
|
||
|
return(-1)
|
||
|
end
|
||
|
end
|
||
|
|
||
|
update t_pos set pluflg='1' where orgcode=@sorgcode
|
||
|
if @@error<>0
|
||
|
begin
|
||
|
set @psmsg='更新收银机下发商品标志失败'
|
||
|
return(-1)
|
||
|
end
|
||
|
end
|
||
|
|
||
|
if ((@isplan='1' and @isexec='0') or (@isplan='0')) and (@sorgtype<>'2')
|
||
|
begin
|
||
|
set @ssql='insert into t_label_prn_task(plucode,pluname,barcode,prncount,
|
||
|
orgcode,oldprice,price,vipprice,unit,spec,prodarea,grade,prntype,srctype,remark)
|
||
|
select b.plucode,c.pluname,c.barcode,1,a.orgcode,d.price,
|
||
|
case when b.newprice is not null then b.newprice else d.price end,
|
||
|
case when b.newvipprice is not null then b.newvipprice else d.vipprice end,
|
||
|
b.unit,b.spec,c.prodarea,c.grade,''1'',''1'',b.billno
|
||
|
from t_adjprice_head a,t_adjprice_body b,t_plu c,t_plu_org d
|
||
|
where a.billno=b.billno and b.plucode=c.plucode
|
||
|
and b.plucode=d.plucode and a.orgcode=d.orgcode and d.isright=''1''
|
||
|
and a.billno='''+@psbillno+'''
|
||
|
union
|
||
|
select b.plucode,r.pluname,r.barcode,1,a.orgcode,d.price,
|
||
|
case when b.newprice is not null then b.newprice else d.price end,
|
||
|
case when b.newvipprice is not null then b.newvipprice else d.vipprice end,
|
||
|
b.unit,r.spec,c.prodarea,c.grade,''1'',''1'',b.billno
|
||
|
from t_adjprice_head a,t_adjprice_body b,t_plu c,t_barcode_ref r,t_plu_org d
|
||
|
where a.billno=b.billno and b.plucode=c.plucode and b.plucode=r.plucode
|
||
|
and b.plucode=d.plucode and a.orgcode=d.orgcode and d.isright=''1''
|
||
|
and a.billno='''+@psbillno+''''
|
||
|
exec (@ssql)
|
||
|
if @@error<>0
|
||
|
begin
|
||
|
set @psmsg='增加标价签打印任务失败'
|
||
|
return(-1)
|
||
|
end
|
||
|
end
|
||
|
|
||
|
set @psmsg=''
|
||
|
return(1)
|
||
|
end
|
||
|
go
|
||
|
|
||
|
if exists(select * from sysobjects where name='p_adjust_auto_rz' and xtype='p')
|
||
|
drop procedure p_adjust_auto_rz
|
||
|
go
|
||
|
create procedure p_adjust_auto_rz
|
||
|
(
|
||
|
@psbillno varchar(20)
|
||
|
)
|
||
|
as
|
||
|
begin
|
||
|
declare @sisplan varchar(1)
|
||
|
declare @ssxdate varchar(10)
|
||
|
declare @ssxtime varchar(8)
|
||
|
declare @srzdate varchar(10)
|
||
|
declare @sexectime varchar(20)
|
||
|
declare @scurdate varchar(20)
|
||
|
declare @smsg varchar(200)
|
||
|
declare @irtn int
|
||
|
|
||
|
select @scurdate=convert(varchar(20),getdate(),120)
|
||
|
select @sisplan=isplan,@ssxdate=sxdate,@ssxtime=sxtime,@sexectime=exectime,@srzdate=rzdate
|
||
|
from t_adjprice_head where billno=@psbillno
|
||
|
|
||
|
if @srzdate=''
|
||
|
begin
|
||
|
set @smsg=@psbillno+'单号不存在或未记账'
|
||
|
raiserror(@smsg,16,1)
|
||
|
return(-1)
|
||
|
end
|
||
|
|
||
|
if @sisplan<>'1'
|
||
|
begin
|
||
|
set @smsg=@psbillno+'不是计划调价单'
|
||
|
raiserror(@smsg,16,1)
|
||
|
return(-1)
|
||
|
end
|
||
|
|
||
|
if @sexectime<>''
|
||
|
begin
|
||
|
set @smsg=@psbillno+'已执行了新价格'
|
||
|
raiserror(@smsg,16,1)
|
||
|
return(-1)
|
||
|
end
|
||
|
|
||
|
exec @irtn=p_rz_sj '',@psbillno,'1;1',@smsg out
|
||
|
if @@error<>0 or @irtn<>1
|
||
|
begin
|
||
|
set @smsg=@psbillno+'记账失败:'+@smsg
|
||
|
raiserror(@smsg,16,1)
|
||
|
return(-1)
|
||
|
end
|
||
|
|
||
|
return(1)
|
||
|
end
|
||
|
go
|
||
|
|
||
|
|
||
|
|