konhon

          忘掉過去,展望未來。找回自我,超越自我。
          逃避不一定躲的過, 面對不一定最難過, 孤單不一定不快樂, 得到不一定能長久, 失去不一定不再擁有, 可能因為某個理由而傷心難過, 但我卻能找個理由讓自己快樂.

          Google

          BlogJava 首頁 新隨筆 聯(lián)系 聚合 管理
            203 Posts :: 0 Stories :: 61 Comments :: 0 Trackbacks

          #

          將一個字符串轉為二進制,再從二進制轉為原字符串。

             把字符串(可含中文字符)轉為二進制數(shù)的函數(shù):ConvertStrToBin();把二進制數(shù)轉換為字符串的函數(shù):ConvertBinToStr()。
             以下兩個函數(shù)亦可以對包含有中文字符的字符串進行處理,逆轉時亦可正常轉為中文。
          Function ConvertStrToBin(Value : string):string;//把字符串轉化為二進制數(shù)
          var tempHex : string[2];
              i : integer;
          begin
            Result := '';
            if trim(Value) = '' then Exit;
            tempHex := '';
            for i := 1 to Length(Value) do
            begin
              tempHex := IntToHex(Ord(Value[i]),2);//每個字符轉成兩位十六進制數(shù)
              Result := Result + BinToHexEachOther(tempHex,False);//十六進制轉成二進制
            end;
          end;

          Function ConvertBinToStr(Value : string):string; //把二進制數(shù)據(jù)轉化為字符串
          Var tempHex : string;
              i, tempInt : integer;
          begin
            Result := '';
            if trim(Value) = '' then Exit;
            tempHex := BinToHexEachOther(Value,true);//二進制轉成十六進制
            i := 0;
            Repeat
              begin
                i := i + 1;
                tempInt := HexCharToInt(tempHex[i]);
                i := i + 1;
                tempInt := tempInt * 16 + HexCharToInt(tempHex[i]);
                 //以上將兩位十六進制數(shù)轉變?yōu)橐粋€十進制數(shù)
                Result := Result + chr(TempInt); //轉成ASCII碼
              end;
            Until i >= length(tempHex)
          end;

          上兩個互逆的函數(shù)中要調用到的函數(shù)HexCharToInt()和BinToHexEachOther()如下:

          function BinToHexEachOther(ValueA : string; Action : Boolean) : string;
            //把二進制串轉換成十六進制串或相反
            var
              ValueArray1 : Array [0..15] of string[4];
              ValueArray2 : Array [0..15] of char;
              i : shortint;
          begin
              //數(shù)組初始化
              ValueArray1[0] := '0000';  ValueArray1[1] := '0001';  ValueArray1[2] := '0010';
              ValueArray1[3] := '0011';  ValueArray1[4] := '0100';  ValueArray1[5] := '0101';
              ValueArray1[6] := '0110';  ValueArray1[7] := '0111';  ValueArray1[8] := '1000';
              ValueArray1[9] := '1001';  ValueArray1[10] := '1010';  ValueArray1[11] := '1011';
              ValueArray1[12] := '1100';  ValueArray1[13] := '1101';  ValueArray1[14] := '1110';
              ValueArray1[15] := '1111';
              for i := 0 to 15 do
                if i >= 10 then ValueArray2[i] := chr(65 + (i - 10))
                else ValueArray2[i] := inttostr(i)[1];

              Result := '';
              if Action then
              begin //二進制串轉換成十六進制串
                if (Length(ValueA) MOD 4 <> 0) then
                  ValueA := stringofchar('0',Length(ValueA) MOD 4) + ValueA;
                while (Length(ValueA) >= 4) do
                begin
                  for i := 0 to 15 do
                    if Copy(ValueA,1,4) = ValueArray1[i] then
                      Result := Result + ValueArray2[i];
                  ValueA := Copy(ValueA,5,Length(ValueA) - 4);
                end;
              end
              else begin //十六進制串轉換成二進制串
                while (Length(ValueA) >= 1) do
                begin
                  for i := 0 to 15 do
                    if Copy(ValueA,1,1) = ValueArray2[i] then
                      Result := Result + ValueArray1[i];
                  ValueA := Copy(ValueA,2,Length(ValueA) - 1);
                end;
              end;
          end;

          function HexCharToInt(HexToken : char):Integer;
          begin
          Result:=0;
          if (HexToken>#47) and (HexToken<#58) then       { chars 0....9 }
             Result:=Ord(HexToken)-48
          else if (HexToken>#64) and (HexToken<#71) then  { chars A....F }
             Result:=Ord(HexToken)-65 + 10;
          end;


          十六進制字串轉十進制又一法:
          procedure TForm1.BitBtn1Click(Sender: TObject);
          var myint : integer;
          begin
            myint := StrToInt('$' + '3A'); // myint = 58
            showmessage(inttostr(myint));
          end;
          posted @ 2005-11-02 05:37 konhon 優(yōu)華 閱讀(22530) | 評論 (3)編輯 收藏


           

               引言

              本文將就靜態(tài)數(shù)據(jù)中物料清單(Bill of Material,BOM)的作用,結合CAD(Computer Aided Design,計算機輔助設計)、CAPP(Computer Aided Process Planning,計算機輔助工藝編制)、PDM(Products Data Management,產(chǎn)品數(shù)據(jù)管理)、MRPⅡ(Manufacturing ResourcePlanning,物造資源計劃)、ERP(Enterprise Resource Planning,企業(yè)資源計劃)等系統(tǒng)作詳細的描述。

              什么是BOM?

              采用計算機輔助企業(yè)生產(chǎn)管理,首先要使計算機能夠讀出企業(yè)所制造的產(chǎn)品構成和所有要涉及的物料,為了便于計算機識別,必須把用圖示表達的產(chǎn)品結構轉化成某種數(shù)據(jù)格式,這種以數(shù)據(jù)格式來描述產(chǎn)品結構的文件就是物料清單,即是BOM。它是定義產(chǎn)品結構的技術文件,因此,它又稱為產(chǎn)品結構表或產(chǎn)品結構樹。在某些工業(yè)領域,可能稱為“配方”、“要素表”或其它名稱。
              在MRPⅡ和ERP系統(tǒng)中,物料一詞有著廣泛的含義,它是所有產(chǎn)品,半成品,在制品,原材料,配套件,協(xié)作件,易耗品等等與生產(chǎn)有關的物料的統(tǒng)稱。
              在通常的MRPⅡ和ERP系統(tǒng)中BOM是指由雙親件及子件所組成的關系樹。BOM可以是自頂向下分解的形式或是以自底向上跟蹤的形式提供信息。
              在MRPⅡ和ERP系統(tǒng)中中BOM是一種數(shù)據(jù)之間的組織關系,利用這些數(shù)據(jù)之間層次關系可以作為很多功能模塊設計的基礎,這些數(shù)據(jù)的某些表現(xiàn)形式是我們大家感到熟悉的匯總報表。

              BOM有什么作用?

              BOM是PDM/MRPⅡ/ERP信息化系統(tǒng)中最重要的基礎數(shù)據(jù),其組織格式設計和合理與否直接影響到系統(tǒng)的處理性能,因此,根據(jù)實際的使用環(huán)境,靈活地設計合理且有效的BOM是十分重要的。
              BOM不僅是MRPⅡ系統(tǒng)中重要的輸入數(shù)據(jù),而且是財務部門核算成本,制造部門組織生產(chǎn)等的重要依據(jù),因此,BOM的影響面最大,對它的準確性要求也最高。正確地使用與維護BOM是管理系統(tǒng)運行期間十分重要的工作。
              此外,BOM還是CIMS/MIS/MRPⅡ/ERP與CAD,CAPP等子系統(tǒng)的重要接口,是系統(tǒng)集成的關鍵之處,因此,用計算機實現(xiàn)BOM管理時,應充分考慮它于其他子系統(tǒng)的信息交換問題。
              BOM信息在MRPⅡ/ERP系統(tǒng)中被用于MRP計算,成本計算,庫存管理。BOM有各種形式,這些形式取決于它的用途,BOM的具體用途有:
              1、 是計算機識別物料的基礎依據(jù)。
              2、是編制計劃的依據(jù)。
              3、 是配套和領料的依據(jù)。
              4、根據(jù)它進行加工過程的跟蹤。
              5、 是采購和外協(xié)的依據(jù)。
              6、根據(jù)它進行成本的計算。
              7、 可以作為報價參考。
              8、進行物料追溯。
              9、 使設計系列化,標準化,通用化。

              BOM有哪些形式?

              按照用途劃分
              產(chǎn)品要經(jīng)過工程設計、工藝制造設計、生產(chǎn)制造3個階段,相應的在這3個過程中分別產(chǎn)生了名稱十分相似但卻內容差異很大的物料清單EBOM、PBOM、CBOM。這是三個主要的BOM概念。
              工程BOM——EBOM(Engineering BOM):
              產(chǎn)品工程設計管理中使用的數(shù)據(jù)結構,它通常精確地描述了產(chǎn)品的設計指標和零件與零件之間的設計關系。對應文件形式主要有產(chǎn)品明細表、圖樣目錄、材料定額明細表、產(chǎn)品各種分類明細表等等。
              計劃BOM——PBOM(Plan BOM):
              是工藝工程師根據(jù)工廠的加工水平和能力,對EBOM再設計出來的。它用于工藝設計和生產(chǎn)制造管理,使用它可以明確地了解零件與零件之間的制造關系,跟蹤零件是如何制造出來的,在哪里制造、由誰制造、用什么制造等信息。同時,PBOM也是 MRPⅡ/ERP生產(chǎn)管理的關鍵管理數(shù)據(jù)結構之一。
              實際上BOM是一個廣泛的概念,根據(jù)不同的用途,BOM有許多種類;設計圖紙上的BOM,計劃BOM,計算最終產(chǎn)品裝配的制造BOM,計算成本的成本BOM,保養(yǎng)維修BOM等。根據(jù)在不同階段應用側重點不同,我們常常見到不同的BOM提法,常見的有:
              設計BOM——DBOM(Design BOM):
              設計部門的DBOM是產(chǎn)品的總體信息,對應常見文本格式表現(xiàn)形式包括產(chǎn)品明細表、圖樣目錄、材料定額明細表等等。
              設計BOM信息來源一般是設計部門提供的成套設計圖紙中標題欄和明細欄信息。有時候也涉及工藝部門編制的工藝卡片上部分信息。
              設計BOM一般在設計結束時匯總產(chǎn)生,如果存在大量借用關系的設計情況可以在設計階段開始就基本將設計BOM匯總出來,然后根據(jù)新產(chǎn)生的零部件安排設計任務。
              對應電子視圖往往是產(chǎn)品結構樹的形式,樹上每個節(jié)點關聯(lián)各類屬性或圖形信息。主要在PDM軟件中作為產(chǎn)品管理和圖檔管理的基礎數(shù)據(jù)出現(xiàn)。


               
              制造BOM——MBOM(Manufacturing BOM):
              生產(chǎn)部門的MBOM是在EBOM的基礎上,根據(jù)制造裝配要求完善的,包括加工零部件JBOM和按工藝要求的毛胚、模具、卡具等PBOM。也可以稱其為工藝BOM。對應常見文本格式表現(xiàn)形式包括工藝路線表、關鍵工序匯總表、重要件關鍵件明細表、自制件明細表、通用件明細表、通用專用工裝明細表、設備明細表等等。
              制造BOM信息來源一般工藝部門編制工藝卡片上內容,但是要以設計BOM作為基礎數(shù)據(jù)內容。
              對應電子視圖對產(chǎn)品部件往往裝配工藝BOM形式,對零件往往是具體加工工藝BOM形式,比較多的是機加工工藝BOM,或生產(chǎn)加工流轉路線工藝BOM等,樹上每個節(jié)點關聯(lián)工裝、設備、工時、加工簡圖等等工藝信息。對企業(yè)利用價值比較大的是裝配工藝BOM,主要在ERP軟件中作為生產(chǎn)計劃的基礎數(shù)據(jù)出現(xiàn)。
               

              
              客戶BOM——CBOM(Customer BOM):
              客戶BOM實際上有兩個含義,一個指從所有產(chǎn)品機構中篩選出客戶訂購的產(chǎn)品目錄。一個指用戶訂購的具體規(guī)格產(chǎn)品的明細表。這個主要是對有些按照客戶管理和組織產(chǎn)品圖紙的企業(yè)非常實用的種表現(xiàn)形式。這種情況在PDM系統(tǒng)中比較常見,到ERP系統(tǒng)中由于還考慮到不同的客戶訂購產(chǎn)品對生產(chǎn)計劃的影響,情況更加復雜一些,可能還擴展到計劃BOM的范疇。
              銷售BOM——SBOM(SALE BOM):
              銷售BOM是按用戶要求配置的產(chǎn)品結構部分。對應常見文本格式表現(xiàn)形式包括基本件明細表、通用件明細表、專用件明細表、選裝件明細表、替換件明細表、特殊要求更改通知單等等。在某些制造行業(yè),對銷售BOM提出了更高的要求,要求每個BOM可以跟蹤每批訂單在全生命周期內的物料信息,而且每個客戶訂單都有一個唯一的或者是根據(jù)訂單產(chǎn)品種類多少確定的幾個銷售BOM。這個時候往往將銷售BOM稱為客戶BOM。
              銷售BOM信息來源一般是一個系列產(chǎn)品各規(guī)格不同類型零部件明細信息的匯總。
              對應電子視圖往往是產(chǎn)品配置樹的形式,樹上每個節(jié)點關聯(lián)各類屬性或圖形信息。主要在PDM軟件中作為產(chǎn)品配置管理的基礎數(shù)據(jù)出現(xiàn)。


              維修BOM——WBOM:
              維修服務部門的是按維修要求產(chǎn)生的,對應文本格式包括消耗件清單、備用件清單、易損易耗件清單等等。
              維修BOM信息來源一般從設計BOM對應記錄屬性中篩選獲得消耗件、備用件、易損易耗件明細。
              一般在PDM軟件里完成匯總,同樣可以在ERP軟件里作為基礎數(shù)據(jù)運用。
              采購BOM——CBOM:
              是根據(jù)生產(chǎn)要求外購的原材料、標準件和成套部件等產(chǎn)生的,對應文本格式主要包括外購件明細表、外協(xié)件明細表、自制件明細表和材料明細匯總表。
              采購BOM信息來源一般來源于設計圖紙和工藝卡片上信息匯總。由采購部門或生產(chǎn)準備部門根據(jù)其安排采購計劃和生產(chǎn)計劃。
              PDM系統(tǒng)一般都可以根據(jù)圖紙和工藝信息匯總出相應采購BOM信息,但是如果要針對產(chǎn)品批量獲得動態(tài)的采購BOM信息就必須在ERP系統(tǒng)中完成。例如100臺批量的采購BOM和10000臺批量的采購BOM可能在外購和外協(xié)件上有很大變化。批量小時可能有的零件外購成本比較低,但批量大時就可以自制完成。
              成本BOM——CBOM(Costing Bill Of Material):
              是由MRPⅡ系統(tǒng)產(chǎn)生出來的。當企業(yè)定義了零件的標準成本、建議成本、現(xiàn)行成本的管理標準后,系統(tǒng)通過對PBOM和加工中心的累加自動地生成CBOM。它用于制造成本控制和成本差異分析。
              其中,銷售SBOM=加工JBOM+采購CBOM,
               生產(chǎn)MBOM=加工JBOM+PBOM+采購CBOM,
              其中集成關系最密切的是由PDM 控制的EBOM和MRPⅡ中的MBOM

              按照設計軟件劃分
              CAD中的BOM
              設計部門既是BOM的設計者,又是BOM的使用者。單一零件諸如圖號、物料名稱(材料類型如45號鋼)、重量、體積、設計修改審核號、物料生效日期等各種信息;組件或部件還包括外協(xié)件、外購件、通用件、標準件、借用件、各單一零件裝配數(shù)量、部件圖號等信息;總圖(由零件、組件部件等裝配而成)還包括包裝、裝件清單、技術文件、產(chǎn)品說明書、保修單等等信息,這些都是BOM信息的組成部分。在設計部門(CAD)中,通常所說的BOM實際上是零件明細表,是一種技術文件,偏重于產(chǎn)品信息匯總。 
              設計部門按某種類型產(chǎn)品的圖號來組織BOM信息。設計部門在接到定單后按照定單的要求,一般情況下有三種設計思路——自頂向下形式設計、自底向上形式設計、由中間向兩頭形式設計。無論那一種設計方式,在圖號的組織上都是一致的,都是按照圖號來合并產(chǎn)品信息,形成該產(chǎn)品的總明細表、標準件匯總表、外購件匯總表、外協(xié)件匯總表等,在需要的時候還能生成產(chǎn)品圖紙目錄(滿足沒有運行ERP系統(tǒng)的客戶或外協(xié)工廠)。有時一個相同的零件由于屬于不同的產(chǎn)品,也就有了不同的圖號,因此不一定考慮企業(yè)物料編碼的唯一性。需要說明的是,在形成物料清單后,每一種物料都有唯一的編碼,即物料號。不要將零件明細表(CAD通稱為BOM表)與ERP中的BOM信息混淆。設計部門中的零件明細信息表轉化為ERP系統(tǒng)中的BOM信息,需要設計部門、工藝部門和生產(chǎn)部門的共同協(xié)作,以及PDM(產(chǎn)品數(shù)據(jù)管理)設計產(chǎn)品關系特性的管理來解決零件明細清單與BOM表之間的異同信息,特別是圖號與編碼號不一致方面(PDM產(chǎn)品結構模塊通過其規(guī)則庫、變量和零件表等功能來完成)。 
              就使用而言,無論何時,當產(chǎn)品結構發(fā)生變化,或者客戶更改技術文件、涉及質量問題或對某個零件進行重新改進設計時,為確保物料清單的準確性,都必須以設計變更通知為依據(jù)。在設計變更通知文件的指導下,設計部門通過BOM信息表中獲取所有零件的信息及其相互間的結構信息。只有得到這些信息,才能對其進行定義、描述或修改,從而使生產(chǎn)能正常地運行下去(特別是客戶的緊急更改通知)。根據(jù)設計變更通知編號,在PDM支持下,可以方便地檢索變更信息,指導生產(chǎn)、裝運和售后服務等生產(chǎn)活動。 
              在實際生產(chǎn)運行過程中,設計變更是導致數(shù)據(jù)不準確的重要因素,因此一定要有一套行之有效的設計變更通知管理方法來管理設計變更通知。由于要涉及銷售、采購、生產(chǎn)、工程技術、財務等部門,因此一般由企業(yè)的高級主管直接管理設計變更通知。這一過程須經(jīng)過設計變更通知確認、分析、審批、文件和監(jiān)督五個步驟。
              設計部門(CAD)產(chǎn)生的部分數(shù)據(jù)經(jīng)PDM處理后傳輸給ERP系統(tǒng)。
              關于設計BOM需要補充這么幾個概念:
              產(chǎn)品結構樹上零部件的構成元素可以分為標準零部件、結構零部件以及設計零部件三類。
              設計零部件的產(chǎn)生方式可以從不同的3D CAD或是2D CAD明細表中所產(chǎn)生,是通過本廠或協(xié)作廠設計產(chǎn)生的。
              結構零部件可以是照片或是一個簡單的草圖。對應產(chǎn)品結構樹上節(jié)點名稱常常是產(chǎn)品外形圖、產(chǎn)品尺寸鏈圖、產(chǎn)品裝配關系示意圖、包裝零部件等等。在很多企業(yè)產(chǎn)品結構樹上必須反映這些信息,但是從總裝圖上無法獲得這些信息,例如產(chǎn)品外形圖和產(chǎn)品裝配圖如果都掛在產(chǎn)品節(jié)點上也可以接受,但是用戶習慣往往是認為產(chǎn)品外形圖和產(chǎn)品裝配圖都是同級的;另外象包裝子樹就需要手工建立包裝子節(jié)點后展開,無法通過BOM展開直接從明細表關聯(lián)。
              通用零部件包括標準零部件庫和行業(yè)、企業(yè)通用零部件。并且可以修改與刪除和合并,加入通用零部件庫要仔細的效驗過程。通用零部件可以從借用件中演變而來。
              相同的產(chǎn)品其結構零部件,有時甚至設計零部件或是標準零部件可以有多種不同的選擇。也因此在制造上與銷售報價上同樣的產(chǎn)品對于不同的客戶也可以有不同的產(chǎn)品信息結構組合(例如價格、批量、交貨期)。但這些情況一般在ERP系統(tǒng)中進行維護,PDM系統(tǒng)只要保證基礎數(shù)據(jù)的完整和一致性。

              CAPP中的BOM 
              產(chǎn)品經(jīng)過設計部門設計完畢后,部分電子數(shù)據(jù)轉交工藝部門制訂工藝路線(CAPP),成為說明零部件加工或裝配過程的文件。它不是技術文件,而是計劃文件或指導生產(chǎn)文件。CAPP一般由工藝過程卡、加工工序卡、鍛鑄熱處理卡、檢測卡、工裝材料工時等匯總信息組成;在一張加工工序卡中由工序(加工步驟)、工時定額(占用工作中心的負荷時間)、加工設備、檢測設備、加工工具、工裝夾具、材料等組成。 
              在編制工藝計劃時,除涉及設計的每一個細微之處外,同時還要涉及BOM中的主工作中心物料、材料物料、加工夾具物料、工裝物料及輔料物料等。維護這些靜態(tài)數(shù)據(jù)的準確性是保證生產(chǎn)按計劃進行的前提。主工作中心的設備維護、備件管理、維修記錄,材料采購與庫存變化情況,加工夾具、工裝設備、輔料等變化都要實時反映到工藝計劃編制中去。在工藝計劃編制過程中,要能隨時(面向對象)地瀏覽BOM信息,輸入BOM信息,報警BOM信息(工藝編制人員發(fā)現(xiàn)錯誤報警),實時反映更新的BOM信息等等。 
              在沒有計算機系統(tǒng)支持的情況下,對工藝編制人員就要提出很高的要求:不僅要求其熟知零件加工過程和加工設備的現(xiàn)行狀況,還要知道技術參數(shù)、庫存情況、加工夾具、工裝設備等情況。一般情況下,企業(yè)培養(yǎng)一個類似人員需要20年時間。現(xiàn)在,工藝人員在計算機系統(tǒng)的支持下,可以方便地查詢按BOM結構設計的典型工藝數(shù)據(jù)庫、獲取設計信息、查詢機床設備等技術參數(shù)等,也能很容易地編制CAPP,保證工藝文檔的完整性、一致性、正確性和執(zhí)行可行性。 
              工藝部門(CAPP)產(chǎn)生的數(shù)據(jù)經(jīng)PDM處理后傳輸給ERP系統(tǒng)。

              PDM中的BOM
              PDM實際上是連接CAD/CAPP與ERP的核心模塊,它管理與產(chǎn)品相關的“信息(ERP)”和“過程(CAD/CAPP)”技術,起著由“過程(CAD/CAPP)”技術向“信息(ERP)”轉化,“信息(ERP)”向“過程(CAD/CAPP)”技術轉化的重要中間過程,形成了雙向的無縫傳輸數(shù)據(jù),避免了大量重合數(shù)據(jù)的產(chǎn)生。下圖是表明它們結構關系圖。 
              由于不同部門有不同形式的BOM信息,企業(yè)經(jīng)常要花費大量的人力和時間才能完成這些報表,而且還要不斷維護BOM的一致性,避免產(chǎn)生嚴重的MRP運算錯誤。四川某電器股份有限公司原來采用的手工錄入方式,錄入從CAD部門中統(tǒng)計的BOM信息,一個熟練的錄入人員錄入一個產(chǎn)品的BOM數(shù)據(jù)需要一周左右的時間,還不包括錄入錯誤導致的返工時間和造成了惡劣影響;現(xiàn)在通過PDM,為ERP系統(tǒng)自動傳輸BOM數(shù)據(jù),只需要幾分鐘時間。

          結構關系圖

               
              在產(chǎn)品整個生命周期,PDM以數(shù)據(jù)倉庫(所有系統(tǒng)可共用一個數(shù)據(jù)庫)為底層支持,以材料清單(BOM)為其組織核心,把定義最終產(chǎn)品的所有工程數(shù)據(jù)和文檔聯(lián)系起來,實現(xiàn)產(chǎn)品數(shù)據(jù)的組織和管理,諸如產(chǎn)品配制管理、圖文檔管理、工作流程管理、設計變更管理、權限(角色)管理、版本管理、項目管理、維修記錄以及日志管理等等。
              PDM系統(tǒng)根據(jù)各自的功能特點與可解決工程問題的不同,分為三大類,即:以文檔、數(shù)據(jù)管理為重點的;以設計過程及產(chǎn)品結構管理為主面向CAD的;面向硬、軟件異構系統(tǒng)集成平臺的。其中第二類與BOM信息最為密切,經(jīng)過轉化處理,達到ERP所需要的BOM信息。今天,大多數(shù)流行的PDM系統(tǒng)都能與ERP系統(tǒng)集成,有的ERP還有自己的PDM產(chǎn)品,有效促進了ERP系統(tǒng)中生產(chǎn)、設計、采購和銷售等各個部門的溝通與交流。

              ERP中的BOM
              除了前面所描述的系統(tǒng)與BOM有關外,生產(chǎn)部門、產(chǎn)品成本核算部門、物料需求計劃(MRP)系統(tǒng)、銷售部門也有很大關系,生產(chǎn)部門使用BOM來決定零件或最終產(chǎn)品的制造方法,決定領取的物料清單;產(chǎn)品成本核算部門利用BOM中每個自制件或外購件的當前成本來確定最終產(chǎn)品的成本和對產(chǎn)品成本維護,有利于公司業(yè)務的報價與成本分析;物料需求計劃(MRP)系統(tǒng)中BOM是MRP的主要輸入信息之一,它利用BOM決定主生產(chǎn)計劃項目時,動態(tài)確定物料凈需求量,知道需要哪些自制件和外購件,需要多少,何時需要,標準用料與實際用料的差異分析;銷售部門通過Internet訪問數(shù)據(jù)源,可以方便地報價,提供準確的零件設計信息與追蹤制造流程等自助服務,客戶還可以自己下定單購買產(chǎn)品備件。 
              通過BOM信息,還可以方便地考核各部門的業(yè)績,可以方便地抽取信息進行統(tǒng)計與分析;如果有了新的BOM資料需求,還可以利用原來的BOM資料構造新的BOM資料,簡化近似BOM資料的編制工作;如果對BOM信息深入研究,還可以通過不同的產(chǎn)品BOM資料來研究其它產(chǎn)品BOM資料的錯誤檢查,以免計算機輸入或認為修改帶來的錯誤,將錯誤率降到最低。 
              BOM是任何管理系統(tǒng)中的基礎,它幾乎與企業(yè)中的所有職能部門都有關系,如果沒有BOM,就無法制造出同樣的產(chǎn)品,直接影響到系統(tǒng)的處理性能和使用效果。為此,要想提高生產(chǎn)管理系統(tǒng)的效率,BOM準正確與否是十分重要的。盡管數(shù)據(jù)已經(jīng)非常準確,但也不要忽視人的重要性,對于特殊變化,利用手工在系統(tǒng)中對BOM信息的內容進行增加、刪除和修改等編輯工作,可以順利完成任務。
              通過建立企業(yè)“信息(ERP)”管理和“過程(CAD/CAPP)”技術兩條主線,以BOM為信息紐帶,以PDM為核心,再結合CAD/CAPP和ERP系統(tǒng),輔以Internet和EDI系統(tǒng),就可以真正達到企業(yè)信息化建設的目標


              產(chǎn)品結構樹有哪些形式? 

              為了便于計算機管理和處理的方便,各種BOM清單必須具有某種合理的組織形式,這種BOM的圖形化顯示我們往往設計成產(chǎn)品結構樹形式,而且為了便于在不同的場合下使用產(chǎn)品結構樹,產(chǎn)品結構樹還應有多種組織形式和格式。
              產(chǎn)品結構的數(shù)據(jù)輸入計算機后,就可對其進行查詢,并能根據(jù)各用戶的不同的格式顯示出來。各種信息系統(tǒng)系統(tǒng)的目標就是要使輸入的數(shù)據(jù)可以生成各種不同格式的產(chǎn)品結構樹,以滿足企業(yè)中各種用戶的需求。產(chǎn)品結構樹一般以下常用的輸出格式。
              圖一為A的產(chǎn)品結構。0層為產(chǎn)品A;A是由B,10。C所組成,B,10,C組成了第一層;B又是由20,D 所組成,C 是由30,40,50所組成,20,D,30,40,50組成了第2層;D又是由10,30所組成,10,30組成了第三層。圖中,字母表示裝配,數(shù)字表示零件,括號中數(shù)字為裝配所需數(shù)量。 


              
                    圖一 產(chǎn)品A結構


              對A這樣的產(chǎn)品,其BOM的輸出格式有以下各種。

              常見的BOM形式

              單級展開BOM 
              單級展開格式顯示某一裝配件所使用的下級零部件。采用多個單級展開就能完整地表示產(chǎn)品的多級結構。對應很多企業(yè)(特別是產(chǎn)品零部件數(shù)量繁多的企業(yè))的分組明細表即是單級BOM的具體形式。下表為所給的四級產(chǎn)品結構就得到四個單級展開的清單。 
              


              多級展開BOM
               多級展開BOM顯示某一裝配件所使用的全部下級零部件。采用一個多級展開就能完整地表示產(chǎn)品的多級結構。對應很多企業(yè)(特別是產(chǎn)品零部件數(shù)量比較少的企業(yè))的產(chǎn)品明細表即是多級BOM的具體形式。下表為所給的四級產(chǎn)品結構對應多級展開BOM表。
               



              縮行展開
              縮行展開格式是在每一上層物料下以縮行的形式列出它們的下屬物料。同一層次的所有零件號都顯示在同一列上。縮行展開的格式是以產(chǎn)品制造的方式來表示產(chǎn)品的。
           


              匯總展開
           
              匯總展開的格式列出了組成最終產(chǎn)品的所有物料的總數(shù)量。它反映的是一個最終產(chǎn)品所需的各種零件的總數(shù)。而不是每個上層物料所需的零件數(shù)。如某一零件用于多個裝配件,匯總展開的清單就有助于確定合適的采購數(shù)量。這種格式并不表示產(chǎn)品生產(chǎn)的方式,但卻有利于產(chǎn)品成本核算,采購和其他有關的活動。



              單層跟蹤
              單層跟蹤格式顯示直接使用某物料的上層物料。這是一種物料被用在哪里的清單,它指出的是直接使用某物料的各上層物料。


              匯總跟蹤
              匯總跟蹤的格式顯示所有含有各零件的高層次物料以及每一物料所用零件的數(shù)量。這是一張擴展了的”用在哪里”的清單,它列出了所有含有零件的高層次物料。”所需數(shù)量”表示裝配成該層次的物料所需的零件總數(shù)。

              縮行跟蹤
             
          縮行跟蹤的格式指出了某零件在所有高層物料中的使用情況。它可查找直接或間接地使用某零件的所有高層物料,采用這種格式很有價值。現(xiàn)以下表表示:



              矩陣式的BOM 
              矩陣式的BOM是對具有大量通用零件的產(chǎn)品系列進行數(shù)據(jù)合并后得到的一種BOM。這種形式的BOM可用來識別和組合一個產(chǎn)品系列中的通用零件。在下面的輸出格式中,左面列出的是各種通用零部件,右面的上部列出了各個最終產(chǎn)品,下面的數(shù)字表示裝配一個最終產(chǎn)品所需該零件的數(shù)量。”#”表示該產(chǎn)品不用此零件。對于有許多通用零件的產(chǎn)品,這種形式的BOM很有用處。但矩陣式BOM沒有規(guī)定產(chǎn)品制造的方式,它沒有指出零件之間的裝配層次,因此,不能用于指導多層結構產(chǎn)品的制造過程。 
              



              加減BOM
              這種BOM有時又被為”比較式”或”異同式”BOM。它以標準產(chǎn)品為基準,并規(guī)定還可以增加哪些零件或去掉哪些零件。一個特定的產(chǎn)品就被描述為標準產(chǎn)品加上或減去某些零件。下表說明專用產(chǎn)品A/1是在標準產(chǎn)品A上增加零件F和G,同時增加部件C數(shù)量到2個,并去掉零件1-1-1制成。這種方法能有效地描述不同產(chǎn)品之間的差異,但不能用于市場預測,也不太適用于MRP。
           



              模塊化BOM
              在實際應用中,由于產(chǎn)品規(guī)格是多變的,零件表按產(chǎn)品結構特點來劃分的話,可以分為以下幾種:
              產(chǎn)品單一,規(guī)格基本沒有變化。
              產(chǎn)品規(guī)格多樣,可以選擇裝配
              產(chǎn)品系列化,但同一系列中性能變化。
              不同產(chǎn)品系列,多種選擇裝配。
              模塊化BOM用于由許多通用零件制成的并有多種組合的復雜產(chǎn)品。例如在汽車制造業(yè),裝配一輛汽車可選擇不同的發(fā)動機,傳動機構,車身,部件,裝潢以及其它東西,不同的選擇可組合成不同的最終產(chǎn)品。模塊化方法既為顧客提供了較廣的選擇范圍,又使零件的庫存下降。在汽車及農(nóng)業(yè)設備等工業(yè)上,這種方法得到了廣泛的應用。當一條生產(chǎn)線上有許多可選特征時,就能得到許多種組合,這時就不可能在主生產(chǎn)計劃中對它們分別預測。如果按照MRP的需要在計算機內為每一種最終產(chǎn)品存儲一個獨立的BOM。則文件記錄的存儲和維護費用就很大。解決這一問題的辦法就是采用模塊化BOM。模塊化BOM按照裝配最終產(chǎn)品的要求來組建模塊。模塊化的過程就是將產(chǎn)品分解成低層次的模塊。按照這些模塊進行預測就比直接對最終產(chǎn)品進行預測要準確。模塊化可以得到兩個不同目的:
              可以擺脫組合可選產(chǎn)品特征的麻煩;
              把通用零件與專用零件區(qū)分開來。

              BOM的一體化

              在許多企業(yè)中,重建傳統(tǒng)的BOM能大大簡化主生產(chǎn)計劃。如果訂單的交貨期小于產(chǎn)品的生產(chǎn)提前期,在主生產(chǎn)計劃中就要對需求作出預測。多數(shù)企業(yè)采用兩種方式組織生產(chǎn),一種是備貨生產(chǎn),它們根據(jù)預測安排計劃;另一種企業(yè)在短期內根據(jù)用戶訂單組織生產(chǎn),其余時間根據(jù)預測安排計劃。因此產(chǎn)品必須定義成在生產(chǎn)計劃中可以預測的形式。顯而易見,在訂貨生產(chǎn)的環(huán)境中,最終產(chǎn)品不是最好的預測對象。需要用一些特殊的BOM把主生產(chǎn)計劃與某些相關零件聯(lián)系起來,這些零件是在收到顧客訂單之前必須得到的。用于計劃的BOM執(zhí)行了這一功能,它減少了預測和主生產(chǎn)計劃中的項目數(shù)。
              計劃BOM是根據(jù)MRP的需要,把0層的產(chǎn)品與BOM脫離關系,而把1層或更低層的組件提高到最終項目的地位。這樣就建立起一個新的模塊化的用于計劃的BOM,這種BOM能適應預測,主生產(chǎn)計劃和物料需求計劃的需要。
              制造的BOM列舉出制造最終產(chǎn)品所必需的可選特征。它僅僅是為了滿足客戶選定的產(chǎn)品或倉庫訂單而把獨立的模塊匯總起來的BOM,這種BOM一般不直接隸屬于MRP系統(tǒng),而是通過總裝配進度計劃來定義所需要的物料,并與MRP系統(tǒng)結合,只要這些物料使用MRP系統(tǒng)計劃與提供的零件。

              BOM的使用

              在任何制造環(huán)境中,不同的部門和系統(tǒng)都為不同的目的使用BOM(下文的BOM在含義上屬于不同的種類,統(tǒng)一以BOM表達),每個部門和系統(tǒng)都從BOM中獲取特定的數(shù)據(jù)。主要的BOM用戶有:
              設計部門
              設計部門既是BOM的設計者,又是BOM的使用者。就使用而言,無論何時,當產(chǎn)品結構發(fā)生變化,或對某個零件進行重新設計,該部門都要從BOM中獲取所有零件的信息及其相互間的結構信息,只有得到這些信息,才能對其進行定義,描述或修改。
              工藝部門
              工藝部門根據(jù)BOM信息建立各零件的制造工藝和裝配件的裝配工藝。并確定加工制造過程中應使用的工裝,模具等。
              生產(chǎn)部門
              生產(chǎn)部門使用BOM來決定零件或最終產(chǎn)品的制造方法,決定領取的物料清單。
              產(chǎn)品成本核算部門
              該部門利用BOM中每個自制件或外購件的當前成本來確定最終產(chǎn)品的成本。
              物料需求計劃(MRP)系統(tǒng)
              BOM是MRP的主要輸入信息之一,它利用BOM決定主生產(chǎn)計劃項目時,需要哪些自制件和外購件,需要多少,何時需要。

              ERP中BOM的構造問題

              前面已經(jīng)提到,BOM是系統(tǒng)中最重要的基礎數(shù)據(jù)庫,它幾乎與企業(yè)中的所有職能部門都有關系,ERP系統(tǒng)中BOM構造的好壞,直接影響到系統(tǒng)的處理性能和使用效果。因此,根據(jù)實際環(huán)境,,靈活地構造BOM是十分關鍵的。就一般情況而言,構造BOM應注意以下方面。
              1、在BOM中,每一個項目(零件)必須有一個唯一的編碼。對于同一個項目,不管它出現(xiàn)在哪些產(chǎn)品中,都必須具有相同的編碼。對于相似的項目,不管它們的差別有多么小,也必須使用不同的編碼。
              2、為了管理上的方便,有時可以將同一零件的不同狀態(tài)視為幾個不同的項目,構造在產(chǎn)品的BOM中。
              3、BOM中的零件,部件的層次關系一定要反映實際裝配過程,在實際裝配中,有時不一定把某些零件裝配成某個有名稱的組件,或者由于工藝上的考慮需要將某些零件歸在一起加工(例如箱子與箱蓋)。形成臨時組件,但這些組件在產(chǎn)品的零件明細表和裝配圖上并沒有反映出來,但必須在計劃管理中反映出來,這就需要在BOM中設置一種物理上并不存在的項目,通常稱為”虛單”或”虛擬件”,其目的是簡化MRP的編程過程和減少零件之間的影響。
              4、根據(jù)生產(chǎn)實際情況,有時為了強化某些工裝,模具的準備工作,還可以將這些工具構造在BOM中。這樣就可以將一些重要的生產(chǎn)準備工作納入計劃中。有時為了控制某個重要的零件在加工過程中的某些重要環(huán)節(jié),比如,進行質量檢測等,還可將同一個零件的不同加工狀態(tài)視為不同的零件,構造在BOM中。
              5、為了滿足不同部門獲取零件的不同信息,可以靈活地設計BOM中每個項目的屬性。例如,計劃方面的,成本方面,庫存方面,訂單方面。

              設計BOM向制造BOM轉換時常見的問題

              1、設計BOM中的零部件父子關系與制造BOM中的父子關系可能不同,例如汽車行業(yè)一個代號為5401000總成在設計BOM中歸屬于5010000,但在制造BOM結構中歸于焊裝領料模塊,與5010000屬同級。也就是說設計BOM中的父子關系可能變成制造BOM中的兄弟關系。
              2、設計BOM中的零部件圖號在制造BOM中有一部分需分為多個代碼(例如代號+車間碼),用于不同車間的領料。也就是說設計BOM里的一個零部件隨著生產(chǎn)路線變化可能在制造BOM中存在幾個對應的代碼,而且代碼之間根據(jù)生產(chǎn)路線流轉順序存在父子關系,一般是最后完成車間對應代碼是上級車間對應代碼的父級節(jié)點。
              3、設計BOM上部分零部件可能代碼不變,但是由于在實際裝配或加工過程中需要分為幾部分歸屬于不同部件(這些部件可能是第二種情況產(chǎn)生的)分別用于不同車間領料,對應需要分拆成幾個子節(jié)點(每個節(jié)點關聯(lián)不同的領料數(shù)量)對應到不同的父節(jié)點下。
              4、由于借用現(xiàn)象比較普遍,對于整體部件(局部不同類)的借用,出于制造BOM更改處理的需要,在制造BOM中是以增加件、減少件的型式建立結構的,零件數(shù)量存在負數(shù)情況。設計BOM中不存在負數(shù)的情況。
              5、設計BOM中的零部件圖號在往制造BOM轉化時部分零部件需增加車間代碼(前綴),用于表示加工車間(出入庫的需要)。
              6、設計BOM中的零部件往往只有產(chǎn)品代號,在制造BOM中往往需要轉化為物料代號,存在著產(chǎn)品編碼向物料編碼轉換的問題。而且很可能產(chǎn)品編碼和物料編碼或者其它行業(yè)編碼多種并存。
              7、部分物料在設計BOM上多個不同的結構中存在,但在制造BOM中,可能來源于同一加工車間,所以有存在物料合并的情況。

              設計BOM向制造BOM轉換方案

              物料編碼的轉換:
              把圖號(在物料號中)作為兩個BOM系統(tǒng)之間連接的橋梁。即當PDM的產(chǎn)品代號與MRP中的物料編碼中圖號相同時,認為它們是同一個物料。
              PDM從MRP中提取信息時,以圖號作為PDM中的標識(即代號),如果該圖號在PDM中已存在,則認為該產(chǎn)品在PDM中已存在。如果兩者其它屬性信息有差異,可以提交給用戶來決定使用哪一個系統(tǒng)中的數(shù)據(jù)。
              在PDM中添加的產(chǎn)品,可以添加到物料信息中,即根據(jù)MRP中的編碼規(guī)則來生成它的物料號。如果是在設計項目流程中出來的產(chǎn)品,在項目完成時添加到物料信息中。
              標志可以保存數(shù)據(jù)轉換過程程中信息,同時也可以加快系統(tǒng)查詢轉換產(chǎn)品速度,可以在物料信息表和產(chǎn)品屬性表中添加一個字段,用來標識該產(chǎn)品轉換的狀態(tài)、圖號是否存在等信息。下次轉換時可根據(jù)該字段判斷是否需要處理。該標志可做如下功用:
              標志的含義:
              PDM中:該產(chǎn)品來自MRP
               該產(chǎn)品來自MRP,在PDM中其結構或屬性信息發(fā)生了改變。
               產(chǎn)品已轉入MRP,但在PDM中已發(fā)生改變。
               產(chǎn)品在PDM中生成,未轉到MRP中。(默認)
               產(chǎn)品在PDM中生成,已轉到MRP中。
              MRP中:該產(chǎn)品來自PDM
               產(chǎn)品在MRP中生成,已轉到PDM中。
               產(chǎn)品在MRP中生成,未轉到PDM中。(默認)
               產(chǎn)品已轉到PDM中,但在MRP中發(fā)生了改變。
               從PDM數(shù)據(jù)轉化到MRP物料數(shù)據(jù):這時,在MRP中尋找與PDM中代號相同的圖號,如果存在,即認為該產(chǎn)品在MRP中已存在,并分別在兩個系統(tǒng)中做標志。否則,認為PDM中的產(chǎn)品在MRP中是新產(chǎn)品,這時按照MRP的命名規(guī)范在MRP中添加相應的物料號、名稱、重量、圖號、規(guī)格等信息,并標志其從PDM中而來。
              產(chǎn)品(物料)屬性和結構信息發(fā)生改變時,需要改變相應標志位,以在轉換時正確處理。
              從MRP物料數(shù)據(jù)轉換PDM數(shù)據(jù):這時與上述步驟相反,即MRP中的物料圖號如果在PDM 中存在這樣的代號,則認為其已經(jīng)存在。否則,把圖號作為PDM中的代號插入到PDM中去。如果該物料沒有圖號,可以把該物料號作為PDM中的代號插入,并置標志標識其從MRP中而來。
              
              MRP圖號與PDM代號相同但其它屬性不同的處理:有兩個辦法:
              指定其中一個系統(tǒng)的數(shù)據(jù)為正確的,轉換時可以覆蓋另外一個系統(tǒng)的數(shù)據(jù)。由于PDM中的數(shù)據(jù)很多都是從圖紙里面提取的,因此我們認為應該以PDM的數(shù)據(jù)為標準。
              發(fā)現(xiàn)這種情況時,給出具體的提示信息,由用戶選擇是否覆蓋,從而把決定權交給使用者。
              以上兩種方法可以做成選項方式,以方便使用。
              
              產(chǎn)品結構的轉換

              前已敘及,兩個系統(tǒng)的產(chǎn)品結構是不一致的。產(chǎn)品結構的轉換應該是在上述轉換過程中同步進行的。當轉換一個產(chǎn)品或物料時,必須首先遞歸提取其所有的子產(chǎn)品或物料信息,根據(jù)其標志判斷其是否已經(jīng)被轉換過,如果沒有轉換過的話,按上面的方法進行處理。否則,可以略過。但必須按相應的結構信息轉換結構。具體的算法這里不作考究。
              制造BOM上虛擬件或工藝合件以及加工輔料信息輸入一般根據(jù)裝配工藝卡片上可以匯總出在整個工藝過程中系統(tǒng)利用到虛擬件和輔料信息,PDM可以提供操作將這些虛擬件和輔料在產(chǎn)品結構樹轉換成MRP系統(tǒng)里的制造樹之前先在PDM系統(tǒng)里建立完整的制造樹。PDM可以提供建立兩類和產(chǎn)品節(jié)點不同的節(jié)點,我們可以稱其為虛節(jié)點和材料節(jié)點功能,這些節(jié)點信息可以按照匯總出的裝配工藝關系按照一定的操作在PDM系統(tǒng)內先建立完整的制造BOM,然后將這些制造BOM樹導出到MRP系統(tǒng)中,同時進行編碼轉換。但虛節(jié)點信息和輔料信息在PDM系統(tǒng)中匯總時不進入產(chǎn)品明細表和產(chǎn)品圖紙明細欄中。

              工藝路線和工藝信息
              在MRP中,工藝路線信息和工藝信息與某一種物料是有對應關系的,它給出了一個物料在PDM中也可以得到CAPP或BOM中的工藝信息,該信息可以從PDM向MRP數(shù)據(jù)轉換時一并進行。
              將在BOM系統(tǒng)里匯總出MRPⅡ系統(tǒng)需要的數(shù)據(jù),通過BOM軟件的操作菜單將數(shù)據(jù)以指定格式(EXCEL文件、DBF、SQLSERVER數(shù)據(jù)表、ORACLE數(shù)據(jù)表都可以支持)輸出到指定位置。由MRPⅡ系統(tǒng)將數(shù)據(jù)讀取到自己的數(shù)據(jù)庫中

              BOM的維護

              BOM是任何管理系統(tǒng)中基礎中的基礎,如果沒有BOM,就無法制造出同樣的產(chǎn)品,為此要想提高生產(chǎn)管理系統(tǒng)的效率,BOM的正確與否是十分重要的。

              不正確BOM造成影響
              一些項目為BOM所遺漏,造成零件短缺。
              BOM中列入了一些不必要的項目,導致零件過多儲備。
              由于缺件的數(shù)量過多,導致制造的低效率。
              訂單不能按期交貨。
              質量低下。
              計劃缺乏可信性。
              不正確的產(chǎn)品成本。
              廢棄的庫存。

              BOM中發(fā)生錯誤的環(huán)節(jié)
              工程部門產(chǎn)生BOM時
              為BOM準備數(shù)據(jù)時
              BOM數(shù)據(jù)錄入時

              正確維護BOM的方法
              指定專人負責維護BOM
              經(jīng)常監(jiān)測BOM,檢查項目數(shù)量及其生效日期
              對BOM數(shù)據(jù)改變進行分類
              危機性改變——立即完成。如,產(chǎn)品不能實現(xiàn)其功能,或不利于安全時。
              緊急性改變——迅速完成。如,工程部門設置一個合理日期來完成改變。
              常規(guī)改變——從經(jīng)濟實用角度要求變化時再完成。
              臨時改變――臨時更改現(xiàn)場數(shù)據(jù),不變動BOM數(shù)據(jù)。
              實施軟件改變——制作好數(shù)據(jù)導入轉換規(guī)劃和編碼重新組織規(guī)劃,集中力量一次性批量導入。以完成主導系列主要產(chǎn)品數(shù)據(jù)維護。

          posted @ 2005-10-23 22:14 konhon 優(yōu)華 閱讀(1805) | 評論 (0)編輯 收藏

           


          BOM的意義與種類

            料表又稱為BOM(BillOfMaterial),是制造業(yè)管理的重點之一(屬于化工制藥飲料等行業(yè)的配方表其實與這個主題有關系,但是在本文中我們將集中注意力于一般成型工業(yè)中的料表,以免主題發(fā)散而無法聚焦),簡單的定義就是“記載產(chǎn)品組成所需使用材料的表格”。以一個新產(chǎn)品的誕生來看:首先是創(chuàng)意與可行性研究的初期過程,接下來的過程就是初步的工程技術分析與原型產(chǎn)品的設計,等到原型產(chǎn)品比較穩(wěn)定后,經(jīng)過自制或外購分析(MakeorBuyAnalysisandDecision)后就會產(chǎn)生第一版的工程料表(EBOM,EngineeringBOM)。到正式量產(chǎn)之前,第一版的生產(chǎn)料表(PBOM,ProductionBOM)必須要先完成,以便企業(yè)內的相關部門有所遵循。在此之后,就進入了正常的例行維護階段。
          現(xiàn)將一般制造型企業(yè)內存在的BOM說明如下:

          中文名稱 英文名稱 記載內容 主要用途 主要使用部門
          工程料表 Engineering BOM 新產(chǎn)品的用料結構 是研究開發(fā)單位與其他單位間針對新產(chǎn)品初始定義的溝通媒介及日后設變的處理平臺 研究開發(fā)
          生產(chǎn)技術
          生產(chǎn)料表 Production BOM 量產(chǎn)產(chǎn)品的用料結構(企業(yè)內最多人使用) 用于進行生產(chǎn)計劃,采購計劃的擬定,也是搭載選配及替代料表、成本料表的平臺 生管物管
          采購外協(xié)
          營銷財務
          計劃料表 Planning BOM 產(chǎn)品族群比例關系(如某款式汽車手排檔銷量占30%,自排檔銷量占50%,手自排檔銷量占20%)

          用于進行中長期的原料采購計劃及生產(chǎn)產(chǎn)能負荷計劃

          生管物管采
          購外協(xié)
          營銷
          成本料表 Cost BOM 產(chǎn)品的標準成本組成結構 用于查詢產(chǎn)品標準成本之構成狀況,通常使用于以標準成本立帳的企業(yè) 財務
          選配料表 Configuration BOM 產(chǎn)品的選配件結構 用于錄入客戶訂單時讓用戶可以選擇產(chǎn)品的選配件 營銷
          生管物管
          替代料表 Substitute BOM 產(chǎn)品的替代用料結構 用于進行物料計劃時或實際進行生產(chǎn)時,針對本身數(shù)量不足,但替代零件足夠的狀況,以替代件替換原零件,以降低庫存或避免缺料
          生管物管
          采購外協(xié)
          保稅料表 Tax-Bound BOM 產(chǎn)品的保稅料件結構

          用于進行申請海關保稅合同時能自動展開并計算應申請的保稅料件種類及數(shù)量

          生管物管
          財務采購

          常見的BOM信息化管理問題及系統(tǒng)應提供的功能

            BOM的管理是企業(yè)管理范疇中比較復雜的,其中又以設計變更為其首,為簡化本篇的內容,有關設計變更的部份將另辟專文說明,在此說明設計變更以外的:

            1.這么多種BOM,到底該分還是該合?
            既然有這么多種BOM,就產(chǎn)生了這樣一個問題:該合還是該分。如果全部分開,系統(tǒng)設計的復雜度較低,但是,卻造成用戶的負擔,不但信息維護的工作量大增,因為數(shù)據(jù)四處散布,錯誤發(fā)生的機會也大增;另一方面,如果全部合一,雖然乍看之下信息維護較為單純,但是,因為數(shù)據(jù)型態(tài)的差異性將造成系統(tǒng)設計過于復雜,用戶在使用時也不見得覺得方便,因此,分合之間的拿捏要相當有技巧,以兼顧用戶使用的方便和系統(tǒng)設計的復雜度等。
            一般常見的設計是將工程料表、保稅料表及計劃料表獨立,而將生產(chǎn)料表、成本料表、選配料表及替代料表合一,其中,工程料表獨立的原因是它是屬于研究開發(fā)單位使用的功能。雖然BOM是所有BOM的源頭,但是其他部門卻很少真的使用它;另一方面,不是所有的企業(yè)都是保稅型態(tài)的,因此,將保稅料表獨立也是合理的;最后,有關計劃料表的部分,雖然它也是為了生物管的目的而存在,但一般行業(yè)為了計劃的目的其實使用生產(chǎn)料表就已經(jīng)足夠,因此讓它單獨存在也未嘗不可。
            另一方面,生產(chǎn)料表、選配料表及替代料表等三種料表的目的都是要解決生物管方面的問題,將他們合在一起方便集中管理而且一目了然。最后,成本料表是否單獨存在是個見仁見智的問題,但是大多數(shù)的人選擇將它與生產(chǎn)料表等合并以簡化數(shù)據(jù)。

            2.BOM是否應與PDM、CAD等系統(tǒng)整合集成?
          搞軟件的人都知道只要用戶能夠將需求表達清楚,沒有辦不到的事情,BOM與PDM、CAD等系統(tǒng)整合集成也不例外,只要ERP及PDM(或CAD)雙方針對用戶的需求,考慮數(shù)據(jù)的格式(必要時再借力于一些數(shù)據(jù)擷取工具),兩者間的整合集成是輕而易舉的。
            但是,在絕大多數(shù)的案例里我們見到的是“各行其是”而非整合集成,最主要原因就是設計單位與企業(yè)內其他單位看事情的角度不同及需要的信息不同。以搞機械的行業(yè)為例,管設計的重視的是技術及功能問題,產(chǎn)品在他眼中被拆為不同的機構(Mechanism),有的負責傳動,有的負責煞車,有的負責懸吊,有的負責產(chǎn)生動力;但是負責生物管及采購外包的,卻是從管理的角度看事情,他們關心的是成品、半成品、自制件、外包件及采購件等。
            為了解決這種認知上的差距,許多企業(yè)都有“生產(chǎn)技術”方面的人員負責將設計人員眼中的產(chǎn)品料表“翻譯”為生物管及采購外包人員看得懂的產(chǎn)品料表;另一方面,由于PDM、CAD的系統(tǒng)眾多,版本也不斷更新,要發(fā)展出放諸四海皆準的接口是有困難的,但為了某特定客戶的明確需求進行客制化相對的是比較容易的。最后,越來越多的制造業(yè)用戶希望在運行ERP的過程中能夠方便地查詢到產(chǎn)品的設計圖以進行有關技術面的判斷,這種需求相對的難度也較低。

            3.選配料表管理存在的問題
            對于選配件管理而言,最大的難題就是防錯,因為所謂選配件必定是存在限制的,如:某款汽車有三種發(fā)動機及兩種變速箱可供選擇,但是其中有一種發(fā)動機只能與一種變速箱搭配;另外一個例子如:某款電腦共有3.5寸軟盤、5.25寸軟盤、CDR、DVD、CDR/W、100MBZIP、150MBZIP等七種選擇配備,但是不管怎么選,最多只能選四種,因為電腦上只有四個擴充槽。選配防錯的例子非常多,而且在不同產(chǎn)品上面的規(guī)則也完全不同,有一些軟件號稱可以解決這個問題,經(jīng)過了解后發(fā)覺這些軟件為了達到防錯的目的不但設計太過復雜,而且最后證明也無法涵蓋所有的狀況。更令人啼笑皆非的是沒有任何一個用戶使用這種功能,因為實在是太復雜了。

            4.替代料表管理存在的問題
            替代用料在許多電子及機械行業(yè)是種普遍的現(xiàn)象,舉個最簡單的例子來說,1.5″的螺絲通常可以取代1.2″的螺絲,但是,這種替代關系卻不一定適用于所有狀況,有時候使用較長螺絲時反而造成短路或不當干涉等狀況,因此,在料表中表達零件的裝配或插件位置可以讓使用者清楚了解替代料件的限制,以免犯錯造成產(chǎn)品的質量問題。

          結語

            制造型企業(yè)與買賣流通型企業(yè)間最大的差距就是制造行為,而制造管理本身具有高度的復雜性。BOM是所有制造管理的基礎信息,與企業(yè)絕大多數(shù)的部門都息息相關,“BOM管理”這個牽涉面廣泛的主題,長久以來是讓許多企業(yè)頭疼的問題。除了在技術方面有復雜的問題要處理外,在管理面更是個沉重的負擔,過去以手工作業(yè)方式處理BOM管理時經(jīng)常存在“料表更新不及時”,“各方數(shù)據(jù)不一致”的現(xiàn)象,甚至經(jīng)常發(fā)生錯誤而導致生產(chǎn)秩序大亂,錯失市場良機等情況,但是,現(xiàn)在已經(jīng)有設計優(yōu)良且經(jīng)過大量用戶驗證的易飛ERP軟件可以協(xié)助企業(yè)進行這方面的管理了。

          posted @ 2005-10-23 22:12 konhon 優(yōu)華 閱讀(489) | 評論 (0)編輯 收藏

          目前不管是國內的ERP軟件,還是國外的ERP軟件,發(fā)展得都比較成熟。它們對于企業(yè)業(yè)務流程的大致流程都能滿足,要想使自身的ERP軟件在市場上具有獨特的市場份額,就看軟件是否能解決客戶的個性化的需求。但對于ERP軟件部分重要的基礎功能設計將會影響到客戶操作能否方便、靈活、易懂。本文章將對ERP軟件中物料(或料品)單位,從系統(tǒng)適用性和集成等方面做一全面的敘述。

              一、在ERP軟件中單位的種類

              在ERP軟件中,單位涉及的比較多,如:庫存單位、銷售單位、采購單位、重量單位、基本單位、輔助量單位等。目前許多軟件中都有銷售單位、庫存單位以及采購單位,這也是軟件本身最基本的需求,對于后面的幾種單位強調的不是太多,但它卻能滿足客戶的一些特殊的需求。

              二、在ERP軟件中單位之間的關系

              在企業(yè)的實際運用中,一個物料在不同的階段它的單位往往是不同的,如:螺母在生產(chǎn)使用過程中的單位是“個”,在采購時是“盒”,在庫存中的單位是“KG”,他們之間的關系在軟件中又是如何體現(xiàn)的呢?目前在國內許多軟件中,物料的單位信息在不同的窗口中進行維護,他們之間的關系也是在相應的模塊中得到體現(xiàn)。可能出現(xiàn)以下幾種不理想的情況:
              單位的字段通過手工輸入的方法實現(xiàn),這樣對于一個同樣的單位如“KG”,在實際維護中不同的部門可能會產(chǎn)生多種情況,如“kg”、“千克”等;
              在物料清單(BOM)設計中,以“庫存單位”作為參照,可如果客戶的規(guī)模比較大情況下中,設計科(負責BOM的設計)往往無法知道“庫存單位”,這樣在操作方面,無疑有許多困難;
              如果在物料基本信息中將“庫存單位”、“銷售單位”、“采購單位”之間的換算關系維護成固定的比例關系,這也會引起許多問題。如,采購單位從“盒”變成了“箱”,則要將系統(tǒng)中所有物料的換算關系都要進行改變,如果不通過后臺數(shù)據(jù)庫的批量修改(在實際操作中,不推薦客戶從后臺修改,可能造成誤操作。),則無疑增大了工作量,而且可能出項遺漏的現(xiàn)象;
              至于輔助量單位,在許多軟件中都虛擬的存在,可在實際運用中存在許多問題。如,以“米”作為主單位,以“KG”作為輔助量單位,在粗略統(tǒng)計時,往往僅考慮一下以輔助量做單位的數(shù)量即可。如,線類產(chǎn)品,不同長度的線,往往可以用不同的“物料號”加以表達,可在粗略考慮它的庫存數(shù)量時,僅用輔助量來考慮就行了。可如何實現(xiàn)一個物料用多種輔助量來控制呢?在許多軟件中,在物料基本信息中,有“是否輔助量”控制的字段,如果需要,將必須輸入“輔助量單位”,在以后的模塊中,無法對此進行修改。

              三、解決單位引起的問題策略分析

              根據(jù)我參與設計ERP軟件,以及客戶的使用效果和經(jīng)驗,針對于上述的問題可以通過以下方法解決:
              給物料設計一個各部門共識的單位——“基本單位”,所有的單位都以此為參照;并通過“單位代碼”和“單位名稱”來實現(xiàn)單位長度的限制,在國內許多軟件中,往往無法實現(xiàn)復合單位的維護,如,KG/米;
              設計“單位字典”,將所有的單位統(tǒng)一管理,并統(tǒng)一口徑輸入;在其他相應使用地方,通過“下拉框”形式實現(xiàn)單位的維護;
              設計“單位組”字典,實現(xiàn)單位之間的換算關系,在維護物料基本信息時,選擇“單位組”和“單位”;在單位組中設計一個默認的基本單位,其他單位同它設置固定的換算關系,這樣可以方便維護,在其他單位的維護中,僅顯示此物料“單位組”下的各種單位。
              通過專門的窗口維護單位之間的換算關系,解決了如果換單位而引起的換算關系全部需要更新的情況,僅在單位組字段中,對換算比例更新即可。
              總之,物料單位是ERP軟件的一個基本的重要信息,如果設計不要,將會給操作靈活性和系統(tǒng)集成方面帶來許多問題。我對此提出一些看法,希望大家提出寶貴意見。
          posted @ 2005-10-23 22:10 konhon 優(yōu)華 閱讀(418) | 評論 (0)編輯 收藏

          ---- ORACLE數(shù)據(jù)庫作為大型數(shù)據(jù)庫管理系統(tǒng),近年來一直占有世界上高端數(shù)據(jù)庫的最大份額,其強大而完善的數(shù)據(jù)庫管理功能,以及ORACLE公司推陳出新的不斷努力,一直成為IT業(yè)界矚目的焦點。嶺澳核電站的數(shù)據(jù)庫平臺采用了ORACLE7.3作為后端平臺,前端選擇了ORACLE公司的DEVELOPER 2000 及DESIGNER 2000作為開發(fā)工具,采用了目前流行的CLIENT/SERVER模式。本人在ORACLE系統(tǒng)的開發(fā)中,就ORACLE的整套開發(fā)工具提出一些自己的體會,供同行參考。

          ---- 一. ORACLE SQL PLUS 使用技巧:

          ---- ①查找重復記錄:

          SELECT DRAWING,DSNO FROM EM5_PIPE_PREFAB
          WHERE ROWID!=(SELECT MAX(ROWID) FROM EM5
          _PIPE_PREFAB D
          WHERE EM5_PIPE_PREFAB.DRAWING=D.DRAWING AND
          EM5_PIPE_PREFAB.DSNO=D.DSNO);
          ---- 執(zhí)行上述SQL語句后就可以顯示所有DRAWING和DSNO相同且重復的記錄。
          ---- 刪除重復記錄:

          DELETE FROM EM5_PIPE_PREFAB
          WHERE ROWID!=(SELECT MAX(ROWID) FROM EM5
          _PIPE_PREFAB D
          WHERE EM5_PIPE_PREFAB.DRAWING=D.DRAWING AND
          EM5_PIPE_PREFAB.DSNO=D.DSNO);
          ---- 執(zhí)行上述SQL語句后就可以刪除所有DRAWING和DSNO相同且重復的記錄。
          ---- ② 快速編譯所有視圖

          ---- 當在把數(shù)據(jù)庫倒入到新的服務器上后(數(shù)據(jù)庫重建),需要將視圖重新編譯一遍,因為該表空間視圖到其它表空間的表的連接會出現(xiàn)問題,可以利用PL/SQL的語言特性,快速編譯。

          SQL >SPOOL ON.SQL
          SQL >SELECT ‘ALTER VIEW ‘||TNAME||’
          COMPILE;’ FROM TAB;
          SQL >SPOOL OFF
          然后執(zhí)行ON.SQL即可。
          SQL >@ON.SQL
          當然,授權和創(chuàng)建同義詞也可以快速進行,如:
          SQL >SELECT ‘GRANT SELECT ON ’
          ||TNAME||’ TO USERNAME;’ FROM TAB;
          SQL >SELECT ‘CREATE SYNONYM
          ‘||TNAME||’ FOR USERNAME.’||TNAME||’;’ FROM TAB;

          ③ 用外聯(lián)接提高表連接的查詢速度
          在作表連接(常用于視圖)時,常使用以下方法來查詢數(shù)據(jù):
          SELECT PAY_NO, PROJECT_NAME
          FROM A
          WHERE A.PAY_NO NOT IN (SELECT PAY_
          NO FROM B WHERE VALUE >=120000);
          ---- 但是若表A有10000條記錄,表B有10000條記錄,則要用掉30分鐘才能查完,主要因為NOT IN要進行一條一條的比較,共需要10000*10000次比較后,才能得到結果。該用外聯(lián)接后,可以縮短到1分左右的時間:
          SELECT PAY_NO,PROJECT_NAME
          FROM A,B
          WHERE A.PAY_NO=B.PAY_NO(+)
          AND B.PAY_NO IS NULL
          AND B.VALUE >=12000;
          ---- ④ 怎樣讀寫文本型操作系統(tǒng)文件
          ---- 在PL/SQL 3.3以上的版本中,UTL_FILE包允許用戶通過PL/SQL讀寫操作系統(tǒng)文件。如下:

          DECALRE
          FILE_HANDLE UTL_FILE.FILE_TYPE;
          BEGIN
          FILE_HANDLE:=UTL_FILE.FOPEN(
          ‘C:\’,’TEST.TXT’,’A’);
          UTL_FILE.PUT_LINE(FILE_HANDLE,’
          HELLO,IT’S A TEST TXT FILE’);
          UTL_FILE.FCLOSE(FILE_HANDLE);
          END;
          ---- 相關UTL_FILE數(shù)據(jù)庫包詳細信息可以參見相關資料。

          ---- ⑤ 怎樣在數(shù)據(jù)庫觸發(fā)器中使用列的新值與舊值

          ---- 在數(shù)據(jù)庫觸發(fā)器中幾乎總是要使用觸發(fā)器基表的列值,如果某條語句需要某列修改前的值,使用:OLD就可以了,使用某列修改后的新值,用:NEW就可以了。如:OLD.DEPT_NO,:NEW.DEPT_NO。

          ---- 二.ORACLE DEVELOPER 2000使用技巧:

          ---- ① 改變FORM(FMX模塊)運行時的Runform4.5的題頭:

          ---- DEVELOPER2000中FMX默認題頭為:Developer/2000 Forms Runtime for Windows 95 / NT 你可以改為自己定義的標題,

          ---- 1. 在Form級觸發(fā)器中添加觸發(fā)WHEN-NEW-FORM-INSTANCE

          ---- 2. 在此觸發(fā)器中寫如下代碼:

          set_window_property(FORMS_MDI_WINDOW,TITLE,'POINT
          SYSTEM 歡迎使用');
          ---- ② 如何隱藏菜單中的window選項:
          ---- 在創(chuàng)建自己的菜單時,最后選項總有window項,下面介紹如何去掉它,

          ---- 1. 創(chuàng)建一個Menu

          ---- 2. 在Menu中建立一個Item,命名為WINDOW。

          ---- 3. 設置該Item屬性如下:

          ----

          Menu Item Type:Magic
          Command Type:Null
          Magic Item:Window
          Lable:為空

          ---- ③ 怎樣創(chuàng)建動態(tài)下拉列表List
          ---- Developer 2000 中的列表是通過設置相關屬性而完成數(shù)據(jù)項的列表設置的,但那只是靜態(tài)的,有時你想讓某項成為動態(tài)的列表,隨輸入數(shù)據(jù)的改變而改變,就需要動手去編個小程序。下面詳細介紹怎樣去做:

          ---- 有塊EBOP_CABLE_ACCOUNT,下有SPECIFICATION數(shù)據(jù)項,當一進入該模塊時,就將SPECIFICATION項在數(shù)據(jù)庫中存儲的值動態(tài)顯示出來,先在Form4.5中建立一個PRCEDURE,命名為DYN_LIST:

          PROCEDURE DYN_LIST IS
          CURSOR C1 IS
          SELECT DISTINCT(SPECIFICATION)
          FROM EBOP_CABLE_ACCOUNT;
          CNT NUMBER;
          i NUMBER;
          TNAME EBOP_CABLE_
          ACCOUNT.SPECIFICATION%TYPE;
          BEGIN
          CLEAR_LIST('EBOP_CABLE_
          ACCOUNT.SPECIFICATION');
          SELECT COUNT(DISTINCT
          (SPECIFICATION)) INTO CNT FROM EBOP
          _CABLE_ACCOUNT;
          open C1;
          FOR i IN 1..CNT LOOP
          FETCH C1 INTO TNAME;
          EXIT WHEN C1%NOTFOUND
          OR C1%NOTFOUND IS NULL;
          ADD_LIST_ELEMENT
          ('EBOP_CABLE_ACCOUNT
          .SPECIFICATION',i,TNAME,TNAME);
          END LOOP;
          DELETE_LIST_ELEMENT
          ('EBOP_CABLE_ACCOUNT.SPECIFICATION',CNT+1);
          CLOSE C1;
          END;
          然后在FORM的WHEN-NEW
          -FORM-INSTANCE觸發(fā)子中加入一行:
          DYN_LIST;
          ---- 這樣一進入該FMX,就會動態(tài)刷新該列表。除此之外,SPECIFICATION數(shù)據(jù)項改為列表項。
          ---- ④ 當顯示多條記錄且數(shù)據(jù)項特別多時,如何組織錄入及顯示界面:

          ---- 如上圖所示,PRN代碼及設備代碼在畫布1(CONTENT型)上,其它數(shù)據(jù)項在畫布2(STACK型)上,所有數(shù)據(jù)項為一個表的列或一個塊的數(shù)據(jù)項。在拉動水平滾動條時或用TAB或敲回車鍵時,將看到全部數(shù)據(jù)項。這種排布方法適用于數(shù)據(jù)項特別多又想顯示多條記錄時用。主要制作順序為:先建立兩個畫布,畫布1(CONTENT型),畫布2(STACK型),然后建立塊,選畫布時用畫布1,這樣所有項都顯示在畫布1上,然后選中除PRN代碼及設備代碼之外的所有數(shù)據(jù)項,選TOOLS菜單下的PROPERTIES選項,將這些數(shù)據(jù)項的CANVAS屬性選為畫布2(STACK型),然后調整整體位置就可以了。

          ---- ⑤ 如何在FORM的受限觸發(fā)子中提交保存數(shù)據(jù)

          ---- 在FORM中很多觸發(fā)子是不能用COMMIT WORK語句的,當你在該觸發(fā)子中使用了UPDATE,DELETE等操作并想立即存盤時,就需要COMMIT WORK語句了。首先在服務器端建立DB_SQL_COMMIT這個過程(采用ORACLE7.3數(shù)據(jù)庫),

          PROCEDURE DB_SQL_COMMIT IS
          source_cursor integer;
          ignore integer;
          V7 NUMBER :=2;
          BEGIN
          source_cursor:=dbms_sql.open_cursor;
          dbms_sql.parse(source_cursor,'COMMIT WORK',V7);
          ignore:=dbms_sql.execute(source_cursor);
          DBMS_SQL.CLOSE_CURSOR(source_cursor);
          END;
          ---- 然后在FORM中該觸發(fā)子中調用過程DB_SQL_COMMIT;就可以了,當然你可以根據(jù)自己需要將該過程加入?yún)?shù),這樣通過參數(shù)可以得到執(zhí)行DML語句的權限。

          - ⑥ 如何在FORM中實現(xiàn)某數(shù)據(jù)項自動按記錄序號加一操作

          ---- 設塊名為VO,要操作的數(shù)據(jù)項為VO_ID,在該塊中建立塊級觸發(fā)子WHEN-CREATE- RECORD,加入如下代碼:

          :VO_ID:=:System.Trigger_Record;
          ---- 這樣每當生成新記錄時VO_ID就會自動加一了。
          ---- ⑦ 如何在一個FORM中調用另一個FORM,或在一個塊中調用另一個塊時顯示特定的記錄有時用戶會要求在調用另一個FORM時,只顯示相關的記錄,舉例如下,在一個FORM的塊中有一個按鈕,在按鈕觸發(fā)子中加入如下代碼:

          DECLARE
          PM
          PARAMLIST;
          BEGIN
          PM:=GET_PARAMETER_LIST('PM');
          IF NOT ID_NULL(PM) THEN
          DESTROY_PARAMETER_LIST('PM');
          END IF;
          PM:=CREATE_PARAMETER_LIST('PM');
          ......................
          ADD_PARAMETER(PM,'THE_WHERE',
          TEXT_PARAMETER,'EM_NAME=''EM4''
          AND EM_PROJECT_NAME=''支架預制''');
          OPEN_FORM('PAYMENT',ACTIVATE,SESSION,PM);
          END;
          ---- 其中EM_NAME,EM_PROJECT_NAME為本FORM某塊的數(shù)據(jù)項,PAYMENT為要調用的FORM模塊。這樣通過傳遞參數(shù)列表就可以得到想要的結果。在FORM PAYMENT.FMB中,建立一參數(shù)THE_WHERE,CHAR型,長1000,然后在PAYMENT.FMB中建立FORM級觸發(fā)子WHEN-NEW-FORM-INSTANCE,在該觸發(fā)子中加入以下語句:
          IF :PARAMETER.THE_WHERE IS NOT NULL THEN
          SET_BLOCK_PROPERTY('PAYMENT',
          DEFAULT_WHERE,:PARAMETER.THE_WHERE);
          END IF;
          ---- 其中PAYMENT為要顯示的塊,這樣通過參數(shù)傳遞就得到想要的某些特定條件的數(shù)據(jù)了。
          ---- ⑧ 在FORM中當有主從塊時,連續(xù)輸入記錄如何避免被不斷的提示保存:

          ---- 每輸入一條主記錄和若干條該主記錄的從記錄后,此時再導航到主塊輸下一條記錄,F(xiàn)ORM就會提示你是否要保存記錄,而你并不希望FORM提示,讓它自動保存,此時你可以到Program Units中找到過程PROCEDURE Clear_All_Master_Details,然后在這個過程中找到語句

          Clear_Block(ASK_COMMIT);
          ---- 將其改為Clear_Block(DO_COMMIT);就可以了。
          ---- ⑨ 在Report開始時選擇排序項:

          ---- 在報表開始的Parameter Form中選擇報表按哪個數(shù)據(jù)項排序,

          ---- 1. 先在USER PARAMETER 中創(chuàng)建SORT參數(shù),為字符型,長20。

          ---- 2. 初始值選’責任方’,然后將這四個值輸入到DATA SELECTION中,形成列表。

          ---- 3. 然后處理QUERY中的SQL語句:

          select CHARGER,FCO_NO,EM_NAME,FCO
          _NO,DESCRIPTION, FCR_POINT
          from FCR_MAIN
          ORDER BY DECODE(:SORT,'責任方',CHARGER,'FCO號',
          FCO_NO,'FCR號',FCR_NO,'FCR號',EM_NAME)

          ---- ⑩ 在Developer 2000中如何讀寫操作系統(tǒng)文件
          ---- 在用Developer 2000的開發(fā)工具開發(fā)應用程序時,經(jīng)常碰到需要讀寫外部文件的問題,可以用ORACLE 帶的包TEXT_IO來完成這項需求。例如:

          DECLARE
          IN_FILE TEXT_IO.FILE_TYPE;
          OUT_FILE TEXT_IO.FILE_TYPE;
          LINE_BUFER VARCHAR2(80);
          /*若不用IN_FILE,可以將各字段聯(lián)接在一起賦值給此變量*/
          BEGIN
          IN_FILE:=TEXT_IO.FOPEN
          (‘C:\TEMP\TEST1.TXT’,’r’);
          OUT_FILE:=TEXT_IO.FOPEN
          (‘C:\TEMP\TEST2.TXT’,’w+’);
          LOOP
          TEXT_IO.GET_LINE(IN_FILE,LINE_BUFER);
          TEXT_IO.PUT(LINE_BUFER);
          TEXT_IO.NEW_LINE;
          TEXT_IO.PUT_LINE(OUT_FILE,LINE_BUFER);
          END LOOP;
          EXCEPTION
          WHEN no_data_found THEN
          TEXT_IO.PUT_LINE(‘CLOSING THE FILE ,PLEASE WAITING....’);
          TEXT_IO.FCLOSE(IN_FILE);
          TEXT_IO.FCLOSE(OUT_FILE);
          END;
          ---- 三.數(shù)據(jù)庫管理

          ---- ① 在刪除一個表中的全部數(shù)據(jù)時,須使用TRUNCATE TABLE 表名;因為用DROP TABLE,DELETE * FROM 表名時,TABLESPACE表空間該表的占用空間并未釋放,反復幾次DROP,DELETE操作后,該TABLESPACE上百兆的空間就被耗光了。

          ---- ② 數(shù)據(jù)庫文件的移動方法

          ---- 當想將數(shù)據(jù)庫文件移動到另外一個目錄下時,可以用ALTER DATABASE命令來移動(比ALTER TABLESPACE適用性強):

          ---- 1. 使用SERVER MANAGER關閉實例.

          SVRMGR > connect internal;
          SVRMGR > shutdown;
          SVRMGR >exit;
          ---- 2. 使用操作系統(tǒng)命令來移動數(shù)據(jù)庫文件位置(假設這里操作系統(tǒng)為SOLARIS 2.6). 在UNIX中用 mv命令可以把文件移動到新的位置,

          #mv /ora13/orarun/document.dbf /ora12/orarun
          ---- 3. 裝載數(shù)據(jù)庫并用alter database命令來改變數(shù)據(jù)庫中的文件名.
          SVRMGR > connect internal;
          SVRMGR > startup mount RUN73;
          SVRMGR > alter database rename file
          > ‘/ ora13/orarun/document.dbf’
          > ‘/ ora12/orarun/document.dbf’;
          ---- 4. 啟動實例.

          SVRMGR > alter database open;

          posted @ 2005-10-17 05:58 konhon 優(yōu)華 閱讀(478) | 評論 (0)編輯 收藏

          ---- ORACLE數(shù)據(jù)庫作為大型數(shù)據(jù)庫管理系統(tǒng),近年來一直占有世界上高端數(shù)據(jù)庫的最大份額,其強大而完善的數(shù)據(jù)庫管理功能,以及ORACLE公司推陳出新的不斷努力,一直成為IT業(yè)界矚目的焦點。嶺澳核電站的數(shù)據(jù)庫平臺采用了ORACLE7.3作為后端平臺,前端選擇了ORACLE公司的DEVELOPER 2000 及DESIGNER 2000作為開發(fā)工具,采用了目前流行的CLIENT/SERVER模式。本人在ORACLE系統(tǒng)的開發(fā)中,就ORACLE的整套開發(fā)工具提出一些自己的體會,供同行參考。

          ---- 一. ORACLE SQL PLUS 使用技巧:

          ---- ①查找重復記錄:

          SELECT DRAWING,DSNO FROM EM5_PIPE_PREFAB
          WHERE ROWID!=(SELECT MAX(ROWID) FROM EM5
          _PIPE_PREFAB D
          WHERE EM5_PIPE_PREFAB.DRAWING=D.DRAWING AND
          EM5_PIPE_PREFAB.DSNO=D.DSNO);
          ---- 執(zhí)行上述SQL語句后就可以顯示所有DRAWING和DSNO相同且重復的記錄。
          ---- 刪除重復記錄:

          DELETE FROM EM5_PIPE_PREFAB
          WHERE ROWID!=(SELECT MAX(ROWID) FROM EM5
          _PIPE_PREFAB D
          WHERE EM5_PIPE_PREFAB.DRAWING=D.DRAWING AND
          EM5_PIPE_PREFAB.DSNO=D.DSNO);
          ---- 執(zhí)行上述SQL語句后就可以刪除所有DRAWING和DSNO相同且重復的記錄。
          ---- ② 快速編譯所有視圖

          ---- 當在把數(shù)據(jù)庫倒入到新的服務器上后(數(shù)據(jù)庫重建),需要將視圖重新編譯一遍,因為該表空間視圖到其它表空間的表的連接會出現(xiàn)問題,可以利用PL/SQL的語言特性,快速編譯。

          SQL >SPOOL ON.SQL
          SQL >SELECT ‘ALTER VIEW ‘||TNAME||’
          COMPILE;’ FROM TAB;
          SQL >SPOOL OFF
          然后執(zhí)行ON.SQL即可。
          SQL >@ON.SQL
          當然,授權和創(chuàng)建同義詞也可以快速進行,如:
          SQL >SELECT ‘GRANT SELECT ON ’
          ||TNAME||’ TO USERNAME;’ FROM TAB;
          SQL >SELECT ‘CREATE SYNONYM
          ‘||TNAME||’ FOR USERNAME.’||TNAME||’;’ FROM TAB;

          ③ 用外聯(lián)接提高表連接的查詢速度
          在作表連接(常用于視圖)時,常使用以下方法來查詢數(shù)據(jù):
          SELECT PAY_NO, PROJECT_NAME
          FROM A
          WHERE A.PAY_NO NOT IN (SELECT PAY_
          NO FROM B WHERE VALUE >=120000);
          ---- 但是若表A有10000條記錄,表B有10000條記錄,則要用掉30分鐘才能查完,主要因為NOT IN要進行一條一條的比較,共需要10000*10000次比較后,才能得到結果。該用外聯(lián)接后,可以縮短到1分左右的時間:
          SELECT PAY_NO,PROJECT_NAME
          FROM A,B
          WHERE A.PAY_NO=B.PAY_NO(+)
          AND B.PAY_NO IS NULL
          AND B.VALUE >=12000;
          ---- ④ 怎樣讀寫文本型操作系統(tǒng)文件
          ---- 在PL/SQL 3.3以上的版本中,UTL_FILE包允許用戶通過PL/SQL讀寫操作系統(tǒng)文件。如下:

          DECALRE
          FILE_HANDLE UTL_FILE.FILE_TYPE;
          BEGIN
          FILE_HANDLE:=UTL_FILE.FOPEN(
          ‘C:\’,’TEST.TXT’,’A’);
          UTL_FILE.PUT_LINE(FILE_HANDLE,’
          HELLO,IT’S A TEST TXT FILE’);
          UTL_FILE.FCLOSE(FILE_HANDLE);
          END;
          ---- 相關UTL_FILE數(shù)據(jù)庫包詳細信息可以參見相關資料。

          ---- ⑤ 怎樣在數(shù)據(jù)庫觸發(fā)器中使用列的新值與舊值

          ---- 在數(shù)據(jù)庫觸發(fā)器中幾乎總是要使用觸發(fā)器基表的列值,如果某條語句需要某列修改前的值,使用:OLD就可以了,使用某列修改后的新值,用:NEW就可以了。如:OLD.DEPT_NO,:NEW.DEPT_NO。

          ---- 二.ORACLE DEVELOPER 2000使用技巧:

          ---- ① 改變FORM(FMX模塊)運行時的Runform4.5的題頭:

          ---- DEVELOPER2000中FMX默認題頭為:Developer/2000 Forms Runtime for Windows 95 / NT 你可以改為自己定義的標題,

          ---- 1. 在Form級觸發(fā)器中添加觸發(fā)WHEN-NEW-FORM-INSTANCE

          ---- 2. 在此觸發(fā)器中寫如下代碼:

          set_window_property(FORMS_MDI_WINDOW,TITLE,'POINT
          SYSTEM 歡迎使用');
          ---- ② 如何隱藏菜單中的window選項:
          ---- 在創(chuàng)建自己的菜單時,最后選項總有window項,下面介紹如何去掉它,

          ---- 1. 創(chuàng)建一個Menu

          ---- 2. 在Menu中建立一個Item,命名為WINDOW。

          ---- 3. 設置該Item屬性如下:

          ----

          Menu Item Type:Magic
          Command Type:Null
          Magic Item:Window
          Lable:為空

          ---- ③ 怎樣創(chuàng)建動態(tài)下拉列表List
          ---- Developer 2000 中的列表是通過設置相關屬性而完成數(shù)據(jù)項的列表設置的,但那只是靜態(tài)的,有時你想讓某項成為動態(tài)的列表,隨輸入數(shù)據(jù)的改變而改變,就需要動手去編個小程序。下面詳細介紹怎樣去做:

          ---- 有塊EBOP_CABLE_ACCOUNT,下有SPECIFICATION數(shù)據(jù)項,當一進入該模塊時,就將SPECIFICATION項在數(shù)據(jù)庫中存儲的值動態(tài)顯示出來,先在Form4.5中建立一個PRCEDURE,命名為DYN_LIST:

          PROCEDURE DYN_LIST IS
          CURSOR C1 IS
          SELECT DISTINCT(SPECIFICATION)
          FROM EBOP_CABLE_ACCOUNT;
          CNT NUMBER;
          i NUMBER;
          TNAME EBOP_CABLE_
          ACCOUNT.SPECIFICATION%TYPE;
          BEGIN
          CLEAR_LIST('EBOP_CABLE_
          ACCOUNT.SPECIFICATION');
          SELECT COUNT(DISTINCT
          (SPECIFICATION)) INTO CNT FROM EBOP
          _CABLE_ACCOUNT;
          open C1;
          FOR i IN 1..CNT LOOP
          FETCH C1 INTO TNAME;
          EXIT WHEN C1%NOTFOUND
          OR C1%NOTFOUND IS NULL;
          ADD_LIST_ELEMENT
          ('EBOP_CABLE_ACCOUNT
          .SPECIFICATION',i,TNAME,TNAME);
          END LOOP;
          DELETE_LIST_ELEMENT
          ('EBOP_CABLE_ACCOUNT.SPECIFICATION',CNT+1);
          CLOSE C1;
          END;
          然后在FORM的WHEN-NEW
          -FORM-INSTANCE觸發(fā)子中加入一行:
          DYN_LIST;
          ---- 這樣一進入該FMX,就會動態(tài)刷新該列表。除此之外,SPECIFICATION數(shù)據(jù)項改為列表項。
          ---- ④ 當顯示多條記錄且數(shù)據(jù)項特別多時,如何組織錄入及顯示界面:

          ---- 如上圖所示,PRN代碼及設備代碼在畫布1(CONTENT型)上,其它數(shù)據(jù)項在畫布2(STACK型)上,所有數(shù)據(jù)項為一個表的列或一個塊的數(shù)據(jù)項。在拉動水平滾動條時或用TAB或敲回車鍵時,將看到全部數(shù)據(jù)項。這種排布方法適用于數(shù)據(jù)項特別多又想顯示多條記錄時用。主要制作順序為:先建立兩個畫布,畫布1(CONTENT型),畫布2(STACK型),然后建立塊,選畫布時用畫布1,這樣所有項都顯示在畫布1上,然后選中除PRN代碼及設備代碼之外的所有數(shù)據(jù)項,選TOOLS菜單下的PROPERTIES選項,將這些數(shù)據(jù)項的CANVAS屬性選為畫布2(STACK型),然后調整整體位置就可以了。

          ---- ⑤ 如何在FORM的受限觸發(fā)子中提交保存數(shù)據(jù)

          ---- 在FORM中很多觸發(fā)子是不能用COMMIT WORK語句的,當你在該觸發(fā)子中使用了UPDATE,DELETE等操作并想立即存盤時,就需要COMMIT WORK語句了。首先在服務器端建立DB_SQL_COMMIT這個過程(采用ORACLE7.3數(shù)據(jù)庫),

          PROCEDURE DB_SQL_COMMIT IS
          source_cursor integer;
          ignore integer;
          V7 NUMBER :=2;
          BEGIN
          source_cursor:=dbms_sql.open_cursor;
          dbms_sql.parse(source_cursor,'COMMIT WORK',V7);
          ignore:=dbms_sql.execute(source_cursor);
          DBMS_SQL.CLOSE_CURSOR(source_cursor);
          END;
          ---- 然后在FORM中該觸發(fā)子中調用過程DB_SQL_COMMIT;就可以了,當然你可以根據(jù)自己需要將該過程加入?yún)?shù),這樣通過參數(shù)可以得到執(zhí)行DML語句的權限。

          - ⑥ 如何在FORM中實現(xiàn)某數(shù)據(jù)項自動按記錄序號加一操作

          ---- 設塊名為VO,要操作的數(shù)據(jù)項為VO_ID,在該塊中建立塊級觸發(fā)子WHEN-CREATE- RECORD,加入如下代碼:

          :VO_ID:=:System.Trigger_Record;
          ---- 這樣每當生成新記錄時VO_ID就會自動加一了。
          ---- ⑦ 如何在一個FORM中調用另一個FORM,或在一個塊中調用另一個塊時顯示特定的記錄有時用戶會要求在調用另一個FORM時,只顯示相關的記錄,舉例如下,在一個FORM的塊中有一個按鈕,在按鈕觸發(fā)子中加入如下代碼:

          DECLARE
          PM
          PARAMLIST;
          BEGIN
          PM:=GET_PARAMETER_LIST('PM');
          IF NOT ID_NULL(PM) THEN
          DESTROY_PARAMETER_LIST('PM');
          END IF;
          PM:=CREATE_PARAMETER_LIST('PM');
          ......................
          ADD_PARAMETER(PM,'THE_WHERE',
          TEXT_PARAMETER,'EM_NAME=''EM4''
          AND EM_PROJECT_NAME=''支架預制''');
          OPEN_FORM('PAYMENT',ACTIVATE,SESSION,PM);
          END;
          ---- 其中EM_NAME,EM_PROJECT_NAME為本FORM某塊的數(shù)據(jù)項,PAYMENT為要調用的FORM模塊。這樣通過傳遞參數(shù)列表就可以得到想要的結果。在FORM PAYMENT.FMB中,建立一參數(shù)THE_WHERE,CHAR型,長1000,然后在PAYMENT.FMB中建立FORM級觸發(fā)子WHEN-NEW-FORM-INSTANCE,在該觸發(fā)子中加入以下語句:
          IF :PARAMETER.THE_WHERE IS NOT NULL THEN
          SET_BLOCK_PROPERTY('PAYMENT',
          DEFAULT_WHERE,:PARAMETER.THE_WHERE);
          END IF;
          ---- 其中PAYMENT為要顯示的塊,這樣通過參數(shù)傳遞就得到想要的某些特定條件的數(shù)據(jù)了。
          ---- ⑧ 在FORM中當有主從塊時,連續(xù)輸入記錄如何避免被不斷的提示保存:

          ---- 每輸入一條主記錄和若干條該主記錄的從記錄后,此時再導航到主塊輸下一條記錄,F(xiàn)ORM就會提示你是否要保存記錄,而你并不希望FORM提示,讓它自動保存,此時你可以到Program Units中找到過程PROCEDURE Clear_All_Master_Details,然后在這個過程中找到語句

          Clear_Block(ASK_COMMIT);
          ---- 將其改為Clear_Block(DO_COMMIT);就可以了。
          ---- ⑨ 在Report開始時選擇排序項:

          ---- 在報表開始的Parameter Form中選擇報表按哪個數(shù)據(jù)項排序,

          ---- 1. 先在USER PARAMETER 中創(chuàng)建SORT參數(shù),為字符型,長20。

          ---- 2. 初始值選’責任方’,然后將這四個值輸入到DATA SELECTION中,形成列表。

          ---- 3. 然后處理QUERY中的SQL語句:

          select CHARGER,FCO_NO,EM_NAME,FCO
          _NO,DESCRIPTION, FCR_POINT
          from FCR_MAIN
          ORDER BY DECODE(:SORT,'責任方',CHARGER,'FCO號',
          FCO_NO,'FCR號',FCR_NO,'FCR號',EM_NAME)

          ---- ⑩ 在Developer 2000中如何讀寫操作系統(tǒng)文件
          ---- 在用Developer 2000的開發(fā)工具開發(fā)應用程序時,經(jīng)常碰到需要讀寫外部文件的問題,可以用ORACLE 帶的包TEXT_IO來完成這項需求。例如:

          DECLARE
          IN_FILE TEXT_IO.FILE_TYPE;
          OUT_FILE TEXT_IO.FILE_TYPE;
          LINE_BUFER VARCHAR2(80);
          /*若不用IN_FILE,可以將各字段聯(lián)接在一起賦值給此變量*/
          BEGIN
          IN_FILE:=TEXT_IO.FOPEN
          (‘C:\TEMP\TEST1.TXT’,’r’);
          OUT_FILE:=TEXT_IO.FOPEN
          (‘C:\TEMP\TEST2.TXT’,’w+’);
          LOOP
          TEXT_IO.GET_LINE(IN_FILE,LINE_BUFER);
          TEXT_IO.PUT(LINE_BUFER);
          TEXT_IO.NEW_LINE;
          TEXT_IO.PUT_LINE(OUT_FILE,LINE_BUFER);
          END LOOP;
          EXCEPTION
          WHEN no_data_found THEN
          TEXT_IO.PUT_LINE(‘CLOSING THE FILE ,PLEASE WAITING....’);
          TEXT_IO.FCLOSE(IN_FILE);
          TEXT_IO.FCLOSE(OUT_FILE);
          END;
          ---- 三.數(shù)據(jù)庫管理

          ---- ① 在刪除一個表中的全部數(shù)據(jù)時,須使用TRUNCATE TABLE 表名;因為用DROP TABLE,DELETE * FROM 表名時,TABLESPACE表空間該表的占用空間并未釋放,反復幾次DROP,DELETE操作后,該TABLESPACE上百兆的空間就被耗光了。

          ---- ② 數(shù)據(jù)庫文件的移動方法

          ---- 當想將數(shù)據(jù)庫文件移動到另外一個目錄下時,可以用ALTER DATABASE命令來移動(比ALTER TABLESPACE適用性強):

          ---- 1. 使用SERVER MANAGER關閉實例.

          SVRMGR > connect internal;
          SVRMGR > shutdown;
          SVRMGR >exit;
          ---- 2. 使用操作系統(tǒng)命令來移動數(shù)據(jù)庫文件位置(假設這里操作系統(tǒng)為SOLARIS 2.6). 在UNIX中用 mv命令可以把文件移動到新的位置,

          #mv /ora13/orarun/document.dbf /ora12/orarun
          ---- 3. 裝載數(shù)據(jù)庫并用alter database命令來改變數(shù)據(jù)庫中的文件名.
          SVRMGR > connect internal;
          SVRMGR > startup mount RUN73;
          SVRMGR > alter database rename file
          > ‘/ ora13/orarun/document.dbf’
          > ‘/ ora12/orarun/document.dbf’;
          ---- 4. 啟動實例.

          SVRMGR > alter database open;

          posted @ 2005-10-17 05:58 konhon 優(yōu)華 閱讀(331) | 評論 (0)編輯 收藏

          也許你還不知道 - sqlplus的小秘密(4)

          這個也許不算什么秘密, 很多人大概都知道, 不過用過的人也許不多.

          在8.1.7版本(也許是816? 不太確定)以后, sql*plus中有一個set markup html的命令, 可以將sql*plus的輸出以html格式展現(xiàn).


          scott@O9I.US.ORACLE.COM> set markup html on spool on
          ">scott@O9I.US.ORACLE.COM&gt; select empno, ename from emp where rownum<3;
          <br>
          <p>
          <table border='1' width='90%' align='center' summary='Script output'>
          <tr>
          <th scope="col">
          EMPNO
          </th>
          <th scope="col">
          ENAME
          </th>
          </tr>
          <tr>
          <td align="right">
          7369
          </td>
          <td>
          SMITH
          </td>
          </tr>
          <tr>
          <td align="right">
          7499
          </td>
          <td>
          ALLEN
          </td>
          </tr>
          </table>
          <p>

          注意其中的spool on, 當在屏幕上輸出的時候, 我們看不出與不加spool on有什么區(qū)別, 但是當我們使用spool filename 輸出到文件的時候, 會看到spool文件中出現(xiàn)了<html><body>等tag.

          ">scott@O9I.US.ORACLE.COM&gt; spool c:emp.htm
          <br>
          ">scott@O9I.US.ORACLE.COM&gt; /
          <br>
          <p>
          <table border='1' width='90%' align='center' summary='Script output'>
          ......此處省略

          ">scott@O9I.US.ORACLE.COM&gt; spool off
          <br>

          查看生成的emp.htm文件的內容:

          <html>
          <head>
          <meta http-equiv="Content-Type" content="text/html; charset=WINDOWS-936">
          <meta name="generator" content="SQL*Plus 9.2.0">
          <style type='text/css'> body {font:10pt Arial,Helvetica,sans-serif; color:black; background:White;} p {font:10pt Arial,Helvetica,sans-serif; color:black; background:White;} table,tr,td {font:10pt Arial,Helvetica,sans-serif; color:Black; background:#f7f7e7; padding:0px 0px 0px 0px; margin:0px 0px 0px 0px;} th {font:bold 10pt Arial,Helvetica,sans-serif; color:#336699; background:#cccc99; padding:0px 0px 0px 0px;} h1 {font:16pt Arial,Helvetica,Geneva,sans-serif; color:#336699; background-color:White; border-bottom:1px solid #cccc99; margin-top:0pt; margin-bottom:0pt; padding:0px 0px 0px 0px;} h2 {font:bold 10pt Arial,Helvetica,Geneva,sans-serif; color:#336699; background-color:White; margin-top:4pt; margin-bottom:0pt;} a {font:9pt Arial,Helvetica,sans-serif; color:#663300; background:#ffffff; margin-top:0pt; margin-bottom:0pt; vertical-align:top;}</style><title>SQL*Plus Report</title>
          </head>
          <body>
          ">scott@O9I.US.ORACLE.COM&gt; /
          <br>
          <p>
          <table border='1' width='90%' align='center' summary='Script output'>
          <tr>
          <th scope="col">
          EMPNO
          </th>
          <th scope="col">
          ENAME
          </th>
          </tr>
          <tr>
          <td align="right">
          7369
          </td>
          <td>
          SMITH
          </td>
          </tr>
          <tr>
          <td align="right">
          7499
          </td>
          <td>
          ALLEN
          </td>
          </tr>
          </table>
          <p>

          ">scott@O9I.US.ORACLE.COM&gt; spool off
          <br>
          </body>
          </html>

          用ie打開emp.htm文件后的樣式如下:

          現(xiàn)在看看spool off的情況下:

          ">scott@O9I.US.ORACLE.COM&gt; set markup html on spool off
          <br>
          ">scott@O9I.US.ORACLE.COM&gt; spool c:emp2.htm
          <br>
          ">scott@O9I.US.ORACLE.COM&gt; /
          <br>
          <p>
          <table border='1' width='90%' align='center' summary='Script outpu
          ......此處省略
          ">scott@O9I.US.ORACLE.COM&gt; spool off
          <br>
          ">scott@O9I.US.ORACLE.COM&gt;

          查看生成的emp2.htm文件的內容:

          ">scott@O9I.US.ORACLE.COM&gt; /
          <br>
          <p>
          <table border='1' width='90%' align='center' summary='Script output'>
          <tr>
          <th scope="col">
          EMPNO
          </th>
          <th scope="col">
          ENAME
          </th>
          </tr>
          <tr>
          <td align="right">
          7369
          </td>
          <td>
          SMITH
          </td>
          </tr>
          <tr>
          <td align="right">
          7499
          </td>
          <td>
          ALLEN
          </td>
          </tr>
          </table>
          <p>

          ">scott@O9I.US.ORACLE.COM&gt; spool off

          由于這段代碼中沒有html文件頭, 所以我們可以直接作為內容插入到網(wǎng)頁中, 現(xiàn)在我們就可以把這段代碼放到下面作為示例:

          EMPNO ENAME
          7369 SMITH
          7499 ALLEN

          總結: 如果要生成一個完整的html文件, 就使用spool on選項, 如果只是要內容部分(用來添加到一個現(xiàn)有的網(wǎng)頁中), 那么就使用spool off選項.

          另外, set markup html還有很多選項可以用來定制生成的html的各個部分, 例如head, body, table等, 這里不再逐一說明, 詳細信息可以參考SQL*Plus User's Guide and Reference.

          適用場景: 當需要定時更新一個從數(shù)據(jù)庫中獲取內容的靜態(tài)頁面時, 這種方法絕對是快捷的并且容易實現(xiàn)的.

          posted @ 2005-10-17 05:53 konhon 優(yōu)華 閱讀(426) | 評論 (0)編輯 收藏

          有沒有過這樣的經(jīng)歷? 在sql*plus中敲了很長的命令后, 突然發(fā)現(xiàn)想不起某個列的名字了, 如果取消當前的命令,待查詢后再重敲, 那太痛苦了. 當然你可以另開一個sql*plus窗口進行查詢, 但這里提供的方法更簡單.

          比如說, 你想查工資大于4000的員工的信息, 輸入了下面的語句:

          scott@O9I.US.ORACLE.COM> select deptno,
            2  empno,
            3  ename
            4  from emp
            5  where

          這時, 你發(fā)現(xiàn)你想不起來工資的列名是什么了.

          這種情況下, 只要在下一行以#開頭, 就可以執(zhí)行一條sql*plus命令, 執(zhí)行完后, 剛才的語句可以繼續(xù)輸入

          scott@O9I.US.ORACLE.COM> select deptno,
            2  empno,
            3  ename
            4  from emp
            5  where
            6  #desc emp
          Name Null? Type ----------------------------------------- -------- -------------- EMPNO NOT NULL NUMBER(4) ENAME VARCHAR2(10) JOB VARCHAR2(9) MGR NUMBER(4) HIREDATE DATE SAL NUMBER(7,2) COMM NUMBER(7,2) DEPTNO NUMBER(2) 6 sal > 4000; DEPTNO EMPNO ENAME ---------- ---------- ---------- 10 7839 KING
          posted @ 2005-10-17 05:52 konhon 優(yōu)華 閱讀(349) | 評論 (0)編輯 收藏

          Sql*plus中, 不允許sql語句中間有空行, 這在從其它地方拷貝腳本到sql*plus中執(zhí)行時很麻煩. 比如下面的腳本:

          select deptno, empno, ename
          from emp
          
          where empno = '7788';

          如果拷貝到sql*plus中執(zhí)行, 就會出現(xiàn)錯誤:


          scott@O9I.US.ORACLE.COM> select deptno, empno, ename
            2  from emp
            3
          where empno = '7788';
          SP2-0734: unknown command beginning "where empn..." - rest of line ignored.
          

          原因是sqlplus遇到空行就認為是語句結束了.
          其實要改變這種現(xiàn)象, 只要使用SQLBLANKLINES參數(shù)就可以了.

          scott@O9I.US.ORACLE.COM> SET SQLBLANKLINES ON
          scott@O9I.US.ORACLE.COM>
          scott@O9I.US.ORACLE.COM> select deptno, empno, ename
            2  from emp
            3
            4  where empno = '7788';
          
              DEPTNO      EMPNO ENAME
          ---------- ---------- ----------
                  20       7788 SCOTT
          
          
          posted @ 2005-10-17 05:48 konhon 優(yōu)華 閱讀(395) | 評論 (0)編輯 收藏

          有沒有為了dbms_output.put_line會"吃掉"最前面的空格而苦惱?

          scott@O9I.US.ORACLE.COM> set serveroutput on
          scott@O9I.US.ORACLE.COM> exec dbms_output.put_line('   abc');
          abc
          
          PL/SQL procedure successfully completed.


          (俺以前曾經(jīng)很苦惱為了保留空格, 嘗試了加".", 加不可見字符等辦法, 不過終究覺得不自然)
          實際上, 只要在set serveroutput on后加上format wrapped參數(shù), 就可以避免這個問題

          scott@O9I.US.ORACLE.COM> set serveroutput on format wrapped
          scott@O9I.US.ORACLE.COM> exec dbms_output.put_line('   abc');
             abc
          
          PL/SQL procedure successfully completed.
          posted @ 2005-10-17 05:47 konhon 優(yōu)華 閱讀(371) | 評論 (0)編輯 收藏

          僅列出標題
          共21頁: First 上一頁 9 10 11 12 13 14 15 16 17 下一頁 Last 
          主站蜘蛛池模板: 岳西县| 咸丰县| 大渡口区| 郓城县| 惠来县| 花垣县| 绥滨县| 克什克腾旗| 舟山市| 武威市| 习水县| 阳高县| 化州市| 平乡县| 虎林市| 洪泽县| 建昌县| 阜宁县| 松江区| 黄浦区| 旬邑县| 金昌市| 平安县| 页游| 玉树县| 盐亭县| 三门峡市| 当阳市| 门源| 钦州市| 金山区| 屏东县| 乐至县| 乐清市| 台中市| 昭平县| 阳高县| 肇州县| 龙岩市| 安岳县| 紫云|