8.移转 Aras PLM大小事-料号版本

第8话-料号版本

讲起版本这件事,肯定每间公司的进版规则都不一样
甚至是明明同一间公司,但在各地区(国内、国外工厂)的规则不一致
这种状况会发生还是有可能的
或许同样是文件,但是文件类别不同也有进版上的差异
例如 00->01->02 或 A1->B1->C1 或 A1->A2->A3

这种时候就真的要在早期规划清楚
朝向另一个开版本栏位,并在变更单发行时自动写入新版本
https://ithelp.ithome.com.tw/upload/images/20210908/20106503iH8PaC7cWg.png

接着在ECN、EN、ECO等流程中,发行时写入新版本,此时的栏位皆为客制版本栏位,如果Agile生命周期跟Aras系统用法不同,也要另外客制,如下图的受影响物件开了新版版本
https://ithelp.ithome.com.tw/upload/images/20210908/20106503uuVqXW3aHe.png

那麽只是把栏位建立好,发行时写入料号
最後只剩进版规则如何调整
如果用系统规则进版,最多就是先预设好A1、A2...Z1、Z2,慢慢进版,也无法靠类别不同改成00、01
势必在变更单中自动客制程序,载入新版版本


举了实例
譬如
EN变更(量产前) => 00->01->02
ECN变更(量产後) => A1 -> B1 -> C1
图文变更 => A1 -> B1 -> C1 ,非量产或特定类别 00->01->02

用程序码来看

//当受影响物件版本栏位为空值
if(affectItem.getProperty("cn_new_revision","")==""){
    //取得物件的版本
    string strOldRevision = itmChangedItem.getProperty("cn_revision","");
    if(strOldRevision!=""){
        int tryResult=0;
        if(int.TryParse(strOldRevision,out tryResult)){
            //前一版数字,但在ECN转A1,EN就继续数字+1
            if(currentChangeType=="ECN"){
                sql="Update [innovator].[affected_item] set cn_new_revision='A1' where id='"+affectItem.getID()+"'";
            }else{
                //纯数字+1
                int intOldRev = int.Parse(strOldRevision);
                string newRev = (intOldRev+1).ToString().PadLeft(2,'0');
                sql="Update [innovator].[affected_item] set cn_new_revision='"+newRev+"' where id='"+affectItem.getID()+"'"; 
            }
        }else{
            //前一版不是数字,则看物件类型累加
            //料号
            if(changeItemType=="Part"){
                int oldRevStr1 = Convert.ToInt32((strOldRevision.Substring(0,1))[0]);
                int oldRevStr2 = Convert.ToInt32(strOldRevision.Substring(1,1));
                int totalOldRev = oldRevStr1*10+oldRevStr2;
                int totalNewRev = totalOldRev+1;
                string strNewRev = totalNewRev.ToString();
                
                string newRevStr1 = strNewRev.Substring(0,2);
                string newRevStr2 = strNewRev.Substring(2,1);
                strNewRev = Encoding.ASCII.GetString(new byte[]{ Convert.ToByte(int.Parse(newRevStr1)) })+newRevStr2;
                sql="Update [innovator].[affected_item] set cn_new_revision='"+strNewRev+"' where id='"+affectItem.getID()+"'";
            }else{
                //Document、CAD
                int oldRevStr1 = Convert.ToInt32((strOldRevision.Substring(0,1))[0]);
                int oldRevStr2 = Convert.ToInt32(strOldRevision.Substring(1,1));
                int totalNewRev,totalOldRev = 0;
                switch(itmChangedItem.getProperty("classification","")){
                    case "D_Production Facility(生产设备)":
                        //用A1->A2->A3进版 
                        totalOldRev = oldRevStr1*10+oldRevStr2;
                        totalNewRev = totalOldRev+1;
                    break;
                    default:
                        //用A1->B1->C1进版 
                        if((strOldRevision.Substring(0,1))[0]=='Z'){
                            oldRevStr1 = Convert.ToInt32('A');
                            oldRevStr2 = oldRevStr2+1;
                            if(oldRevStr2==10){
                                oldRevStr2 = 1;
                            }
                        }else{
                            oldRevStr1 = oldRevStr1 + 1;
                        }
                        totalOldRev = oldRevStr1*10+oldRevStr2;
                        totalNewRev = totalOldRev;
                    break;
                }
                
                string strNewRev = totalNewRev.ToString();
                
                string newRevStr1 = strNewRev.Substring(0,2);
                string newRevStr2 = strNewRev.Substring(2,1);
                strNewRev = Encoding.ASCII.GetString(new byte[]{ Convert.ToByte(int.Parse(newRevStr1)) })+newRevStr2;
                
                sql="Update [innovator].[affected_item] set cn_new_revision='"+strNewRev+"' where id='"+affectItem.getID()+"'";
            }
                            
        }
        
        if(changeItemType=="Part" || changeItemType=="Document" ||changeItemType=="CAD"){
            inn.applySQL(sql);
        }
    }
}

<<:  D7: [漫画]工程师太师了-第4话

>>:  Raspberry pi 的GPIO

【Day9】利用列举技术取得更多资讯

哈罗~ 前两天介绍了网路扫描的Hping 与 Nmap, 这两个工具可以协助我们搜索目前网域中的目标...

Day 15:Git

前言 git 是一种版本控制软件 (Version Control Software, VCS),V...

D11 - 「数位×IN×OUT」:数位功能

数位 I/O 视窗当然是要有数位讯号相关功能啦。 数位 I/O 功能 在 Supported Mod...

【Day12】[资料结构]-树Tree

树(Tree)属於一种非线性结构,是一种上下阶层关系,举例: 组织架构图、家族谱、赛程表等,类似一棵...

Day15 - 动态 新增/删除 Collection 项目(三) - Tag Helper

这篇调整的方向只是把上一篇的 Html Helper 改为 Tag Helper 而已 ! Case...