Karen:

My learning curve question:

Isn't this really a normalization problem, where the BOM is in fact
logically a VIEW composed of parts, sub-assemblies of nested parts and
assemblies of sub-assemblies; all being treated as 'parts'?

Bruce

> -------- Original Message --------
> Subject: [RBASE-L] - Re: Exploding BOM
> From: [email protected]
> Date: Thu, March 15, 2012 1:16 pm
> To: [email protected] (RBASE-L Mailing List)
> 
> 
> Tony:  Took me a while to figure out what your code does, but now I 
> understand it.  Quite clever!!
> I'm not sure I can assign a "level" to each stage of my BOM, though, 
> without someone having to do alot of research into the parts.
> 
> Right now, they know that Part 100 is composed of parts 200 and 201 and 
> that's all they would have to type in.  They do not have to type in that part 
> 200 is composed of 300 and 301 as part of the hierarchy of part 100, and I 
> wouldn't want them to have to do that.   Somewhere along the line they had 
> already typed in that part 200 is composed of 300 and 301, but I wouldn't 
> want 
> that redundency repeated as part of the data for part 100.   I'm hoping that 
> made sense.  Part 200 is a level one, with 300 and 301 being level two of 
> that part.   But part 200 would also be level two of part 100.
> 
> Discussing the opinions so far (and sharing those interesting links from 
> Ben) with the consultant and the client, the client said "screw it, just 
> figure on 3 levels and be done with it".   Easy for him to say now because he 
> has 
> only one level at this point and doesn't actually foresee it going into 
> "components of components"  into the future.   So although I will read 
> further 
> responses, and implement new code if it's easy enough to do, I got 
> permission to do 3 nested cursors and I'm cool with that!
> 
> Karen
> 
> 
> In a message dated 3/15/2012 2:00:11 PM Central Daylight Time, 
> [email protected] writes: 
> > Suppose you have the table (In my example I am talking about a Project 
> > table, which contains subprojects, sub-subprojects and so on)
> > 
> >  
> > 
> > PJT_Project
> > 
> >  
> > 
> > Columns:
> > 
> >  
> > 
> > PJT_ID                   Primary key
> > PJT_ID_refer_to       Refers to superior project (foreign key)
> > PJT_Level               Level of the project
> > 
> >  
> > 
> > The level is essential, because then you are able to select all rows of 
> > the same level in the BOM
> > The only thing you need to do is assign the right level to the row, when 
> > it is added to the BOM
> > 
> > The code then looks like below, where T_PJT_PROJECT is a temp table, where 
> > PJT_Level is a column in this temp table :
> > 
> > 
> >   APPEND PJT_PROJECT TO T_PJT_PROJECT+
> >   WHERE PJT_ID = .V_PJT_ID
> > 
> >   SET VAR VSP_PJT_level INTEGER = (.V_PJT_level)
> > 
> > n  To enforce the loop is performed at least once
> > 
> >   SET VAR VSP_PJT_ID_ATL INTEGER = 100
> > 
> >   WHILE VSP_PJT_ID_ATL >0 THEN
> > 
> >     -- loop to append the the rows
> > 
> >     SET ERROR MESSAGE 705 OFF
> > 
> >     DROP CURSOR C10
> > 
> >     SET ERROR MESSAGE 705 ON
> > 
> >     DECLARE C10 CURSOR FOR SELECT +
> > 
> >     PJT_ID  +
> > 
> >     FROM T_PJT_PROJECT  +
> > 
> >     WHERE PJT_level = .VSP_PJT_level
> > 
> >     OPEN C10
> > 
> >     FETCH C10 INTO VSP_PJT_ID INDICATOR I1
> > 
> >     WHILE SQLCODE <>100 THEN
> > 
> >       APPEND PJT_PROJECT TO T T_PJT_PROJECT +
> > 
> >       WHERE PJT_ID_REFER_TO = .VSP_PJT_ID
> > 
> >       FETCH C10 INTO VSP_PJT_ID INDICATOR I1
> > 
> >     ENDWHILE
> > 
> >     -- cursor c10
> > 
> >     DROP CURSOR C10
> > 
> >     SET VAR VSP_PJT_ID_ATL INTEGER = 0
> > 
> >     SET VAR VSP_PJT_level = (.VSP_PJT_level + 1)
> > 
> >     SELECT COUNT(PJT_ID) INTO VSP_PJT_ID_ATL INDICATOR I1 +
> > 
> >     FROM T_PJT_PROJECT +
> > 
> >     WHERE PJT_level = .VSP_PJT_level
> > 
> >   ENDWHILE
> > 
> >  
> > 
> >  In this way the number of levels is unlimited, the created temp table can 
> > be used to do calculate the number of parts needed and administer it in 
> > your system
> > 
> >



Reply via email to