本篇示範利用遞迴設計函式的做法。
// 檢查BOM子件pno所有存在於<父階bomno>及<父階bomno的所有父階>的ERP製令狀態:該製令是否未完工或未生產 bool exist_in_gp_mocta_and_not_done(String pno,String bomno) { bool chk; String s=" SELECT MOCTA.TA011 AS 狀態碼, MOCTA.TA013 AS 確認碼 FROM MOCTB INNER JOIN " " MOCTA ON MOCTB.TB001 = MOCTA.TA001 AND MOCTB.TB002 = MOCTA.TA002 " " WHERE (MOCTA.TA013 = 'Y') AND MOCTB.TB003 = '"+pno+"' AND MOCTA.TA006 = '"+bomno+"'"; TADOQuery *qu; qu = new TADOQuery (Application); qu->Connection=DataModule3->ERP_Dahbah; qu->SQL->Add(s); qu->Active = true; if( qu->RecordCount==0 || // 無所屬製令 qu->FieldByName("狀態碼")->AsString.UpperCase()=="Y" || // Y:已完工) y:指定完工) qu->FieldByName("狀態碼")->AsString=="1" // 1:未生產 ) { chk=false; //但須再執行以下檢查 //----------------------------------------- DynamicArray < String > ar; ar=parent_view(bomno,NULL,NULL); //找出bomno的所有父階,加入陣列ar for(int i=0;i<ar.Length;i++) { if(exist_in_gp_mocta_and_not_done(pno,ar[i])) //<-遞迴 { chk=true; //若檢查到true,則即跳出 break; }} //----------------------------------------- } else chk=true; delete qu;qu=NULL; return chk; }
應用實例 :
下圖展示M607706在逆展BOM的位置
//檢查本子件M607706所有存在於父階(A000401)及以上(885228、895352、936085、956477)的製令狀態 String SON="M607706"; String MOM="A000401"; if(exist_in_gp_mocta_and_not_done(SON,MOM)) should_del=false; else should_del=true;
發表留言