USE [ASRS_WXZD_JYMH_CPK] GO -- 从底层开始往上放,同一层的01/02排单伸先放,然后放04/05排浅货位,最后再03/06排深货位, 同排的从第1列开始往后放。 update kwjbxx set storeDist = ceng * 1000 + lie * 10 + case pai when '03' then 4 when '04' then 3 else pai end select pai,lie,ceng,kwbh,storeDist FROM kwjbxx ORDER BY storeDist go /****** Object: UserDefinedFunction [dbo].[TF_待入库产品各巷道库位分配数] Script Date: 2017/10/23 星期一 15:25:50 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO ALTER FUNCTION [dbo].[TF_待入库产品各巷道库位分配数] ( @唯一产品标识 varchar(100) -- 区分唯一待入库产品的标识字符串。参考v_zyzl视图定义。有些项目只区分到产品,有些项目不同批号代表不同产品 ) RETURNS TABLE AS /** * 指定待入库产品在各个巷道托盘数分布情况。包括已经安排入库库位,但是木有入库完成的入库指令部分。 * 不同的项目都有差异,因此改用函数提取各类产品在各个巷道的托盘个数分布情况。 * * 同之前使用的v_cpHdKws不同的是,该函数仅返回该产品 * * Used by 入库库位自动安排程序 * Created by jzx on 2014-12-9 * Modified by jzx on 2015-9-17 因为入库指令一旦确定库位,就会往cpkcxx表插入零库存记录,所以之前的联合 未完成指令的语句就可以不用了。 * Modified by jzx on 2017-10-24 增加availablePairs字段输出 */ RETURN SELECT k.hdh hdh , SUM(CASE WHEN k.xnkw=0 AND k.zsl=0 AND k.托盘个数=0 AND k.sfsd=0 AND sfyx=1 AND k.kwbh=b.kwbh2 THEN 1 ELSE 0 END) AS availablePairs -- 此巷道是否有可配对入库的深浅货位个数 , MAX(c.kws) kws FROM kwjbxx(NOLOCK) k LEFT JOIN (SELECT DISTINCT b.kwbh,ISNULL(b.wckw, b.nckw) kwbh2 FROM cpkcxx(NOLOCK) a, kwjbxx b(NOLOCK) WHERE cpbh+'.'+lpxx = @唯一产品标识 AND a.kwbh=b.kwbh --AND b.wckw IS NOT NULL OR b.nckw IS NOT NULL )b ON k.kwbh=b.kwbh2 LEFT JOIN (SELECT b.hdh,COUNT(distinct b.kwbh) kws FROM cpkcxx(NOLOCK) a, kwjbxx b(NOLOCK) WHERE cpbh+'.'+lpxx = @唯一产品标识 AND a.kwbh=b.kwbh GROUP BY b.hdh )c ON k.hdh=c.hdh GROUP BY k.hdh /* SELECT hdh, COUNT(DISTINCT a.kwbh) kws FROM ( SELECT kwbh,cpbh,lpxx FROM cpkcxx WHERE kwbh like '[0-1]%' AND cpbh=@唯一产品标识 AND rksj > = DATEADD(d, -1, getdate()) -- 仅考虑一天的入库时间差异。 ) a JOIN kwjbxx k ON a.kwbh=k.kwbh WHERE xnkw=0 GROUP BY hdh */ go update sys_SQL_statements set SQL_string= 'SELECT TOP 1 kwbh,zsl,nckw,kws,wckw FROM kwjbxx r LEFT JOIN (SELECT availablePairs,kws FROM TF_待入库产品各巷道库位分配数(?)) b ON r.hdh=b.hdh WHERE zsl=0 AND 托盘个数=0 AND sfsd=0 AND xnkw=0 AND sfyx=1 AND ckmc=? AND pai BETWEEN ? AND ? AND (qysx IS NULL OR qysx=?) AND (kfwpgd>=? OR kfwpgd IS NULL) AND (kfwpzl>=? OR kfwpzl IS NULL) AND NOT EXISTS(SELECT 2 FROM v_未完成指令 w WHERE w.kwbh=r.kwbh)' where ID='可入库位搜索语句'; go update sys_SQL_statements set SQL_string='storeDist' where ID='orderClauseForDistance'; go