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

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