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.

712 lines
38 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

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
--2024-02-23 因为赠品金额为0 所以删掉这处判断
-- select @psmsg=coalesce(@psmsg+char(13),'')+ltrim(plucode)+'-'+pluname from t_accept_body d
-- where billno=@psbillno and counts>0 and cost <=0
-- if isnull(@psmsg,'')<>''
-- begin
-- set @psmsg='以下商品进货金额为0无法记账'+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
--2023-12-12 验收不修改最新进价
--ojprice=case when @sbilltype<>'3' then aid.ojprice 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<>''
-- 2023-12-29 14点38分 进货价为0的商品也需要生成配送差异单
-- 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,rzdate,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',statedate=convert(varchar(10),getdate(),21),statetime=convert(varchar(8),getdate(),108) where billno=@sorderno
if @optaccepttimes='0'
update t_order_head set state='2',statedate=convert(varchar(10),getdate(),21),statetime=convert(varchar(8),getdate(),108) where billno=@sorderno
else
update t_order_head set state='2',statedate=convert(varchar(10),getdate(),21),statetime=convert(varchar(8),getdate(),108) 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',statedate=convert(varchar(10),getdate(),21),statetime=convert(varchar(8),getdate(),108) where billno=@sorderno
end
if (@sbilltype = '2')
begin
update t_order_head set state='2',statedate=convert(varchar(10),getdate(),21),statetime=convert(varchar(8),getdate(),108) 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