if exists(select * from sysobjects where name = 'f_monthoflastday' and xtype = 'fn') drop function f_monthoflastday go create function f_monthoflastday(@sdate varchar(10)) returns int as begin declare @iRtn int select @iRtn = DATEPART(DD,DATEADD(mm,DATEDIFF(mm,0,@sdate) + 1,-1)) return @iRtn end go if exists(select * from sysobjects where name = 'f_continuedays' and xtype = 'fn') drop function f_continuedays go create function f_continuedays(@sourcestr varchar(8000),@idays int) returns int as begin declare @str varchar(8000) declare @iRtn int if @idays = 1 begin return (0) end set @str = substring(@sourcestr,1,@idays - 1) set @str = reverse(@str) set @iRtn =charindex('0',@str) if @iRtn = 0 begin set @iRtn = len(@str) end else begin set @iRtn = @iRtn - 1 end return @iRtn end go if exists(select * from sysobjects where name = 'f_continueenddays' and xtype = 'fn') drop function f_continueenddays go create function f_continueenddays(@sourcestr varchar(8000),@idays int) returns int as begin declare @str varchar(8000) declare @iRtn int if @idays >= 31 begin return (0) end set @str = substring(@sourcestr,@idays + 1,31-@idays) set @iRtn =charindex('0',@str) if @iRtn = 0 begin set @iRtn = len(@str) end else begin set @iRtn = @iRtn - 1 end return @iRtn end go /* declare @psmsg varchar(2000) exec p_create_askdata '','','', @psmsg out print (@psmsg) */ --自动生成要货数据 if exists(select * from sysobjects where name='p_create_askdata' and xtype='p') drop procedure p_create_askdata go create procedure p_create_askdata ( @psorgcode varchar(10), @psasktype varchar(1), @psparams varchar(200), @psmsg varchar(2000) out ) as declare @sorgcode varchar(10) declare @sisdbdeploy varchar(1) declare @sorgtype varchar(1) declare @sver varchar(1) declare @sdate varchar(10) declare @stime varchar(8) declare @ssql varchar(8000) declare @saskbgndate varchar(10) declare @saskenddate varchar(10) begin set @psmsg='' select @sver=itemvalue from t_syscfg where section='SYSTEM' and itemname='VER' if @sver <> '1' begin set @psmsg = '单店版不生成要货数据' return (1) end select @sisdbdeploy=isdbdeploy,@sorgtype=orgtype from t_shop where orgcode=@sorgcode if exists(select * from sysobjects where name = 'tmpaskdata_param' and xtype = 'U') drop table tmpaskdata_param create table tmpaskdata_param( plucode varchar(20) not null default('*'), orgcode varchar(10) not null default('*'), asktype varchar(1) not null , askdate varchar(31) not null default(''), promdesc varchar(100) null, askbgndate varchar(10)null, askenddate varchar(10) null, dhdays int not null default (0), safedays int not null default (0), askcycle int not null default (0), predays int not null default (0), cgmode varchar not null default ('1'), judgecnt numeric(19,4) not null default (0), continuedays int not null default (0), continueenddays int not null default (0), gcount numeric(19,4) not null default (0), ccount numeric(19,4) not null default (0), onwaycount numeric(19,4) not null default (0), dms numeric(19,4) not null default (0), dscdms numeric(19,4) not null default (0), caldms numeric(19,4) not null default (0), askcounts numeric(19,4) not null default (0) constraint pk_tmpaskdata_param primary key nonclustered ( plucode,orgcode ) ) --print(convert(varchar(100),getdate(),120) + ' begin fill data') declare @iDay integer set @iDay = datepart(dd,getdate()) insert into tmpaskdata_param(orgcode,plucode,asktype,askdate,dhdays,safedays,askcycle,predays,cgmode,judgecnt,continuedays,continueenddays,gcount,ccount,dms,dscdms,caldms) select o.orgcode,o.plucode,a.asktype,a.askdate,a.dhdays,a.safedays,a.askcycle,a.predays,o.cgmode,o.judgecnt, dbo.f_continuedays(askdate,@iDay),dbo.f_continueenddays(askdate,@iDay),o.gcount,o.ccount,o.dms,o.dscdms,o.dms from t_plu_org o ,t_pluask_param a , t_shop s where a.asktype = '2' and o.plucode = a.plucode and o.orgcode = s.orgcode and substring(a.askdate,@iDay,1) = '1' and o.isright = '1' and o.isask = '1' and o.mngstock = '1' and s.orgtype <> '2' and s.status = '1' and not exists(select 1 from tmpaskdata_param where plucode = o.plucode and orgcode = o.orgcode) and not exists(select plucode from t_ask_head,t_ask_body where t_ask_head.billno=t_ask_body.billno and t_ask_body.plucode=o.plucode and t_ask_head.orgcode = o.orgcode and t_ask_head.lrdate = convert(varchar(10),getdate(),120) and t_ask_head.asktype = '2') and o.orgcode = case @psorgcode when '' then o.orgcode else @psorgcode end insert into tmpaskdata_param(orgcode,plucode,asktype,askdate,dhdays,safedays,askcycle,predays,cgmode,judgecnt,continuedays,continueenddays,gcount,ccount,dms,dscdms,caldms) select o.orgcode,o.plucode,a.asktype,a.askdate,a.dhdays,a.safedays,a.askcycle,a.predays,o.cgmode,o.judgecnt, dbo.f_continuedays(askdate,@iDay),dbo.f_continueenddays(askdate,@iDay),o.gcount,o.ccount,o.dms,o.dscdms,o.dms from t_plu_org o ,t_pluask_param a , t_shop s ,t_plu p ,t_gclass c where a.asktype = '1' and o.plucode = p.plucode and o.orgcode = s.orgcode and o.cgmode = '2' and p.clscode = c.clscode and c.uppercode1 = a.plucode and substring(a.askdate,@iDay,1) = '1' and o.isright = '1' and o.isask = '1' and o.mngstock = '1' and s.orgtype <> '2' and s.status = '1' and not exists(select 1 from tmpaskdata_param where plucode = o.plucode) and not exists(select plucode from t_ask_head,t_ask_body where t_ask_head.billno=t_ask_body.billno and t_ask_body.plucode=o.plucode and t_ask_head.orgcode = o.orgcode and t_ask_head.lrdate = convert(varchar(10),getdate(),120) and t_ask_head.asktype = '1') and o.orgcode = case @psorgcode when '' then o.orgcode else @psorgcode end insert into tmpaskdata_param(orgcode,plucode,asktype,askdate,dhdays,safedays,askcycle,predays,cgmode,judgecnt,continuedays,continueenddays,gcount,ccount,dms,dscdms,caldms) select o.orgcode,o.plucode,a.asktype,a.askdate,a.dhdays,a.safedays,a.askcycle,a.predays,'1',o.judgecnt, dbo.f_continuedays(askdate,@iDay),dbo.f_continueenddays(askdate,@iDay),o.gcount,o.ccount,o.dms,o.dscdms,o.dms from t_plu_org o ,t_pluask_param a ,t_shop s where a.asktype = '0' and o.orgcode = s.orgcode and(o.cgmode = '0' or o.cgmode = '1') and substring(a.askdate,@iDay,1) = '1' and o.isright = '1' and o.isask = '1' and o.mngstock = '1' and s.orgtype <> '2' and s.status = '1' and not exists(select 1 from tmpaskdata_param where plucode = o.plucode) and not exists(select plucode from t_ask_head,t_ask_body where t_ask_head.billno=t_ask_body.billno and t_ask_body.plucode=o.plucode and t_ask_head.orgcode = o.orgcode and t_ask_head.lrdate = convert(varchar(10),getdate(),120) and t_ask_head.asktype = '0') and o.orgcode = case @psorgcode when '' then o.orgcode else @psorgcode end --print(convert(varchar(100),getdate(),120) + ' end fill data'); delete a from tmpaskdata_param a,t_plu b where (a.plucode = b.plucode and b.plustatus = '2') delete a from tmpaskdata_param a where exists(select billno from t_ask_head where t_ask_head.orgcode = a.orgcode and t_ask_head.lrdate between convert(varchar(10),dateadd(dd,-1*continuedays,getdate()),120) and convert(varchar(10),getdate(),120) and t_ask_head.asktype = a.asktype) --print(convert(varchar(100),getdate(),120) + ' end delete data'); if exists(select * from sysobjects where name = 'tmpaskdata_onway' and xtype = 'U') drop table tmpaskdata_onway create table tmpaskdata_onway( plucode varchar(20) not null default(''), orgcode varchar(10) not null default(''), onwaycount numeric(19,4) not null default (0) constraint pk_tmpaskdata_onway primary key nonclustered ( plucode,orgcode ) ) insert into tmpaskdata_onway(orgcode,plucode,onwaycount) select a.orgcode,a.plucode,counts from (select orgcode,plucode,sum(counts) as counts from ( select orgcode,plucode,sum(b.counts) as counts from t_accept_head a join t_accept_body b on a.billno = b.BillNo where (a.billtype = '3') and isnull(a.rzdate,'')='' group by orgcode,plucode union all select orgcode,plucode,sum(b.counts) as counts from t_order_head a join t_order_body b on a.billno = b.BillNo where iszs = '1' and isnull(a.rzdate,'')<>'' and not exists(select 1 from t_accept_head where billtype = '2' and orderno = a.billno and isnull(rzdate,'') <> '') group by orgcode,plucode union all select orgcode,plucode,sum(b.counts) as counts from t_outtrans_head a join t_outtrans_body b on a.billno = b.BillNo where (a.isout = '0') and isnull(a.rzdate,'')='' group by orgcode,plucode )src1 group by orgcode,plucode )a,tmpaskdata_param b where a.plucode = b.plucode and a.orgcode = b.orgcode update a set a.caldms = a.dscdms, a.promdesc = b.promdesc from tmpaskdata_param a, dbo.t_bcbiz_head h, dbo.t_bcbiz_body b where a.plucode = b.plucode and (a.orgcode = b.orgcode or b.orgcode = '*') and h.billno = b.billno and h.qrstatus <>'0' and dateadd(dd,a.predays,getdate()) between b.prombgndate and b.promenddate update a set a.onwaycount = isnull(b.onwaycount,0), a.askcounts = ceiling(a.caldms * (askcycle + dhDays + SafeDays) - gcount - ccount - IsNull(b.onwaycount,0)) from tmpaskdata_param a left join tmpaskdata_onway b on a.plucode = b.plucode and a.orgcode = b.orgcode delete a from tmpaskdata_param a ,t_plu p,t_gclass c where a.askcounts <= 0 and a.plucode = p.plucode and p.clscode = c.clscode and c.uppercode1 = '2032' update tmpaskdata_param set askcounts = 0 where askcounts < 0 update a set a.askcounts = ceiling(a.askcounts/b.askcnt)*b.askcnt from tmpaskdata_param a ,t_plu b where a.plucode = b.plucode and b.askcnt <> 0 and (a.askcounts % b.askcnt) <> 0 -- update a -- set a.cgmode = case when askcounts < a.judgecnt then '1' else '2' end -- from tmpaskdata_param a -- where a.asktype = '2' and a.cgmode = '0' and isnull(a.judgecnt,0) <> 0 -- --判定数量为0的,都设置为配送 -- update a -- set a.cgmode = '1' -- from tmpaskdata_param a -- where a.asktype = '2' and a.cgmode = '0' and isnull(a.judgecnt,0) = 0 --print(convert(varchar(100),getdate(),120) + ' end logic data') declare @saskno varchar(20) declare @sasktype varchar(1) declare cur cursor for select distinct orgcode,asktype from tmpaskdata_param order by orgcode open cur fetch next from cur into @sorgcode,@sasktype while @@fetch_status=0 begin select @sdate=convert(varchar(10),getdate(),20),@stime = substring(convert(varchar(20),getdate(),20),12,8) set @saskno = '' while 1=1 begin exec f_get_billno 'yh',@sorgcode,'1',@saskno output if exists(select 1 from t_ask_head where billno=@saskno) continue else break end insert into t_ask_body(billno,serialno,asktype,plucode,pluname,barcode,cargono,spec,unit,punit,itemcnt,pcount,sglcount,counts,jycounts,price, jprice,netjprice,cost,netcost,jtaxrate,ypcount,depcode,depname,remark,cgmode,promdesc,sscount,ztcount,total) select @saskno,1,a.asktype,a.plucode,g.pluname,g.barcode,g.cargono,g.spec,g.unit,'' as punit,0 as itemcnt,0 as pcount,a.askcounts,a.askcounts,a.askcounts,o.price, case when g.plutype='2' then 0 else o.jprice end as jprice, round(case when g.plutype='2' then 0 else o.jprice/(1+isnull(g.jtaxrate,0)/100.00) end,4) as netjprice, round(a.askcounts*(case when g.plutype='2' then 0 else o.jprice end),2) as cost, round(a.askcounts*(case when g.plutype='2' then 0 else o.jprice/(1+isnull(g.jtaxrate,0)/100.00) end),2) as netcost, g.jtaxrate,0 as ypcount,g.depcode,d.depname,'' as remark,a.cgmode,a.promdesc,a.gcount,a.onwaycount,round(a.askcounts*o.price,2) from tmpaskdata_param a join t_plu g on a.plucode=g.plucode join t_plu_org o on a.plucode=o.plucode and a.orgcode = o.orgcode and o.orgcode=@sorgcode and o.isright='1' left join t_dept d on g.depcode=d.depcode where a.asktype = @sasktype if @@error<>0 begin set @psmsg='生成要货单明细失败' close cur deallocate cur return (-1) end select @saskbgndate = convert(varchar(10),DATEADD(dd,-1*continuedays,GETDATE()),120), @saskenddate = convert(varchar(10),DATEADD(dd,continueenddays,GETDATE()),120) from tmpaskdata_param where plucode = (select top 1 plucode from t_ask_body where billno = @saskno) and orgcode =@sorgcode and asktype = @sasktype insert into t_ask_head(billno,orgcode,lrdate,lrtime,depcode,depname,counts,cost,netcost,total,chkstatus,usercode,username,zdrcode,zdrname,asktype,remark,askbgndate,askenddate) select @saskno,upper(@sorgcode),@sdate,@stime,'','',sum(d.counts),sum(d.cost),sum(d.netcost),sum(d.total), '0' as chkstatus,'0000','管理员','0000','管理员',@sasktype,'自动要货生成',@saskbgndate as askbgndate,@saskenddate as askenddate from t_ask_body d where d.billno=@saskno if @@error<>0 begin set @psmsg='生成要货单主表失败' close cur deallocate cur return (-1) end insert into t_tran_log(logdate,logtime,stationid,mdlcode,mdlname,usercode,username,operation) values(@sdate,@stime,'油站订货作业','','','','','生成油站订货单:'+@saskno) fetch next from cur into @sorgcode,@sasktype end close cur deallocate cur --print(convert(varchar(100),getdate(),120) + ' end process data') set @psmsg='' return(1) end go if exists(select * from sysobjects where name='p_create_orderdata' and xtype='p') drop procedure p_create_orderdata go CREATE procedure p_create_orderdata ( @psusercode varchar(10), @pstblname varchar(100), @pirtn int out, @psmsg varchar(2000) out ) as declare @sorgcode varchar(10) declare @sdate varchar(10) declare @stime varchar(8) declare @susername varchar(20) declare @ssql varchar(8000) declare @icgvaliddays int declare @svaliddate varchar(10) declare @sarrivedate varchar(10) declare @sorderno varchar(20) declare @ssupcode varchar(20) declare @scontrno varchar(40) begin set @psmsg='' set @pirtn = 0 declare @sbranchno varchar(20) select @sbranchno = itemvalue from dbo.t_syscfg where itemname = 'branchno' if isnull(@sbranchno,'') = '' begin set @pirtn = -1 set @psmsg = '未找到中央仓' return -1 end select @susername=username from t_user where usercode = @psusercode ----中央仓,缺货缺省采购订单有效天数 select @icgvaliddays=convert(int,itemvalue) from t_syscfg where section='system' and itemname='cgvaliddays' set @svaliddate=convert(varchar(10),dateadd(day,@icgvaliddays,getdate()),120) set @sarrivedate = convert(varchar(10),dateadd(day,4,getdate()),120) if exists(select * from sysobjects where name = 'tmporderdata_param' and xtype = 'U') drop table tmporderdata_param create table tmporderdata_param( plucode varchar(20) not null default(''), billno varchar(20) not null default(''), orgcode varchar(10) not null default(''), cgmode varchar not null default ('1'), clmode varchar not null default ('0'), supcode varchar(20) not null default(''), ordercnt numeric(19,4) not null default(''), askcounts numeric(19,4) not null default (0) constraint pk_tmporderdata_param primary key nonclustered ( plucode,billno,orgcode ) ) ------20231108,调整根据判断数量进行调整Cgmode的方式,当要货数据大于等于判断数量(非0)为Cgmode=2,否则为Cgmode=1 set @ssql = 'insert into tmporderdata_param(plucode,billno,orgcode,cgmode,clmode,supcode,ordercnt,askcounts) '+ 'select a.plucode,a.billno,h.orgcode, Case b.cgmode when ''0'' then case when (b.counts>=o.judgecnt And o.judgecnt >0) then ''2'' Else ''1'' end when ''1'' then ''1'' when ''2'' then ''2'' end As cgmode, b.clmode,case when isnull(o.supcode,'''') <>'''' then o.supcode else p.supcode end as supcode,'+ 'p.ordercnt,b.counts '+ 'from '+@pstblname+' a '+ 'join dbo.t_ask_body b on a.plucode = b.plucode and a.billno = b.billno '+ 'join dbo.t_ask_head h on a.billno = h.billno '+ 'join t_plu p on a.plucode = p.plucode '+ 'join dbo.t_plu_org o on a.plucode = o.plucode and h.orgcode = o.orgcode' exec (@ssql) if @@error <>0 begin set @pirtn = -1 set @psmsg = '初始数据失败' return -1 end update a set supcode =case when isnull(o.supcode,'') <> '' then o.supcode else p.supcode end from tmporderdata_param a,t_plu p ,t_plu_org o where a.plucode = p.plucode and a.plucode = o.plucode and o.orgcode = @sbranchno and a.cgmode = '1' --delete from tmporderdata_param where isnull(supcode,'') = '' --中央仓采购表 if exists(select * from sysobjects where name = 'tmporderdata_cg' and xtype = 'U') drop table tmporderdata_cg create table tmporderdata_cg( plucode varchar(20) not null default(''), supcode varchar(20) not null default(''), contrno varchar(40) not null default(''), orgcode varchar(10) not null default(''), ordercnt numeric(19,4) not null default 0, jprice numeric(19,4) not null default 0, counts numeric(19,4) not null default (0), tag varchar(1) null constraint pk_tmporderdata_cg primary key nonclustered ( plucode,supcode,orgcode ) ) insert into tmporderdata_cg(plucode,supcode,ordercnt,orgcode, counts) select plucode,supcode,ordercnt,@sbranchno, sum(askcounts) as counts from tmporderdata_param where cgmode = '1' and clmode = '0' and isnull(supcode,'') <> '' group by plucode,supcode,ordercnt /* 2023-11-08 以下内容不用这么复杂的控制 if exists(select * from sysobjects where name = 'tmporderdata_onway' and xtype = 'U') drop table tmporderdata_onway create table tmporderdata_onway( plucode varchar(20) not null default(''), askcount numeric(19,4) not null default 0, onwaycount numeric(19,4) not null default (0) constraint pk_tmporderdata_onway primary key nonclustered ( plucode ) ) insert into tmporderdata_onway(plucode,askcount,onwaycount) select a.plucode,askcounts,onwaycount from (select plucode,sum(askcounts) as askcounts,sum(onwaycount) as onwaycount from ( /* 2023-11-08,物流已处理的状态订货数据,已经生成了采购订单了 select plucode,sum(b.counts) as askcounts, 0 as onwaycount from t_ask_body b,t_ask_head h where b.billno = h.billno and isnull(h.rzdate,'') <> '' and b.clstate = '1' and b.clmode = '0' and b.cgmode = '1' group by b.plucode union all */ -----只统计中央仓的采购订单执行状态的在途库存数据 select plucode,0 as askcounts, sum(b.counts-b.dhcount)as onwaycount from t_order_body b,t_order_head h,dbo.t_shop s where b.billno = h.billno and h.orgcode = s.orgcode and s.orgtype = '2' and h.state = '1' group by b.plucode )src1 group by plucode )a,tmporderdata_cg b where a.plucode = b.plucode --中央仓采购订单 -----处理冲减中央仓已有的库存数据和执行中的采购订单未到货库存数量 update a set a.counts = a.counts + b.askcount - b.onwaycount - isnull(o.gcount,0) - isnull(o.ccount,0) from tmporderdata_cg a join tmporderdata_onway b on a.plucode = b.plucode join t_plu_org o on a.plucode = o.plucode and o.orgcode = @sbranchno *2023-11-08 以上内容不用这么复杂的控制 * ----按中央仓库存+中央仓采购订单执行状态且未收完货的数据 Select pluCode ,sum(onwaycount) as onwaycount From (Select pluCode,(isnull(gcount,0)+isnull(ccount,0)) as onwaycount from t_plu_org where orgcode='c001' union all select plucode, sum(b.counts-b.dhcount) as onwaycount from t_order_body b,t_order_head h,dbo.t_shop s where b.billno = h.billno and h.orgcode = s.orgcode and s.orgcode='c001' and h.state = '1' group by b.plucode ) TT group by plucode */ ---------20231108按中央仓库存+中央仓采购订单执行状态且未收完货的数据 update a set a.counts = a.counts -o.onwaycount from tmporderdata_cg a join ( Select pluCode ,sum(onwaycount) as onwaycount From (Select pluCode,(isnull(gcount,0)+isnull(ccount,0)) as onwaycount from t_plu_org where orgcode= @sbranchno union all select plucode, sum(b.counts-b.dhcount) as onwaycount from t_order_body b,t_order_head h,dbo.t_shop s where b.billno = h.billno and h.orgcode = s.orgcode and s.orgcode= @sbranchno and h.state = '1' group by b.plucode union all select pluCode ,-sum(c.counts) as onwaycount from t_ask_body c , t_ask_head tah where c.cgmode='1' and clstate = '1' and c.billno = tah.billno and tah.state ='0' and c.clmode ='0' group by c.plucode ) TT group by plucode ) o on a.plucode = o.plucode update a set counts = case ordercnt when 0 then counts else round(counts/ordercnt,0)*ordercnt end, contrno = isnull((select top 1 c.contrno from t_contract c , t_contr_org co where c.contrno = co.contrno and supcode = a.supcode and co.orgcode = a.orgcode and contrstatus = '0' and CONVERT(varchar(10),GETDATE(),120) between bgndate and enddate order by signdate,c.contrno) ,'') from tmporderdata_cg a where counts > 0 --获取进价 update a set jprice = case when isnull(sp.jymode,'') = '2' then 0 else case when Exists (select JPrice from t_order_quote H where H.QuoteType='1' and convert(varchar(10),getdate(),120) between BgnDate and EndDate and h.orgcode = a.orgcode and h.plucode = a.plucode and h.supcode = a.supcode) then (select top 1 JPrice from t_order_quote H,(select QuoteType,OrgCode,supcode,PluCode,max(RzDate+' '+RzTime) RzDateTime from t_order_quote where QuoteType='1' and convert(varchar(10),getdate(),120) between BgnDate and EndDate group by QuoteType,OrgCode,supcode,PluCode) B where H.QuoteType=B.QuoteType and H.OrgCode=B.OrgCode and H.supcode=B.supcode and H.PluCode=B.PluCode and H.RzDate+' '+H.RzTime=B.RzDateTime and convert(varchar(10),getdate(),120) between BgnDate and EndDate and h.orgcode = a.orgcode and h.plucode = a.plucode and h.supcode = a.supcode) --when Exists (select JPrice from t_order_quote H where H.QuoteType='0' and h.orgcode = a.orgcode and h.plucode = a.plucode and h.supcode = a.supcode) --then (select JPrice from t_order_quote H where H.QuoteType='0' and h.orgcode = a.orgcode and h.plucode = a.plucode and h.supcode = a.supcode) else o.ojprice end end, tag = case when isnull(sp.jymode,'') = '2' then '0' else case when Exists (select JPrice from t_order_quote H where H.QuoteType='1' and convert(varchar(10),getdate(),120) between BgnDate and EndDate and h.orgcode = a.orgcode and h.plucode = a.plucode and h.supcode = a.supcode) then '1' --when Exists( select JPrice from t_order_quote H where H.QuoteType='0' and h.orgcode = a.orgcode and h.plucode = a.plucode and h.supcode = a.supcode) then '1' else '0' end end from tmporderdata_cg a,t_plu_org o,t_supplier sp, t_plu g where a.plucode = o.plucode and o.orgcode = a.orgcode and a.supcode = sp.supcode and a.plucode = g.plucode -- update a --set cgdate=@sdate,clstate = '1' --from t_ask_body a,tmporderdata_param b --where a.billno = b.billno and a.plucode = b.plucode and a.cgmode = '1' --and exists (select * from tmporderdata_cg where plucode = b.plucode and counts <= 0) declare cur cursor for select distinct supcode,orgcode,contrno from tmporderdata_cg where counts > 0 and contrno <> '' order by supcode open cur fetch next from cur into @ssupcode,@sorgcode,@scontrno while @@fetch_status = 0 begin select @sdate=convert(varchar(10),getdate(),20),@stime = substring(convert(varchar(20),getdate(),20),12,8) set @sorderno = '' while 1=1 begin exec f_get_billno 'CG',@sorgcode,'1',@sorderno output if exists(select 1 from t_order_head where billno=@sorderno) continue else break end print (@sorderno) insert into t_order_body(billno,serialno,plucode,pluname,barcode,cargono,spec,unit,price,counts, jprice,netjprice,ornjprice,ornnetjprice,cost,netcost,jtaxrate,depcode,depname,remark,pcount,punit,itemcnt,sglcount,tag) select @sorderno,0 as serialno,a.plucode,g.pluname,g.barcode,g.cargono,g.spec,g.unit,o.price,a.counts, a.jprice,round(a.jprice/(1+isnull(g.jtaxrate,0)/100.00),4) as netjprice,a.jprice,round(a.jprice/(1+isnull(g.jtaxrate,0)/100.00),4) as ornnetjprice, round(a.counts*a.jprice,2) as cost, round(round(a.counts*a.jprice,2)/(1+isnull(g.jtaxrate,0)/100.00),2) as netcost, g.jtaxrate,g.depcode,d.depname,'' as remark, case when isnull(a.ordercnt,0)=0 then 0 else round(a.counts/a.ordercnt,1) end as pcount, '' as punit,a.ordercnt as itemcnt,a.counts as sglcount,a.tag from tmporderdata_cg a join t_plu g on a.plucode=g.plucode join t_plu_org o on a.plucode=o.plucode and a.orgcode = o.orgcode and o.orgcode=@sbranchno left join t_dept d on g.depcode = d.depcode where a.supcode = @ssupcode and a.counts > 0 and a.contrno <> '' if @@error<>0 begin set @psmsg='生成中央仓订单明细失败' close cur deallocate cur set @pirtn = -1 return (-1) end insert into t_order_head(billno,orgcode,billtype,bizdate,lrdate,lrtime, counts,cost,netcost,zdrcode,zdrname,usercode,username, chkstatus,remark,sqauremode,supcode,supname, depcode,depname,contrno,arrivedate,paydate,validdate,iszs) select @sorderno,upper(@sorgcode),'0',@sdate,@sdate,@stime, sum(d.counts),sum(d.cost),sum(d.netcost), @psusercode,@susername,@psusercode,@susername, '0' as chkstatus,'油站订货处理生成','1' as sqauremode,@ssupcode,(select supname from t_supplier where supcode = @ssupcode) as supname, '' as depcode,'' as depname,@scontrno as contrno,@sarrivedate,@svaliddate,@svaliddate,'0' from t_order_body d where d.billno=@sorderno if @@error<>0 begin set @pirtn = -1 set @psmsg='生成中央仓订单主表信息失败' close cur deallocate cur return (-1) end --更新处理状态 --update a --set cgdate=@sdate,clstate = '1' --from t_ask_body a,tmporderdata_param b --where a.billno = b.billno and a.plucode = b.plucode and a.cgmode = '1' and b.supcode = @ssupcode --update t_order_head --set state = '1', -- rzdate = @sdate,rztime = @stime --where billno = @sorderno insert into t_tran_log(logdate,logtime,stationid,mdlcode,mdlname,usercode,username,operation) values(@sdate,@stime,'','','油站订货处理',@psusercode,@susername,'油站订货处理生成:'+@sorderno) fetch next from cur into @ssupcode,@sorgcode,@scontrno end close cur deallocate cur --处理直送单 truncate table tmporderdata_cg insert into tmporderdata_cg(plucode,supcode,ordercnt,orgcode, counts) select plucode,supcode,ordercnt,orgcode, sum(askcounts) as counts from tmporderdata_param where cgmode = '2' and clmode = '0' and isnull(supcode,'') <> '' group by plucode,supcode,ordercnt,orgcode update a set counts = case ordercnt when 0 then counts else round(counts/ordercnt,0)*ordercnt end, contrno = isnull((select top 1 c.contrno from t_contract c , t_contr_org co where c.contrno = co.contrno and supcode = a.supcode and co.orgcode = a.orgcode and contrstatus = '0' and CONVERT(varchar(10),GETDATE(),120) between bgndate and enddate order by signdate,c.contrno) ,'') from tmporderdata_cg a where counts > 0 --获取进价 update a set jprice = case when isnull(sp.jymode,'') = '2' then 0 else case when Exists (select JPrice from t_order_quote H where H.QuoteType='1' and convert(varchar(10),getdate(),120) between BgnDate and EndDate and h.orgcode = a.orgcode and h.plucode = a.plucode and h.supcode = a.supcode) then (select top 1 JPrice from t_order_quote H,(select QuoteType,OrgCode,supcode,PluCode,max(RzDate+' '+RzTime) RzDateTime from t_order_quote where QuoteType='1' and convert(varchar(10),getdate(),120) between BgnDate and EndDate group by QuoteType,OrgCode,supcode,PluCode) B where H.QuoteType=B.QuoteType and H.OrgCode=B.OrgCode and H.supcode=B.supcode and H.PluCode=B.PluCode and H.RzDate+' '+H.RzTime=B.RzDateTime and convert(varchar(10),getdate(),120) between BgnDate and EndDate and h.orgcode = a.orgcode and h.plucode = a.plucode and h.supcode = a.supcode) --when Exists (select JPrice from t_order_quote H where H.QuoteType='0' and h.orgcode = a.orgcode and h.plucode = a.plucode and h.supcode = a.supcode) --then (select JPrice from t_order_quote H where H.QuoteType='0' and h.orgcode = a.orgcode and h.plucode = a.plucode and h.supcode = a.supcode) else o.ojprice end end, tag = case when isnull(sp.jymode,'') = '2' then '0' else case when Exists (select JPrice from t_order_quote H where H.QuoteType='1' and convert(varchar(10),getdate(),120) between BgnDate and EndDate and h.orgcode = a.orgcode and h.plucode = a.plucode and h.supcode = a.supcode) then '1' --when Exists( select JPrice from t_order_quote H where H.QuoteType='0' and h.orgcode = a.orgcode and h.plucode = a.plucode and h.supcode = a.supcode) then '1' else '0' end end from tmporderdata_cg a,t_plu_org o,t_supplier sp, t_plu g where a.plucode = o.plucode and o.orgcode = a.orgcode and a.supcode = sp.supcode and a.plucode = g.plucode --update a --set cgdate=@sdate,clstate = '1' --from t_ask_body a,tmporderdata_param b --where a.billno = b.billno and a.plucode = b.plucode and a.cgmode = '2' declare curZ cursor for select distinct supcode,orgcode,contrno from tmporderdata_cg where counts > 0 and contrno <> '' order by orgcode,supcode open curZ fetch next from curZ into @ssupcode,@sorgcode,@scontrno while @@fetch_status = 0 begin select @sdate=convert(varchar(10),getdate(),20),@stime = substring(convert(varchar(20),getdate(),20),12,8) set @sorderno = '' while 1=1 begin exec f_get_billno 'ZCG',@sorgcode,'1',@sorderno output if exists(select 1 from t_order_head where billno=@sorderno) continue else break end insert into t_order_body(billno,serialno,plucode,pluname,barcode,cargono,spec,unit,price,counts, jprice,netjprice,ornjprice,ornnetjprice,cost,netcost,jtaxrate,depcode,depname,remark,pcount,punit,itemcnt,sglcount,tag) select @sorderno,0 as serialno,a.plucode,g.pluname,g.barcode,g.cargono,g.spec,g.unit,o.price,a.counts, a.jprice,round(a.jprice/(1+isnull(g.jtaxrate,0)/100.00),4) as netjprice,a.jprice,round(a.jprice/(1+isnull(g.jtaxrate,0)/100.00),4) as ornnetjprice, round(a.counts*a.jprice,2) as cost, round(round(a.counts*a.jprice,2)/(1+isnull(g.jtaxrate,0)/100.00),2) as netcost, g.jtaxrate,g.depcode,d.depname,'' as remark, case when isnull(a.ordercnt,0)=0 then 0 else round(a.counts/a.ordercnt,1) end as pcount, '' as punit,a.ordercnt as itemcnt,a.counts as sglcount,a.tag from tmporderdata_cg a join t_plu g on a.plucode=g.plucode join t_plu_org o on a.plucode=o.plucode and a.orgcode = o.orgcode and o.orgcode=@sorgcode left join t_dept d on g.depcode = d.depcode where a.supcode = @ssupcode and a.counts > 0 and a.contrno <> '' if @@error<>0 begin set @psmsg='生成油站直送订单明细失败' set @pirtn = -1 close curZ deallocate curZ return (-1) end insert into t_order_head(billno,orgcode,billtype,bizdate,lrdate,lrtime, counts,cost,netcost,zdrcode,zdrname,usercode,username, chkstatus,remark,sqauremode,supcode,supname,depcode,depname,contrno,arrivedate,paydate,validdate,iszs) select @sorderno,upper(@sorgcode),'0',@sdate,@sdate,@stime, sum(d.counts),sum(d.cost),sum(d.netcost), @psusercode,@susername,@psusercode,@susername, '0' as chkstatus,'油站订货处理生成','1' as sqauremode,@ssupcode,(select supname from t_supplier where supcode = @ssupcode) as supname, '' as depcode,'' as depname,@scontrno as contrno,@sarrivedate,@svaliddate,@svaliddate,'1' from t_order_body d where d.billno=@sorderno if @@error<>0 begin set @pirtn = -1 set @psmsg='生成油站直送订单主表信息失败' close curZ deallocate curZ return (-1) end --更新处理状态 --update a --set cgdate=@sdate,clstate = '1' --from t_ask_body a,tmporderdata_param b --where a.billno = b.billno and a.plucode = b.plucode and a.cgmode = '2' and b.supcode = @ssupcode and b.orgcode = @sorgcode --update t_order_head --set state = '1', -- rzdate = @sdate,rztime = @stime --where billno = @sorderno insert into t_tran_log(logdate,logtime,stationid,mdlcode,mdlname,usercode,username,operation) values(@sdate,@stime,'','','油站订货处理',@psusercode,@susername,'油站订货处理生成:'+@sorderno) fetch next from curZ into @ssupcode,@sorgcode,@scontrno end close curZ deallocate curZ update a set cgdate=@sdate,clstate = '1' from t_ask_body a,tmporderdata_param b where a.billno = b.billno and a.plucode = b.plucode if @@error<>0 begin set @pirtn = -1 set @psmsg='更新油站订单处理状态失败' return (-1) end set @psmsg='' return(1) end go