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

企业管理

开发平台:

C#

  1. [物料编号] [char] (14) NOT NULL ,
  2. [年月] [int] NOT NULL ,
  3. [计划期] [int] NOT NULL ,
  4. [预测数量] [int] NULL ,
  5. [记帐人] [varchar] (10) NULL ,
  6. [修改日期] [int] NULL ,
  7. [修改标记] [char] (1) NULL ,
  8. [接收登记] [binary] (30) NULL ,
  9. [备注] [varchar] (40) NULL 
  10. ) ON [PRIMARY]
  11. GO
  12. CREATE TABLE [dbo].[销退货单历史] (
  13. [内部编号] [int] NOT NULL ,
  14. [编号] [char] (14) NOT NULL ,
  15. [货号] [char] (14) NOT NULL ,
  16. [批号] [varchar] (20) NOT NULL ,
  17. [批次] [char] (14) NULL ,
  18. [客户编号] [char] (14) NULL ,
  19. [部门] [varchar] (20) NULL ,
  20. [组别] [varchar] (20) NULL ,
  21. [货位] [varchar] (20) NULL ,
  22. [大包装数] [float] NULL ,
  23. [中包装数] [float] NULL ,
  24. [数量] [float] NOT NULL ,
  25. [批发价] [float] NULL ,
  26. [零售价] [float] NULL ,
  27. [招标价] [float] NULL ,
  28. [招标零售价] [float] NULL ,
  29. [扣率] [float] NULL ,
  30. [不含税价] [float] NULL ,
  31. [税率] [float] NULL ,
  32. [税额] [float] NULL ,
  33. [税价合计] [float] NULL ,
  34. [零价合计] [float] NULL ,
  35. [批价合计] [float] NULL ,
  36. [销售价] [float] NULL ,
  37. [成本单价] [float] NULL ,
  38. [提成进价] [float] NULL ,
  39. [库存单价] [float] NULL ,
  40. [仓库保管] [char] (10) NULL ,
  41. [记帐人] [varchar] (10) NULL ,
  42. [开票人] [char] (10) NULL ,
  43. [记帐日期] [int] NULL ,
  44. [应收处理] [char] (8) NULL ,
  45. [销售单号] [char] (14) NULL ,
  46. [退货原因] [varchar] (128) NULL ,
  47. [序号] [int] NULL ,
  48. [单据号] [char] (12) NULL ,
  49. [打印标记] [char] (1) NULL ,
  50. [接收登记] [binary] (30) NULL ,
  51. [状态] [char] (6) NULL ,
  52. [审单员] [char] (10) NULL ,
  53. [业务员] [char] (10) NULL ,
  54. [毛利] [float] NULL ,
  55. [效期] [int] NULL ,
  56. [来源] [char] (8) NULL ,
  57. [供货商号] [char] (10) NULL ,
  58. [进货扣率] [float] NULL ,
  59. [购货人] [char] (10) NULL ,
  60. [票据类型] [char] (6) NULL 
  61. ) ON [PRIMARY]
  62. GO
  63. CREATE TABLE [dbo].[领料单] (
  64. [内部编号] [int] IDENTITY (1, 1) NOT NULL ,
  65. [生产订单编号] [char] (14) NULL ,
  66. [年份] [int] NULL ,
  67. [计划期] [int] NULL ,
  68. [领料库房] [char] (10) NULL ,
  69. [领料车间] [char] (10) NULL ,
  70. [编号] [char] (14) NULL ,
  71. [单据号] [char] (14) NULL ,
  72. [源仓区] [varchar] (20) NOT NULL ,
  73. [源仓位] [varchar] (20) NOT NULL ,
  74. [目的仓区] [varchar] (20) NOT NULL ,
  75. [目的仓位] [varchar] (20) NOT NULL ,
  76. [物料编号] [char] (14) NOT NULL ,
  77. [批号] [varchar] (20) NULL ,
  78. [批次] [char] (14) NULL ,
  79. [库存成本单价] [float] NULL ,
  80. [批次成本单价] [float] NULL ,
  81. [申请数量] [float] NOT NULL ,
  82. [实领数量] [float] NOT NULL ,
  83. [领料日期] [int] NULL ,
  84. [申请人] [char] (10) NULL ,
  85. [审核人] [char] (10) NULL ,
  86. [验收员] [char] (10) NULL ,
  87. [保管员] [char] (10) NULL ,
  88. [记帐人] [char] (10) NULL ,
  89. [记帐日期] [int] NULL ,
  90. [接收登记] [binary] (30) NULL ,
  91. [状态] [char] (10) NULL ,
  92. [领料类别] [char] (10) NOT NULL ,
  93. [备注] [varchar] (40) NULL 
  94. ) ON [PRIMARY]
  95. GO
  96. CREATE TABLE [dbo].[领料单temp] (
  97. [内部编号] [int] IDENTITY (1, 1) NOT NULL ,
  98. [年份] [int] NULL ,
  99. [计划期] [int] NULL ,
  100. [生产订单编号] [char] (14) NULL ,
  101. [物料编号] [char] (14) NULL ,
  102. [领料库房] [char] (10) NULL ,
  103. [领料车间] [char] (10) NULL ,
  104. [数量] [decimal](18, 4) NULL 
  105. ) ON [PRIMARY]
  106. GO
  107. CREATE TABLE [dbo].[领料单历史] (
  108. [内部编号] [int] IDENTITY (1, 1) NOT NULL ,
  109. [生产订单编号] [char] (14) NULL ,
  110. [编号] [char] (14) NULL ,
  111. [单据号] [char] (14) NULL ,
  112. [源仓区] [varchar] (20) NOT NULL ,
  113. [源仓位] [varchar] (20) NOT NULL ,
  114. [目的仓区] [varchar] (20) NOT NULL ,
  115. [目的仓位] [varchar] (20) NOT NULL ,
  116. [物料编号] [char] (14) NOT NULL ,
  117. [批号] [varchar] (20) NULL ,
  118. [批次] [char] (14) NULL ,
  119. [库存成本单价] [float] NULL ,
  120. [批次成本单价] [float] NULL ,
  121. [申请数量] [float] NOT NULL ,
  122. [实领数量] [float] NOT NULL ,
  123. [领料日期] [int] NULL ,
  124. [申请人] [char] (10) NULL ,
  125. [审核人] [char] (10) NULL ,
  126. [验收员] [char] (10) NULL ,
  127. [保管员] [char] (10) NULL ,
  128. [记帐人] [char] (10) NULL ,
  129. [记帐日期] [int] NULL ,
  130. [接收登记] [binary] (30) NULL ,
  131. [状态] [char] (10) NOT NULL ,
  132. [领料类别] [char] (10) NOT NULL ,
  133. [备注] [varchar] (40) NULL 
  134. ) ON [PRIMARY]
  135. GO
  136. ALTER TABLE [dbo].[bom信息状态] WITH NOCHECK ADD 
  137.  PRIMARY KEY  CLUSTERED 
  138. (
  139. [状态代码]
  140. )  ON [PRIMARY] 
  141. GO
  142. ALTER TABLE [dbo].[bom状态] WITH NOCHECK ADD 
  143.  PRIMARY KEY  CLUSTERED 
  144. (
  145. [状态代码]
  146. )  ON [PRIMARY] 
  147. GO
  148. ALTER TABLE [dbo].[jzh每月结转日期表] WITH NOCHECK ADD 
  149. CONSTRAINT [DF__jzh每月结转日期表__结转日期__78F3E6EC] DEFAULT (25) FOR [结转日期],
  150.  PRIMARY KEY  CLUSTERED 
  151. (
  152. [月份]
  153. )  ON [PRIMARY] 
  154. GO
  155. ALTER TABLE [dbo].[mrp0] WITH NOCHECK ADD 
  156. CONSTRAINT [DF_mrp0_期初库存] DEFAULT (0) FOR [期初库存],
  157. CONSTRAINT [DF_mrp0_预计采购] DEFAULT (0) FOR [预计采购],
  158. CONSTRAINT [DF_mrp0_预计生产] DEFAULT (0) FOR [预计生产],
  159. CONSTRAINT [DF_mrp0_预计外协] DEFAULT (0) FOR [预计外协],
  160. CONSTRAINT [DF_mrp0_预计领用] DEFAULT (0) FOR [预计出库],
  161. CONSTRAINT [DF_mrp0_需求数量] DEFAULT (0) FOR [需求数量],
  162. CONSTRAINT [DF_mrp0_建议采购] DEFAULT (0) FOR [建议采购],
  163. CONSTRAINT [DF_mrp0_建议生产] DEFAULT (0) FOR [建议生产],
  164. CONSTRAINT [DF_mrp0_建议外协] DEFAULT (0) FOR [建议外协],
  165. CONSTRAINT [DF_mrp0_预计库存] DEFAULT (0) FOR [预计库存]
  166. GO
  167. ALTER TABLE [dbo].[mrpcalcd] WITH NOCHECK ADD 
  168. CONSTRAINT [PK_mrpcalcd] PRIMARY KEY  CLUSTERED 
  169. (
  170. [物料编号],
  171. [年份],
  172. [计划期]
  173. )  ON [PRIMARY] 
  174. GO
  175. ALTER TABLE [dbo].[mrp历史] WITH NOCHECK ADD 
  176. CONSTRAINT [DF_mrp历史_能力计算标记] DEFAULT (0) FOR [能力计算标记],
  177. CONSTRAINT [DF_mrp历史_生产订单标记] DEFAULT (0) FOR [生产订单标记]
  178. GO
  179. ALTER TABLE [dbo].[mrp正式] WITH NOCHECK ADD 
  180. CONSTRAINT [PK_mrp正式] PRIMARY KEY  CLUSTERED 
  181. (
  182. [物料编号],
  183. [年份],
  184. [计划期]
  185. )  ON [PRIMARY] 
  186. GO
  187. ALTER TABLE [dbo].[临时生产件资源负荷报表] WITH NOCHECK ADD 
  188. CONSTRAINT [DF_临时生产件资源负荷报表_负荷] DEFAULT (0) FOR [负荷]
  189. GO
  190. ALTER TABLE [dbo].[临时资源负荷报表] WITH NOCHECK ADD 
  191. CONSTRAINT [DF_临时资源负荷报表_负荷] DEFAULT (0) FOR [负荷]
  192. GO
  193. ALTER TABLE [dbo].[临时进销存卡片] WITH NOCHECK ADD 
  194. CONSTRAINT [DF_临时进销存卡片_货位] DEFAULT ('正式') FOR [货位],
  195. CONSTRAINT [DF__临时进销存卡片__入库数量__06F7ED80] DEFAULT (0) FOR [入库数量],
  196. CONSTRAINT [DF__临时进销存卡片__入库金额__07EC11B9] DEFAULT (0) FOR [入库金额],
  197. CONSTRAINT [DF__临时进销存卡片__出库数量__08E035F2] DEFAULT (0) FOR [出库数量],
  198. CONSTRAINT [DF__临时进销存卡片__出库金额__09D45A2B] DEFAULT (0) FOR [出库金额],
  199. CONSTRAINT [DF__临时进销存卡片__结存数量__0AC87E64] DEFAULT (0) FOR [结存数量],
  200. CONSTRAINT [DF__临时进销存卡片__结存金额__0BBCA29D] DEFAULT (0) FOR [结存金额],
  201. CONSTRAINT [DF__临时进销存卡片__同货号数量__0CB0C6D6] DEFAULT (0) FOR [同货号数量],
  202. CONSTRAINT [DF__临时进销存卡片__同货号金额__0DA4EB0F] DEFAULT (0) FOR [同货号金额],
  203. CONSTRAINT [DF__临时进销存卡片__影响部门__0E990F48] DEFAULT ('无') FOR [影响部门],
  204. CONSTRAINT [DF__临时进销存卡片__影响组别__0F8D3381] DEFAULT ('无') FOR [影响组别],
  205. CONSTRAINT [DF_临时进销存卡片_影响货位] DEFAULT ('正式') FOR [影响货位],
  206. CONSTRAINT [DF__临时进销存卡片__接收登记__0B5CAFEA] DEFAULT (0x00) FOR [接收登记],
  207. CONSTRAINT [PK__临时进销存卡片__345EC57D] PRIMARY KEY  CLUSTERED 
  208. (
  209. [编号]
  210. )  ON [PRIMARY] 
  211. GO
  212. ALTER TABLE [dbo].[主生产计划] WITH NOCHECK ADD 
  213. CONSTRAINT [PK_主生产计划] PRIMARY KEY  CLUSTERED 
  214. (
  215. [年份],
  216. [计划期],
  217. [物料编号]
  218. )  ON [PRIMARY] 
  219. GO
  220. ALTER TABLE [dbo].[主生产计划历史] WITH NOCHECK ADD 
  221. CONSTRAINT [PK_主生产计划历史] PRIMARY KEY  CLUSTERED 
  222. (
  223. [年份],
  224. [计划期],
  225. [物料编号]
  226. )  ON [PRIMARY] 
  227. GO
  228. ALTER TABLE [dbo].[主需求计划] WITH NOCHECK ADD 
  229. CONSTRAINT [PK_主需求计划] PRIMARY KEY  CLUSTERED 
  230. (
  231. [物料编号],
  232. [年份],
  233. [计划期]
  234. )  ON [PRIMARY] 
  235. GO
  236. ALTER TABLE [dbo].[主需求计划历史] WITH NOCHECK ADD 
  237. CONSTRAINT [PK_主需求计划历史] PRIMARY KEY  CLUSTERED 
  238. (
  239. [物料编号],
  240. [年份],
  241. [计划期]
  242. )  ON [PRIMARY] 
  243. GO
  244. ALTER TABLE [dbo].[产品入库单] WITH NOCHECK ADD 
  245. CONSTRAINT [DF_产品入库单_库存成本单价] DEFAULT (0) FOR [库存成本单价],
  246. CONSTRAINT [DF_产品入库单_批次成本单价] DEFAULT (0) FOR [批次成本单价]
  247. GO
  248. ALTER TABLE [dbo].[产品入库单历史] WITH NOCHECK ADD 
  249. CONSTRAINT [DF_产品入库单历史_库存成本单价] DEFAULT (0) FOR [库存成本单价],
  250. CONSTRAINT [DF_产品入库单历史_批次成本单价] DEFAULT (0) FOR [批次成本单价]
  251. GO
  252. ALTER TABLE [dbo].[工作中心] WITH NOCHECK ADD 
  253. CONSTRAINT [DF_工作中心_最大工时] DEFAULT (24) FOR [最大工时],
  254. CONSTRAINT [DF_工作中心_额定工时] DEFAULT (8) FOR [额定工时],
  255. CONSTRAINT [DF_工作中心_最小工时] DEFAULT (0) FOR [最小工时],
  256. CONSTRAINT [DF_工作中心_修改标记] DEFAULT ('0') FOR [修改标记],
  257. CONSTRAINT [DF_工作中心_接收登记] DEFAULT (0x00) FOR [接收登记],
  258. CONSTRAINT [PK_工作中心] PRIMARY KEY  CLUSTERED 
  259. (
  260. [编号]
  261. )  ON [PRIMARY] 
  262. GO
  263. ALTER TABLE [dbo].[工厂日历] WITH NOCHECK ADD 
  264. CONSTRAINT [PK__工厂日历__1F98B2C1] PRIMARY KEY  CLUSTERED 
  265. (
  266. [年份],
  267. [计划期]
  268. )  ON [PRIMARY] 
  269. GO
  270. ALTER TABLE [dbo].[库存库] WITH NOCHECK ADD 
  271. CONSTRAINT [DF__库存库__库存数量__6C43F744] DEFAULT (0) FOR [库存数量],
  272. CONSTRAINT [DF__库存库__库存金额__6D381B7D] DEFAULT (0) FOR [库存金额],
  273. CONSTRAINT [DF__库存库__库存单价__6E2C3FB6] DEFAULT (0) FOR [库存单价],
  274. CONSTRAINT [DF__库存库__修改标记__6F2063EF] DEFAULT ('0') FOR [修改标记],
  275. CONSTRAINT [DF__库存库__接收登记__09746778] DEFAULT (0x00) FOR [接收登记],
  276. CONSTRAINT [库存库_货号部门组别_FK] PRIMARY KEY  CLUSTERED 
  277. (
  278. [货号],
  279. [批号],
  280. [部门],
  281. [组别]
  282. )  ON [PRIMARY] 
  283. GO
  284. ALTER TABLE [dbo].[换货单历史] WITH NOCHECK ADD 
  285. CONSTRAINT [DF__换货单历史__接收登记__07420643] DEFAULT (0) FOR [接收登记]
  286. GO
  287. ALTER TABLE [dbo].[标准工序] WITH NOCHECK ADD 
  288. CONSTRAINT [DF_标准工序_修改标记] DEFAULT ('0') FOR [修改标记],
  289. CONSTRAINT [DF_标准工序_接收登记] DEFAULT (0x00) FOR [接收登记],
  290. CONSTRAINT [PK_标准工序] PRIMARY KEY  CLUSTERED 
  291. (
  292. [编号]
  293. )  ON [PRIMARY] 
  294. GO
  295. ALTER TABLE [dbo].[物料主文件] WITH NOCHECK ADD 
  296. CONSTRAINT [DF__物料主文件__进货提前期__160F4887] DEFAULT (0) FOR [进货提前期],
  297. CONSTRAINT [DF__物料主文件__准备周期__17036CC0] DEFAULT (0) FOR [准备周期],
  298. CONSTRAINT [DF__物料主文件__生产周期__17F790F9] DEFAULT (0) FOR [生产周期],
  299. CONSTRAINT [DF_物料主文件_接收登记] DEFAULT (0x00) FOR [接收登记],
  300. CONSTRAINT [PK__物料主文件__151B244E] PRIMARY KEY  CLUSTERED 
  301. (
  302. [物料编号]
  303. )  ON [PRIMARY] 
  304. GO
  305. ALTER TABLE [dbo].[物料价值代码] WITH NOCHECK ADD 
  306. CONSTRAINT [PK__物料价值代码__0F624AF8] PRIMARY KEY  CLUSTERED 
  307. (
  308. [价值代码]
  309. )  ON [PRIMARY] 
  310. GO
  311. ALTER TABLE [dbo].[物料反查表] WITH NOCHECK ADD 
  312. CONSTRAINT [DF__物料反查表__需求量__43D61337] DEFAULT (1) FOR [需求量]
  313. GO
  314. ALTER TABLE [dbo].[物料展开表] WITH NOCHECK ADD 
  315. CONSTRAINT [DF__物料展开表__需求量__41EDCAC5] DEFAULT (1) FOR [需要数量]
  316. GO
  317. ALTER TABLE [dbo].[物料归属类别] WITH NOCHECK ADD 
  318.  PRIMARY KEY  CLUSTERED 
  319. (
  320. [类别代码]
  321. )  ON [PRIMARY] 
  322. GO
  323. ALTER TABLE [dbo].[物料清单] WITH NOCHECK ADD 
  324. CONSTRAINT [DF_物料清单_展开标记] DEFAULT (0) FOR [展开标记],
  325. CONSTRAINT [PK_物料清单] PRIMARY KEY  CLUSTERED 
  326. (
  327. [父项编号],
  328. [物料编号]
  329. )  ON [PRIMARY] 
  330. GO
  331. ALTER TABLE [dbo].[物料状态类别] WITH NOCHECK ADD 
  332.  PRIMARY KEY  CLUSTERED 
  333. (
  334. [类别代码]
  335. )  ON [PRIMARY] 
  336. GO
  337. ALTER TABLE [dbo].[物料计划类别] WITH NOCHECK ADD 
  338.  PRIMARY KEY  CLUSTERED 
  339. (
  340. [类别代码]
  341. )  ON [PRIMARY] 
  342. GO
  343. ALTER TABLE [dbo].[物料需求计划old] WITH NOCHECK ADD 
  344. CONSTRAINT [PK__物料需求计划__2180FB33] PRIMARY KEY  CLUSTERED 
  345. (
  346. [内部编号]
  347. )  ON [PRIMARY] 
  348. GO
  349. ALTER TABLE [dbo].[生产件资源负荷报表] WITH NOCHECK ADD 
  350. CONSTRAINT [DF_生产件资源负荷报表_负荷] DEFAULT (0) FOR [负荷]
  351. GO
  352. ALTER TABLE [dbo].[生产订单] WITH NOCHECK ADD 
  353. CONSTRAINT [DF_生产订单_完成数量] DEFAULT (0) FOR [完成数量],
  354. CONSTRAINT [DF_生产订单_剩余数量] DEFAULT (0) FOR [剩余数量]
  355. GO
  356. ALTER TABLE [dbo].[生产订单历史] WITH NOCHECK ADD 
  357. CONSTRAINT [DF_生产订单历史_领料单标志] DEFAULT (0) FOR [领料单标志]
  358. GO
  359. ALTER TABLE [dbo].[计量单位] WITH NOCHECK ADD 
  360. CONSTRAINT [PK_计量单位] PRIMARY KEY  CLUSTERED 
  361. (
  362. [计量单位]
  363. )  ON [PRIMARY] 
  364. GO
  365. ALTER TABLE [dbo].[资源负荷报表] WITH NOCHECK ADD 
  366. CONSTRAINT [DF_资源负荷报表_负荷] DEFAULT (0) FOR [负荷]
  367. GO
  368. ALTER TABLE [dbo].[进销存卡片] WITH NOCHECK ADD 
  369. CONSTRAINT [DF__进销存卡片__入库数量__15460CD7] DEFAULT (0) FOR [入库数量],
  370. CONSTRAINT [DF__进销存卡片__入库金额__163A3110] DEFAULT (0) FOR [入库金额],
  371. CONSTRAINT [DF__进销存卡片__出库数量__172E5549] DEFAULT (0) FOR [出库数量],
  372. CONSTRAINT [DF__进销存卡片__出库金额__18227982] DEFAULT (0) FOR [出库金额],
  373. CONSTRAINT [DF__进销存卡片__结存数量__19169DBB] DEFAULT (0) FOR [结存数量],
  374. CONSTRAINT [DF__进销存卡片__结存金额__1A0AC1F4] DEFAULT (0) FOR [结存金额],
  375. CONSTRAINT [DF__进销存卡片__同货号数量__1AFEE62D] DEFAULT (0) FOR [同货号数量],
  376. CONSTRAINT [DF__进销存卡片__同货号金额__1BF30A66] DEFAULT (0) FOR [同货号金额],
  377. CONSTRAINT [DF__进销存卡片__影响部门__1CE72E9F] DEFAULT ('无') FOR [影响部门],
  378. CONSTRAINT [DF__进销存卡片__影响组别__1DDB52D8] DEFAULT ('无') FOR [影响组别],
  379. CONSTRAINT [DF_进销存卡片_影响货位] DEFAULT ('正式') FOR [影响货位],
  380. CONSTRAINT [DF__进销存卡片__接收登记__05A3D694] DEFAULT (0x00) FOR [接收登记]
  381. GO
  382. ALTER TABLE [dbo].[采购订单] WITH NOCHECK ADD 
  383. CONSTRAINT [PK_采购订单_1] PRIMARY KEY  CLUSTERED 
  384. (
  385. [内部编号]
  386. )  ON [PRIMARY] 
  387. GO
  388. ALTER TABLE [dbo].[采购订单o] WITH NOCHECK ADD 
  389. CONSTRAINT [DF_采购订单_采购数量] DEFAULT (0) FOR [采购数量],
  390. CONSTRAINT [PK_采购订单] PRIMARY KEY  CLUSTERED 
  391. (
  392. [内部编号]
  393. )  ON [PRIMARY] 
  394. GO
  395. ALTER TABLE [dbo].[领料单] WITH NOCHECK ADD 
  396. CONSTRAINT [DF_领料单_源仓区] DEFAULT ('') FOR [源仓区],
  397. CONSTRAINT [DF_领料单_源仓位] DEFAULT ('') FOR [源仓位],
  398. CONSTRAINT [DF_领料单_目的仓区] DEFAULT ('') FOR [目的仓区],
  399. CONSTRAINT [DF_领料单_目的仓位] DEFAULT ('') FOR [目的仓位],
  400. CONSTRAINT [DF_领料单_申请数量] DEFAULT (0) FOR [申请数量],
  401. CONSTRAINT [DF_领料单_实领数量] DEFAULT (0) FOR [实领数量],
  402. CONSTRAINT [DF_领料单_领料类别] DEFAULT ('') FOR [领料类别]
  403. GO
  404. SET QUOTED_IDENTIFIER ON 
  405. GO
  406. SET ANSI_NULLS ON 
  407. GO
  408. CREATE VIEW dbo.V物料主文件
  409. AS
  410. SELECT 物料名称, 拼音编码, 计量单位, 规格型号, 计划类别, 状态类别, 归属类别, 价值类别, 
  411.       进货提前期, 准备周期, 生产周期, 库存期限, 物料编号
  412. FROM dbo.物料主文件
  413. GO
  414. SET QUOTED_IDENTIFIER OFF 
  415. GO
  416. SET ANSI_NULLS ON 
  417. GO
  418. SET QUOTED_IDENTIFIER ON 
  419. GO
  420. SET ANSI_NULLS ON 
  421. GO
  422. create view v商品库存明细 as 
  423. (
  424. select k.*,x.效期,x.有效天数 from 库存库 as k left join 效期对照表 as x on k.货号=x.货号 and k.批号=x.批号
  425. )
  426. GO
  427. SET QUOTED_IDENTIFIER OFF 
  428. GO
  429. SET ANSI_NULLS ON 
  430. GO
  431. SET QUOTED_IDENTIFIER ON 
  432. GO
  433. SET ANSI_NULLS ON 
  434. GO
  435. CREATE VIEW v资源清单
  436. AS
  437. (
  438. select 编号,名称,拼音编码,最大工时*数量*6 as 最大工时,额定工时*数量*6 as 额定工时,最小工时*数量*6 as 最小工时,数量 from 资源清单
  439. )
  440. GO
  441. SET QUOTED_IDENTIFIER OFF 
  442. GO
  443. SET ANSI_NULLS ON 
  444. GO
  445. SET QUOTED_IDENTIFIER OFF 
  446. GO
  447. SET ANSI_NULLS ON 
  448. GO
  449. CREATE VIEW v资源负荷报表
  450. AS
  451. (
  452. select 资源编号,日期,年份,计划期,sum(负荷) as 负荷 from 
  453. (
  454. select 资源编号,日期,年份,计划期,负荷 from 临时资源负荷报表
  455. union all
  456. select 资源编号,日期,年份,计划期,负荷 from 资源负荷报表
  457. union all
  458. select 资源编号,日期,年份,计划期,负荷 from 临时生产件资源负荷报表
  459. union all
  460. select 资源编号,日期,年份,计划期,负荷 from 生产件资源负荷报表
  461. ) as a group by 资源编号,日期,年份,计划期
  462. )
  463. GO
  464. SET QUOTED_IDENTIFIER OFF 
  465. GO
  466. SET ANSI_NULLS ON 
  467. GO
  468. SET QUOTED_IDENTIFIER OFF 
  469. GO
  470. SET ANSI_NULLS ON 
  471. GO
  472. CREATE PROCEDURE SF_cg2审核采购订单 @记帐人 char(10) = NULL
  473. AS
  474. begin transaction
  475. --修改订货合同
  476. update 订货合同历史 set 
  477. 送货数量=送货数量+all数量
  478. from 
  479. (
  480. select sum(订货数量) as all数量, 合同编号
  481. from 采购订单审核 where 审单人=@记帐人 and 订单状态 = '通过'
  482. group by 合同编号
  483. ) as j
  484. where 订货合同历史.编号=j.合同编号 
  485. --将采购订单倒到采购订单发布表中,待发---------------------------------------------
  486. if (select  count(*) from 发布项清单 where  ( 零售= '1' or 库房= '1' ) and 方式='发送' and 表名='采购订单发布')>0
  487. INSERT INTO 采购订单发布 SELECT * FROM 采购订单审核 where 审单人=@记帐人 and 订单状态 = '通过'
  488. update 采购订单审核 set 订单状态 = '未完成' where 审单人=@记帐人 and 订单状态 = '通过'
  489. INSERT INTO 采购订单历史 SELECT * FROM 采购订单审核 where 审单人=@记帐人 and 订单状态 = '未完成'
  490. commit
  491. GO
  492. CREATE PROCEDURE SF_cg5订货合同计划登记 @记帐人 char(10) = NULL
  493. AS
  494. begin transaction
  495. declare @maxid INT
  496. DECLARE @IDCHAR CHAR(14)
  497. declare @year int 
  498. select @year = datepart(YEAR,getdate())
  499. --以下程序,从OBJTABLE中找到编号,并将编号附给订货合同--------------------
  500. select @IDCHAR = max(编号) from 订货合同历史 with(TABLOCKX)
  501. if @IDCHAR is null --没找到,表明没有记录
  502. begin
  503. select @maxid = 1
  504. end
  505. ELSE --找到最大编号
  506. BEGIN
  507. select @maxid = convert(int,SUBSTRING(@IDCHAR,6,6))+1
  508. IF @YEAR > CONVERT(INT,SUBSTRING(@IDCHAR,2,4)) 
  509. SELECT @MAXID = 1 
  510. ELSE IF (@YEAR < CONVERT(INT,SUBSTRING(@IDCHAR,2,4)) )
  511. BEGIN
  512. RAISERROR('机器年度比编号中的年度早,出错',16,1) --机器年度比编号中的年度早,出错
  513. END
  514. END
  515. declare mycursor cursor for select 内部编号,编号 FROM 订货合同 where 记帐人=@记帐人 order by 内部编号
  516. OPEN MYCURSOR
  517. declare @id int
  518. declare @bh char(14)
  519. FETCH next from  mycursor into @id,@bh
  520. WHILE (@@FETCH_STATUS = 0 )
  521. BEGIN
  522. SELECT @IDCHAR = CONVERT(CHAR(6),@maxid)
  523. update 订货合同 SET 编号='合'+convert(char(4),@YEAR)
  524. +REPLICATE('0',6-LEN(@IDCHAR))+@IDCHAR
  525. where current of mycursor
  526. select @maxid = @maxid+1
  527. FETCH next from  mycursor into @id,@bh
  528. END
  529. close mycursor
  530. deallocate mycursor
  531. --处理单据号
  532. SELECT @IDCHAR = NULL
  533. select @IDCHAR = max(单据号) from  订货合同历史 with(TABLOCKX)
  534. if @IDCHAR is null --没找到,表明没有记录
  535. begin
  536. select @maxid = 1
  537. end
  538. ELSE --找到最大编号
  539. BEGIN
  540. select @maxid = convert(int,SUBSTRING(@IDCHAR,5,6))+1
  541. IF @YEAR > CONVERT(INT,SUBSTRING(@IDCHAR,1,4)) 
  542. SELECT @MAXID = 1 
  543. ELSE IF (@YEAR < CONVERT(INT,SUBSTRING(@IDCHAR,1,4)) )
  544. BEGIN
  545. RAISERROR('机器年度比编号中的年度早,出错',16,1) --机器年度比编号中的年度早,出错
  546. END
  547. END
  548. SELECT @IDCHAR = CONVERT(CHAR(6),@maxid)
  549. update 订货合同 SET 单据号=convert(char(4),@YEAR)
  550. +REPLICATE('0',6-LEN(@IDCHAR))+@IDCHAR
  551. where 记帐人=@记帐人
  552. --将订货合同倒到订货合同历史表中--------------------------------------------------
  553. update 订货合同 set 送货数量=0 where 记帐人=@记帐人
  554. INSERT INTO 订货合同历史 SELECT * FROM 订货合同 where 记帐人=@记帐人
  555. --将订货合同倒到订货合同发布表中,待发---------------------------------------------
  556. if (select  count(*) from 发布项清单 where  ( 零售= '1' or 库房= '1' ) and 方式='发送' and 表名='订货合同发布')>0
  557. INSERT INTO 订货合同发布 SELECT * FROM 订货合同 where 记帐人=@记帐人
  558. --将订货合同删除
  559. delete FROM 订货合同 WHERE 记帐人=@记帐人
  560. commit
  561. GO
  562. SET QUOTED_IDENTIFIER OFF 
  563. GO
  564. SET ANSI_NULLS ON 
  565. GO
  566. SET QUOTED_IDENTIFIER OFF 
  567. GO
  568. SET ANSI_NULLS OFF 
  569. GO
  570. CREATE PROCEDURE SYS清采购订单 @记帐人 char(10) = NULL
  571. AS
  572. begin transaction
  573. delete FROM 采购订单 WHERE 记帐人=@记帐人 and 订货数量>0
  574. commit
  575. GO
  576. SET QUOTED_IDENTIFIER OFF 
  577. GO
  578. SET ANSI_NULLS ON 
  579. GO
  580. SET QUOTED_IDENTIFIER OFF 
  581. GO
  582. SET ANSI_NULLS OFF 
  583. GO
  584. --采购订单审核的订单状态有:未审、通过、不通过、返回、修改
  585. CREATE PROCEDURE SYS清采购订单审核 @记帐人 char(10) = NULL
  586. AS
  587. begin transaction
  588. delete FROM 采购订单审核 WHERE 审单人=@记帐人 and 订单状态 = '未完成'
  589. update 采购订单审核 set 订单状态 = '返回' WHERE 审单人=@记帐人 and 订单状态 = '不通过'
  590. commit
  591. GO
  592. SET QUOTED_IDENTIFIER OFF 
  593. GO
  594. SET ANSI_NULLS ON 
  595. GO
  596. SET QUOTED_IDENTIFIER OFF 
  597. GO
  598. SET ANSI_NULLS OFF 
  599. GO
  600. CREATE PROCEDURE mrp计算old 
  601. (@物料编号 char(14),@年份 int,@计划期 int,@计划代码 char(5),@需求数量 decimal(18,4),@建议生产 decimal(18,4) output)
  602. AS
  603. begin tran
  604. SET ANSI_NULLS OFF 
  605. declare  @期初库存   decimal(18,4),
  606.               @预计采购  decimal(18,4),
  607.               @预计生产  decimal(18,4),
  608.               @预计外协  decimal(18,4),
  609.               @预计出库  decimal(18,4),
  610.               @预计领用  decimal(18,4),
  611.               @预计入库  decimal(18,4),
  612.               @建议采购  decimal(18,4),
  613.               @建议外协  decimal(18,4),
  614.               @安全库存  decimal(18,4),
  615.               @预计库存  decimal(18,4),
  616.               @上一年份         int,
  617.               @上一计划期     int   
  618. select     @期初库存=0,
  619.               @预计采购=0,
  620.               @预计生产=0,
  621.               @预计外协=0,
  622.               @预计领用=0,
  623.               @建议采购=0,
  624.               @建议生产=0,
  625.               @建议外协=0,
  626.          --     @建议领用=0,
  627.               @预计库存=0
  628. if (not exists(select * from mrp0 where 物料编号=@物料编号 and 年份=@年份 and 计划期=@计划期))
  629. begin
  630.      if @计划期=1
  631.      begin
  632.           select      @上一年份=@年份-1
  633.           select      @上一计划期=(select max(计划期) from 工厂日历 where 年份=@上一年份)
  634.     end
  635.     else
  636.      begin
  637.           select      @上一年份=@年份
  638.           select      @上一计划期=@计划期-1
  639.     end   
  640.     if  (not exists(select * from mrp0 where 物料编号=@物料编号 and 年份=@上一年份 and 计划期=@上一计划期))
  641.     begin
  642.            select    @期初库存 =库存数量     from    库存库       where    货号=@物料编号
  643.          
  644.            if(@计划代码='wg')
  645.           begin  
  646.                  select    @预计采购=sum(剩余数量)
  647.                  from      采购订单
  648.                  where   物料编号=@物料编号  and  (年份<=@年份  or (年份=@年份 and 计划期<=@计划期)) 
  649.           end 
  650.           if(@计划代码='bcp')
  651.           begin  
  652.               select    @预计生产=sum(剩余数量)
  653.                from      生产订单
  654.                where  物料编号=@物料编号  and  (年份<=@年份  or (年份=@年份 and 计划期<=@计划期)) 
  655.           end 
  656.          /*
  657.            if(@计划代码='wx')
  658.            begin  
  659.                 select    @预计外协=sum(剩余数量)
  660.                  from      外协订单
  661.                  where   物料编号=@物料编号      and  (年份<=@年份  or (年份=@年份 and 计划期<=@计划期)) 
  662.            end 
  663.            select    @预计领用=sum(剩余数量)
  664.            from       生产领料单
  665.            where    物料编号=@物料编号       and  (年份<=@年份  or (年份=@年份 and 计划期<=@计划期)) 
  666.          */
  667.          
  668.     end
  669.     else
  670.     begin
  671.            select    @期初库存 =预计库存
  672.             from       mrp0
  673.            where    物料编号=@物料编号   and 年份=@上一年份  and  计划期=@上一计划期
  674.          
  675.            if(@计划代码='wg')
  676.           begin  
  677.                select    @预计采购=sum(剩余数量)
  678.                 from      采购订单
  679.                 where   物料编号=@物料编号     and  年份=@年份  and 计划期=@计划期 
  680.           end 
  681.           if(@计划代码='bcp')
  682.           begin  
  683.               select    @预计生产=sum(剩余数量)
  684.                from      生产订单
  685.                where   物料编号=@物料编号    and  年份=@年份  and 计划期=@计划期 
  686.           end 
  687.        /*
  688.           if(@计划代码='wx')
  689.         begin  
  690.              select    @预计外协=sum(剩余数量)
  691.               from      外协订单
  692.               where   物料编号=@物料编号  and  年份=@年份  and 计划期=@计划期 
  693.          end 
  694.            select    @预计领用=sum(剩余数量)
  695.            from       生产领料单
  696.           where    物料编号=@物料编号   and  年份=@年份  and 计划期=@计划期 
  697.           */
  698.     end        --是否第一期的 if begin end else begin  end
  699.       
  700.           select  @安全库存=最低库存  from 物料主文件 where 物料编号=@物料编号
  701.           select  @预计出库=isnull(@预计领用,0)
  702.           select  @预计入库=isnull(@预计采购,0)+isnull(@预计生产,0)+isnull(@预计外协,0)
  703.           Insert into mrp0 (   物料编号,    年份,    计划期, 期初库存,                   预计入库 ,   预计出库,    安全库存)
  704.                         values (@物料编号,@年份,@计划期,isnull(@期初库存,0),@预计入库,@预计出库,@安全库存)        
  705. end           --假如没有存在该期数据的 if begin end
  706. --Update  mrp0   set  需求数量=需求数量+@需求数量
  707.     
  708. if  @计划代码='wg'
  709. begin
  710.      select   @建议采购=isnull(@需求数量,0) - (isnull(期初库存,0)-isnull(安全库存,0)+isnull(预计入库,0))
  711.                                                           +(isnull(预计出库,0)+isnull(需求数量,0))
  712.                                                           -(isnull(建议采购,0)+isnull(建议生产,0)+isnull(建议外协,0))
  713.         from   mrp0   where   物料编号=@物料编号  and  年份=@年份  and 计划期=@计划期 
  714.        if   @建议采购<0   select    @建议采购=0
  715. end
  716. if  @计划代码='bcp'
  717. begin
  718.         select   @建议生产=isnull(@需求数量,0) - (isnull(期初库存,0)-isnull(安全库存,0)+isnull(预计入库,0))
  719.                                                           +(isnull(预计出库,0)+isnull(需求数量,0))
  720.                                                           -(isnull(建议采购,0)+isnull(建议生产,0)+isnull(建议外协,0))
  721.         from   mrp0   where   物料编号=@物料编号  and  年份=@年份  and 计划期=@计划期 
  722.          if   @建议生产<0   select    @建议生产=0
  723. end
  724. if  @计划代码='wx'
  725. begin
  726.         select   @建议外协=isnull(@需求数量,0) - (isnull(期初库存,0)-isnull(安全库存,0)+isnull(预计入库,0))
  727.                                                           +(isnull(预计出库,0)+isnull(需求数量,0))
  728.                                                           -(isnull(建议采购,0)+isnull(建议生产,0)+isnull(建议外协,0))
  729.         from   mrp0   where   物料编号=@物料编号  and  年份=@年份  and 计划期=@计划期 
  730.      
  731.          if   @建议外协<0   select    @建议外协=0
  732. end
  733.    update   mrp0
  734.       set      需求数量=isnull(需求数量,0)+isnull(@需求数量,0),
  735.                  建议采购=isnull(建议采购,0)+isnull(@建议采购,0),
  736.                  建议生产=isnull(建议生产,0)+isnull(@建议生产,0),
  737.                  建议外协=isnull(建议外协,0)+isnull(@建议外协,0)
  738.    where   物料编号=@物料编号  and  年份=@年份  and 计划期=@计划期
  739.   update   mrp0
  740.       set      预计库存=isnull(期初库存,0)+isnull(预计入库,0)-isnull(预计出库,0)
  741.                                   -isnull(需求数量,0)+isnull(建议采购,0)+isnull(建议生产,0)+isnull(建议外协,0)
  742.    where    物料编号=@物料编号  and  年份=@年份  and 计划期=@计划期
  743. commit
  744. GO
  745. SET QUOTED_IDENTIFIER OFF 
  746. GO
  747. SET ANSI_NULLS ON 
  748. GO
  749. SET QUOTED_IDENTIFIER ON 
  750. GO
  751. SET ANSI_NULLS ON 
  752. GO
  753. CREATE PROCEDURE   sf_cg1删除全部未用项  @记帐人  char(10)=null
  754.  AS
  755. begin tran
  756.          delete    from   采购订单  where    订货数量=0  and 记帐人=@记帐人
  757. commit tran
  758. GO
  759. SET QUOTED_IDENTIFIER OFF 
  760. GO
  761. SET ANSI_NULLS ON 
  762. GO
  763. SET QUOTED_IDENTIFIER OFF 
  764. GO
  765. SET ANSI_NULLS OFF 
  766. GO
  767. CREATE PROCEDURE sf_cg1取得采购项  @记帐人  char(10)=null
  768. AS
  769. begin  transaction
  770.              declare       @年份 int,@计划期 int ,@max期 int,@期数 int,@aDateString Char(10),@aDateInt int
  771.              select         @aDateString=convert(char(10),getdate(),20)
  772.              select         @aDateString=substring(@aDateString,1,4)+substring(@aDateString,6,2)+substring(@aDateString,9,2)
  773.              select         @aDateInt= convert(int, @aDateString)
  774.              select         @期数=5             --取得近几个计划期内需要采购的物料编号,暂定 5
  775.              select         @年份=年份, 
  776.                                @计划期 =计划期 
  777.               from            工厂日历
  778.               where        @aDateInt<=结束日期  and  @aDateInt>=开始日期
  779.              
  780.               select         @max期=max(计划期)  from 工厂日历  where  年份=@年份
  781.  
  782.              if(@计划期>@max期-@期数)
  783.                      select   @年份=@年份+1,@计划期=@期数-(@max期-@计划期)
  784.              else   
  785.                      select   @计划期=@计划期+@期数
  786. insert into    采购订单 (物料编号,供货商号,订货数量,记帐人)
  787. select          distinct  a.物料编号,isnull(b.指定供货商,'-1'),    0,   @记帐人
  788. from             mrp正式 as a
  789.                        inner join 物料主文件 as b on a.物料编号=b.物料编号
  790. where          a.计划投入>0  
  791.                        and    b.计划类别='wg'
  792.                        and    (a.年份<@年份  or ( a.年份=@年份 and  a.计划期<=@计划期) )
  793.                        and    a.物料编号 not in (select distinct  物料编号 from  采购订单 where 记帐人=@记帐人)
  794. commit transaction
  795. GO
  796. SET QUOTED_IDENTIFIER OFF 
  797. GO
  798. SET ANSI_NULLS ON 
  799. GO
  800. SET QUOTED_IDENTIFIER OFF 
  801. GO
  802. SET ANSI_NULLS OFF 
  803. GO
  804. CREATE PROCEDURE sf_cg1填写采购订单 @记帐人 char(10) = NULL
  805. AS
  806. begin transaction
  807. declare @maxid INT
  808. DECLARE @IDCHAR CHAR(14)
  809. DECLARE @IDCHAR1 CHAR(14)
  810. declare @year int 
  811. select @year = datepart(YEAR,getdate())
  812. --以下程序,从OBJTABLE中找到编号,并将编号附给采购订单--------------------
  813. select @IDCHAR = max(编号) from 采购订单历史 with(TABLOCKX) where 编号 like '订%'
  814. select @IDCHAR1 = max(编号) from 采购订单审核 with(tablockx) where 编号 like '订%'
  815. if @IDCHAR is null and @IDCHAR1 is not null
  816. begin
  817. select @IDCHAR = @IDCHAR1
  818. end
  819. if @IDCHAR1 > @IDCHAR 
  820. begin
  821. select @IDCHAR = @IDCHAR1
  822. end
  823. if @IDCHAR is null --没找到,表明没有记录
  824. begin
  825. select @maxid = 1
  826. end
  827. ELSE --找到最大编号
  828. BEGIN
  829. select @maxid = convert(int,SUBSTRING(@IDCHAR,6,6))+1
  830. IF @YEAR > CONVERT(INT,SUBSTRING(@IDCHAR,2,4)) 
  831. SELECT @MAXID = 1 
  832. ELSE IF (@YEAR < CONVERT(INT,SUBSTRING(@IDCHAR,2,4)) )
  833. BEGIN
  834. RAISERROR('机器年度比编号中的年度早,出错',16,1) --机器年度比编号中的年度早,出错
  835. END
  836. END
  837. declare mycursor cursor for select 内部编号,编号 FROM 采购订单 where 记帐人=@记帐人 -- order by 内部编号 
  838. OPEN MYCURSOR
  839. declare @id int
  840. declare @bh char(14)
  841. FETCH next from  mycursor into @id,@bh
  842. WHILE (@@FETCH_STATUS = 0 )
  843. BEGIN
  844. SELECT @IDCHAR = CONVERT(CHAR(6),@maxid)
  845. update 采购订单 SET 编号='订'+convert(char(4),@YEAR)
  846. +REPLICATE('0',6-LEN(@IDCHAR))+@IDCHAR
  847. where current of mycursor
  848. select @maxid = @maxid+1
  849. FETCH next from  mycursor into @id,@bh
  850. END
  851. close mycursor
  852. deallocate mycursor
  853. --处理单据号
  854. SELECT @IDCHAR = NULL
  855. select @IDCHAR = max(单据号) from  采购订单历史 with(TABLOCKX)
  856. if @IDCHAR is null --没找到,表明没有记录
  857. begin
  858. select @maxid = 1
  859. end
  860. ELSE --找到最大编号
  861. BEGIN
  862. select @maxid = convert(int,SUBSTRING(@IDCHAR,5,6))+1
  863. IF @YEAR > CONVERT(INT,SUBSTRING(@IDCHAR,1,4)) 
  864. SELECT @MAXID = 1 
  865. ELSE IF (@YEAR < CONVERT(INT,SUBSTRING(@IDCHAR,1,4)) )
  866. BEGIN
  867. RAISERROR('机器年度比编号中的年度早,出错',16,1) --机器年度比编号中的年度早,出错
  868. END
  869. END
  870. SELECT @IDCHAR = CONVERT(CHAR(6),@maxid)
  871. update 采购订单 SET 单据号=convert(char(4),@YEAR)
  872. +REPLICATE('0',6-LEN(@IDCHAR))+@IDCHAR
  873. where 记帐人=@记帐人
  874. update 采购订单 SET 记帐日期=datepart(yyyy,getdate())*10000+datepart(mm,getdate())*100+datepart(dd,getdate())
  875. where 记帐人=@记帐人 and 记帐日期 is null
  876. -- 是否审核
  877. declare @parameter int
  878. select @parameter=参数 from 运行参数表 where 参数名称='审采购订单'
  879. select @parameter = case when @parameter is null then 0 else @parameter end
  880. if(@parameter = 1)
  881. begin 
  882. update 采购订单 set 送货数量=0, 订单状态='未审' where 记帐人=@记帐人
  883. --将采购订单倒到采购订单历史表中--------------------------------------------------
  884. update 采购订单 set 订货日期 = 记帐日期 where 订货日期 is null and 记帐人=@记帐人
  885. insert into 采购订单审核 select * from 采购订单 where 记帐人=@记帐人 and 订货数量>0
  886. end
  887. else    -- 不审核
  888. begin
  889. --将采购订单倒到采购订单历史表中--------------------------------------------------
  890. update 采购订单 set 送货数量=0, 订单状态='未完成' where 记帐人=@记帐人
  891. update 采购订单 set 订货日期 = 记帐日期 where 订货日期 is null and 记帐人=@记帐人
  892. --修改订货合同
  893. update 订货合同历史 set 
  894. 送货数量=送货数量+all数量
  895. from 
  896. (
  897. select sum(订货数量) as all数量, 合同编号
  898. from 采购订单 where 记帐人=@记帐人
  899. group by 合同编号
  900. ) as j
  901. where 订货合同历史.编号=j.合同编号 
  902. INSERT INTO 采购订单历史 SELECT * FROM 采购订单 where 记帐人=@记帐人 and 订货数量>0
  903. end
  904. commit
  905. GO
  906. SET QUOTED_IDENTIFIER OFF 
  907. GO
  908. SET ANSI_NULLS ON 
  909. GO
  910. SET QUOTED_IDENTIFIER OFF 
  911. GO
  912. SET ANSI_NULLS OFF 
  913. GO
  914. CREATE PROCEDURE sf_cg3修改采购订单 @记帐人 char(10) = NULL
  915. AS
  916. begin transaction
  917. update 采购订单审核 set 订单状态 = '未审' WHERE 记帐人=@记帐人 and 订单状态 = '修改'
  918. commit
  919. GO
  920. SET QUOTED_IDENTIFIER OFF 
  921. GO
  922. SET ANSI_NULLS ON 
  923. GO
  924. SET QUOTED_IDENTIFIER ON 
  925. GO
  926. SET ANSI_NULLS ON 
  927. GO
  928. CREATE PROCEDURE sf_cj1填生产订单 @记帐人 char(10)=null
  929. AS
  930. begin transaction
  931. declare @maxid INT
  932. DECLARE @IDCHAR CHAR(14)
  933. declare @year int 
  934. select @year = datepart(YEAR,getdate())
  935. --以下程序,从OBJTABLE中找到编号
  936. select @IDCHAR = max(编号)from 生产订单审核
  937. if @IDCHAR is null --没找到,表明没有记录
  938. begin
  939. select @maxid = 1
  940. end
  941. ELSE --找到最大编号
  942. BEGIN
  943. select @maxid = convert(int,SUBSTRING(@IDCHAR,6,6))+1
  944. IF @YEAR > CONVERT(INT,SUBSTRING(@IDCHAR,2,4)) 
  945. SELECT @MAXID = 1 
  946. ELSE IF (@YEAR < CONVERT(INT,SUBSTRING(@IDCHAR,2,4)) )
  947. BEGIN
  948. RAISERROR('机器年度比编号中的年度早,出错',16,10) --机器年度比编号中的年度早,出错
  949. END
  950. END
  951. declare mycursor cursor for select zsc.内部编号 FROM 生产订单 as zsc,选择记帐记录表 as xzjz where zsc.记帐人=@记帐人 
  952. and zsc.状态='填写' and xzjz.记帐人=@记帐人 and xzjz.操作文件名='cj1填生产订单' and convert(varchar(50),zsc.内部编号)=xzjz.标识字段1 order by zsc.内部编号
  953. OPEN MYCURSOR
  954. declare @id int
  955. declare @bh char(14)
  956. FETCH next from  mycursor into @id
  957. WHILE (@@FETCH_STATUS = 0 )
  958. BEGIN
  959. SELECT @IDCHAR = CONVERT(CHAR(6),@maxid)
  960. update 生产订单 SET 编号='产'+convert(char(4),@YEAR)
  961. +REPLICATE('0',6-LEN(@IDCHAR))+@IDCHAR
  962. where 内部编号=@id--current of mycursor
  963. select @maxid = @maxid+1
  964. FETCH next from  mycursor into @id
  965. END
  966. close mycursor
  967. deallocate mycursor
  968. --处理单据号
  969. SELECT @IDCHAR = NULL
  970. select @IDCHAR = max(单据号) from  生产订单审核
  971. if @IDCHAR is null --没找到,表明没有记录
  972. begin
  973. select @maxid = 1
  974. end
  975. ELSE --找到最大编号
  976. BEGIN
  977. select @maxid = convert(int,SUBSTRING(@IDCHAR,5,6))+1
  978. IF @YEAR > CONVERT(INT,SUBSTRING(@IDCHAR,1,4)) 
  979. SELECT @MAXID = 1 
  980. ELSE IF (@YEAR < CONVERT(INT,SUBSTRING(@IDCHAR,1,4)) )
  981. BEGIN
  982. RAISERROR(50002,16,10) --机器年度比编号中的年度早,出错
  983. END
  984. END
  985. SELECT @IDCHAR = CONVERT(CHAR(6),@maxid)
  986. update 生产订单 SET 单据号=convert(char(4),@YEAR)+REPLICATE('0',6-LEN(@IDCHAR))+@IDCHAR
  987. FROM 生产订单 as zsc,选择记帐记录表 as xzjz where zsc.记帐人=@记帐人 and zsc.状态='填写' and xzjz.记帐人=@记帐人
  988.  and xzjz.操作文件名='cj1填生产订单' and convert(varchar(50),zsc.内部编号)=xzjz.标识字段1 
  989. INSERT INTO 生产订单审核(MPS编号,编号,单据号,生产批号,物料编号,年份,计划期,数量,生产部门,下达日期,要求完成日期,完成数量,剩余数量,记帐人,
  990. 记帐日期,审核人,审核日期,修改标记,接收登记,状态,备注) 
  991. SELECT zsc.MPS编号,zsc.编号,zsc.单据号,zsc.生产批号,zsc.物料编号,zsc.年份,zsc.计划期,zsc.数量,zsc.生产部门,zsc.下达日期,
  992. zsc.要求完成日期,zsc.完成数量,zsc.剩余数量,zsc.记帐人,zsc. 记帐日期,zsc.审核人,zsc.审核日期,zsc.修改标记,zsc.接收登记,zsc.状态,zsc.备注
  993. FROM 生产订单 as zsc,选择记帐记录表 as xzjz where zsc.记帐人=@记帐人 and zsc.状态='填写' and xzjz.记帐人=@记帐人
  994.  and xzjz.操作文件名='cj1填生产订单' and convert(varchar(50),zsc.内部编号)=xzjz.标识字段1 
  995. update 生产订单 set 状态='待审' from 生产订单 as zsc,选择记帐记录表 as xzjz where zsc.记帐人=@记帐人 and zsc.状态='填写' and xzjz.记帐人=@记帐人
  996.  and xzjz.操作文件名='cj1填生产订单' and convert(varchar(50),zsc.内部编号)=xzjz.标识字段1 
  997. commit
  998. GO
  999. SET QUOTED_IDENTIFIER OFF 
  1000. GO
  1001. SET ANSI_NULLS ON 
  1002. GO
  1003. SET QUOTED_IDENTIFIER ON 
  1004. GO
  1005. SET ANSI_NULLS ON 
  1006. GO
  1007. CREATE PROCEDURE sf_cj2审生产订单 @记帐人 char(10)=null
  1008. AS
  1009. begin transaction
  1010. update 生产订单 set 状态='执行中' from 生产订单 as zsc,选择记帐记录表 as xzjz where zsc.审核人=@记帐人  and zsc.状态='通过' 
  1011. and xzjz.记帐人=@记帐人 and xzjz.操作文件名='cj2审生产订单' and convert(varchar(50),zsc.内部编号)=xzjz.标识字段1
  1012. insert into 生产订单历史 (MPS编号,编号,单据号,生产批号,物料编号,年份,计划期,数量,生产部门,下达日期,要求完成日期,完成数量,剩余数量,记帐人,
  1013. 记帐日期,审核人,审核日期,修改标记,接收登记,状态,备注) 
  1014. SELECT zsc.MPS编号,zsc.编号,zsc.单据号,zsc.生产批号,zsc.物料编号,zsc.年份,zsc.计划期,zsc.数量,zsc.生产部门,zsc.下达日期,
  1015. zsc.要求完成日期,zsc.完成数量,zsc.剩余数量,zsc.记帐人,zsc. 记帐日期,zsc.审核人,zsc.审核日期,zsc.修改标记,zsc.接收登记,zsc.状态,zsc.备注
  1016. FROM 生产订单 as zsc,选择记帐记录表 as xzjz where zsc.记帐人=@记帐人 and zsc.状态='执行中' and xzjz.记帐人=@记帐人
  1017.  and xzjz.操作文件名='cj2审生产订单' and convert(varchar(50),zsc.内部编号)=xzjz.标识字段1 
  1018. delete from 生产订单 where 状态='执行中' and 审核人=@记帐人
  1019. update 生产订单 set 状态='返回' from 生产订单 as zsc,选择记帐记录表 as xzjz where zsc.审核人=@记帐人  and zsc.状态='不通过' 
  1020. and xzjz.记帐人=@记帐人 and xzjz.操作文件名='cj2审生产订单' and convert(varchar(50),zsc.内部编号)=xzjz.标识字段1
  1021. commit
  1022. GO
  1023. SET QUOTED_IDENTIFIER OFF 
  1024. GO
  1025. SET ANSI_NULLS ON 
  1026. GO
  1027. SET QUOTED_IDENTIFIER ON 
  1028. GO
  1029. SET ANSI_NULLS ON 
  1030. GO
  1031. CREATE PROCEDURE sf_cj5填完工报告单 @记帐人 char(10)=null
  1032. AS
  1033. begin transaction
  1034. declare @maxid INT
  1035. DECLARE @IDCHAR CHAR(14)
  1036. declare @year int 
  1037. select @year = datepart(YEAR,getdate())
  1038. --以下程序,从OBJTABLE中找到编号
  1039. select @IDCHAR = max(编号)from 完工报告单历史
  1040. if @IDCHAR is null --没找到,表明没有记录
  1041. begin
  1042. select @maxid = 1
  1043. end
  1044. ELSE --找到最大编号
  1045. BEGIN
  1046. select @maxid = convert(int,SUBSTRING(@IDCHAR,6,6))+1
  1047. IF @YEAR > CONVERT(INT,SUBSTRING(@IDCHAR,2,4)) 
  1048. SELECT @MAXID = 1 
  1049. ELSE IF (@YEAR < CONVERT(INT,SUBSTRING(@IDCHAR,2,4)) )
  1050. BEGIN
  1051. RAISERROR('机器年度比编号中的年度早,出错',16,10) --机器年度比编号中的年度早,出错
  1052. END
  1053. END
  1054. declare mycursor cursor for select zsc.内部编号 FROM 完工报告单 as zsc,选择记帐记录表 as xzjz where zsc.记帐人=@记帐人 
  1055. and zsc.状态='填写' and xzjz.记帐人=@记帐人 and xzjz.操作文件名='cj5填完工报告单' and convert(varchar(50),zsc.内部编号)=xzjz.标识字段1 order by zsc.内部编号
  1056. OPEN MYCURSOR
  1057. declare @id int
  1058. declare @bh char(14)
  1059. FETCH next from  mycursor into @id
  1060. WHILE (@@FETCH_STATUS = 0 )
  1061. BEGIN
  1062. SELECT @IDCHAR = CONVERT(CHAR(6),@maxid)
  1063. update 完工报告单 SET 编号='报'+convert(char(4),@YEAR)
  1064. +REPLICATE('0',6-LEN(@IDCHAR))+@IDCHAR
  1065. where 内部编号=@id--current of mycursor
  1066. select @maxid = @maxid+1
  1067. FETCH next from  mycursor into @id
  1068. END
  1069. close mycursor
  1070. deallocate mycursor
  1071. --处理单据号
  1072. SELECT @IDCHAR = NULL
  1073. select @IDCHAR = max(单据号) from  完工报告单历史
  1074. if @IDCHAR is null --没找到,表明没有记录
  1075. begin
  1076. select @maxid = 1
  1077. end
  1078. ELSE --找到最大编号
  1079. BEGIN
  1080. select @maxid = convert(int,SUBSTRING(@IDCHAR,5,6))+1
  1081. IF @YEAR > CONVERT(INT,SUBSTRING(@IDCHAR,1,4)) 
  1082. SELECT @MAXID = 1 
  1083. ELSE IF (@YEAR < CONVERT(INT,SUBSTRING(@IDCHAR,1,4)) )
  1084. BEGIN
  1085. RAISERROR(50002,16,10) --机器年度比编号中的年度早,出错
  1086. END
  1087. END
  1088. SELECT @IDCHAR = CONVERT(CHAR(6),@maxid)
  1089. update 完工报告单 SET 单据号=convert(char(4),@YEAR)+REPLICATE('0',6-LEN(@IDCHAR))+@IDCHAR,批次=编号,修改标记='2'
  1090. FROM 完工报告单 as zsc,选择记帐记录表 as xzjz where zsc.记帐人=@记帐人 and zsc.状态='填写' and xzjz.记帐人=@记帐人
  1091.  and xzjz.操作文件名='cj5填完工报告单' and convert(varchar(50),zsc.内部编号)=xzjz.标识字段1 
  1092. update 生产订单历史 set 完成数量=ddls.完成数量+zsc.完成数量,修改标记='2' from 完工报告单 as zsc,选择记帐记录表 as xzjz,生产订单历史 as ddls
  1093.  where zsc.记帐人=@记帐人 and zsc.状态='填写' and xzjz.记帐人=@记帐人 and xzjz.操作文件名='cj5填完工报告单' 
  1094. and convert(varchar(50),zsc.内部编号)=xzjz.标识字段1 and ddls.编号=zsc.生产单号
  1095. update 生产订单历史 set 剩余数量=数量-完成数量 where 修改标记='2'
  1096. update 生产订单历史 set 状态='完成',修改标记='1' where 修改标记='2' and 完成数量>=数量
  1097. insert into 完工报告单历史 (编号,单据号,生产单号,物料编号,批号,批次,填报日期,完成数量,记帐人,记帐日期,修改标记,验收结论,验收日期,验收员,保管员,
  1098. 接收登记,状态,备注)
  1099. select zsc.编号,zsc.单据号,zsc.生产单号,zsc.物料编号,zsc.批号,zsc.批次,zsc.填报日期,zsc.完成数量,zsc.记帐人,zsc.记帐日期,zsc.修改标记,zsc.验收结论,
  1100. zsc.验收日期,zsc.验收员,zsc.保管员,zsc.接收登记,zsc.状态,zsc.备注 from 完工报告单 as zsc,选择记帐记录表 as xzjz 
  1101. where zsc.记帐人=@记帐人 and zsc.状态='填写' and xzjz.记帐人=@记帐人 and xzjz.操作文件名='cj5填完工报告单' and convert(varchar(50),zsc.内部编号)=xzjz.标识字段1 
  1102. delete from 完工报告单 where 修改标记='2' and 记帐人=@记帐人
  1103. commit
  1104. GO
  1105. SET QUOTED_IDENTIFIER OFF 
  1106. GO
  1107. SET ANSI_NULLS ON 
  1108. GO
  1109. SET QUOTED_IDENTIFIER ON 
  1110. GO
  1111. SET ANSI_NULLS ON 
  1112. GO
  1113. CREATE PROCEDURE sf_cj5由MRP生成生产订单 @记帐人 char(10)=null
  1114. AS
  1115. begin transaction
  1116. --declare @记帐人 char(10)
  1117. declare @rq int
  1118. --select @记帐人='sys'
  1119. select @rq=datepart(yyyy,getdate())*10000+datepart(mm,getdate())*100+datepart(dd,getdate())
  1120. insert into 生产订单(MPS编号,物料编号,年份,计划期,数量,下达日期,要求完成日期,记帐人,记帐日期,修改标记,状态,备注)
  1121. select 'MRP-'+mrp.发布编号,mrp.物料编号,mrp.年份,mrp.计划期,mrp.净需求,@rq,gcrl.结束日期,@记帐人,@rq,'1','填写','由MRP生成' 
  1122. from MRP历史 as mrp,物料主文件 as wlz,工厂日历 as gcrl where mrp.物料编号=wlz.物料编号 and wlz.计划类别='bcp' 
  1123. and mrp.年份=gcrl.年份 and mrp.计划期=gcrl.计划期 and mrp.生产订单标记='0' and mrp.净需求>0
  1124. update MRP历史 set 生产订单标记='1' from MRP历史 as mrp,物料主文件 as wlz where mrp.物料编号=wlz.物料编号
  1125. and wlz.计划类别='bcp' and 生产订单标记='0'
  1126. commit
  1127. GO
  1128. SET QUOTED_IDENTIFIER OFF 
  1129. GO
  1130. SET ANSI_NULLS ON 
  1131. GO
  1132. SET QUOTED_IDENTIFIER ON 
  1133. GO
  1134. SET ANSI_NULLS ON 
  1135. GO
  1136. CREATE PROCEDURE sf_kf1填成品入库单 @记帐人 char(10)=null
  1137. AS
  1138. begin transaction
  1139. --declare @记帐人 char(10)
  1140. --select @记帐人='sys'
  1141. declare @maxid INT
  1142. DECLARE @IDCHAR CHAR(14)
  1143. declare @year int 
  1144. select @year = datepart(YEAR,getdate())
  1145. --以下程序,从OBJTABLE中找到编号
  1146. select @IDCHAR = max(编号)from 产品入库单历史
  1147. if @IDCHAR is null --没找到,表明没有记录
  1148. begin
  1149. select @maxid = 1
  1150. end
  1151. ELSE --找到最大编号
  1152. BEGIN
  1153. select @maxid = convert(int,SUBSTRING(@IDCHAR,6,6))+1
  1154. IF @YEAR > CONVERT(INT,SUBSTRING(@IDCHAR,2,4)) 
  1155. SELECT @MAXID = 1 
  1156. ELSE IF (@YEAR < CONVERT(INT,SUBSTRING(@IDCHAR,2,4)) )
  1157. BEGIN
  1158. RAISERROR('机器年度比编号中的年度早,出错',16,10) --机器年度比编号中的年度早,出错
  1159. END
  1160. END
  1161. declare mycursor cursor for select 内部编号 FROM 产品入库单 where 记帐人=@记帐人 order by 内部编号
  1162. OPEN MYCURSOR
  1163. declare @id int
  1164. declare @bh char(14)
  1165. FETCH next from  mycursor into @id
  1166. WHILE (@@FETCH_STATUS = 0 )
  1167. BEGIN
  1168. SELECT @IDCHAR = CONVERT(CHAR(6),@maxid)
  1169. update 产品入库单 SET 编号='入'+convert(char(4),@YEAR)
  1170. +REPLICATE('0',6-LEN(@IDCHAR))+@IDCHAR
  1171. where 内部编号=@id--current of mycursor
  1172. select @maxid = @maxid+1
  1173. FETCH next from  mycursor into @id
  1174. END
  1175. close mycursor
  1176. deallocate mycursor
  1177. --处理单据号
  1178. SELECT @IDCHAR = NULL
  1179. select @IDCHAR = max(单据号) from  产品入库单历史
  1180. if @IDCHAR is null --没找到,表明没有记录
  1181. begin
  1182. select @maxid = 1
  1183. end
  1184. ELSE --找到最大编号
  1185. BEGIN
  1186. select @maxid = convert(int,SUBSTRING(@IDCHAR,5,6))+1
  1187. IF @YEAR > CONVERT(INT,SUBSTRING(@IDCHAR,1,4)) 
  1188. SELECT @MAXID = 1 
  1189. ELSE IF (@YEAR < CONVERT(INT,SUBSTRING(@IDCHAR,1,4)) )
  1190. BEGIN
  1191. RAISERROR(50002,16,10) --机器年度比编号中的年度早,出错
  1192. END
  1193. END
  1194. SELECT @IDCHAR = CONVERT(CHAR(6),@maxid)
  1195. update 产品入库单 SET 单据号=convert(char(4),@YEAR)+REPLICATE('0',6-LEN(@IDCHAR))+@IDCHAR,批次=编号
  1196. FROM 产品入库单 where 记帐人=@记帐人
  1197. INSERT INTO 产品入库单历史(生产单号,编号,单据号,源仓区,源仓位,目的仓区,目的仓位,物料编号,批号,效期,批次,库存成本单价,批次成本单价,到货数量,入库数量,拒收数量,验收结论,到货日期,验收日期,验收员,保管员,记帐人,记帐日期,状态,备注)
  1198. SELECT 生产单号,编号,单据号,源仓区,源仓位,目的仓区,目的仓位,物料编号,批号,效期,批次,库存成本单价,批次成本单价,到货数量,入库数量,拒收数量,验收结论,到货日期,验收日期,验收员,保管员,记帐人,记帐日期,状态,备注
  1199. FROM 产品入库单 where 记帐人=@记帐人
  1200. DELETE FROM 临时进销存卡片 where 记帐人=@记帐人
  1201. INSERT INTO 临时进销存卡片(部门,组别,货号,批号,摘要,单据号,日期,入库数量,入库金额,成本单价,影响部门,影响组别,记帐人)
  1202. (SELECT J.目的仓区,J.目的仓位,J.物料编号,J.批号,'按生产单从'+J.源仓区+'入库到'+J.目的仓区,J.编号,J.记帐日期,j.入库数量,j.入库数量*j.批次成本单价,
  1203. j.批次成本单价,j.目的仓区,j.目的仓位,j.记帐人 FROM 产品入库单 AS J  where j.记帐人=@记帐人)
  1204. --exec sf_加入进销存卡片 @记帐人
  1205. insert into 库存库(货号,部门,组别,批号)
  1206. select DISTINCT j.物料编号,j.目的仓区,j.目的仓位,j.批号 from 产品入库单 as j left join 库存库 as k on
  1207. ( j.目的仓区=k.部门 and j.目的仓位=k.组别 and  j.物料编号=k.货号 and  j.批号 = k.批号) where j.记帐人 = @记帐人 and k.货号 is null
  1208. UPDATE 库存库 SET 库存单价=
  1209. case when 库存数量<=0 or (库存数量+数量ALL)<=0 then 进货单价
  1210. else
  1211. (库存金额+合计金额)/(库存数量+数量ALL)
  1212. end ,
  1213. 库存数量=库存数量+数量ALL,
  1214. 库存金额=case when 库存数量<=0 or (库存数量+数量ALL)<=0 then 进货单价*(库存数量+数量ALL)
  1215. else
  1216. 库存金额+合计金额
  1217. end,
  1218. 库存库.最新进价=进货单价,
  1219. 修改标记='1'
  1220. FROM 
  1221. (SELECT 目的仓区,目的仓位,物料编号,批号,'数量ALL'=sum(入库数量),
  1222. '合计金额'=sum(入库数量*批次成本单价),
  1223. '进货单价'=
  1224. case when sum(入库数量) =0 then  avg(批次成本单价) else
  1225. sum(入库数量*批次成本单价)/sum(入库数量) end
  1226. FROM 产品入库单 where 记帐人 = @记帐人 
  1227. GROUP BY 目的仓区,目的仓位,物料编号,批号
  1228. ) AS LSJ
  1229. WHERE  库存库.货号=LSj.物料编号 AND 库存库.批号=LSj.批号 AND 库存库.部门=LSJ.目的仓区 AND 库存库.组别=LSJ.目的仓位
  1230. update 产品入库单 set 效期=效期*100+1 WHERE 记帐人=@记帐人 and 效期<999999
  1231. INSERT INTO 效期对照表(货号,批号) SELECT 物料编号,批号 from 
  1232. (SELECT DISTINCT 物料编号,批号,'物料编号批号'=rtrim(物料编号)+rtrim(批号) FROM 产品入库单 WHERE 记帐人=@记帐人) AS NO1
  1233. WHERE NO1.物料编号批号 NOT IN 
  1234. (SELECT rtrim(物料编号)+rtrim(批号) FROM 效期对照表)
  1235. update 效期对照表 SET 效期=J.效期 from 产品入库单 AS J WHERE 效期对照表.货号=j.物料编号 and 效期对照表.批号=j.批号 and j.记帐人=@记帐人
  1236. delete from 产品入库单 WHERE 记帐人=@记帐人
  1237. commit
  1238. GO
  1239. SET QUOTED_IDENTIFIER OFF 
  1240. GO
  1241. SET ANSI_NULLS ON 
  1242. GO
  1243. SET QUOTED_IDENTIFIER ON 
  1244. GO
  1245. SET ANSI_NULLS ON 
  1246. GO
  1247. CREATE PROCEDURE sf_mps主生产计划审核 @记帐人 char(10)=null
  1248. AS
  1249. begin transaction
  1250. update 临时资源负荷报表 set 负荷=负荷-aa.新负荷 from
  1251. (select a.资源编号,a.年份,a.计划期,a.新负荷 from 
  1252. (select xhde.资源编号,zsc.年份,zsc.计划期,zsc.MPS数量*xhde.资源需求量/生产批量 as 新负荷 from 主生产计划 as zsc,资源消耗定额 as xhde,选择记帐记录表 as xzjz
  1253.   where zsc.审核人=@记帐人  and (zsc.状态='通过' or zsc.状态='不通过') and zsc.物料编号=xhde.物料编号 and xzjz.记帐人=@记帐人 and xzjz.操作文件名='mps3审主生产计划' 
  1254. and convert(varchar(50),zsc.内部编号)=xzjz.标识字段1) as a ) as aa
  1255. where 临时资源负荷报表.资源编号=aa.资源编号 and 临时资源负荷报表.年份=aa.年份 and 临时资源负荷报表.计划期=aa.计划期
  1256. delete from 临时资源负荷报表 where 负荷=0
  1257. insert into 资源负荷报表(资源编号,年份,计划期) 
  1258. select a.资源编号,a.年份,a.计划期 from 
  1259. (select xhde.资源编号,zsc.年份,zsc.计划期 from 主生产计划 as zsc,资源消耗定额 as xhde,选择记帐记录表 as xzjz
  1260.   where zsc.审核人=@记帐人 and zsc.状态='通过' and zsc.物料编号=xhde.物料编号 and xzjz.记帐人=@记帐人 and xzjz.操作文件名='mps3审主生产计划' 
  1261. and convert(varchar(50),zsc.内部编号)=xzjz.标识字段1) as a left join 资源负荷报表 as b
  1262. on a.资源编号=b.资源编号 and a.年份=b.年份 and a.计划期=b.计划期 where b.资源编号 is null
  1263. update 资源负荷报表 set 负荷=负荷+aa.新负荷 from
  1264. (select a.资源编号,a.年份,a.计划期,a.新负荷 from 
  1265. (select xhde.资源编号,zsc.年份,zsc.计划期,zsc.MPS数量*xhde.资源需求量/生产批量 as 新负荷 from 主生产计划 as zsc,资源消耗定额 as xhde,选择记帐记录表 as xzjz
  1266.   where zsc.审核人=@记帐人  and zsc.状态='通过'and zsc.物料编号=xhde.物料编号 and xzjz.记帐人=@记帐人 and xzjz.操作文件名='mps3审主生产计划' 
  1267. and convert(varchar(50),zsc.内部编号)=xzjz.标识字段1) as a ) as aa
  1268. where 资源负荷报表.资源编号=aa.资源编号 and 资源负荷报表.年份=aa.年份 and 资源负荷报表.计划期=aa.计划期
  1269. update 主生产计划 set 状态='已审' from 主生产计划 as zsc,选择记帐记录表 as xzjz where zsc.审核人=@记帐人  and zsc.状态='通过' 
  1270. and xzjz.记帐人=@记帐人 and xzjz.操作文件名='mps3审主生产计划' and convert(varchar(50),zsc.内部编号)=xzjz.标识字段1
  1271. insert into 生产订单(MPS编号,物料编号,年份,计划期,数量,要求完成日期,记帐人,记帐日期,修改标记,状态,备注)
  1272. select zsc.编号,zsc.物料编号,zsc.年份,zsc.计划期,zsc.MPS数量,zsc.结束日期,zsc.审核人,zsc.审核日期,'1','填写','由主生产计划生成'
  1273.  from 主生产计划 as zsc,选择记帐记录表 as xzjz where zsc.审核人=@记帐人 
  1274. and zsc.状态='已审'and xzjz.记帐人=@记帐人 and xzjz.操作文件名='mps3审主生产计划' and convert(varchar(50),zsc.内部编号)=xzjz.标识字段1
  1275. insert into 主生产计划历史 (编号,物料编号,年份,计划期,开始日期,结束日期,期初库存,需求数量,MPS数量,生产单数量,预计库存,记帐人,修改日期,修改标记,
  1276.   审核人,审核日期,接收登记,状态,备注)
  1277. select zsc.编号,zsc.物料编号,zsc.年份,zsc.计划期,zsc.开始日期,zsc.结束日期,zsc.期初库存,zsc.需求数量,zsc.MPS数量,zsc.生产单数量,zsc.预计库存,zsc.记帐人,zsc.修改日期,zsc.修改标记,
  1278.   zsc.审核人,zsc.审核日期,zsc.接收登记,zsc.状态,zsc.备注 from 主生产计划 as zsc,选择记帐记录表 as xzjz where zsc.审核人=@记帐人 
  1279. and zsc.状态='已审'and xzjz.记帐人=@记帐人 and xzjz.操作文件名='mps3审主生产计划' and convert(varchar(50),zsc.内部编号)=xzjz.标识字段1
  1280. delete from 主生产计划 where 记帐人=@记帐人 and 状态='已审'
  1281. update 主生产计划 set 状态='返回' from 主生产计划 as zsc,选择记帐记录表 as xzjz where zsc.审核人=@记帐人  and zsc.状态='不通过' 
  1282. and xzjz.记帐人=@记帐人 and xzjz.操作文件名='mps3审主生产计划' and convert(varchar(50),zsc.内部编号)=xzjz.标识字段1
  1283. commit
  1284. GO
  1285. SET QUOTED_IDENTIFIER OFF 
  1286. GO
  1287. SET ANSI_NULLS ON 
  1288. GO
  1289. SET QUOTED_IDENTIFIER ON 
  1290. GO
  1291. SET ANSI_NULLS ON 
  1292. GO
  1293. CREATE PROCEDURE sf_mps主生产计划预排 @记帐人 char(10)=null
  1294. AS
  1295. begin transaction
  1296. /* declare @wlbh char(14),@nf int,@jhq int,@mpssl float
  1297. declare mycursor cursor for select 物料编号,年份,计划期,MPS数量 from 主生产计划 where 记帐人=@记帐人
  1298. open mycursor
  1299. fetch next from mycursor into @wlbh,@nf,@jhq,@mpssl
  1300. while ( @@fetch_status=0 )
  1301. begin
  1302. --select @edscl=a.额定工时*b.生产批量/b.资源需求量 from 资源清单 as a,资源消耗定额 as b where a.编号=b.资源编号 and b.物料编号=@wlbh
  1303. insert into 资源负荷报表 (资源编号,年份,计划期,负荷) 
  1304. select 资源编号,@nf,@jhq,@mpssl*资源需求量/生产批量 from 资源消耗定额 where 物料编号=@wlbh
  1305. fetch next from mycursor into @wlbh,@nf,@jhq,@mpssl
  1306. end
  1307. close mycursor
  1308. deallocate mycursor
  1309. ---不用游标
  1310. insert into 资源负荷报表(资源编号,年份,计划期) 
  1311. select a.资源编号,a.年份,a.计划期 from 
  1312. (select xhde.资源编号,zsc.年份,zsc.计划期 from 主生产计划 as zsc,资源消耗定额 as xhde
  1313.   where zsc.记帐人=@记帐人 and zsc.物料编号=xhde.物料编号) as a left join 资源负荷报表 as b
  1314. on a.资源编号=b.资源编号 and a.年份=b.年份 and a.计划期=b.计划期 where b.资源编号 is null
  1315. update 资源负荷报表 set 负荷=负荷+aa.新负荷 from
  1316. (select a.资源编号,a.年份,a.计划期,a.新负荷 from 
  1317. (select xhde.资源编号,zsc.年份,zsc.计划期,zsc.MPS数量*xhde.资源需求量/生产批量 as 新负荷 from 主生产计划 as zsc,资源消耗定额 as xhde
  1318.   where zsc.记帐人=@记帐人 and zsc.物料编号=xhde.物料编号) as a ) as aa
  1319. where 资源负荷报表.资源编号=aa.资源编号 and 资源负荷报表.年份=aa.年份 and 资源负荷报表.计划期=aa.计划期
  1320. */
  1321. declare @maxid INT
  1322. DECLARE @IDCHAR CHAR(14)
  1323. declare @year int 
  1324. select @year = datepart(YEAR,getdate())
  1325. --以下程序,从OBJTABLE中找到编号,并将编号附给销售-------------------
  1326. select @IDCHAR = max(编号)from 主生产计划预排历史
  1327. if @IDCHAR is null --没找到,表明没有记录
  1328. begin
  1329. select @maxid = 1
  1330. end
  1331. ELSE --找到最大编号
  1332. BEGIN
  1333. select @maxid = convert(int,SUBSTRING(@IDCHAR,8,6))+1
  1334. IF @YEAR > CONVERT(INT,SUBSTRING(@IDCHAR,4,4)) 
  1335. SELECT @MAXID = 1 
  1336. ELSE IF (@YEAR < CONVERT(INT,SUBSTRING(@IDCHAR,4,4)) )
  1337. BEGIN
  1338. RAISERROR('机器年度比编号中的年度早,出错',16,10) --机器年度比编号中的年度早,出错
  1339. END
  1340. END
  1341. declare mycursor cursor for select zsc.内部编号 FROM 主生产计划 as zsc,选择记帐记录表 as xzjz where zsc.记帐人=@记帐人 
  1342. and zsc.状态='填写' and xzjz.记帐人=@记帐人 and xzjz.操作文件名='mps3填主生产计划' and convert(varchar(50),zsc.内部编号)=xzjz.标识字段1 order by zsc.内部编号
  1343. OPEN MYCURSOR
  1344. declare @id int
  1345. declare @bh char(14)
  1346. FETCH next from  mycursor into @id
  1347. WHILE (@@FETCH_STATUS = 0 )
  1348. BEGIN
  1349. SELECT @IDCHAR = CONVERT(CHAR(6),@maxid)
  1350. update 主生产计划 SET 编号='MPS'+convert(char(4),@YEAR)
  1351. +REPLICATE('0',6-LEN(@IDCHAR))+@IDCHAR
  1352. where 内部编号=@id--current of mycursor
  1353. select @maxid = @maxid+1
  1354. FETCH next from  mycursor into @id
  1355. END
  1356. close mycursor
  1357. deallocate mycursor
  1358. insert into 临时资源负荷报表(资源编号,年份,计划期) 
  1359. select a.资源编号,a.年份,a.计划期 from 
  1360. (select xhde.资源编号,zsc.年份,zsc.计划期 from 主生产计划 as zsc,资源消耗定额 as xhde,选择记帐记录表 as xzjz
  1361.   where zsc.记帐人=@记帐人 and zsc.状态='填写' and zsc.物料编号=xhde.物料编号 and xzjz.记帐人=@记帐人 and xzjz.操作文件名='mps3填主生产计划' 
  1362. and convert(varchar(50),zsc.内部编号)=xzjz.标识字段1) as a left join 临时资源负荷报表 as b
  1363. on a.资源编号=b.资源编号 and a.年份=b.年份 and a.计划期=b.计划期 where b.资源编号 is null
  1364. update 临时资源负荷报表 set 负荷=负荷+aa.新负荷 from
  1365. (select a.资源编号,a.年份,a.计划期,a.新负荷 from 
  1366. (select xhde.资源编号,zsc.年份,zsc.计划期,zsc.MPS数量*xhde.资源需求量/生产批量 as 新负荷 from 主生产计划 as zsc,资源消耗定额 as xhde,选择记帐记录表 as xzjz
  1367.   where zsc.记帐人=@记帐人  and zsc.状态='填写'and zsc.物料编号=xhde.物料编号 and xzjz.记帐人=@记帐人 and xzjz.操作文件名='mps3填主生产计划' 
  1368. and convert(varchar(50),zsc.内部编号)=xzjz.标识字段1) as a ) as aa
  1369. where 临时资源负荷报表.资源编号=aa.资源编号 and 临时资源负荷报表.年份=aa.年份 and 临时资源负荷报表.计划期=aa.计划期
  1370. INSERT INTO 主生产计划预排历史(物料编号,编号,年份,计划期,开始日期,结束日期,期初库存,需求数量, MPS数量,生产单数量,预计库存,记帐人,修改日期,修改标记,审核人,审核日期,接收登记,状态,备注 
  1371. ) SELECT zsc.物料编号,zsc.编号,zsc.年份,zsc.计划期,zsc.开始日期,zsc.结束日期,zsc.期初库存,zsc.需求数量,
  1372. zsc.MPS数量,zsc.生产单数量,zsc.预计库存,zsc.记帐人,zsc.修改日期,zsc.修改标记,zsc.审核人,zsc.审核日期,zsc.接收登记,zsc.状态,zsc.备注 
  1373. FROM 主生产计划 as zsc,选择记帐记录表 as xzjz where zsc.记帐人=@记帐人 and zsc.状态='填写' and xzjz.记帐人=@记帐人 
  1374. and xzjz.操作文件名='mps3填主生产计划' and convert(varchar(50),zsc.内部编号)=xzjz.标识字段1
  1375. update 主生产计划 set 状态='待审' from 主生产计划 as zsc,选择记帐记录表 as xzjz where zsc.记帐人=@记帐人  and zsc.状态='填写' 
  1376. and xzjz.记帐人=@记帐人 and xzjz.操作文件名='mps3填主生产计划' and convert(varchar(50),zsc.内部编号)=xzjz.标识字段1
  1377. commit
  1378. GO
  1379. SET QUOTED_IDENTIFIER OFF 
  1380. GO
  1381. SET ANSI_NULLS ON 
  1382. GO
  1383. SET QUOTED_IDENTIFIER ON 
  1384. GO
  1385. SET ANSI_NULLS ON 
  1386. GO
  1387. CREATE PROCEDURE sf_mps填需求计划 @记帐人 char(10)=null
  1388. AS
  1389. begin transaction
  1390. declare @maxid INT
  1391. DECLARE @IDCHAR CHAR(14)
  1392. declare @year int 
  1393. select @year = datepart(YEAR,getdate())
  1394. --以下程序,从OBJTABLE中找到编号,并将编号附给销售-------------------
  1395. select @IDCHAR = max(编号)from 主需求计划历史
  1396. if @IDCHAR is null --没找到,表明没有记录
  1397. begin
  1398. select @maxid = 1
  1399. end
  1400. ELSE --找到最大编号
  1401. BEGIN
  1402. select @maxid = convert(int,SUBSTRING(@IDCHAR,6,6))+1
  1403. IF @YEAR > CONVERT(INT,SUBSTRING(@IDCHAR,2,4)) 
  1404. SELECT @MAXID = 1 
  1405. ELSE IF (@YEAR < CONVERT(INT,SUBSTRING(@IDCHAR,2,4)) )
  1406. BEGIN
  1407. RAISERROR('机器年度比编号中的年度早,出错',16,10) --机器年度比编号中的年度早,出错
  1408. END
  1409. END
  1410. declare mycursor cursor for select zsc.内部编号 FROM 主需求计划 as zsc,选择记帐记录表 as xzjz where zsc.记帐人=@记帐人 
  1411. and zsc.状态='填写' and xzjz.记帐人=@记帐人 and xzjz.操作文件名='mps2产品需求计划' and convert(varchar(50),zsc.内部编号)=xzjz.标识字段1 order by zsc.内部编号
  1412. OPEN MYCURSOR
  1413. declare @id int
  1414. declare @bh char(14)
  1415. FETCH next from  mycursor into @id
  1416. WHILE (@@FETCH_STATUS = 0 )
  1417. BEGIN
  1418. SELECT @IDCHAR = CONVERT(CHAR(6),@maxid)
  1419. update 主需求计划 SET 编号='需'+convert(char(4),@YEAR)
  1420. +REPLICATE('0',6-LEN(@IDCHAR))+@IDCHAR
  1421. where 内部编号=@id--current of mycursor
  1422. select @maxid = @maxid+1
  1423. FETCH next from  mycursor into @id
  1424. END
  1425. close mycursor
  1426. deallocate mycursor
  1427. insert into 主生产计划(物料编号,年份,计划期,开始日期,结束日期,需求数量,记帐人,修改日期,修改标记,状态,备注)
  1428. select zsc.物料编号,zsc.年份,zsc.计划期,zsc.开始日期,zsc.结束日期,zsc.需求数量,@记帐人,datepart(yyyy,getdate())*10000+datepart(mm,getdate())*100+datepart(dd,getdate()),
  1429. '1','填写','由需求计划转入' from 主需求计划 as zsc,选择记帐记录表 as xzjz where zsc.记帐人=@记帐人 
  1430. and zsc.状态='填写' and xzjz.记帐人=@记帐人 and xzjz.操作文件名='mps2产品需求计划' and convert(varchar(50),zsc.内部编号)=xzjz.标识字段1 
  1431. insert into 主需求计划历史(编号,物料编号,年份,计划期,开始日期,结束日期,需求数量,记帐人,修改日期,修改标记,接收登记,状态,备注)
  1432. select zsc.编号,zsc.物料编号,zsc.年份,zsc.计划期,zsc.开始日期,zsc.结束日期,zsc.需求数量,zsc.记帐人,zsc.修改日期,zsc.修改标记,
  1433. zsc.接收登记,zsc.状态,zsc.备注 from 主需求计划 as zsc,选择记帐记录表 as xzjz where zsc.记帐人=@记帐人 
  1434. and zsc.状态='填写' and xzjz.记帐人=@记帐人 and xzjz.操作文件名='mps2产品需求计划' and convert(varchar(50),zsc.内部编号)=xzjz.标识字段1 
  1435. update 主需求计划 set 修改标记='2' from 主需求计划 as zsc,选择记帐记录表 as xzjz where zsc.记帐人=@记帐人 
  1436. and zsc.状态='填写' and xzjz.记帐人=@记帐人 and xzjz.操作文件名='mps2产品需求计划' and convert(varchar(50),zsc.内部编号)=xzjz.标识字段1 
  1437. delete from 主需求计划 where 修改标记='2' and 记帐人=@记帐人
  1438. commit
  1439. GO
  1440. SET QUOTED_IDENTIFIER OFF 
  1441. GO
  1442. SET ANSI_NULLS ON 
  1443. GO
  1444. SET QUOTED_IDENTIFIER ON 
  1445. GO
  1446. SET ANSI_NULLS OFF 
  1447. GO
  1448. CREATE PROCEDURE sf_mrpMpsTest
  1449. (@父项编号 char(14),@子项编号 char(14),@年份  int,@计划期 int, @考虑损耗 bit=1,@考虑提前期 bit=1)
  1450.  AS
  1451. --用主生产计划的数量计算其下一级的毛需求
  1452. begin tran
  1453.  declare   @生产数量 decimal(18,4),
  1454.                 @子项数量 decimal(18,4),
  1455.                 @损耗率     decimal(6,5),
  1456.                 @提前期     int,
  1457.                 @上一年份 int,
  1458.                 @上一计划期  int 
  1459.   select      @生产数量=mps数量
  1460.     from      主生产计划
  1461.    where    物料编号   =  @父项编号 and 年份=@年份 and  计划期=@计划期
  1462.    
  1463.   select    @子项数量= 需要数量,
  1464.                 @损耗率   =  (case @考虑损耗  when 1 then 损耗率 else 0 end)
  1465.    from      物料清单
  1466.    where   父项编号   = @父项编号  and 物料编号=@子项编号   
  1467.   if (@考虑提前期=1) 
  1468.          select   @提前期=isnull(进货提前期,0)  from 物料主文件 where 物料编号=@子项编号
  1469.    else
  1470.          select  @提前期=0
  1471.   if @计划期-@提前期<=0
  1472.   begin
  1473.              select      @上一年份=@年份-1
  1474.              select      @上一计划期=(select max(计划期) from 工厂日历 where 年份=@上一年份)-(@提前期-@计划期)
  1475.   end
  1476.   else
  1477.   begin
  1478.             select      @上一年份=@年份
  1479.             select      @上一计划期=@计划期-@提前期
  1480.   end 
  1481.   
  1482.   update   mrp试算
  1483.     set       毛需求=isnull(毛需求,0)+isnull(@生产数量,0)*isnull(@子项数量,0)/(1-isnull(@损耗率,0))
  1484.    where   物料编号= @子项编号 and 年份=@上一年份 and  计划期=@上一计划期
  1485. commit
  1486. GO
  1487. SET QUOTED_IDENTIFIER OFF 
  1488. GO
  1489. SET ANSI_NULLS ON 
  1490. GO
  1491. SET QUOTED_IDENTIFIER ON 
  1492. GO
  1493. SET ANSI_NULLS OFF 
  1494. GO
  1495. CREATE procedure sf_mrpTest子项毛需求
  1496. (@父项编号 char(14),@子项编号 char(14),@年份 int,@计划期 int,@考虑损耗 bit=1)
  1497. as
  1498. begin tran
  1499.  declare   @计划投入 decimal(18,4),
  1500.                 @子项数量 decimal(18,4),
  1501.                 @损耗率     decimal(6,5)
  1502.  select      @计划投入=计划投入
  1503.     from      mrp试算
  1504.    where    物料编号=@父项编号 and 年份=@年份 and  计划期=@计划期
  1505.    
  1506.   select   @子项数量=需要数量,
  1507.               @损耗率= (case @考虑损耗  when 1 then 损耗率 else 0 end)
  1508.    from     物料清单
  1509.    where  父项编号=@父项编号  and 物料编号=@子项编号   
  1510.   update  mrp试算
  1511.     set      毛需求=isnull(毛需求,0)+isnull(@计划投入,0)*isnull(@子项数量,0)/(1-isnull(@损耗率,0))
  1512.    where  物料编号=@子项编号 and 年份=@年份 and  计划期=@计划期
  1513. commit
  1514. GO
  1515. SET QUOTED_IDENTIFIER OFF 
  1516. GO
  1517. SET ANSI_NULLS ON 
  1518. GO
  1519. SET QUOTED_IDENTIFIER ON 
  1520. GO
  1521. SET ANSI_NULLS OFF 
  1522. GO
  1523. CREATE PROCEDURE   sf_mrpTest计算
  1524.    (@物料编号 char(14),@年份 int,@计划期 int,@First int,@考虑库存等  bit=1,@考虑提前期 bit=1)
  1525.  
  1526.  AS
  1527. begin tran
  1528.          declare @预计采购  decimal(18,4),
  1529.                       @预计生产  decimal(18,4),
  1530.                       @预计外协  decimal(18,4),
  1531.                       @预计领用  decimal(18,4),
  1532.                       @预计出库  decimal(18,4),
  1533.                       @预计入库  decimal(18,4),
  1534.                       @期初库存  decimal(18,4), 
  1535.                       @毛需求      decimal(18,4),
  1536.                       @净需求      decimal(18,4),
  1537.                       @批量          decimal(18,4),
  1538.                       @提前期      int,
  1539.                       @计划产出  decimal(18,4),
  1540.                       @计划投入  decimal(18,4),
  1541.                       @预计库存  decimal(18,4),
  1542.                       @安全库存  decimal(18,4),
  1543.                       @上一年份          int,
  1544.                       @上一计划期      int,
  1545.                       @计划类别     char(5)
  1546.    if (@考虑库存等=1)                            
  1547.     begin   
  1548.            
  1549. if (@First=0)
  1550.              begin
  1551.                           select    @期初库存=库存数量
  1552.                             from     库存库
  1553.                           where    货号=@物料编号
  1554.                           select @计划类别=计划类别  from 物料主文件 where 物料编号=@物料编号
  1555.              if(@计划类别='wg')
  1556.                           begin  
  1557.                                 select    @预计采购=sum(剩余数量)
  1558.                                   from      采购订单
  1559.                                   where   物料编号=@物料编号  and  (年份<=@年份  or (年份=@年份 and 计划期<=@计划期))  
  1560.                          end 
  1561.                          if(@计划类别='bcp')
  1562.                          begin  
  1563.                                 select     @预计生产=sum(剩余数量)
  1564.                                   from      生产订单
  1565.                                   where   物料编号=@物料编号  and  (年份<=@年份  or (年份=@年份 and 计划期<=@计划期)) 
  1566.                          end 
  1567.                        /*
  1568.                         if(@计划类别='wx')
  1569.                         begin  
  1570.                               select    @预计外协=sum(剩余数量)
  1571.                                 from      外协订单
  1572.                                 where   物料编号=@物料编号  and  (年份<=@年份  or (年份=@年份 and 计划期<=@计划期))  
  1573.                        end 
  1574.                        select    @预计领用=sum(剩余数量)
  1575.                         from       生产领料单
  1576.                         where   物料编号=@物料编号  and  (年份<=@年份  or (年份=@年份 and 计划期<=@计划期)) 
  1577.                       */
  1578.              end
  1579.              else
  1580.       begin
  1581.                              if @计划期=1
  1582.                              begin
  1583.                                        select      @上一年份=@年份-1
  1584.                                        select      @上一计划期=(select max(计划期) from 工厂日历 where 年份=@上一年份)
  1585.                               end
  1586.                               else
  1587.                               begin
  1588.                                       select      @上一年份=@年份
  1589.                                       select      @上一计划期=@计划期-1
  1590.                                end   
  1591. Select    @期初库存= 预计库存
  1592.                              from     mrp试算
  1593.                            where    物料编号=@物料编号  and  年份=@上一年份  and 计划期=@上一计划期
  1594.           
  1595.                           select @计划类别=计划类别  from 物料主文件 where 物料编号=@物料编号
  1596.              if(@计划类别='wg')
  1597.                           begin  
  1598.                                 select    @预计采购=sum(剩余数量)
  1599.                                   from      采购订单
  1600.                                  where    物料编号=@物料编号  and  年份=@年份  and 计划期=@计划期 
  1601.                          end 
  1602.                          if(@计划类别='bcp')
  1603.                          begin  
  1604.                                 select     @预计生产=sum(剩余数量)
  1605.                                   from      生产订单
  1606.                                  where    物料编号=@物料编号  and  年份=@年份  and 计划期=@计划期 
  1607.                          end 
  1608.                        /*
  1609.                         if(@计划类别='wx')
  1610.                         begin  
  1611.                               select    @预计外协=sum(剩余数量)
  1612.                                 from      外协订单
  1613.                                where    物料编号=@物料编号  and  年份=@年份  and 计划期=@计划期 
  1614.                        end 
  1615.                        select    @预计领用=sum(剩余数量)
  1616.                         from       生产领料单
  1617.                         where    物料编号=@物料编号  and  年份=@年份  and 计划期=@计划期 
  1618.                       */
  1619.           end
  1620.           select  @安全库存=最低库存  from 物料主文件 where 物料编号=@物料编号
  1621. end
  1622.           select  @预计出库=isnull(@预计领用,0)
  1623.           select  @预计入库=isnull(@预计采购,0)+isnull(@预计生产,0)+isnull(@预计外协,0)
  1624.           select  @净需求=isnull(毛需求,0)-(isnull(@期初库存,0)-isnull(@安全库存,0)+isnull(@预计入库,0)-isnull(@预计出库,0))
  1625.                          from     mrp试算   where    物料编号=@物料编号  and  年份=@年份  and 计划期=@计划期 
  1626.           if   ( @净需求<0)      select   @净需求=0
  1627.           if   ( @净需求>0) 
  1628.           begin
  1629.                   select  @批量=批量  from 物料主文件 where 物料编号=@物料编号
  1630.                    if (isnull(@批量,0)>0) 
  1631.                          select   @计划产出=ceiling(@净需求/@批量)*@批量
  1632.                     else
  1633.                           select   @计划产出=@净需求
  1634.                      if (@考虑提前期=1)
  1635.                              select   @提前期=isnull(进货提前期,0)  from 物料主文件 where 物料编号=@物料编号
  1636.                    else
  1637.                              select   @提前期=0
  1638.                    if @计划期-@提前期<=0
  1639.                    begin
  1640.                              select      @上一年份=@年份-1
  1641.                              select      @上一计划期=(select max(计划期) from 工厂日历 where 年份=@上一年份)-(@提前期-@计划期)
  1642.                    end
  1643.                    else
  1644.                    begin
  1645.                             select      @上一年份=@年份
  1646.                             select      @上一计划期=@计划期-@提前期
  1647.                    end 
  1648.   
  1649.                    if ( not exists(select * from mrp试算 where  物料编号=@物料编号  and  年份=@上一年份  and 计划期=@上一计划期)) 
  1650.                    begin
  1651.                            /*
  1652.                              select      @上一年份=      min(年份)
  1653.                              from        mrp试算 
  1654.                              where     物料编号=@物料编号
  1655.                             
  1656.                             select     @上一计划期=  min(计划期)
  1657.                              from       mrp试算
  1658.                            where     物料编号=@物料编号   and 年份=@年份
  1659.                          */
  1660.                          select @计划产出=0
  1661.                    end
  1662.                    else
  1663.                    begin
  1664.                              update   mrp试算
  1665.                                  set     计划投入=@计划产出
  1666.                              where    物料编号=@物料编号  and  年份=@上一年份  and 计划期=@上一计划期
  1667.                    end
  1668.          end
  1669.          update   mrp试算
  1670.               set    期初库存=isnull(@期初库存,0) ,
  1671.                        预计入库=isnull(@预计入库,0),
  1672.                        预计出库=isnull(@预计出库,0),
  1673.                            净需求=isnull(@净需求,0),
  1674.                        计划产出=isnull(@计划产出,0),
  1675.                        预计库存=isnull(@期初库存,0)+isnull(@预计入库,0)-isnull(@预计出库,0)+isnull(@计划产出,0)-isnull(毛需求,0)
  1676.          where     物料编号=@物料编号 and   年份=@年份  and 计划期=@计划期
  1677. commit
  1678. GO
  1679. SET QUOTED_IDENTIFIER OFF 
  1680. GO
  1681. SET ANSI_NULLS ON 
  1682. GO
  1683. SET QUOTED_IDENTIFIER ON 
  1684. GO
  1685. SET ANSI_NULLS OFF 
  1686. GO
  1687. CREATE PROCEDURE sf_mrpmps
  1688. (@父项编号 char(14),@子项编号 char(14),@年份  int,@计划期 int, @考虑损耗 bit=1,@考虑提前期 bit=1)
  1689.  AS
  1690. --用主生产计划的数量计算其下一级的毛需求
  1691. begin tran
  1692.  declare   @生产数量      decimal(18,4),
  1693.                 @子项数量      decimal(18,4),
  1694.                 @损耗率          decimal(6,5),
  1695.                 @提前期          int,
  1696.                 @上一年份      int,
  1697.                 @上一计划期  int 
  1698.   select      @生产数量=mps数量
  1699.     from      主生产计划历史
  1700.    where    物料编号   =  @父项编号 and 年份=@年份 and  计划期=@计划期
  1701.    
  1702.   select    @子项数量= 需要数量,
  1703.                 @损耗率   = (case @考虑损耗  when 1 then 损耗率 else 0 end)
  1704.    from      物料清单
  1705.    where   父项编号   = @父项编号  and 物料编号=@子项编号   
  1706.  
  1707.    if (@考虑提前期=1) 
  1708.          select   @提前期=isnull(进货提前期,0)  from 物料主文件 where 物料编号=@子项编号
  1709.    else
  1710.          select  @提前期=0
  1711.   if @计划期-@提前期<=0
  1712.   begin
  1713.              select      @上一年份=@年份-1
  1714.              select      @上一计划期=(select max(计划期) from 工厂日历 where 年份=@上一年份)-(@提前期-@计划期)
  1715.   end
  1716.   else
  1717.   begin
  1718.             select      @上一年份=@年份
  1719.             select      @上一计划期=@计划期-@提前期
  1720.   end 
  1721.   
  1722.   update   mrpcalcd
  1723.     set       毛需求=isnull(毛需求,0)+isnull(@生产数量,0)*isnull(@子项数量,0)/(1-  isnull(@损耗率,0)  )
  1724.    where   物料编号= @子项编号 and 年份=@上一年份 and  计划期=@上一计划期
  1725. commit
  1726. GO
  1727. SET QUOTED_IDENTIFIER OFF 
  1728. GO
  1729. SET ANSI_NULLS ON 
  1730. GO
  1731. SET QUOTED_IDENTIFIER ON 
  1732. GO
  1733. SET ANSI_NULLS OFF 
  1734. GO
  1735. CREATE procedure sf_mrp子项毛需求
  1736. (@父项编号 char(14),@子项编号 char(14),@年份 int,@计划期 int,@考虑损耗 bit=1)
  1737. as
  1738. begin tran
  1739.  declare   @计划投入 decimal(18,4),
  1740.                 @子项数量 decimal(18,4),
  1741.                 @损耗率     decimal(6,5)
  1742.  select      @计划投入=计划投入
  1743.     from      mrpcalcd
  1744.    where    物料编号=@父项编号 and 年份=@年份 and  计划期=@计划期
  1745.    
  1746.   select    @子项数量=需要数量,
  1747.                @损耗率   = (case @考虑损耗  when 1 then 损耗率 else 0 end)
  1748.    from      物料清单
  1749.    where  父项编号=@父项编号  and 物料编号=@子项编号   
  1750.   update  mrpcalcd
  1751.     set      毛需求=isnull(毛需求,0)+isnull(@计划投入,0)*isnull(@子项数量,0)/(1-  isnull(@损耗率,0)  )
  1752.    where  物料编号=@子项编号 and 年份=@年份 and  计划期=@计划期
  1753. commit
  1754. GO
  1755. SET QUOTED_IDENTIFIER OFF 
  1756. GO
  1757. SET ANSI_NULLS ON 
  1758. GO
  1759. SET QUOTED_IDENTIFIER ON 
  1760. GO
  1761. SET ANSI_NULLS ON 
  1762. GO
  1763. CREATE PROCEDURE sf_mrp生产件资源负荷
  1764. AS
  1765. begin transaction
  1766. insert into 生产件资源负荷报表(资源编号,年份,计划期) 
  1767. select a.资源编号,a.年份,a.计划期 from 
  1768. (select xhde.资源编号,zsc.年份,zsc.计划期 from mrp历史 as zsc,资源消耗定额 as xhde
  1769.   where zsc.能力计算标记='0' and zsc.物料编号=xhde.物料编号) as a left join 生产件资源负荷报表 as b
  1770. on a.资源编号=b.资源编号 and a.年份=b.年份 and a.计划期=b.计划期 where b.资源编号 is null
  1771. update 生产件资源负荷报表 set 负荷=负荷+aa.新负荷 from
  1772. (select a.资源编号,a.年份,a.计划期,a.新负荷 from 
  1773. (select xhde.资源编号,zsc.年份,zsc.计划期,zsc.净需求*xhde.资源需求量/生产批量 as 新负荷 from mrp历史 as zsc,资源消耗定额 as xhde
  1774.   where zsc.能力计算标记='0' and zsc.物料编号=xhde.物料编号) as a) as aa
  1775. where 生产件资源负荷报表.资源编号=aa.资源编号 and 生产件资源负荷报表.年份=aa.年份 and 生产件资源负荷报表.计划期=aa.计划期
  1776. update mrp历史 set 能力计算标记='1'
  1777. commit
  1778. GO
  1779. SET QUOTED_IDENTIFIER OFF 
  1780. GO
  1781. SET ANSI_NULLS ON 
  1782. GO
  1783. SET QUOTED_IDENTIFIER ON 
  1784. GO
  1785. SET ANSI_NULLS OFF 
  1786. GO
  1787. CREATE PROCEDURE   sf_mrp计算
  1788.    (@物料编号 char(14),@年份 int,@计划期 int,@First int,@考虑库存等  bit=1,@考虑提前期 bit=1)
  1789.  AS
  1790. begin tran
  1791.          declare @预计采购  decimal(18,4),
  1792.                       @预计生产  decimal(18,4),
  1793.                       @预计外协  decimal(18,4),
  1794.                       @预计领用  decimal(18,4),
  1795.                       @预计出库  decimal(18,4),
  1796.                       @预计入库  decimal(18,4),
  1797.                       @期初库存  decimal(18,4), 
  1798.                       @毛需求      decimal(18,4),
  1799.                       @净需求      decimal(18,4),
  1800.                       @批量          decimal(18,4),
  1801.                       @提前期      int,
  1802.                       @计划产出  decimal(18,4),
  1803.                       @计划投入  decimal(18,4),
  1804.                       @预计库存  decimal(18,4),
  1805.                       @安全库存  decimal(18,4),
  1806.                       @上一年份          int,
  1807.                       @上一计划期      int,
  1808.                       @计划类别     char(5)
  1809.    
  1810.     if (@考虑库存等=1)                            
  1811.     begin   
  1812. if (@First=0)
  1813.              begin
  1814.                       
  1815.                     
  1816.                               select    @期初库存=库存数量
  1817.                                from      库存库
  1818.                               where   货号=@物料编号
  1819.                         
  1820.                           select @计划类别=计划类别  from 物料主文件 where 物料编号=@物料编号
  1821.              if(@计划类别='wg')
  1822.                           begin  
  1823.                                 select    @预计采购=sum(剩余数量)
  1824.                                   from      采购订单
  1825.                                   where   物料编号=@物料编号  and  (年份<=@年份  or (年份=@年份 and 计划期<=@计划期))  
  1826.                          end 
  1827.                          if(@计划类别='bcp')
  1828.                          begin  
  1829.                                 select     @预计生产=sum(剩余数量)
  1830.                                   from      生产订单
  1831.                                   where   物料编号=@物料编号  and  (年份<=@年份  or (年份=@年份 and 计划期<=@计划期)) 
  1832.                          end 
  1833.                        /*
  1834.                         if(@计划类别='wx')
  1835.                         begin  
  1836.                               select    @预计外协=sum(剩余数量)
  1837.                                 from      外协订单
  1838.                                 where   物料编号=@物料编号  and  (年份<=@年份  or (年份=@年份 and 计划期<=@计划期))  
  1839.                        end 
  1840.                        select    @预计领用=sum(剩余数量)
  1841.                         from       生产领料单
  1842.                         where   物料编号=@物料编号  and  (年份<=@年份  or (年份=@年份 and 计划期<=@计划期)) 
  1843.                       */
  1844. end
  1845.              else
  1846.       begin
  1847.                             if @计划期=1
  1848.                             begin
  1849.                                     select      @上一年份=@年份-1
  1850.                                     select      @上一计划期=(select max(计划期) from 工厂日历 where 年份=@上一年份)
  1851.                             end
  1852.                             else
  1853.                             begin
  1854.                                     select      @上一年份=@年份
  1855.                                     select      @上一计划期=@计划期-1
  1856.                             end   
  1857. Select    @期初库存= 预计库存
  1858.                              from     mrpcalcd
  1859.                            where    物料编号=@物料编号  and  年份=@上一年份  and 计划期=@上一计划期
  1860.           
  1861.                           select @计划类别=计划类别  from 物料主文件 where 物料编号=@物料编号
  1862.              if(@计划类别='wg')
  1863.                           begin  
  1864.                                 select    @预计采购=sum(剩余数量)
  1865.                                   from      采购订单
  1866.                                  where    物料编号=@物料编号  and  年份=@年份  and 计划期=@计划期 
  1867.                          end 
  1868.                          if(@计划类别='bcp')
  1869.                          begin  
  1870.                                 select     @预计生产=sum(剩余数量)
  1871.                                   from      生产订单
  1872.                                  where    物料编号=@物料编号  and  年份=@年份  and 计划期=@计划期 
  1873.                          end 
  1874.                        /*
  1875.                         if(@计划类别='wx')
  1876.                         begin  
  1877.                               select    @预计外协=sum(剩余数量)
  1878.                                 from      外协订单
  1879.                                where    物料编号=@物料编号  and  年份=@年份  and 计划期=@计划期 
  1880.                        end 
  1881.                        select    @预计领用=sum(剩余数量)
  1882.                         from       生产领料单
  1883.                         where    物料编号=@物料编号  and  年份=@年份  and 计划期=@计划期 
  1884.                       */
  1885. end       --First=0
  1886.       
  1887.              select  @安全库存=最低库存,  @批量=批量  from 物料主文件 where 物料编号=@物料编号
  1888.  end        --考虑库存=1
  1889.           select  @预计出库=isnull(@预计领用,0)
  1890.           select  @预计入库=isnull(@预计采购,0)+isnull(@预计生产,0)+isnull(@预计外协,0)
  1891.           select  @净需求=isnull(毛需求,0)-(isnull(@期初库存,0)-isnull(@安全库存,0)+isnull(@预计入库,0)-isnull(@预计出库,0))
  1892.                          from     mrpcalcd   where    物料编号=@物料编号  and  年份=@年份  and 计划期=@计划期 
  1893.           if   ( @净需求<0)      select   @净需求=0
  1894.           if   ( @净需求>0) 
  1895.           begin
  1896.           
  1897.                    if (isnull(@批量,0)>0) 
  1898.                          select   @计划产出=ceiling(@净需求/@批量)*@批量
  1899.                     else
  1900.                           select   @计划产出=@净需求
  1901.                   
  1902.                    if (@考虑提前期=1)
  1903.                              select   @提前期=isnull(进货提前期,0)  from 物料主文件 where 物料编号=@物料编号
  1904.                    else
  1905.                              select   @提前期=0
  1906.                    if @计划期-@提前期<=0
  1907.                    begin
  1908.                              select      @上一年份=@年份-1
  1909.                              select      @上一计划期=(select max(计划期) from 工厂日历 where 年份=@上一年份)-(@提前期-@计划期)
  1910.                    end
  1911.                    else
  1912.                    begin
  1913.                             select      @上一年份=@年份
  1914.                             select      @上一计划期=@计划期-@提前期
  1915.                    end 
  1916.   
  1917.                    if ( not exists(select * from mrpcalcd where  物料编号=@物料编号  and  年份=@上一年份  and 计划期=@上一计划期)) 
  1918.                    begin
  1919.                              select @计划产出=0
  1920.                    end
  1921.                    else
  1922.                    begin
  1923.                              update   mrpcalcd
  1924.                                  set     计划投入=@计划产出
  1925.                              where    物料编号=@物料编号  and  年份=@上一年份  and 计划期=@上一计划期
  1926.                    end
  1927.          end
  1928.          update   mrpcalcd
  1929.               set    期初库存=isnull(@期初库存,0) ,
  1930.                        预计入库=isnull(@预计入库,0),
  1931.                        预计出库=isnull(@预计出库,0),
  1932.                            净需求=isnull(@净需求,0),
  1933.                        计划产出=isnull(@计划产出,0),
  1934.                        预计库存=isnull(@期初库存,0)+isnull(@预计入库,0)-isnull(@预计出库,0)+isnull(@计划产出,0)-isnull(毛需求,0)
  1935.          where     物料编号=@物料编号 and   年份=@年份  and 计划期=@计划期
  1936. commit
  1937. GO
  1938. SET QUOTED_IDENTIFIER OFF 
  1939. GO
  1940. SET ANSI_NULLS ON 
  1941. GO
  1942. SET QUOTED_IDENTIFIER ON 
  1943. GO
  1944. SET ANSI_NULLS ON 
  1945. GO
  1946. CREATE PROCEDURE sf_mrp试算生产件资源负荷
  1947. AS
  1948. begin transaction
  1949. delete from 临时生产件资源负荷报表
  1950. insert into 临时生产件资源负荷报表(资源编号,年份,计划期) 
  1951. select a.资源编号,a.年份,a.计划期 from 
  1952. (select xhde.资源编号,zsc.年份,zsc.计划期 from mrp试算 as zsc,资源消耗定额 as xhde
  1953.   where zsc.物料编号=xhde.物料编号) as a left join 临时生产件资源负荷报表 as b
  1954. on a.资源编号=b.资源编号 and a.年份=b.年份 and a.计划期=b.计划期 where b.资源编号 is null
  1955. update 临时生产件资源负荷报表 set 负荷=负荷+aa.新负荷 from
  1956. (select a.资源编号,a.年份,a.计划期,a.新负荷 from 
  1957. (select xhde.资源编号,zsc.年份,zsc.计划期,zsc.净需求*xhde.资源需求量/生产批量 as 新负荷 from mrp试算 as zsc,资源消耗定额 as xhde
  1958.   where zsc.物料编号=xhde.物料编号) as a) as aa
  1959. where 临时生产件资源负荷报表.资源编号=aa.资源编号 and 临时生产件资源负荷报表.年份=aa.年份 and 临时生产件资源负荷报表.计划期=aa.计划期
  1960. exec sf_mrp生产件资源负荷
  1961. commit
  1962. GO
  1963. SET QUOTED_IDENTIFIER OFF 
  1964. GO
  1965. SET ANSI_NULLS ON 
  1966. GO
  1967. SET QUOTED_IDENTIFIER ON 
  1968. GO
  1969. SET ANSI_NULLS ON 
  1970. GO
  1971. CREATE procedure sf_sc生成领料单 as
  1972. begin tran
  1973.        delete from 领料单temp
  1974.  
  1975.        declare mycursor cursor for
  1976.                select 年份,计划期,编号,生产部门,物料编号,数量
  1977.                  from 生产订单历史
  1978.                 where 领料单标志=0  or 领料单标志 is null 
  1979.        open mycursor
  1980.        declare @年份 int,@计划期 int ,@生产订单编号 char(14),
  1981.                @生产部门 char(10),@物料编号 char(14),@数量 decimal(10,4) 
  1982.        fetch next from  mycursor  into @年份,@计划期,@生产订单编号,@生产部门,@物料编号,@数量 
  1983.        WHILE (@@FETCH_STATUS = 0 ) 
  1984.        begin
  1985.                insert into 领料单temp  (年份,计划期,生产订单编号,领料车间,领料库房,物料编号,数量)
  1986.                select @年份,@计划期,@生产订单编号,isnull(b.领料车间,@生产部门),
  1987.                          b.领料库房,b.物料编号,@数量*b.需要数量
  1988.                from   ( select    父项编号,物料编号,需要数量,领料车间,领料库房 
  1989.                           from     物料清单
  1990.                           where    父项编号=@物料编号 
  1991.                        )     as b
  1992.                      
  1993.               update   生产订单历史
  1994.                    set    领料单标志=1
  1995.                  where  current of mycursor
  1996.               
  1997.                fetch next from  mycursor  into @年份,@计划期,@生产订单编号,@生产部门,@物料编号,@数量 
  1998.         
  1999.        end 
  2000.        close mycursor
  2001.        deallocate mycursor     
  2002.        insert into 领料单 (年份,计划期,生产订单编号,领料车间,领料库房,物料编号,申请数量,领料类别,备注)
  2003.        select              年份,计划期,生产订单编号,领料车间,领料库房,物料编号,sum(数量),'生产领用','自动生成'
  2004.        from   领料单temp
  2005.        group  by  年份,计划期,生产订单编号,领料车间,领料库房,物料编号
  2006.        order  by  年份,计划期,生产订单编号,领料车间,领料库房,物料编号
  2007. commit
  2008. GO
  2009. SET QUOTED_IDENTIFIER OFF 
  2010. GO
  2011. SET ANSI_NULLS ON 
  2012. GO
  2013. SET QUOTED_IDENTIFIER ON 
  2014. GO
  2015. SET ANSI_NULLS ON 
  2016. GO
  2017. /****** Encrypted object is not transferable, and script can not be generated. ******/
  2018. GO
  2019. SET QUOTED_IDENTIFIER OFF 
  2020. GO
  2021. SET ANSI_NULLS ON 
  2022. GO
  2023. SET QUOTED_IDENTIFIER ON 
  2024. GO
  2025. SET ANSI_NULLS ON 
  2026. GO
  2027. CREATE PROCEDURE sys生成资源日程表 @开始日期 int=0,@结束日期 int =0,@记帐人 char(10)=null
  2028. AS
  2029. begin transaction
  2030. if @开始日期>@结束日期 
  2031. begin
  2032. raiserror(50002,16,10)
  2033. end
  2034. declare @temp int   --临时存放日期
  2035. declare @zybh char(14),@edgs int   -----资源编号,额定工时
  2036. declare mycursor cursor for select 编号,额定工时 from 资源清单
  2037. open mycursor
  2038. fetch next from mycursor into @zybh,@edgs
  2039. while ( @@fetch_status = 0 )
  2040. begin
  2041. select @temp=@开始日期
  2042. while @temp<=@结束日期
  2043. begin
  2044. insert into 资源日程表 (日期,资源编号,计划能力,记帐人,修改日期,修改标记)
  2045. values(@temp,@zybh,@edgs,@记帐人,datepart(yyyy,getdate())*10000+datepart(mm,getdate())*100+datepart(dd,getdate()),'1')
  2046. select @temp=@temp+1
  2047. end
  2048. fetch next from mycursor into @zybh,@edgs
  2049. end
  2050. close mycursor
  2051. deallocate mycursor
  2052. commit
  2053. GO
  2054. SET QUOTED_IDENTIFIER OFF 
  2055. GO
  2056. SET ANSI_NULLS ON 
  2057. GO
  2058. SET QUOTED_IDENTIFIER OFF 
  2059. GO
  2060. SET ANSI_NULLS OFF 
  2061. GO
  2062. CREATE PROCEDURE  低层码 
  2063.  AS
  2064. --  该存贮过程是执行完 “生成物料清单中的低层码” 后执行的
  2065. begin tran
  2066.    update   物料主文件
  2067.        set     低层码=b.低层码
  2068.      from    物料主文件 as a,
  2069.                   (select         物料编号,min(低层码) as 低层码
  2070.                       from         物料清单
  2071.                       group by  物料编号     
  2072.       )         as b
  2073.    where a.物料编号=b.物料编号
  2074.   
  2075.    
  2076.    update  物料清单 
  2077.        set    低层码=b.低层码
  2078.       from   物料清单 as a,物料主文件 as b
  2079.      where a.物料编号=b.物料编号
  2080. commit
  2081. GO
  2082. SET QUOTED_IDENTIFIER OFF 
  2083. GO
  2084. SET ANSI_NULLS ON 
  2085. GO