提示: 本文主要介绍主生产计划程序。程序以HTML作为前端数据展示;JavaScript作为功能实现语言,处理数据并传入前端表格…作业再也不用担心代码和别人Python版本的重了!程序灵活性高,可以根据输入参数自动生成相应时期长度和周期的框架!
演示网址: https://www.systemhub.cn/cc/index.php
代码地址: https://download.csdn.net/download/qq_45002960/16796559
声明: 文章以及代码均为本人辛勤编写!禁止盗用!未经本人同意,禁止转载!
目录
一、主生产计划简介
主生产计划
主生产计划(Master Production Schedule,简称为MPS)是根据客户合同和预测,把S&OP中的产品系列具体化,确定出厂产品、使之成为展开MRP与CRP运算的主要依据,起到了从宏观计划向微观计划过渡的承上启下作用。
三个时区
一般情况下,时区可以分为时区1、时区2和时区3。
- 时区1是产品的总装提前期,也被称为需求时区。时区1中的订单是下达订单,该订单中的产品已经开始制造,这些产品的计划不能轻易调整。
- 时区2是产品的累计提前期,也被称为计划时区。时区2中的订单是确认订单,表示该订单中的产品数量和时段不能由ERP系统自动调整,只有MPS计划员才可以修改。
- 时区3等于总提前期或计划展望期,也被称为预测时区。时区3中的订单是计划订单,这种订单中的数据在情况发生变化时可以由ERP系统自动调整。
三个时区特点对比:
毛需求推算
毛需求由预测值和实际的合同值组合得出,不同时期的计算方法也不同:
需求时区毛需求: 取值等于合同量(订单量)
计划时区毛需求: 取值等于合同量与预测值中的最大者
预测时区毛需求: 取值等于预测值(绝大多数情况),也有取合同量与预测值中的最大者
预计可用库存量初值(PAB初值)推算
PAB初值=上期末预计可用库存量 + 本期计划接收量 - 本期毛需求量
净需求推算
净需求推算需考虑安全库存,若未写明安全库存,则说明没有安全库存,即安全库存=0
考虑安全库存推算特定时段的净需求要分两种情况:
- 当:PAB初值 >= 安全库存,净需求 = 0
- 当:PAB初值 < 安全库存,净需求 = 安全库存 - PAB初值
计划产出量推算
本文仅考虑批量规则,如在倍数批量规则下,推算特定时段的计划产出量。
- 当:净需求 > 0,计划产出量 = N × 批量,但要满足:(N - 1) × 批量 < 净需求
- 当:净需求 <= 0,计划产出量 = 0
预计可用库存量推算(PAB终值)
推算特定时段的预计库存量。
PAB终值 = 计划产出量 + PAB初值
计划投入量推算
逐步递增一个时段,分别重复计算上述数值,循环计算至计划期终止。终止后,即可推算计划投入量。推算计划投入量,考虑提前期推算计划期全部的计划投入量,数值上等于计划产出量即加工计划下达的时间和数量。
第n个时段的计划投入量数值上等于第(n + 提前期)个时段的计划产出量
二、程序效果预览
初始页面
初始页面主要有一个表格,表格中自动填有默认值,用户也可以根据自己的需求自行填写定义!点击“生成框架”后可以按照表格中的取值生成对应的框架。(注:未生成框架就点击“自动计算”,页面会有弹窗提示需要先点击“生成框架”)
生成框架
在输入数据合理,并通过程序检验的情况下,点击“生成框架”会生成如下图所示的框架。否则,会有弹窗提示。
自动计算
在输入数据合理,并通过程序检验的情况下,点击“自动计算”会自动计算出毛需求、PAB初值、净需求、计划产出量、PAB终值、计划投入量 。否则,会有弹窗提示。
灵活多变
自定义填入相应的值,会生成对应符合要求的框架,也就是程序不是写死的。
输入异常处理
输入数据异常、不符合要求时,会有弹窗提示。
三、部分代码介绍
数据输入判断
符合要求的数据有两类:正整数、非负整数。
function isIntNum(val) {
console.log(val);
var regPos = /(^[1-9]\d*$)/; // 正整数
if (regPos.test(val)) {
return true;
} else {
return false;
}
}
function isIntsssNum(val) {
console.log(val);
var regPos = /(^[0-9]\d*$)/; // 非负整数
if (regPos.test(val)) {
return true;
} else {
return false;
}
}
相关数值计算函数
//计算三个时段毛需求量
//ycz预测量;htl合同量;tag旗帜
function x_mxq(htl) {
return htl;
}
function j_mxq(ycz, htl) {
if (ycz > htl) {
return ycz;
} else {
return htl;
}
}
function y_mxq(ycz, htl, tag) {
if (tag == 0) {
return ycz
} else {
if (ycz > htl) {
return ycz;
} else {
return htl;
}
}
}
//计算PAB初值
//s_kykcl上期末可用库存量;jhjsl计划接收量;mxq毛需求量
function PAB(s_kykcl, jhjsl, mxq) {
var PABvalue = s_kykcl + jhjsl - mxq;
return PABvalue;
}
//推算净需求
//PABvaluePAB初值;aqkc安全库存
function JXQ(PABvalue, aqkc) {
if (PABvalue >= aqkc) {
return 0;
} else {
var jxq = aqkc - PABvalue;
return jxq;
}
}
//推算计划产出量
//jxq净需求;pl批量
function JHCCL(jxq, pl) {
if (jxq <= 0) {
return 0;
} else {
var jhccl = Math.ceil(jxq / pl) * pl; //向上取整
return jhccl;
}
}
//计算预计可用库存量PAB终值
//jhccl计划产出量;PABvaluePAB初值
function YJKYKCL(jhccl, PABvalue) {
var yjkykcl = jhccl + PABvalue;
return yjkykcl;
}
//计算计划投入量
//jhccl计划产出量;sd当前时段号;sddw时段单位;tiqian提前期
function JHTRL(sd, tiqian) {
var sd_jhtrl = sd - tiqian;
if (sd_jhtrl < 1) {
return 1;
}//如果计划投入量在时段1之前,则不予计算
else {
return sd_jhtrl;
}
}
四、资源下载
声明: 世上没有免费的午餐,尊重版权是激励创作的动力! 笔者在此真诚希望各位读者能够根据自己的需求合理抉择下载与否。
提示: 演示网址的JS代码已经进行混淆与加密! 同时注入死循环,未在相应域名下运行会导致浏览器卡死,望周知!
演示网址: https://www.systemhub.cn/cc/index.php
代码地址: https://download.csdn.net/download/qq_45002960/16796559
文章以及代码均为本人辛勤编写!禁止盗用!未经本人同意,禁止转载!