生产管理系统实例程序.sql
上传用户:hjieqiu
上传日期:2013-05-11
资源大小:16494k
文件大小:21k
源码类别:

企业管理

开发平台:

C#

  1. if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[mrp物料需求计算_物料编号_fk]') and OBJECTPROPERTY(id, N'IsForeignKey') = 1)
  2. ALTER TABLE [dbo].[mrp物料需求计算] DROP CONSTRAINT mrp物料需求计算_物料编号_fk
  3. GO
  4. if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[mrp物料需求计算结果_物料编号_fk]') and OBJECTPROPERTY(id, N'IsForeignKey') = 1)
  5. ALTER TABLE [dbo].[mrp物料需求计算结果] DROP CONSTRAINT mrp物料需求计算结果_物料编号_fk
  6. GO
  7. if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[mrp物料需求历史_物料编号_fk]') and OBJECTPROPERTY(id, N'IsForeignKey') = 1)
  8. ALTER TABLE [dbo].[mrp物料需求历史] DROP CONSTRAINT mrp物料需求历史_物料编号_fk
  9. GO
  10. if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[物料清单_物料编号_fk]') and OBJECTPROPERTY(id, N'IsForeignKey') = 1)
  11. ALTER TABLE [dbo].[物料清单] DROP CONSTRAINT 物料清单_物料编号_fk
  12. GO
  13. if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[主生产计划_物料编号_fk]') and OBJECTPROPERTY(id, N'IsForeignKey') = 1)
  14. ALTER TABLE [dbo].[主生产计划] DROP CONSTRAINT 主生产计划_物料编号_fk
  15. GO
  16. if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[主生产计划历史_物料编号_fk]') and OBJECTPROPERTY(id, N'IsForeignKey') = 1)
  17. ALTER TABLE [dbo].[主生产计划历史] DROP CONSTRAINT 主生产计划历史_物料编号_fk
  18. GO
  19. if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[主需求计划_物料编号_fk]') and OBJECTPROPERTY(id, N'IsForeignKey') = 1)
  20. ALTER TABLE [dbo].[主需求计划] DROP CONSTRAINT 主需求计划_物料编号_fk
  21. GO
  22. if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[主需求计划历史_物料编号_fk]') and OBJECTPROPERTY(id, N'IsForeignKey') = 1)
  23. ALTER TABLE [dbo].[主需求计划历史] DROP CONSTRAINT 主需求计划历史_物料编号_fk
  24. GO
  25. -------------------------------------------------------
  26. if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[物料主文件]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
  27. drop table [dbo].[物料主文件]
  28. GO
  29. if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[物料清单]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
  30. drop table [dbo].[物料清单]
  31. GO
  32. if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[工厂日历]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
  33. drop table [dbo].[工厂日历]
  34. GO
  35. if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[主需求计划]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
  36. drop table [dbo].[主需求计划]
  37. GO
  38. if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[主需求计划历史]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
  39. drop table [dbo].[主需求计划历史]
  40. GO
  41. if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[主生产计划]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
  42. drop table [dbo].[主生产计划]
  43. GO
  44. if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[主生产计划历史]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
  45. drop table [dbo].[主生产计划历史]
  46. GO
  47. if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[mrp物料需求计算]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
  48. drop table [dbo].[mrp物料需求计算]
  49. GO
  50. if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[mrp物料需求计算结果]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
  51. drop table [dbo].[mrp物料需求计算结果]
  52. GO
  53. if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[mrp物料需求历史]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
  54. drop table [dbo].[mrp物料需求历史]
  55. GO
  56. if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[物料状态类别]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
  57. drop table [dbo].[物料状态类别]
  58. GO
  59. if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[物料计划类别]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
  60. drop table [dbo].[物料计划类别]
  61. GO
  62. -------------------------------------------
  63. CREATE TABLE [dbo].[物料主文件] (
  64. [物料编号] [char] (14) NOT NULL ,
  65. [条码] [char] (14) NULL ,
  66. [物料名称] [varchar] (50) NOT NULL ,
  67. [拼音编码] [char] (10) NULL ,
  68. [计量单位] [char] (10) NOT NULL ,
  69. [规格型号] [char] (20) NULL ,
  70. [计划类别] [char] (5) NULL ,
  71. [状态类别] [char] (5) NULL ,
  72. [归属类别] [char] (5) NULL ,
  73. [价值类别] [char] (1) NULL ,
  74. [物料特性a] [varchar] (40) NULL ,
  75. [物料特性b] [varchar] (40) NULL ,
  76. [物料特性c] [varchar] (40) NULL ,
  77. [物料特性d] [varchar] (40) NULL ,
  78. [长] [decimal](18, 3) NULL ,
  79. [宽] [decimal](18, 3) NULL ,
  80. [高] [decimal](18, 3) NULL ,
  81. [净重] [decimal](18, 3) NULL ,
  82. [品牌] [char] (10) NULL ,
  83. [颜色] [char] (10) NULL ,
  84. [等级] [char] (10) NULL ,
  85. [进货提前期] [int]  NULL ,
  86. [准备周期] [int]  NULL ,
  87. [生产周期] [int]  NULL ,
  88. [最小包装量] [decimal](18, 3) NULL ,
  89. [最低销售量] [decimal](18, 3) NULL ,
  90. [批量] [decimal](18, 4) NULL ,
  91. [最高库存] [decimal](18, 3) NULL ,
  92. [最低库存] [decimal](18, 3) NULL ,
  93. [库存期限] [int] NULL ,
  94. [录入者] [char] (8) NULL ,
  95. [录入日期] [int] NULL ,
  96. [低层码] [int] NULL ,
  97. [指定供货商] [char] (10) NULL ,
  98. [定货策略] [char] (10) NULL ,
  99. [生产车间] [char] (10) NULL 
  100. ) ON [PRIMARY]
  101. GO
  102. CREATE TABLE [dbo].[物料清单] (
  103. [父项编号] [char] (14) NOT NULL ,
  104. [物料编号] [char] (14) NOT NULL ,
  105. [需要数量] [decimal](18, 4) NOT NULL ,
  106. [领料车间] [char] (10) NULL ,
  107. [领料库房] [char] (10) NULL ,
  108. [损耗率] [decimal](5, 4) NULL ,
  109. [bom状态] [char] (1) NULL ,
  110. [bom信息状态] [char] (1) NULL ,
  111. [审核者] [char] (8) NULL ,
  112. [审核日期] [int] NULL ,
  113. [其它事项] [text] NULL ,
  114. [低层码] [int] NULL ,
  115. [展开标记] [bit] NULL 
  116. ) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
  117. GO
  118. CREATE TABLE [dbo].[工厂日历] (
  119. [年份] [int] NOT NULL ,
  120. [计划期] [int] NOT NULL ,
  121. [开始日期] [int] NOT NULL ,
  122. [结束日期] [int] NOT NULL ,
  123. [备注] [varchar] (255) NULL 
  124. ) ON [PRIMARY]
  125. GO
  126. CREATE TABLE [dbo].[主需求计划] (
  127. [编号] [char] (14) NULL ,
  128. [物料编号] [char] (14) NOT NULL ,
  129. [年份] [int] NOT NULL ,
  130. [计划期] [int] NOT NULL ,
  131. [开始日期] [int] NULL ,
  132. [结束日期] [int] NULL ,
  133. [需求数量] [decimal] (15,2) NOT NULL ,
  134. [记帐人] [varchar] (10) NULL ,
  135. [修改日期] [int] NULL ,
  136. [状态] [char] (10) NULL default '有效',
  137. [备注] [varchar] (40) NULL 
  138. ) ON [PRIMARY]
  139. GO
  140. CREATE TABLE [dbo].[主需求计划历史] (
  141. [编号] [char] (14) NULL ,
  142. [物料编号] [char] (14) NOT NULL ,
  143. [年份] [int] NOT NULL ,
  144. [计划期] [int] NOT NULL ,
  145. [开始日期] [int] NULL ,
  146. [结束日期] [int] NULL ,
  147. [需求数量] [decimal] (15,2) NULL ,
  148. [记帐人] [varchar] (10) NULL ,
  149. [修改日期] [int] NULL ,
  150. [状态] [char] (10) NULL ,
  151. [备注] [varchar] (40) NULL 
  152. ) ON [PRIMARY]
  153. GO
  154. CREATE TABLE [dbo].[主生产计划] (
  155. [物料编号] [char] (14) NOT NULL ,
  156. [编号] [char] (14) NULL ,
  157. [年份] [int] NOT NULL ,
  158. [计划期] [int] NOT NULL ,
  159. [开始日期] [int] NULL ,
  160. [结束日期] [int] NULL ,
  161. [期初库存] [decimal] (15,2) NULL ,
  162. [需求数量] [decimal] (15,2) NULL ,
  163. [MPS数量] [decimal] (15,2) NOT NULL ,
  164. [生产单数量] [decimal] (15,2) NULL ,
  165. [预计库存] [decimal] (15,2) NULL ,
  166. [记帐人] [varchar] (10) NULL ,
  167. [修改日期] [int] NULL ,
  168. [审核人] [varchar] (10) NULL ,
  169. [审核日期] [int] NULL ,
  170. [状态] [char] (10) NULL default '有效',
  171. [备注] [varchar] (40) NULL 
  172. ) ON [PRIMARY]
  173. GO
  174. -- 对主生产计划进行编号
  175. CREATE trigger INSERT_主生产计划
  176. on  主生产计划
  177. for INSERT
  178. AS
  179. declare @bh1 varchar(16)
  180. declare @bh2 varchar(16)
  181. select @bh1 = isnull(max(编号),'MPS0000000000') from 主生产计划
  182. select @bh2 = isnull(max(编号),'MPS0000000000') from 主生产计划历史
  183. if(@bh2>@bh1) select @bh1 = @bh2
  184. declare @no varchar(10)
  185. select @no = substring(@bh1,4,10)
  186. select @no = convert(char(10),convert(int,@no)+1)
  187. select @no = REPLICATE('0',10-LEN(@no))+@no
  188. update 主生产计划 set 编号='MPS' + @no where 编号 is null
  189. GO
  190. CREATE TABLE [dbo].[主生产计划历史] (
  191. [物料编号] [char] (14) NOT NULL ,
  192. [编号] [char] (14) NULL ,
  193. [年份] [int] NOT NULL ,
  194. [计划期] [int] NOT NULL ,
  195. [开始日期] [int] NULL ,
  196. [结束日期] [int] NULL ,
  197. [期初库存] [decimal] (15,2) NULL ,
  198. [需求数量] [decimal] (15,2) NULL ,
  199. [MPS数量] [decimal] (15,2) NULL ,
  200. [生产单数量] [decimal] (15,2) NULL ,
  201. [预计库存] [decimal] (15,2) NULL ,
  202. [记帐人] [varchar] (10) NULL ,
  203. [修改日期] [int] NULL ,
  204. [审核人] [varchar] (10) NULL ,
  205. [审核日期] [int] NULL ,
  206. [状态] [char] (10) NULL ,
  207. [备注] [varchar] (40) NULL 
  208. ) ON [PRIMARY]
  209. GO
  210. CREATE TABLE [dbo].[mrp物料需求计算] (
  211. [物料编号] [char] (14) NOT NULL ,
  212. [年份] [int] NOT NULL ,
  213. [计划期] [int] NOT NULL ,
  214. [期初库存] [decimal](18, 4) NULL ,
  215. [毛需求] [decimal](18, 4) NULL ,
  216. [预计入库] [decimal](18, 4) NULL ,
  217. [预计出库] [decimal](18, 4) NULL ,
  218. [预计库存] [decimal](18, 4) NULL ,
  219. [净需求] [decimal](18, 4) NULL ,
  220. [计划产出] [decimal](18, 4) NULL ,
  221. [计划投入] [decimal](18, 4) NULL 
  222. ) ON [PRIMARY]
  223. GO
  224. CREATE TABLE [dbo].[mrp物料需求历史] (
  225. [发布编号] [char] (20) NULL ,
  226. [发布时间] [datetime] NULL ,
  227. [物料编号] [char] (14) NOT NULL ,
  228. [年份] [int] NOT NULL ,
  229. [计划期] [int] NOT NULL ,
  230. [期初库存] [decimal](18, 4) NULL ,
  231. [毛需求] [decimal](18, 4) NULL ,
  232. [预计入库] [decimal](18, 4) NULL ,
  233. [预计出库] [char] (10) NULL ,
  234. [预计库存] [decimal](18, 4) NULL ,
  235. [净需求] [decimal](18, 4) NULL ,
  236. [计划产出] [decimal](18, 4) NULL ,
  237. [计划投入] [decimal](18, 4) NULL 
  238. ) ON [PRIMARY]
  239. GO
  240. --- 这个视图是为了查询时显示物料名称可以用table控件,而不必使用query控件
  241. if exists (select * from sysobjects where id = object_id(N'[dbo].[vmrp物料需求历史]') and OBJECTPROPERTY(id, N'IsView') = 1)
  242. drop view [dbo].[vmrp物料需求历史]
  243. GO
  244. create view vmrp物料需求历史
  245. as
  246. select a.*, b.物料名称 from mrp物料需求历史 as a,
  247. 物料主文件 as b where a.物料编号=b.物料编号
  248. go
  249. CREATE TABLE [dbo].[物料状态类别] (
  250. [类别代码] [char] (5) NOT NULL Primary key,
  251. [状态描述] [char] (20) NOT NULL ,
  252. [说明] [varchar] (50) NULL 
  253. ) ON [PRIMARY]
  254. GO
  255. CREATE TABLE [dbo].[物料计划类别] (
  256. [类别代码] [char] (5) NOT NULL Primary key,
  257. [类别名称] [char] (20) NOT NULL 
  258. ) ON [PRIMARY]
  259. GO
  260. -----------------------------------------
  261. ALTER TABLE [dbo].[物料主文件] WITH NOCHECK ADD 
  262. CONSTRAINT [DF__物料主文件__进货提前期__160F4887] DEFAULT (0) FOR [进货提前期],
  263. CONSTRAINT [DF__物料主文件__准备周期__17036CC0] DEFAULT (0) FOR [准备周期],
  264. CONSTRAINT [DF__物料主文件__生产周期__17F790F9] DEFAULT (0) FOR [生产周期],
  265. CONSTRAINT [PK__物料主文件__151B244E] PRIMARY KEY  CLUSTERED 
  266. (
  267. [物料编号]
  268. )  ON [PRIMARY] 
  269. GO
  270. ALTER TABLE [dbo].[物料清单] WITH NOCHECK ADD 
  271. CONSTRAINT [DF_物料清单_展开标记] DEFAULT (0) FOR [展开标记],
  272. CONSTRAINT [PK_物料清单] PRIMARY KEY  CLUSTERED 
  273. (
  274. [父项编号],
  275. [物料编号]
  276. )  ON [PRIMARY] 
  277. GO
  278. ALTER TABLE [dbo].[工厂日历] WITH NOCHECK ADD 
  279. CONSTRAINT [PK__工厂日历__1F98B2C1] PRIMARY KEY  CLUSTERED 
  280. (
  281. [年份],
  282. [计划期]
  283. )  ON [PRIMARY] 
  284. GO
  285. ALTER TABLE [dbo].[主需求计划] WITH NOCHECK ADD 
  286. CONSTRAINT [PK_主需求计划] PRIMARY KEY  CLUSTERED 
  287. (
  288. [物料编号],
  289. [年份],
  290. [计划期]
  291. )  ON [PRIMARY] 
  292. GO
  293. ALTER TABLE [dbo].[主需求计划历史] WITH NOCHECK ADD 
  294. CONSTRAINT [PK_主需求计划历史] PRIMARY KEY  CLUSTERED 
  295. (
  296. [物料编号],
  297. [年份],
  298. [计划期]
  299. )  ON [PRIMARY] 
  300. GO
  301. ALTER TABLE [dbo].[主生产计划] WITH NOCHECK ADD 
  302. CONSTRAINT [PK_主生产计划] PRIMARY KEY  CLUSTERED 
  303. (
  304. [年份],
  305. [计划期],
  306. [物料编号]
  307. )  ON [PRIMARY] 
  308. GO
  309. ALTER TABLE [dbo].[主生产计划历史] WITH NOCHECK ADD 
  310. CONSTRAINT [PK_主生产计划历史] PRIMARY KEY  CLUSTERED 
  311. (
  312. [年份],
  313. [计划期],
  314. [物料编号]
  315. )  ON [PRIMARY] 
  316. GO
  317. ALTER TABLE [dbo].[mrp物料需求计算] WITH NOCHECK ADD 
  318. CONSTRAINT [PK_mrp物料需求计算] PRIMARY KEY  CLUSTERED 
  319. (
  320. [物料编号],
  321. [年份],
  322. [计划期]
  323. )  ON [PRIMARY] 
  324. GO
  325. ALTER TABLE [dbo].[mrp物料需求历史] WITH NOCHECK ADD 
  326. CONSTRAINT [PK_mrp物料需求历史] PRIMARY KEY  CLUSTERED 
  327. (
  328. [物料编号],
  329. [年份],
  330. [计划期]
  331. )  ON [PRIMARY] 
  332. GO
  333. ALTER TABLE [dbo].[mrp物料需求历史] ADD 
  334. CONSTRAINT [mrp物料需求历史_物料编号_fk] FOREIGN KEY 
  335. (
  336. [物料编号]
  337. ) REFERENCES [dbo].[物料主文件] (
  338. [物料编号]
  339. )
  340. GO
  341. ALTER TABLE [dbo].[mrp物料需求计算] ADD 
  342. CONSTRAINT [mrp物料需求计算_物料编号_fk] FOREIGN KEY 
  343. (
  344. [物料编号]
  345. ) REFERENCES [dbo].[物料主文件] (
  346. [物料编号]
  347. )
  348. GO
  349. ALTER TABLE [dbo].[mrp物料需求计算结果] ADD 
  350. CONSTRAINT [mrp物料需求计算结果_物料编号_fk] FOREIGN KEY 
  351. (
  352. [物料编号]
  353. ) REFERENCES [dbo].[物料主文件] (
  354. [物料编号]
  355. )
  356. GO
  357. ALTER TABLE [dbo].[主生产计划] ADD 
  358. CONSTRAINT [主生产计划_物料编号_fk] FOREIGN KEY 
  359. (
  360. [物料编号]
  361. ) REFERENCES [dbo].[物料主文件] (
  362. [物料编号]
  363. )
  364. GO
  365. ALTER TABLE [dbo].[主生产计划历史] ADD 
  366. CONSTRAINT [主生产计划历史_物料编号_fk] FOREIGN KEY 
  367. (
  368. [物料编号]
  369. ) REFERENCES [dbo].[物料主文件] (
  370. [物料编号]
  371. )
  372. GO
  373. ALTER TABLE [dbo].[主需求计划] ADD 
  374. CONSTRAINT [主需求计划_物料编号_fk] FOREIGN KEY 
  375. (
  376. [物料编号]
  377. ) REFERENCES [dbo].[物料主文件] (
  378. [物料编号]
  379. )
  380. GO
  381. ALTER TABLE [dbo].[主需求计划历史] ADD 
  382. CONSTRAINT [主需求计划历史_物料编号_fk] FOREIGN KEY 
  383. (
  384. [物料编号]
  385. ) REFERENCES [dbo].[物料主文件] (
  386. [物料编号]
  387. )
  388. GO
  389. ALTER TABLE [dbo].[物料清单] ADD 
  390. CONSTRAINT [物料清单_物料编号_fk] FOREIGN KEY 
  391. (
  392. [物料编号]
  393. ) REFERENCES [dbo].[物料主文件] (
  394. [物料编号]
  395. )
  396. GO
  397. ---------------------下面是间接使用的数据表
  398. if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[库存库]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
  399. drop table [dbo].[库存库]
  400. GO
  401. if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[采购订单]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
  402. drop table [dbo].[采购订单]
  403. GO
  404. if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[生产订单]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
  405. drop table [dbo].[生产订单]
  406. GO
  407. CREATE TABLE [dbo].[库存库] (
  408. [货号] [char] (14) NOT NULL ,
  409. [批号] [varchar] (20) NOT NULL ,
  410. [部门] [varchar] (20) NOT NULL ,
  411. [组别] [varchar] (20) NOT NULL ,
  412. [货位] [varchar] (20) NULL ,
  413. [库存数量] [decimal] (15,2) NOT NULL ,
  414. [库存金额] [decimal] (15,2) NOT NULL ,
  415. [库存单价] [decimal] (15,2) NOT NULL ,
  416. [最新进价] [decimal] (15,2) NULL ,
  417. [扣率] [decimal] (15,2) NULL 
  418. ) ON [PRIMARY]
  419. GO
  420. CREATE TABLE [dbo].[采购订单] (
  421. [编号] [char] (14) NOT NULL primary key,
  422. [合同编号] [char] (14) NULL ,
  423. [单据号] [char] (14) NULL ,
  424. [申请编号] [char] (14) NULL ,
  425. [供货商号] [char] (10) NULL ,
  426. [物料编号] [char] (14) NULL ,
  427. [订货数量] [decimal](24, 4) NULL ,
  428. [进价] [money] NULL ,
  429. [不含税价] [money] NULL ,
  430. [税率] [decimal](5, 4) NULL ,
  431. [税额] [money] NULL ,
  432. [税价合计] [money] NULL ,
  433. [交货方式] [varchar] (20) NULL ,
  434. [订货日期] [int] NULL ,
  435. [年份] [int] NULL ,
  436. [计划期] [int] NULL ,
  437. [订货地点] [varchar] (20) NULL ,
  438. [订货人] [char] (8) NULL ,
  439. [送货日期] [int] NULL ,
  440. [送货数量] [real] NULL ,
  441. [剩余数量] [decimal](18, 4) NULL ,
  442. [有效起日] [int] NULL ,
  443. [有效止日] [int] NULL ,
  444. [记帐日期] [int] NULL ,
  445. [记帐人] [char] (8) NULL ,
  446. [审单人] [char] (8) NULL ,
  447. [作废标记] [char] (1) NULL ,
  448. [打印标记] [char] (1) NULL ,
  449. [订单状态] [char] (6) NULL ,
  450. [订单说明] [varchar] (40) NULL 
  451. ) ON [PRIMARY]
  452. GO
  453. CREATE TABLE [dbo].[生产订单] (
  454. [MPS编号] [char] (14) NULL ,
  455. [编号] [char] (14) Not NULL Primary key,
  456. [单据号] [char] (14) NULL ,
  457. [生产批号] [char] (20) NULL ,
  458. [物料编号] [char] (14) NULL ,
  459. [年份] [int] NULL ,
  460. [计划期] [int] NULL ,
  461. [数量] [decimal] (15,2) NULL ,
  462. [生产部门] [char] (10) NULL ,
  463. [下达日期] [int] NULL ,
  464. [要求完成日期] [int] NULL ,
  465. [完成数量] [decimal] (15,2) NULL ,
  466. [剩余数量] [decimal] (15,2) NULL ,
  467. [记帐人] [varchar] (10) NULL ,
  468. [记帐日期] [int] NULL ,
  469. [审核人] [varchar] (10) NULL ,
  470. [审核日期] [int] NULL ,
  471. [状态] [char] (10) NULL ,
  472. [备注] [varchar] (40) NULL 
  473. ) ON [PRIMARY]
  474. GO
  475. ALTER TABLE [dbo].[库存库] WITH NOCHECK ADD 
  476. CONSTRAINT [DF__库存库__库存数量__6C43F744] DEFAULT (0) FOR [库存数量],
  477. CONSTRAINT [DF__库存库__库存金额__6D381B7D] DEFAULT (0) FOR [库存金额],
  478. CONSTRAINT [DF__库存库__库存单价__6E2C3FB6] DEFAULT (0) FOR [库存单价],
  479. CONSTRAINT [库存库_货号部门组别_FK] PRIMARY KEY  CLUSTERED 
  480. (
  481. [货号],
  482. [批号],
  483. [部门],
  484. [组别]
  485. )  ON [PRIMARY] 
  486. GO
  487. ALTER TABLE [dbo].[生产订单] WITH NOCHECK ADD 
  488. CONSTRAINT [DF_生产订单_完成数量] DEFAULT (0) FOR [完成数量],
  489. CONSTRAINT [DF_生产订单_剩余数量] DEFAULT (0) FOR [剩余数量]
  490. GO
  491. ALTER TABLE [dbo].[生产订单] ADD 
  492. CONSTRAINT [生产订单_物料编号_fk] FOREIGN KEY 
  493. (
  494. [物料编号]
  495. ) REFERENCES [dbo].[物料主文件] (
  496. [物料编号]
  497. )
  498. GO
  499. ALTER TABLE [dbo].[采购订单] ADD 
  500. CONSTRAINT [采购订单_物料编号_fk] FOREIGN KEY 
  501. (
  502. [物料编号]
  503. ) REFERENCES [dbo].[物料主文件] (
  504. [物料编号]
  505. )
  506. GO
  507. -------------------------存储过程
  508. if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[sf_mrp结果发布]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
  509. drop procedure [dbo].[sf_mrp结果发布]
  510. GO
  511. if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[sf_mrp计算]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
  512. drop procedure [dbo].[sf_mrp计算]
  513. GO
  514. --------mrp计算存储过程
  515. CREATE PROCEDURE sf_mrp计算 ( @考虑库存等  bit=1, 
  516. @考虑提前期 bit=1, @考虑损耗 bit=1)
  517. AS
  518. begin tran
  519. --清除
  520. delete from mrp物料需求计算
  521. -- 更新物料清单底层码,计算时使用
  522. update 物料清单 set 低层码 = 0 where 父项编号 = 0
  523. -- 循环10次,根据情况,这里默认bom物料的层级不超过10级
  524. declare @i int
  525. select @i = 1
  526. while (@i<=10)
  527. begin 
  528. update 物料清单 set 低层码 = b.低层码+1 from 物料清单 as a,
  529. (select * from 物料清单) as b 
  530. where a.父项编号 = b.物料编号
  531. select @i = @i + 1
  532. end
  533. --重新生成物料需求计算表,并计算毛需求
  534. -- 低层码代表物料的层级,使用他来循环
  535. insert into mrp物料需求计算(物料编号,年份,计划期,毛需求)
  536. select 物料编号,年份,计划期,sum(MPS数量)
  537. FROM 主生产计划 group by 物料编号,年份,计划期
  538. select @i = 1
  539. while (@i<=10)
  540. begin 
  541. -- 没有的先查入记录,因为一个物料可以对应多个父项
  542. insert into mrp物料需求计算(物料编号,年份,计划期,毛需求)
  543. select distinct b.物料编号,年份,计划期,0
  544. FROM mrp物料需求计算 as a, 物料清单 as b
  545. where rtrim(b.物料编号)+convert(char(4),年份)+
  546. convert(char(2),计划期) not in(select rtrim(物料编号)+
  547. convert(char(4),年份)+convert(char(2),计划期) 
  548. from mrp物料需求计算)
  549. and b.父项编号=a.物料编号 and b.低层码=@i
  550. -- 计算毛需求
  551. -- 注意考虑损耗的情况
  552. update mrp物料需求计算 set 毛需求 = c.毛需求 + d.需求
  553. from mrp物料需求计算 as c, 
  554. (select b.物料编号,年份,计划期,
  555. sum((a.毛需求*b.需要数量)/(1-(case when @考虑损耗=1 then 
  556. isnull(损耗率,0) else 0 end))) as 需求
  557. FROM mrp物料需求计算 as a, 物料清单 as b
  558. where b.父项编号=a.物料编号 and b.低层码=@i
  559. group by b.物料编号,a.年份,a.计划期
  560. ) as d
  561. where c.物料编号=d.物料编号 and c.年份=d.年份 and c.计划期=d.计划期
  562. select @i = @i + 1
  563. end
  564. --------------- 不考虑提前期的毛需求计算完成
  565. -- 考虑提前期,计算提前期
  566. --if (@考虑提前期=1) 
  567. --begin
  568. -- 这里不在计算,具体计算方法为将当前计划期的数量移到提前期
  569. -- 注意跨年度计划期的
  570. --end
  571. if (@考虑库存等=1)      
  572. begin   
  573. -- 第一次计算,设置期初库存
  574. -- 这里统一设置起初库存为100
  575. -- 实际系统应该和库存库及上期情况结合
  576. update mrp物料需求计算 set 期初库存=100 
  577. update mrp物料需求计算 set 预计入库 = isnull(预计入库,0) + 
  578. 数量 from mrp物料需求计算 as a, (select sum(剩余数量) as 数量, 
  579. 物料编号,年份,计划期 from 采购订单 
  580. group by 物料编号,年份,计划期) as b, 物料主文件 as c
  581. where a.物料编号=b.物料编号 and a.年份=b.年份 
  582. and a.计划期=b.计划期 and a.物料编号 = c.物料编号 
  583. and c.计划类别='wg'    -- 外购产品
  584.   
  585. update mrp物料需求计算 set 预计入库 = isnull(预计入库,0) + 
  586. 数量 from mrp物料需求计算 as a, (select sum(剩余数量) as 数量, 
  587. 物料编号,年份,计划期 from 生产订单 
  588. group by 物料编号,年份,计划期) as b, 物料主文件 as c
  589. where a.物料编号=b.物料编号 and a.年份=b.年份 
  590. and a.计划期=b.计划期 and a.物料编号 = c.物料编号 
  591. and c.计划类别='bcp'    -- 半成品
  592. -- 这里计算预计出库的情况   
  593. update mrp物料需求计算 set 预计出库 = isnull(预计出库,0)
  594.     end
  595. -- 按照计划期循环计算各个计划期的物料需求
  596. declare @年份 int, @计划期 int
  597. declare mycur cursor for select 年份,计划期 from mrp物料需求计算
  598. order by 年份,计划期
  599. open mycur
  600. fetch next from mycur into @年份, @计划期
  601. WHILE (@@FETCH_STATUS = 0 )
  602. BEGIN
  603. -- 如果不是最小的计划期, 计算期初库存
  604. -- 注意跨年度的计算,这里先不考虑
  605. update mrp物料需求计算 set 期初库存=b.预计库存 from 
  606. mrp物料需求计算  as a, (select * from mrp物料需求计算) 
  607. as b where a.年份=@年份 and a.计划期=@计划期
  608. and a.年份=b.年份 and a.计划期=b.计划期+1 and a.物料编号=b.物料编号
  609. -- 计算净需求
  610. update mrp物料需求计算 set 预计库存 = isnull(期初库存,0) - 
  611. isnull(毛需求,0) + isnull(预计入库,0) - isnull(预计出库,0)
  612. where 年份=@年份 and 计划期=@计划期
  613. update mrp物料需求计算 set 净需求=0  where 年份=@年份 and 计划期=@计划期
  614. -- 预期(期末库存)小于0的存在净需求
  615. update mrp物料需求计算 set 净需求=-预计库存, 预计库存=0 
  616. where 年份=@年份 and 计划期=@计划期 and 预计库存<0
  617. fetch next from mycur into @年份, @计划期
  618. END
  619. close mycur
  620. deallocate mycur
  621. commit
  622. GO
  623. CREATE PROCEDURE sf_mrp结果发布
  624. AS
  625. begin tran
  626. insert into mrp物料需求历史(发布时间, 物料编号, 年份, 计划期,
  627. 期初库存, 毛需求, 预计入库, 预计出库, 预计库存, 净需求, 
  628. 计划产出, 计划投入) select getdate(), 物料编号, 
  629. 年份, 计划期, 期初库存, 毛需求, 预计入库, 预计出库, 预计库存, 
  630. 净需求, 计划产出, 计划投入 from mrp物料需求计算
  631. delete from mrp物料需求计算
  632. insert into 主生产计划历史 select * from 主生产计划
  633. delete from 主生产计划
  634. commit
  635. GO