The previous examples illustrated how companies may have more than one type of bill of material. It is important that while the different types of BOM may differ in the way items are grouped together, they must use the same components (except the phantom items) in the same quantities, or require the same amount of materials in order to fill the same production plan. This example demonstrates some simple methods that compare the different types of BOM and detect any differences.
One way to compare two bill of material is to compare their summarized parts lists for the same production plan. The following SAS code creates a transactional data set, Trans7, which contains the new values of the gross requirements for the lamp 'LAXX' and all base assembly, shade, or socket assembly options that are described in Example 3.4. The gross requirements for the lamp 'LAXX' and options 'B100', 'S100', and 'A100' that are associated with the lamp 'LA01' are 1. All other options have 0 gross requirement. Therefore, the item 'LAXX' and all of the options listed in the data set Trans7 are master schedule items. See the section Part Master Data Set for a detailed description about master schedule items.
/* Gross requirement transactional data set */ data Trans7; format Part $8. Req 8.0 ; input Part $ Req ; datalines; LAXX 1 B100 1 B101 0 B102 0 S100 1 S101 0 S102 0 S103 0 S104 0 S105 0 S106 0 S107 0 A100 1 A101 0 ;
The following SAS DATA step code updates the value of the Req variable in the PMaster4 data set (described in Example 3.4) with the value of the variable in the transactional data set Trans7.
proc sort data=Trans7; by Part; run;
/* Update the gross requirement values of the */ /* Product Structure data set */ data PMaster7(drop=OldReq); merge PMaster4(rename=(Req=OldReq)) Trans7(in=in2); by Part; if not in2 then Req=OldReq; run;
The following code invokes PROC BOM with the new Part Master data set PMaster7 and the Product Structure data set ParComp4 (described in Example 3.4). The summarized parts list is shown in Output 3.7.1.
/* Generate the indented BOM and summarized parts list */ proc bom data=ParComp4 pmdata=PMaster7 out=IndBOM7 summaryout=SumBOM7; structure / part=Part requirement=Req leadtime=LeadTime parent=Parent component=Component quantity=QtyPer id=(Desc Unit); run;
ABC Lamp Company |
Summarized Parts List, Period 1 |
_Part_ | Low_Code | Req | On_Hand | Net_Req | LeadTime | Desc | Unit |
---|---|---|---|---|---|---|---|
1100 | 2 | 1 | 0 | 1 | 2 | Finished shaft | Each |
1200 | 3 | 1 | 0 | 1 | 3 | 6-Diameter steel plate | Each |
1300 | 2 | 1 | 0 | 1 | 2 | Hub | Each |
1400 | 3 | 6 | 0 | 6 | 1 | 1/4-20 Screw | Each |
1500 | 2 | 1 | 0 | 1 | 2 | Steel holder | Each |
1600 | 3 | 1 | 0 | 1 | 2 | One-way socket | Each |
1700 | 2 | 1 | 0 | 1 | 1 | Wiring assembly | Each |
2100 | 3 | 26 | 0 | 26 | 3 | 3/8 Steel tubing | Inches |
2200 | 3 | 12 | 0 | 12 | 2 | 16-Gauge lamp cord | Feet |
2300 | 3 | 1 | 0 | 1 | 1 | Standard plug terminal | Each |
4000 | 1 | 1 | 0 | 1 | 0 | Common parts | Each |
A100 | 2 | 1 | 0 | 1 | 1 | Socket assembly | Each |
A10X | 1 | 1 | 0 | 1 | 0 | Socket assembly options | Each |
B100 | 2 | 1 | 0 | 1 | 1 | Base assembly | Each |
B10X | 1 | 1 | 0 | 1 | 0 | Base assembly options | Each |
LAXX | 0 | 1 | 0 | 1 | 3 | Lamp LA | Each |
S100 | 2 | 1 | 0 | 1 | 2 | Black shade | Each |
S10X | 1 | 1 | 0 | 1 | 0 | Shade options | Each |
The summarized parts list in Output 3.7.1 and the one in Output 3.1.3 are in agreement in the values of gross and net requirements, except for those phantom items, such as '4000 Common parts', 'A10X Socket assembly options', 'B10X Base assembly options', and 'S10X Shade options', which are not listed in Output 3.1.3.
Another way to compare two bill of material is to compare their summarized bill of material. Recall that, as discussed in Example 3.1, the summarized parts list as displayed in Output 3.1.3 is also the summarized bill of material for the item 'LA01'. You can also use the %BOMRSUB SAS macro described in Chapter 4, Bill of Material Postprocessing Macros, or the SAS DATA step to create the summarized bill of material from an indented bill of material. See Example 3.9 for an example of using a SAS DATA step to create a summarized bill of material from the Indented BOM data set.
The following SAS code uses the %BOMRSUB macro to create a summarized bill of material for the item 'LA01' from the Indented BOM data set shown in Output 3.5.2. The ""qtyreq=Gros_Req specification indicates that the total requirement for the item identified by the _Part_ variable should be stored in the Gros_Req variable.
/* Create the summarized bill of material */ %bomrsub(root='LA01', in=BomOut5, quantity=QtyPer, qtyreq=Gros_Req, out=BomOut7);
ABC Lamp Company |
Summarized Bill of Material, Part LA01 |
_Part_ | Gros_Req | Desc | Unit |
---|---|---|---|
1100 | 1 | Finished shaft | Each |
1200 | 1 | 6-Diameter steel plate | Each |
1300 | 1 | Hub | Each |
1400 | 6 | 1/4-20 Screw | Each |
1500 | 1 | Steel holder | Each |
1600 | 1 | One-way socket | Each |
1700 | 1 | Wiring assembly | Each |
2100 | 26 | 3/8 Steel tubing | Inches |
2200 | 12 | 16-Gauge lamp cord | Feet |
2300 | 1 | Standard plug terminal | Each |
4000 | 1 | Common parts | Each |
A100 | 1 | Socket assembly | Each |
B100 | 1 | Base assembly | Each |
S100 | 1 | Black shade | Each |
Again, the summarized bill of material, shown in Output 3.7.2, agrees with the summarized bill of material displayed in Output 3.1.3 in the values of gross requirements, except for the phantom items '4000 Common parts'. Note also that the gross requirement of the finished good 'LA01' is not listed in Output 3.7.2.