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.

700 lines
37 KiB

if exists(select * from sysobjects where name='p_rz_prepare_jh' and xtype='p')
drop procedure p_rz_prepare_jh
go
create procedure p_rz_prepare_jh
(
@psorgcode varchar(10),
@psbillno varchar(20),
@psparams varchar(200),
@psmsg varchar(2000) out
)
as
begin
declare @optaccepttimes varchar(1)
declare @sacceptno varchar(20)
declare @sbilltype varchar(1)
declare @optupacceptrate numeric(19,4)
declare @billcost numeric(19,4)
declare @sorgcode varchar(10)
declare @ssupcode varchar(15)
declare @ssupstatus varchar(1)
declare @ssupvalidstatus varchar(1)
declare @ssupcontractstatus varchar(1)
select @sorgcode=orgcode,@ssupcode=supcode from t_accept_head where billno=@psbillno
if not exists(select * from t_supplier where supcode=@ssupcode)
begin
set @psmsg='供应商不存在,不能记账'
return(-1)
end
select @ssupstatus=supstatus,
@ssupvalidstatus=case when (isnull(validdate,'')='' or validdate>=convert(varchar(100),getdate(),23)) then '1' else '0' end,
@ssupcontractstatus=case when (not exists(select * from t_contract where supcode=t_supplier.supcode and contrstatus='0')) or
(exists(select * from t_contract where supcode=t_supplier.supcode and contrstatus='0' and convert(varchar(100),getdate(),23) between bgndate and enddate)) then '1'
else '0' end
from t_supplier where supcode=@ssupcode
if @ssupstatus<>'0'
begin
set @psmsg='供应商状态非正常,不能记账'
return(-1)
end
if @ssupvalidstatus='0'
begin
set @psmsg='供应商已过有效期,不能记账'
return(-1)
end
if @ssupcontractstatus='0'
begin
set @psmsg='供应商合同已过期,不能记账'
return(-1)
end
select @optaccepttimes=accepttimes from t_shop where orgcode=@psorgcode
set @optaccepttimes=isnull(@optaccepttimes,'0')
select @optupacceptrate=convert(numeric(19,4),itemvalue) from t_syscfg where section='SYSTEM' and itemname='UpAcceptRate'
set @optupacceptrate=isnull(@optupacceptrate,10)
select @sacceptno=a.billno,@sbilltype=a.billtype from t_accept_head a,t_accept_head h
where a.orderno=h.orderno and h.billno=@psbillno and h.orderno<>'' and h.orderno is not null
and h.orderno in (select billno from t_order_head where billno=h.orderno and billtype='0')
and a.rzdate is not null and a.rzdate<>'' and ((h.billtype='3' and a.billtype='3' and h.depcode=a.depcode)
or (@optaccepttimes='0' and h.billtype in ('0','1','2') and a.billtype in ('0','1','2')))
if @@rowcount>0
begin
if @sbilltype='3'
begin
set @psmsg='该配送验收单对应的配送单存在已经记账的验收单'
return(-1)
end
else
begin
set @psmsg='该验收单对应的采购单存在已经记账的验收单'
return(-1)
end
end
select @psmsg=coalesce(@psmsg+char(13),'')+'商品:'+plucode+' 超出数量:'+convert(varchar(20),convert(numeric(19,2),upcounts))
from (select distinct a.billno,a.plucode,c.counts+a.dhcount-a.counts*(1+(@optupacceptrate)/100.00) as upcounts
from (select billno,plucode,sum(counts) as counts,sum(dhcount) as dhcount from t_order_body group by billno,plucode) a,
t_accept_head b,(select billno,plucode,sum(counts) as counts from t_accept_body group by billno,plucode) c
where a.billno=b.orderno and b.billno=c.billno and b.orderno<>'' and b.orderno is not null and b.billtype in ('0','1','2')
and a.plucode=c.plucode and b.billno=@psbillno and (a.counts>0) and (a.dhcount+c.counts-a.counts)*100.00/a.counts>@optupacceptrate) a
if isnull(@psmsg,'')<>''
begin
set @psmsg='以下商品的验收数量超出设定比例,请检查后再记账'+char(13)+@psmsg
return(-1)
end
select @psmsg=coalesce(@psmsg+char(13),'')+b.plucode+'-'+b.pluname from t_accept_body b,t_plu
where b.plucode=t_plu.plucode and b.billno=@psbillno and b.depcode<>t_plu.depcode
if isnull(@psmsg,'')<>''
begin
set @psmsg='以下商品的部门已经改变:'+char(13)+@psmsg
return(-1)
end
select @psmsg=coalesce(@psmsg+char(13),'')+ltrim(plucode)+'-'+pluname from t_accept_body d
where billno=@psbillno and (not exists(select plucode from t_plu where plucode=d.plucode)
or not exists(select plucode from t_plu_org where plucode=d.plucode and orgcode=@sorgcode and isright='1'))
if isnull(@psmsg,'')<>''
begin
set @psmsg='以下商品已不存在或在机构['+@sorgcode+']中无经营权限,无法记账'+char(13)+@psmsg
return(-1)
end
select @psmsg=coalesce(@psmsg+char(13),'')+a.plucode+'-'+a.pluname from t_accept_body a,t_plu_org b
where a.billno=@psbillno and a.plucode=b.plucode and b.orgcode=@sorgcode and b.mngstock='0'
if isnull(@psmsg,'')<>''
begin
set @psmsg='以下商品不管理库存,无法记账'+char(13)+@psmsg
return(-1)
end
select @psmsg=coalesce(@psmsg+char(13),'')+a.plucode+'-'+a.pluname from t_accept_body a,t_plu b
where a.billno=@psbillno and a.plucode=b.plucode and b.plustatus='2'
if isnull(@psmsg,'')<>''
begin
set @psmsg='以下商品已经淘汰,无法记账'+char(13)+@psmsg
return(-1)
end
set @psmsg=''
return(1)
end
go
if exists(select * from sysobjects where name='p_rz_jh' and xtype='p')
drop procedure p_rz_jh
go
create procedure p_rz_jh
(
@psorgcode varchar(10),
@psbillno varchar(20),
@psparams varchar(200),
@psmsg varchar(2000) out
)
as
begin
declare @sorgcode varchar(10)
declare @finacode varchar(10)
declare @sameacc varchar(1)
declare @org_orgtype varchar(1)
declare @org_isdbdeploy varchar(1)
declare @org_isconfirm varchar(1)
declare @sedition varchar(20)
declare @scurver varchar(1)
declare @scurdate varchar(10)
declare @scurtime varchar(8)
declare @optplumultivendor varchar(10)
declare @optaccepttimes varchar(1)
declare @sbilltype varchar(1)
declare @acceptcounts numeric(19,4)
declare @splace varchar(1)
declare @bill_cost numeric(19,4)
declare @ssupcode varchar(15)
declare @svendorname varchar(100)
declare @ssupstatus varchar(1)
declare @ssupvaliddate varchar(20)
declare @ssupjymode varchar(1)
declare @sup_payable numeric(19,4)
declare @sup_prepaytotal numeric(19,4)
declare @sorderno varchar(20)
declare @sorderstate varchar(1)
declare @sorderbilltype varchar(1)
declare @stock_plutype varchar(1)
declare @detail_cost numeric(19,4)
declare @detail_netcost numeric(19,4)
declare @detail_total numeric(19,4)
declare @detail_jprice numeric(19,4)
declare @detail_netjprice numeric(19,4)
declare @detail_count numeric(19,4)
declare @detail_givecount numeric(19,4)
declare @detail_plucode varchar(20)
declare @detail_depcode varchar(10)
declare @detail_depname varchar(16)
declare @detail_price numeric(19,4)
declare @detail_jtaxrate numeric(19,4)
declare @detail_cgcount numeric(19,4)
declare @detail_counts numeric(19,4)
declare @detail_zpamount numeric(19,4)
declare @detail_zpnetamount numeric(19,4)
declare @detail_pluname varchar(40)
declare @fscost numeric(19,4)
declare @fsnetcost numeric(19,4)
declare @fstotal numeric(19,4)
declare @jccost numeric(19,4)
declare @jcnetcost numeric(19,4)
declare @jynetcost numeric(19,4)
declare @differnetcost numeric(19,4)
declare @sisneedadjnetcost varchar(1)
declare @jctotal numeric(19,4)
declare @jccount numeric(19,4)
declare @ssql varchar(2000)
declare @svbktablename varchar(20)
declare @spsacceptuptjprice varchar(20)
declare @sbranchno varchar(10)
declare @detailcs_plucode varchar(20)
declare @detailcs_colorcode varchar(10)
declare @detailcs_sizecode varchar(10)
declare @detailcs_cgcount numeric(19,4)
declare @detailcs_ccounts numeric(19,4)
declare @stateflg int
declare @sisprntask varchar(1)
declare @sbatchprocbillno varchar(20)
declare @srefpsbillno varchar(20)
declare @scybillno varchar(20)
declare @sPjhNoDiffer varchar(1)
declare @vi_cnt int
set @spsacceptuptjprice=null
set @ssupjymode=''
set @sisprntask=isnull(@psparams,'0')
select @spsacceptuptjprice=itemvalue from t_syscfg where section='SYSTEM' and itemname='PsAcceptUptJPrice'
select @optplumultivendor=itemvalue from t_syscfg where section='SYSTEM' and itemname='PluMultiVendor'
set @spsacceptuptjprice=isnull(@spsacceptuptjprice,'FALSE')
select @sedition=itemvalue from t_syscfg where section='SYSTEM' and itemname='Edition'
select @sorgcode=orgcode,@sbilltype=billtype,@ssupcode=supcode,@svendorname=supname,@sorderno=orderno,@splace=place from t_accept_head where billno=@psbillno
select @org_orgtype=orgtype,@org_isdbdeploy=isdbdeploy,@org_isconfirm=isconfirm,@finacode=isnull(finacode,'') from t_shop where orgcode=@sorgcode
select @sorderbilltype=billtype from t_order_head where billno=@sorderno
select @scurver=itemvalue from t_syscfg where section='SYSTEM' and itemname='VER'
select @scurdate=convert(varchar(100),getdate(),23),@scurtime=convert(varchar(100),getdate(),108)
select @sbranchno=itemvalue from t_syscfg where section='SYSTEM' and itemname='BranchNo'
select @optaccepttimes=accepttimes from t_shop where orgcode=@psorgcode
select @sPjhNoDiffer=isnull(itemvalue,'0') from t_syscfg where itemname = 'PjhNoDiffer' and section = 'SYSTEM'
if @sbilltype = '2'
begin
exec p_get_finacode 'C009',@sorgcode,@finacode out,@sameacc out ,@psmsg out
if @psmsg <> ''
begin
return (-1)
end
end
set @scybillno = ''
if @sbilltype<>'3'
begin
select @acceptcounts=sum(counts)+sum(givecount) from t_accept_body where billno=@psbillno
if @acceptcounts=0
begin
set @psmsg='所有商品的验收数量都是0'
return(-1)
end
delete from t_accept_body where billno=@psbillno and counts=0 and givecount=0
delete from t_accept_cs_body where billno=@psbillno and ccounts=0
end
update b set b.price=g.price,b.total=case when o.plutype='2' then 0 else round(g.price*(b.counts+b.givecount),2) end,
b.jxprice=case when o.plutype='2' then 0 else round(g.price*(b.counts+b.givecount),2)-b.cost end
from t_accept_body b,t_plu_org g,t_plu o
where b.billno=@psbillno and b.plucode=g.plucode and b.plucode=o.plucode and b.price<>g.price and g.orgcode=@sorgcode and g.isright='1'
update h set h.total=b.total,rzdate=@scurdate,rztime=@scurtime
from t_accept_head h,(select isnull(sum(total),0) as total from t_accept_body where billno=@psbillno) b
where billno=@psbillno
if @sbilltype<>'3'
begin
select @ssupstatus=supstatus,@ssupvaliddate=validdate,@ssupjymode=jymode from t_supplier where supcode=@ssupcode
if @@rowcount=0
begin
set @psmsg='供应商['+@ssupcode+']不存在'
return(-1)
end
else if @ssupstatus<>'0'
begin
set @psmsg='供应商['+@ssupcode+']状态非正常'
return(-1)
end
else if isnull(@ssupvaliddate,'')<>'' and @ssupvaliddate<@scurdate
begin
set @psmsg='供应商['+@ssupcode+']已过有效日期'
return(-1)
end
end
if ((@sbilltype='1') or (@sbilltype='2')) and (isnull(@sorderno,'')<>'')
begin
select @sorderstate=state from t_order_head where billno=@sorderno
if @@rowcount<>0
begin
if @sorderstate<>'1'
begin
select @psmsg=coalesce(@psmsg+char(13),'')+'[' +billno+']' from t_accept_head
where rzdate<>'' and rzdate is not null and orderno=@sorderno and billno<>@psbillno order by billno
if isnull(@psmsg,'')=''
set @psmsg='采购单['+ @sorderno+']状态不是“执行中”'
else
set @psmsg='采购单['+@sorderno+']已经验收完成,验收单号为'+char(13) +@psmsg
return(-1)
end
end
end
set @svbktablename='t_vbk_'+substring(convert(varchar(100),getdate(),112),1,6)
exec p_create_vbk @svbktablename,@psmsg out
if isnull(@psmsg,'')<>''
begin
return(-1)
end
update aid set hjprice=case when b.hjprice>aid.hjprice then b.hjprice else aid.hjprice end,
ljprice=case when b.ljprice<aid.ljprice then b.ljprice else aid.ljprice end,
ojprice=case when @sbilltype<>'3' then b.hjprice when (@sbilltype='3') and (@spsacceptuptjprice='true') then b.hjprice else aid.ojprice end
from t_plu_org aid,(select plucode,max(jprice) hjprice,min(jprice) ljprice from t_accept_body where billno=@psbillno and jprice<>0 and isdscjprice='0' group by plucode) b
where aid.plucode=b.plucode and aid.orgcode=@sorgcode and aid.isright='1'
insert into t_plu_org(plucode,orgcode,isright,jprice,netjprice,price,vipprice,pfprice)
select b.plucode,@sorgcode,'1',b.jprice,b.netjprice,b.price,b.vipprice,b.pfprice
from t_accept_body a left join t_plu b on a.plucode=b.plucode
left join t_plu_org c on a.plucode=c.plucode and c.orgcode=@sorgcode and isright='1'
where a.billno=@psbillno and not b.plucode is null and c.plucode is null
set @ssql='select plucode,pluname,depcode,depname,price,jtaxrate,cgcount,counts,givecount,
case when ('''+@sbilltype+'''=''3'' and '''+@sorderno+'''<>'''' and '''+@sPjhNoDiffer+''' = ''0'') then round(cgcount*jprice,2) else cost end as fscost,
case when ('''+@sbilltype+'''=''3'' and '''+@sorderno+'''<>'''' and '''+@sPjhNoDiffer+''' = ''0'') then round(cgcount*netjprice,2) else netcost end as fsnetcost,
case when ('''+@sbilltype+'''=''3'' and '''+@sorderno+'''<>'''' and '''+@sPjhNoDiffer+''' = ''0'') then round(cgcount*price,2) else total end as fstotal,
case when ('''+@sbilltype+'''=''3'' and '''+@sorderno+'''<>'''' and '''+@sPjhNoDiffer+''' = ''0'') then cgcount else counts end counts,
case when ('''+@sbilltype+'''=''3'' and '''+@sorderno+'''<>'''' and '''+@sPjhNoDiffer+''' = ''0'') then round(cgcount*jprice,2) else cost end as cost,
case when ('''+@sbilltype+'''=''3'' and '''+@sorderno+'''<>'''' and '''+@sPjhNoDiffer+''' = ''0'') then round(cgcount*netjprice,2) else netcost end as netcost,
jprice,netjprice from t_accept_body where billno='''+@psbillno+''''
if @sbilltype<>'3'
begin
set @ssql=@ssql+' and counts+givecount<>0'
end
exec('declare cur cursor for ' + @ssql)
open cur
fetch next from cur into @detail_plucode,@detail_pluname,@detail_depcode,@detail_depname,@detail_price,@detail_jtaxrate,@detail_cgcount,@detail_counts,@detail_givecount,@fscost,@fsnetcost,@fstotal,@detail_count,@detail_cost,@detail_netcost,@detail_jprice,@detail_netjprice
while @@fetch_status=0
begin
update a set gcount=case when @splace='0' then gcount+@detail_count+@detail_givecount else gcount end,
ccount=case when @splace='1' then ccount+@detail_count+@detail_givecount else ccount end,
newjhdate=case when not (b.plutype='0' and @detail_jprice=0) then @scurdate else newjhdate end,
yjdate=case when not (b.plutype='0' and @detail_jprice=0) then case when isnull(yjdate,'')='' then @scurdate else yjdate end else yjdate end,
jprice=case when gcount+ccount>=0 and tzamount=0 then round((cost+@detail_cost)/(gcount+ccount+@detail_count+@detail_givecount),4) when gcount+ccount>=0 and tzamount<0 and tzamount+@detail_cost<0 then round(cost/(gcount+ccount+@detail_count+@detail_givecount),4) when gcount+ccount<0 then @detail_jprice else round((cost+@detail_cost+tzamount)/(gcount+ccount+@detail_count+@detail_givecount),4) end,
netjprice=case when gcount+ccount>=0 and tzamount=0 then round((netcost+@detail_netcost)/(gcount+ccount+@detail_count+@detail_givecount),4) when gcount+ccount>=0 and tzamount<0 and tzamount+@detail_cost<0 then round(netcost/(gcount+ccount+@detail_count+@detail_givecount),4) when gcount+ccount<0 then @detail_netjprice else round((netcost+@detail_netcost+round(tzamount/(1+@detail_jtaxrate/100.00),2))/(gcount+ccount+@detail_count+@detail_givecount),4) end,
tzamount=case when gcount+ccount>=0 and tzamount<0 and tzamount+@detail_cost<0 then tzamount+@detail_cost when gcount+ccount<0 then tzamount+cost+@detail_cost-round(@detail_jprice*(gcount+ccount+@detail_count),2) else 0 end,
cost=case when gcount+ccount>=0 and tzamount=0 then cost+@detail_cost when gcount+ccount>=0 and tzamount<0 and tzamount+@detail_cost<0 then cost when gcount+ccount<0 then round(@detail_jprice*(gcount+ccount+@detail_count),2) else cost+@detail_cost+tzamount end,
netcost=case when gcount+ccount>=0 and tzamount=0 then netcost+@detail_netcost when gcount+ccount>=0 and tzamount<0 and tzamount+@detail_cost<0 then netcost when gcount+ccount<0 then round(round(@detail_jprice*(gcount+ccount+@detail_count),2)/(1+@detail_jtaxrate/100.00),2) else netcost+@detail_netcost+round(tzamount/(1+@detail_jtaxrate/100.00),2) end,
total=case when b.plutype='2' then 0 else isnull(a.total,0.00)+round(a.price*(@detail_count+@detail_givecount),2) end,
@stock_plutype=b.plutype,
@fstotal=case when b.plutype='2' then 0 else @fstotal end,
@jccount=gcount+ccount+@detail_count+@detail_givecount,
@jccost=case when gcount+ccount>=0 then cost+@detail_cost else round(@detail_jprice*(gcount+ccount+@detail_count),2) end+case when gcount+ccount>=0 then tzamount else tzamount+cost+@detail_cost-round(@detail_jprice*(gcount+ccount+@detail_count),2) end,
@jcnetcost=case when gcount+ccount>=0 then netcost+@detail_netcost else round(@detail_netjprice*(gcount+ccount+@detail_count),2) end+round((case when gcount+ccount>=0 then tzamount else tzamount+cost+@detail_cost-round(@detail_jprice*(gcount+ccount+@detail_count),2) end)/(1+@detail_jtaxrate/100.00),2),
@jynetcost=case when gcount+ccount>=0 then 0 else netcost+@detail_netcost+round(tzamount/(1+@detail_jtaxrate/100.00),2) end,
@sisneedadjnetcost=case when gcount+ccount>=0 then '0' else '1' end,
@jctotal=case when b.plutype='2' then 0 else isnull(a.total,0.00)+round(a.price*(@detail_count+@detail_givecount),2) end
from t_plu_org a,t_plu b
where a.plucode=b.plucode and a.orgcode=@sorgcode and a.plucode=@detail_plucode and isright='1'
if (@sisneedadjnetcost='1') and ((@jynetcost-@jcnetcost)<>0)
begin
set @differnetcost=@jynetcost-@jcnetcost
set @jcnetcost=@jynetcost
update t_plu_org set netcost=netcost+@differnetcost where plucode=@detail_plucode and orgcode=@sorgcode
end
if exists (select plucode from t_plu where plucode=@detail_plucode and iszfcode='1')
begin
insert into t_plu_org(plucode,orgcode,isright,jprice,netjprice,price,vipprice,pfprice)
select a.plucode,@sorgcode,'1',b.jprice,b.netjprice,b.price,b.vipprice,b.pfprice
from t_plu_org b,(select plucode,innercode from t_plu where iszfcode='2' and innercode=@detail_plucode) a
where b.plucode=a.innercode and b.orgcode=@sorgcode and b.plucode=@detail_plucode
and not exists(select plucode from t_plu_org where orgcode=@sorgcode and plucode=a.plucode)
update a set jprice=b.jprice,netjprice=b.netjprice from t_plu_org a,
(select plucode,jprice,netjprice,orgcode from t_plu_org where plucode=@detail_plucode and orgcode=@sorgcode) b,
(select plucode,innercode from t_plu where iszfcode='2') c
where a.plucode=c.plucode and b.plucode=c.innercode and a.orgcode=b.orgcode
end
declare @tmpcounts numeric(19,4)
set @tmpcounts=@detail_count+@detail_givecount
if @tmpcounts<>0
begin
set @detail_jprice=round(@fscost/@tmpcounts,4)
set @detail_netjprice=round(@fsnetcost/@tmpcounts,4)
end
exec p_create_gbk_data @scurdate,@scurtime,@detail_plucode,@detail_depcode,@psbillno,'0',@detail_jprice,@detail_netjprice,@detail_price,
@tmpcounts,@fscost,@fsnetcost,@fstotal,@jccount,@jccost,@jcnetcost,@jctotal,@sorgcode,'','',@psmsg
if @sbilltype='3' and @sorderno<>'' and ((@stock_plutype<>'2' and @detail_jprice<>0) or @stock_plutype='2')
begin
if @detail_cgcount<>@detail_counts
begin
if @scybillno = ''
begin
exec f_get_billno 'cy',@sorgcode,'1',@scybillno output
end
set @detail_zpamount = 0.00
set @detail_zpnetamount = 0.00
select @detail_zpamount=zpamount,@detail_zpnetamount = zpnetamount from t_dist_body where billno = @sorderno and PluCode = @detail_plucode
if not exists(select * from t_distdiffer_body where billno=@scybillno and plucode=@detail_plucode)
insert into t_distdiffer_body(billno,supcode,plucode,pluname,jprice,netjprice,counts,differcount,differcost,differnetcost,remark,differmode,depcode,depname)
values (@scybillno,@ssupcode,@detail_plucode,@detail_pluname,@detail_jprice,@detail_netjprice,@detail_cgcount,
@detail_counts-@detail_cgcount,-round(@detail_zpamount-@fscost,2),-round(@detail_zpnetamount-@fsnetcost,2),
'配送差异生成','0',@detail_depcode,@detail_depname)
else
update t_distdiffer_body
set counts=counts+@detail_cgcount,differcount=differcount+@detail_counts-@detail_cgcount,
differcost= differcost - round(@detail_zpamount-@fscost,2),
differnetcost= differnetcost - round(@detail_zpnetamount-@fsnetcost,2)
where billno=@scybillno and plucode=@detail_plucode
end
else
begin
set @stateflg=0
declare cur2 cursor for select d.plucode,colorcode,sizecode,ccounts,cgcount
from t_accept_cs_body d,t_plu g where billno=@psbillno and g.plucode=d.plucode and g.plutype<>'2' and ccounts<>cgcount order by d.plucode,colorcode,sizecode
open cur2
fetch next from cur2 into @detailcs_plucode,@detailcs_colorcode,@detailcs_sizecode,@detailcs_ccounts,@detailcs_cgcount
while @@fetch_status=0
begin
if @stateflg=1
break
set @stateflg=1
if not exists(select * from t_dist_differ where billno=@psbillno and orgcode=@sorgcode and plucode=@detail_plucode)
insert into t_dist_differ(billno,orgcode,differtype,supcode,oldbillno,plucode,bizdate,pluname,jprice,netjprice,counts,differcount,remark,differmode)
values (@psbillno,@sorgcode,'0',@ssupcode,@sorderno,@detail_plucode,@scurdate,@detail_pluname,@detail_jprice,@detail_netjprice,@detail_cgcount,@detail_counts-@detail_cgcount,'','')
else
update t_dist_differ set counts=counts+@detail_cgcount,differcount=differcount+@detail_counts-@detail_cgcount
where billno=@psbillno and orgcode=@sorgcode and plucode=@detail_plucode
fetch next from cur2 into @detailcs_plucode,@detailcs_colorcode,@detailcs_sizecode,@detailcs_ccounts,@detailcs_cgcount
end
close cur2
deallocate cur2
end
end
fetch next from cur into @detail_plucode,@detail_pluname,@detail_depcode,@detail_depname,@detail_price,@detail_jtaxrate,@detail_cgcount,@detail_counts,@detail_givecount,@fscost,@fsnetcost,@fstotal,@detail_count,@detail_cost,@detail_netcost,@detail_jprice,@detail_netjprice
end
close cur
deallocate cur
if @scybillno <> ''
begin
insert into t_distdiffer_head
(billno,ywbillNo ,orgcode,bizdate,differtype,contrno,differcount,differcost,differnetcost,lrdate,lrtime,rzdate,rztime,
accdate,usercode,username,zdrcode,zdrname,shrcode,shrname,chkstatus,depcode,depname,remark
)
select
@scybillno -- billno - varchar(20)
, @psbillno -- ywbillNo - varchar(20)
, @sorgcode -- orgcode - varchar(10)
, @scurdate -- bizdate - varchar(10)
, '0' -- differtype - varchar(1)
, '' -- contrno - varchar(40)
, 0 -- differcount - numeric(19, 4)
, 0 -- differcost - numeric(19, 4)
, 0 -- differnetcost - numeric(19, 4)
, @scurdate -- lrdate - varchar(10)
, @scurtime -- lrtime - varchar(8)
, '' -- rzdate - varchar(10)
, '' -- rztime - varchar(8)
, '' -- accdate - varchar(10)
, usercode -- usercode - varchar(6)
, username -- username - varchar(10)
, zdrcode -- zdrcode - varchar(6)
, zdrname -- zdrname - varchar(10)
, '' -- shrcode - varchar(6)
, '' -- shrname - varchar(10)
, '9' -- chkstatus - varchar(1)
, depcode -- depcode - varchar(10)
, depname -- depname - varchar(16)
, '' -- remark - varchar(200)
from t_accept_head where billno = @psbillno
--
update a
set differcount=b.differcount,
differcost=b.differcost,
differnetcost=b.differnetcost
from t_distdiffer_head a,(select sum(differcount) differcount, sum(differcost) differcost,sum(differnetcost) differnetcost
from t_distdiffer_body where billno = @scybillno )b
where a.billno = @scybillno
update t_dist_head
set differstate = '1'
where billno = @sorderno
end
if @sedition='4'
begin
insert into t_plu_org_cs(plucode,orgcode,colorcode,sizecode,csbarcode,gcount,ccount,remark)
select distinct a.plucode as plucode,@sorgcode as orgcode,a.colorcode as colorcode,a.sizecode as sizecode,g.csbarcode as csbarcode,0 as gcount,0 as ccount,'' as remark
from t_accept_cs_body a,t_plu_cs g where a.plucode=g.plucode and a.colorcode=g.colorcode and a.sizecode=g.sizecode and a.billno=@psbillno
and not exists(select plucode from t_plu_org_cs o where o.plucode=a.plucode and o.colorcode=a.colorcode and o.sizecode=a.sizecode and o.orgcode=@sorgcode)
update a set a.gcount=case when @splace='0' then a.gcount+b.ccounts else a.gcount end,
a.ccount=case when @splace='0' then a.ccount else a.ccount+b.ccounts end
from t_plu_org_cs a,(select plucode,colorcode,sizecode,sum(ccounts) as ccounts from t_accept_cs_body where billno=@psbillno group by plucode,colorcode,sizecode) b
where a.plucode=b.plucode and a.orgcode=@sorgcode and a.colorcode=b.colorcode and a.sizecode=b.sizecode
if @sbilltype='3' and @sorderno<>''
begin
declare cur cursor for select d.plucode,colorcode,sizecode,ccounts,cgcount from t_accept_cs_body d,t_plu g
where billno=@psbillno and g.plucode=d.plucode and g.plutype<>'2' and ccounts<>cgcount order by d.plucode,colorcode,sizecode
open cur
fetch next from cur into @detailcs_plucode,@detailcs_colorcode,@detailcs_sizecode,@detailcs_ccounts,@detailcs_cgcount
while @@fetch_status=0
begin
if not exists(select * from t_dist_differ_cs where billno=@psbillno and orgcode=@sorgcode and plucode=@detailcs_plucode and colorcode=@detailcs_colorcode and sizecode=@detailcs_sizecode)
insert into t_dist_differ_cs(billno,orgcode,plucode,colorcode,sizecode,ccounts,counts,remark)
values (@psbillno,@sorgcode,@detailcs_plucode,@detailcs_colorcode,@detailcs_sizecode,@detailcs_ccounts-@detailcs_cgcount,@detailcs_cgcount,'')
else
update t_dist_differ_cs set ccounts=ccounts+@detailcs_ccounts-@detailcs_cgcount,counts=counts+@detailcs_cgcount
where billno=@psbillno and orgcode=@sorgcode and plucode=@detailcs_plucode and colorcode=@detailcs_colorcode and sizecode=@detailcs_sizecode
fetch next from cur into @detailcs_plucode,@detailcs_colorcode,@detailcs_sizecode,@detailcs_ccounts,@detailcs_cgcount
end
close cur
deallocate cur
end
end
if @sbilltype='3' and @sorderno<>'' and @sPjhNoDiffer = '0'
begin
update b set counts=cgcount,punit='',pcount=0,itemcnt=0,sglcount=cgcount,b.cost=round(cgcount*b.jprice,2),b.netcost=round(cgcount*b.netjprice,2),
b.total=case when plutype='2' then 0 else round(cgcount*b.price,2) end,jxprice=case when c.plutype='2' then 0 else round(cgcount*(b.price-b.jprice),2) end
from t_accept_head a,t_accept_body b,t_plu c
where a.billno=b.billno and b.plucode=c.plucode and a.billno=@psbillno and billtype='3' and b.counts<>b.cgcount
end
if (@ssupjymode<>'2' or @sbilltype='3') and (@optplumultivendor='TRUE')
begin
insert into t_supaccept_detail(billtype,billno,serialno,plucode,pluname,orgcode,orgname,supcode ,supname,rzdate,rztime,jprice,netjprice,price,counts,cost,netcost,total,remark)
select '0',billno,serialno,plucode,pluname,@sorgcode,(select top 1 orgname from t_shop where orgcode=@sorgcode) as orgname,
@ssupcode,@svendorname,@scurdate,@scurtime,jprice,netjprice,price,counts+givecount,cost,netcost,total,remark
from t_accept_body where billno=@psbillno
end
--if (@ssupjymode<>'2' or @sbilltype='3') --and (@optplumultivendor='TRUE')
--begin
-- if @sbilltype<>'3'
-- begin
-- insert into t_plu_batch(orgcode,depcode,supcode,jymode,contrno,batchtype,billno,serialno,place,plucode,plutype,
-- batchno,srcbatchno,stkcount,jtaxrate,jprice,netjprice,cost,netcost,punit,itemcnt,productdate,jhdate,jhcount)
-- select h.orgcode,b.depcode,h.supcode,@ssupjymode,h.contrno,'0',h.billno,b.serialno,h.place,b.plucode,'0',
-- dbo.f_getstockpcno(h.billno,'0',row_number()over(order by b.plucode,b.serialno)),
-- dbo.f_getstockpcno(h.billno,'0',row_number()over(order by b.plucode,b.serialno)),
-- b.counts+b.givecount,b.jtaxrate,b.jprice,b.netjprice,b.cost,b.netcost,b.punit,b.itemcnt,
-- b.productdate,getdate(),b.counts+b.givecount
-- from t_accept_head h, t_accept_body b where h.billno=b.billno and h.billno=@psbillno
-- end
-- else
-- begin
-- select @srefpsbillno=substring(remark,1,charindex('|',remark,0)-1)
-- from t_accept_head where billno=@psbillno
-- if isnull(@srefpsbillno,'')=''
-- begin
-- set @psmsg='找不到原始关联配送单号,无法处理配送验收批次库存'
-- return(-1)
-- end
-- select @vi_cnt=count(*)
-- from t_batchproc_head
-- where ywbillno=@srefpsbillno
-- if @vi_cnt=0
-- begin
-- set @psmsg='找不到原始配送库存记账单,无法处理配送验收批次库存'
-- return(-1)
-- end
-- insert into t_plu_batch(orgcode,depcode,supcode,jymode,contrno,batchtype,billno,serialno,place,plucode,plutype,
-- batchno,srcbatchno,stkcount,jtaxrate,jprice,netjprice,cost,netcost,punit,itemcnt,productdate,jhdate,jhcount)
-- select c.orgcode,d.depcode,c.supcode,'0','','0',c.billno,d.serialno,'0',d.plucode,b.plutype,
-- dbo.f_getstockpcno(c.billno,'0',b.serialno),b.srcbatchno,b.proccount,d.jtaxrate,d.jprice,d.netjprice,
-- round(d.cost*(b.proccount/d.counts),2),round(d.netcost*(b.proccount/d.counts),2),
-- d.punit,d.itemcnt,d.productdate,getdate(),b.proccount
-- from t_batchproc_head a,t_batchproc_body b,t_accept_head c,t_accept_body d
-- where a.billno=b.billno and a.ywbillno=@srefpsbillno and c.billno=@psbillno
-- and d.billno=c.billno and d.serialno=b.refserialno and d.plucode=b.plucode
-- end
-- exec f_get_billno 'pc',@psorgcode,'1',@sbatchprocbillno output
-- insert into t_batchproc_head(billno,billtype,ywtype,ywbillno,procdate,orgcode,place,proccount,cost,netcost,usercode,username,tag)
-- select @sbatchprocbillno,'0',case h.billtype when '0' then 'NJH' when '1' then 'JH' when '2' then 'ZJH' when '3' then 'PJH' end as billtype,
-- h.billno,getdate(),h.orgcode,h.place,(h.counts+h.givecount),h.cost,h.netcost,h.usercode,h.username,'0'
-- from t_accept_head h where h.billno=@psbillno
-- insert into t_batchproc_body(billno,serialno,depcode,supcode,plucode,pluname,spec,unit,plutype,batchno,srcbatchno,
-- contrno,jymode,proccount,jprice,netjprice,cost,netcost,refserialno,itemcnt)
-- select @sbatchprocbillno,row_number()over(order by s.serialno) as serialno,s.depcode,s.supcode,b.plucode,b.pluname,
-- b.spec,b.unit,s.plutype,s.batchno,s.srcbatchno,s.contrno,s.jymode,s.stkcount,s.jprice,s.netjprice,s.cost,s.netcost,b.serialno,b.itemcnt
-- from t_accept_body b,t_plu_batch s
-- where b.billno=s.billno and b.serialno=s.serialno and b.plucode=s.plucode and b.billno=@psbillno
--end
update a set counts=b.counts,givecount=b.givecount,cost=b.cost,netcost=b.netcost,total=b.total
from t_accept_head a,(select sum(c.counts) as counts,sum(c.givecount) as givecount,sum(c.cost) as cost,sum(c.netcost) as netcost,sum(c.total) as total from t_accept_body c where c.billno=@psbillno) b
where a.billno=@psbillno
update a set jhtotal=jhtotal+b.cost,@bill_cost=b.cost
from t_supplier a,t_accept_head b where a.supcode=@ssupcode and a.supcode=b.supcode and b.billno=@psbillno
select @sup_payable=jhtotal-thtotal+tjtotal,@sup_prepaytotal=prepay from t_supplier where supcode=@ssupcode
set @ssql='insert into t_vbk_'+ substring(convert(varchar(100),getdate(),112),1,6)+'(orgcode,bookdate,booktime,supcode ,billno,billtype,fsamount,yfjytotal,prejytotal)'
+' values('''+@sorgcode+''','''+@scurdate+''','''+@scurtime+''','''+@ssupcode+''','''+@psbillno+''',''0'','+convert(varchar(20),@bill_cost)+','+convert(varchar(20),@sup_payable)+','+convert(varchar(20),@sup_prepaytotal)+')'
exec(@ssql)
if @scurver='1' and @sbilltype='3' and @org_orgtype<>'2' and @org_isdbdeploy='1' and @org_isconfirm='0'
begin
update t_accept_head set qrdate=@scurdate where billno=@psbillno
end
if @scurver='1' and @sbilltype='3' and @org_orgtype<>'2' and @org_isdbdeploy='1'
begin
update t_dist_head set diststate = '3' where billno = @sorderno
end
if @ssupjymode<>'2' and @sbilltype<>'3'
begin
insert into t_pay_bill(orgcode,billtype,billno,bizdate,supcode,sqauremode,cost,paydate,jscost,zrcost,isfinished,total,contrno,finacode)
select orgcode,case when @scurver='1' and billtype='2' then '3' else '0' end,
billno,bizdate,supcode,sqauremode,cost,paydate,0,0,case when cost=0 then '1' else '0' end,total,contrno,@finacode
from t_accept_head where billno=@psbillno
end
if @sorderno<>'' and @sorderbilltype='0' and (@sbilltype='0' or @sbilltype='1' or @sbilltype='2')
begin
if @sedition='4'
begin
update o set o.dhcount=o.dhcount+j.ccounts
from t_order_cs_body o,t_accept_cs_body j
where o.billno=@sorderno and j.billno=@psbillno and o.plucode=j.plucode
and o.serialno=j.serialno and o.colorcode=j.colorcode and o.sizecode=j.sizecode
end
update o set o.dhcount=o.dhcount+j.counts,o.dhcost=o.dhcost+j.cost,o.dhnetcost=o.dhnetcost+j.netcost
from t_order_body o,t_accept_body j
where o.billno=@sorderno and j.billno=@psbillno and o.plucode=j.plucode and o.serialno=j.serialno
update h set h.dhcount=b.dhcount,h.dhcost=b.dhcost,h.dhnetcost=b.dhnetcost
from t_order_head h,(select sum(dhcost) as dhcost,sum(dhcount) as dhcount,sum(dhnetcost) as dhnetcost from t_order_body where billno=@sorderno) b
where h.billno=@sorderno
if exists(select plucode from t_order_body where dhcount<counts and billno=@sorderno)
update t_order_head set goodsstate='1' where billno=@sorderno
else
update t_order_head set goodsstate='2',state='2' where billno=@sorderno
if @optaccepttimes='0'
update t_order_head set state='2' where billno=@sorderno
else
update t_order_head set state='2' where billno=@sorderno and not exists(select * from t_order_body where billno=@sorderno and dhcount<counts)
end
if @scurver='1' and @sbilltype='2' and @org_orgtype='1'
begin
insert into t_distpay_bill(billno,billtype,shopcode,orgcode,rzdate,sqauremode,zpamount,jsamount,zramount,cost,netcost,total,isfinished,finacode)
select billno,'2',orgcode,@sbranchno,rzdate,sqauremode,cost,0,0,cost,netcost,total,'0',@finacode
from t_accept_head where billno=@psbillno
update a set zsamount=zsamount+b.cost
from t_shop a,t_accept_head b where a.orgcode=@sorgcode and a.orgcode=b.orgcode and b.billno=@psbillno
end
if @sisprntask='1'
begin
if @sedition='4'
begin
insert into t_label_prn_task(plucode,pluname,barcode,prncount,orgcode,price,vipprice,unit,spec,prodarea,prntype,remark,colorcode,sizecode,csbarcode)
select b.plucode,b.pluname,b.barcode,cast(cb.ccounts as int),a.orgcode,b.price,d.vipprice,b.unit,b.spec,c.prodarea,'0',b.billno,
case when c.mngcs='0' then '' else cb.colorcode end as colorcode,case when c.mngcs='0' then '' else cb.sizecode end as sizecode,
(select csbarcode from t_plu_cs gc where gc.plucode=cb.plucode and cb.colorcode=gc.colorcode and cb.sizecode=gc.sizecode) as csbarcode
from t_accept_head a,t_accept_body b,t_plu c,t_plu_org d,t_accept_cs_body cb
where a.billno=b.billno and b.plucode=c.plucode and cb.billno=b.billno and cb.plucode=b.plucode and cb.serialno=b.serialno
and b.plucode=d.plucode and a.orgcode=d.orgcode and d.isright='1'
and c.isweight='0' and left(b.barcode,2)='20' and b.counts=cast(b.counts as int) and a.billno=@psbillno
end
else
begin
insert into t_label_prn_task(plucode,pluname,barcode,prncount,orgcode,price,vipprice,unit,spec,prodarea,prntype,remark)
select b.plucode,b.pluname,b.barcode,cast((b.counts+b.givecount) as int),
a.orgcode,b.price,d.vipprice,b.unit,b.spec,c.prodarea,'0',b.billno
from t_accept_head a,t_accept_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 c.isweight='0' and left(b.barcode,2)='20' and b.counts=cast(b.counts as int) and a.billno=@psbillno
end
end
if (@sbilltype='1') and (@psparams = '9')
begin
update t_order_head set state='2' where billno=@sorderno
end
if (@sbilltype = '2')
begin
update t_order_head set state='2' where billno=@sorderno
end
if (@sbilltype = '2') and (@sameacc <> '1')
begin
exec p_nosameacc_jh @psbillno,@psmsg out
end
set @psmsg=''
return(1)
end
go