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'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 '1') begin exec p_nosameacc_jh @psbillno,@psmsg out end set @psmsg='' return(1) end go