有三个表.Ord表,Store表,Mat表
IF NOT OBJECT_ID('[store]') IS NULL
    DROP TABLE [store]
GO
CREATE TABLE [store]([物料] NVARCHAR(10),[货位] NVARCHAR(10),[数量] INT)
INSERT [tb]
SELECT 'A','C0100201',1 UNION ALL
SELECT 'A','C0100202',5 UNION ALL
SELECT 'A','B0100202',500 UNION ALL
SELECT 'A','B0100203',300 UNION ALLSELECT 'B','C0100201',7 UNION ALL
SELECT 'B','B0100202',50 UNION ALL
SELECT 'B','B0100203',490 UNION ALLSELECT 'C','C0100201',1 UNION ALL
SELECT 'C','B0300202',50 UNION ALL
IF NOT OBJECT_ID('[Ord]') IS NULL
    DROP TABLE [Ord]
GO
CREATE TABLE [ord]([物料] NVARCHAR(10),[ordno] NVARCHAR(10),[数量] INT,[reason] Varchar(300))
INSERT [ord]
SELECT 'A','Ord001',1,'' UNION ALL
SELECT 'A','Ord002',5 ,''UNION ALL
SELECT 'A','Ord003',49 ,''UNION ALL
SELECT 'A','ord004',500 ,''UNION ALLSELECT 'B','Ord004',100 ,''UNION ALL
SELECT 'B','Ord005',123 ,''UNION ALLSELECT 'C','Ord005',33 ,''UNION ALL
SELECT 'C','Ord006',138 ,''UNION ALLIF NOT OBJECT_ID('[mat]') IS NULL
    DROP TABLE [mat]
GO
CREATE TABLE [mat]([物料] NVARCHAR(10),[包装数量] INT)
INSERT [mat]
SELECT 'A',10 UNION ALL
SELECT 'B',10 UNION ALL
SELECT 'C',20 
IF NOT OBJECT_ID('[task_Z]') IS NULL
    DROP TABLE [task_Z]
GO
CREATE TABLE [task_Z]([物料] NVARCHAR(10),[ordno] NVARCHAR(10),[货位] NVARCHAR(10),[[数量] INT,[reason] Varchar(300))IF NOT OBJECT_ID('[task_l]') IS NULL
    DROP TABLE [task_l]
GO
CREATE TABLE [task_l]([物料] NVARCHAR(10),[ordno] NVARCHAR(10),[货位] NVARCHAR(10),[[数量] INT,[reason] Varchar(300))如果订单表的数量全部出,检查库存store表是否够,如果不够,先满足够出的订单,在不够的字段reason标记.
总量够的情况下.再计算零头区域出(货位是头字母为C,整件区域为B)是否够,如不够,在ord表加上原因,(补货到零货位上多少件),同时装相关信息写入task_l表
整件同样写入task_z表.
这是一个具体例子描述
苹果(PG)50个一箱,梨子(LZ)40个一箱,桃子(TZ)60个一箱;
订单A:PG155(3*50+05),LZ246(6*40+6),TZ175(2*60+55)
订单B:PG165(3*50+15),LZ255(6*40+15),TZ170(2*60+50)
订单C:PG170(3*50+20),LZ270(6*40+30),TZ170(2*60+50)
库存分布:整件拣选PG200,LZ400,TZ180
库存分布:拆零货位PG70,LZ40,TZ70
整件补货:PG250,LZ320,TZ180(均以箱为单位补货,实际情况分为以托盘为单位补货和以箱为单位补货两种方式,并设置拣选位上限)
拆零补货:PG0,LZ40(11),TZ120(85)
注:PG不需要补货。由于LZ要求补11个,一箱为40;TZ要求不85个,两箱为120。本处假设LZ上限为80,TZ上限为120.