Example 3.5 Modular Bill of Material

The previous example illustrated how the bill of material can be arranged in product modules or options in order to obtain better forecasting, master production scheduling, and planning. There are also a number of other reasons for using modular bill of material. One reason is that the task of maintaining modularized bill of material is much simpler. The only bill of material that have to be maintained are the modules; there is no need to maintain enormous numbers of unique product configurations (Landvater and Gray 1989). You can easily construct a bill of material for a particular product configuration from the modular bill of material, if necessary. This example shows how to build modular bill of material for the 48 product configurations as described in Example 3.4. It also demonstrates how to construct a final-product-oriented bill of material from the modularized bill of material.

The ParComp5 data set contains the new product structure information. In this data set, the phantom items 'A10X', 'B10X', and 'S10X' are used as place holders for product modules: 'A100', 'A101', 'B100', ..., 'S107'. The following code first creates the new Product Structure data set, ParComp5. It then invokes PROC BOM with the Part Master data set, PMaster4 (described in Example 3.4), and the new Product Structure data set, ParComp5, to construct modular bill of material for the production line of the company. It also displays the modularized indented bill of material.

/* Product Structure data */
data ParComp5;
   format Parent $8. Component $8. QtyPer 8.2 ;
   input Parent $ Component $ QtyPer;
datalines;
LAXX    4000        1.00 
LAXX    B10X        1.00
LAXX    S10X        1.00
LAXX    A10X        1.00
4000    1100        1.00
4000    1300        1.00
4000    1400        4.00
4000    1500        1.00
4000    1700        1.00
B100    1200        1.00
B101    1201        1.00
B102    1202        1.00
A100    1600        1.00
A101    1601        1.00
1100    2100       26.00
1500    1400        2.00
1700    2200       12.00
1700    2300        1.00
;
/* Generate the indented BOM data set */
proc bom data=ParComp5 pmdata=PMaster4 out=IndBOM5; 
   structure / part=Part 
               leadtime=LeadTime
               parent=Parent 
               component=Component
               quantity=QtyPer
               id=(Desc Unit); 
run;

The Indented BOM data set, IndBOM5, is shown in Output 3.5.1. This output data set contains a pseudo bill of material for the pseudo end item 'LAXX' and 13 modules (modular bill of material) for items 'A100', 'A101', 'B100', 'B101', 'B102', and 'S100' ..., 'S107', respectively.

Output 3.5.1 Modularized Indented Bill of Material (IndBOM5)
ABC Lamp Company
 
Indented Bill of Material

_Level_ _Parent_ _Part_ Desc QtyPer Qty_Prod Unit LeadTime Tot_Lead _Prod_
0   A100 Socket assembly . 1.00 Each 1 1 A100
1 A100 1600 One-way socket 1.00 1.00 Each 2 3 A100
0   A101 Three-way socket assem. . 1.00 Each 1 1 A101
1 A101 1601 Three-way socket 1.00 1.00 Each 2 3 A101
0   B100 Base assembly . 1.00 Each 1 1 B100
1 B100 1200 6-Diameter steel plate 1.00 1.00 Each 3 4 B100
0   B101 7in Base assembly . 1.00 Each 1 1 B101
1 B101 1201 7-Diameter steel plate 1.00 1.00 Each 3 4 B101
0   B102 8in Base assembly . 1.00 Each 1 1 B102
1 B102 1202 8-Diameter steel plate 1.00 1.00 Each 3 4 B102
0   LAXX Lamp LA . 1.00 Each 3 3 LAXX
1 LAXX 4000 Common parts 1.00 1.00 Each 0 3 LAXX
2 4000 1100 Finished shaft 1.00 1.00 Each 2 5 LAXX
3 1100 2100 3/8 Steel tubing 26.00 26.00 Inches 3 8 LAXX
2 4000 1300 Hub 1.00 1.00 Each 2 5 LAXX
2 4000 1400 1/4-20 Screw 4.00 4.00 Each 1 4 LAXX
2 4000 1500 Steel holder 1.00 1.00 Each 2 5 LAXX
3 1500 1400 1/4-20 Screw 2.00 2.00 Each 1 6 LAXX
2 4000 1700 Wiring assembly 1.00 1.00 Each 1 4 LAXX
3 1700 2200 16-Gauge lamp cord 12.00 12.00 Feet 2 6 LAXX
3 1700 2300 Standard plug terminal 1.00 1.00 Each 1 5 LAXX
1 LAXX B10X Base assembly options 1.00 1.00 Each 0 3 LAXX
1 LAXX S10X Shade options 1.00 1.00 Each 0 3 LAXX
1 LAXX A10X Socket assembly options 1.00 1.00 Each 0 3 LAXX
0   S100 Black shade . 1.00 Each 2 2 S100
0   S101 14in White shade . 1.00 Each 2 2 S101
0   S102 14in Cream shade . 1.00 Each 2 2 S102
0   S103 14in Yellow shade . 1.00 Each 2 2 S103
0   S104 15in Black shade . 1.00 Each 2 2 S104
0   S105 15in White shade . 1.00 Each 2 2 S105
0   S106 15in Cream shade . 1.00 Each 2 2 S106
0   S107 15in Yellow shade . 1.00 Each 2 2 S107

The following SAS code constructs an indented bill of material for the product
'LA01', which is configured with 'A100' (One-way socket assembly), 'B100' (6in Base assembly), and 'S100' (14in Black shade). It first uses the %BOMTSAE SAS macro to create a bill of material that is the same as the bill for the item 'LAXX', except the pseudo item 'B10X' is replaced by the modular bill for the item 'B100'. It then uses the %BOMTREP SAS macro to replace the pseudo items 'S10X' and 'A10X' with the bill of material for 'S100' and 'A100'. Note that the %BOMTSAE macro refers to the part master file PMaster3 (shown in Output 3.3.1) for the master data of the item 'LA01'. See the section Transactional Macros for details about these SAS macros.

/* Copy LAXX to LA01 with B10X replaced by B100 */
%bomtsae(root='LA01', sameas='LAXX', except='B10X', repby='B100', 
      in=IndBOM5, pmdata=PMaster3, part=Part, quantity=QtyPer, 
      leadtime=LeadTime, id=Desc Unit, out=BomOut5);

/* Merge the bill of material for S100 to the new BOM */
data BomOut51;
set BomOut5
    IndBOM5(where=(_Prod_='S100'));
run;

/* Replace S10X with S100 */
%bomtrep(root='S10X', repby='S100', in=BomOut51, quantity=QtyPer,
      leadtime=LeadTime, id=Desc Unit, del=1, out=BomOut52);

/* Merge the bill of material for A100 to the new BOM */
data BomOut53;
set BomOut52
    IndBOM5(where=(_Prod_='A100'));
run;

/* Replace A10X with A100 */
%bomtrep(root='A10X', repby='A100', in=BomOut53, quantity=QtyPer,
      leadtime=LeadTime, id=Desc Unit, del=1, out=BomOut5); 

The indented bill of material for item 'LA01' is displayed in Output 3.5.2. It is the same as the bill of material displayed in Output 3.2.2 (which is created directly by PROC BOM), except for the common items such as '1100', '1300', '1400', '1500', and '1700', which are regrouped under the phantom item '4000'.

Output 3.5.2 Indented Bill of Material for Product 'LA01' (BomOut5)
ABC Lamp Company
 
Indented Bill of Material, Part LA01

_Level_ _Parent_ _Part_ Desc QtyPer Qty_Prod Unit LeadTime Tot_Lead _Prod_
0   LA01 Lamp LA . 1.00 Each 2 2 LA01
1 LA01 4000 Common parts 1.00 1.00 Each 0 2 LA01
2 4000 1100 Finished shaft 1.00 1.00 Each 2 4 LA01
3 1100 2100 3/8 Steel tubing 26.00 26.00 Inches 3 7 LA01
2 4000 1300 Hub 1.00 1.00 Each 2 4 LA01
2 4000 1400 1/4-20 Screw 4.00 4.00 Each 1 3 LA01
2 4000 1500 Steel holder 1.00 1.00 Each 2 4 LA01
3 1500 1400 1/4-20 Screw 2.00 2.00 Each 1 5 LA01
2 4000 1700 Wiring assembly 1.00 1.00 Each 1 3 LA01
3 1700 2200 16-Gauge lamp cord 12.00 12.00 Feet 2 5 LA01
3 1700 2300 Standard plug terminal 1.00 1.00 Each 1 4 LA01
1 LA01 A100 Socket assembly 1.00 1.00 Each 1 3 LA01
2 A100 1600 One-way socket 1.00 1.00 Each 2 5 LA01
1 LA01 B100 Base assembly 1.00 1.00 Each 1 3 LA01
2 B100 1200 6-Diameter steel plate 1.00 1.00 Each 3 6 LA01
1 LA01 S100 Black shade 1.00 1.00 Each 2 4 LA01