Community Tip - Need help navigating or using the PTC Community? Contact the community team. X

Translate the entire conversation x

How to add the BOM quantity listed in a note?

DVsantacruz
8-Gravel

How to add the BOM quantity listed in a note?

Is there any way to create a user defined parameter in the .asm file to capture quantities of parts then use that in a note?

I know you can get the quantity from the BOM but in I need more detailed because we use a lot of parts and subassembly so the subassembly can be shown in the BOM but not as a note in order to show it in the selected sheet of each part from the subassembly. currently we put this note manually so we have a several of issues   

ACCEPTED SOLUTION

Accepted Solutions

1. In this case you need to create model level parameter - item_no. Create in model "Name_001b" a parameter item_no = "b". Then change int table &asm.mbr.cparam.item_no to &asm.mbr.item_no and in the relations asm_mbr_cparam_item_no to asm_mbr_item_no

 

2. Table borders

How to hide internal borders, not outline

https://community.ptc.com/t5/3D-Part-Assembly-Design/Hide-table-border-lines/m-p/271391#M40548

 

To hide whole table you need to change border color. Need to set not printable color (print by white color on white paper). Depending on you pen table setting.

https://community.ptc.com/t5/3D-Part-Assembly-Design/table-color/m-p/43903

 

View solution in original post

17 REPLIES 17


@DVsantacruz wrote:

Is there any way to create a user defined parameter in the .asm file to capture quantities of parts then use that in a note?

I know you can get the quantity from the BOM but in I need more detailed because we use a lot of parts and subassembly so the subassembly can be shown in the BOM but not as a note in order to show it in the selected sheet of each part from the subassembly. currently we put this note manually so we have a several of issues   


Hi,

unfortunately I do not know of any simple solution.

 

You can do following manually:

  • in assembly save textual BOM
  • run application that searches textual BOM for part quantities and generates relations defining parameter values
    • for example ... QTY_PART1_NAME=123
  • in assembly open Relation dialog box and paste generated relations into it
    • there may be problems with the length of the parameter name
  • regenerate assembly
  • in assembly open Relation dialog box and remove generated relations
  • regenerate assembly
  • use parameters in notes

I hope you can automate the above mentioned procedure using mapkey. Also you can ask someone to develop Toolkit application for you.


Martin Hanák

Use table with repeat region and summation. Place the table outside drawing frame. See the video

Creo cmp qnty sum in drawing.mp4
Video Player is loading.
Current Time 0:00
Duration 0:00
Loaded: 0%
Stream Type LIVE
Remaining Time 0:00
 
1x
    • Chapters
    • descriptions off, selected
    • captions off, selected
      (view in My Videos)

      Thank you so much for you respond, It helped me a lot.... but look what I need is to add the real quantity not the sum of all the pieces... we currently have this note which they made long time ago, I put the &rep.qty in the #REQ value so it changed to the sum of all of them not just the 6, this value we put it manually  

       

      DV_10098275_1-1635797828396.png

      DV_10098275_2-1635798012162.png

      In drawing symbol do you want to show qnty = 6 for item - d ?

      Of course! it should be 6 not 26, the sum of all the items is 26

      Ok. For this we need find a way to link a note to the part by item_no or f_cat_id_no.

      So, one more question:

      I see you use f_cat_id_no parameter in symbol variable text: This parameter is a model parameter? Drawing parameter? Or asm level parameter?

       

      For now I don't understand how you show part parameters in the symbol from dedicate item (for example, &DET, &THKNESS for item "a" or "b").

      As I see we do a lot of hard work doing it all manually, so I got some additional questions, Is there a way to put the item automatically by alphabet? and to take the "&F_CAT_ID_NO"  equal as the name of the part? but the main question here is how to add automatically the quantity of each item (rpt_qty) in the note instead of put manually "#REQ"?

       

       

      DV_10098275_0-1635859488817.png

       

      Hi,

      do you need to get something like this ?

      MartinHanak_0-1635859494957.png

      See attached files created in Creo 4.0.


      Martin Hanák

      Thanks for your respond, it's pretty pretty similar it could work, Could you pls explain me how to make that kind of notes?

       

      well in this case I'm guessing that I should put asm.mbr.name in the "#REG" parameter so it should change depending on the table, isn't it? but sadly it didn't work at all probably I did something wrong. 

       

      DV_10098275_0-1635861377104.png 

      DV_10098275_1-1635861629625.png

       

       


      @DVsantacruz wrote:

      Thanks for your respond, it's pretty pretty similar it could work, Could you pls explain me how to make that kind of notes?

       

      well in this case I'm guessing that I should put asm.mbr.name in the "#REG" parameter so it should change depending on the table, isn't it? but sadly it didn't work at all probably I did something wrong. 

       

      DV_10098275_0-1635861377104.png 

      DV_10098275_1-1635861629625.png

       

       


      Hi,

      you cannot include repeat region parameters into note. You have to create custom symbol and use it to show BOM balloons related to repeat region. Please watch https://www.youtube.com/watch?v=6LZoXarSSyU video.


      Martin Hanák

      One more way. Replace drawing symbol by the table with repeat region.

      item_no - is a component level parameter.

      Create string parameter in the relations for the repeat region - DISPLAY.

      This parameter will be drive the visibility the components in the table by item_no component parameter.

      In the relations for repeat region

      FILTER = 0
      IF asm_mbr_cparam_item_no ==  DISPLAY
        FILTER = 1
      ENDIF

      The filter for the repeat region:

      &rpt.rel.filter  == 1

       

      Repeat region with a filters
      Video Player is loading.
      Current Time 0:00
      Duration 0:00
      Loaded: 0%
      Stream Type LIVE
      Remaining Time 0:00
       
      1x
        • Chapters
        • descriptions off, selected
        • captions off, selected
          (view in My Videos)

           

          ps: I'm not clear understand the structure of your assembly, but think this is close to what you asked. 

          Thank you so much for your response. 

          First at all, the structure of my assembly is

          Name.asm

          Name_001.asm subassembly 

          Name_001a

          Name_001a

          Name_001b

          Name_002.asm subassmebly

          Name_002a

          Name_002b

          an so on

          So sometimes we put Name_001a and Name_002a into the same sheet and sometimes they (operators) dont have the main table to see the real qty of each item becuase they just have the printing sheet they're working, so that's why we put a custom symbol (a note) to each item into the drawing.

          ......

           

          And second one. I have tried this one, and of course that's what I exactly need, it works, I just have a question right here (see image), how to set the "B" as the same name as the other ones, l mean all "Name_001b" is going to have "B" to avoid changing it one by one. and other question, can it be shown just as a text without the lines of the table?

           

           

          DV_10098275_0-1636479173283.png

           

           

           

          1. In this case you need to create model level parameter - item_no. Create in model "Name_001b" a parameter item_no = "b". Then change int table &asm.mbr.cparam.item_no to &asm.mbr.item_no and in the relations asm_mbr_cparam_item_no to asm_mbr_item_no

           

          2. Table borders

          How to hide internal borders, not outline

          https://community.ptc.com/t5/3D-Part-Assembly-Design/Hide-table-border-lines/m-p/271391#M40548

           

          To hide whole table you need to change border color. Need to set not printable color (print by white color on white paper). Depending on you pen table setting.

          https://community.ptc.com/t5/3D-Part-Assembly-Design/table-color/m-p/43903

           

          Hi mates,

          I just want to add this attributes that works for every level of the assemble, not just in the main level so you select Attributes, then clic on the table and select the following "No Duplicates", "Recursive", "Bln By Part", "No Cbl Info" and that's it

          Thank you all. 

           

          DV_10098275_0-1636635066339.png

           

          FV
          17-Peridot
          17-Peridot
          (To:DVsantacruz)

          Hi all,

          As previous discussion participants had mentioned already

          • each model has to have a model level parameter ('BOM_QTY' for example);
          • drawing sheet note's text to include 'Session ID' in pro/relation lingo or 'RelationId' in OTK lingo - for example, let' say NAME_001A.PRT has session id being 5, the note-text would look like '&BOM_QTY:5'
          • the main obstacle(s) to this approach would be to populate a model level parameter with the data from BOM table row and there is no easy way to do it without some programming.

          The good news is: there is 'Creo.JS' and its 'Testing Web Tool' - this is from Creo.JS User's Guide.

          FV_0-1636577181792.png

           

          Here is a javascript code to run.

           

           

           

           

           

          var columnNumberForRptQty = 2;
          var paramNameForQty = "TEST_QTY";
          var rowStartNumber = 2;
          
          function MdlParamAssign( mdlObj, intValueToAssign) {
          		
          	var param_val = pfcCreateIntParamValue(intValueToAssign);
          	if( !param_val){
          			return (false);
          	}
          	
          	var paramObj = mdlObj.GetParam( paramNameForQty);
          	if (paramObj == null){
          		mdlObj.CreateParam (paramNameForQty, param_val);
          		paramObj=mdlObj.GetParam(paramNameForQty);
          	}
          	
          	if( paramObj == null) {
          		return false;
          	}
          	
          	try{
          		paramObj.Value=param_val;
          	}
          	catch (err){
          		return(false);
          	}
          	return( true);
          }
          
          function BomTableRowTextToMdlParam( table, currentRowNumber) {
          
          	var txt ="";	
          	
          	var cell = pfcTableCell.Create( currentRowNumber, columnNumberForRptQty);
          	if( ! cell) {
          		return(txt);
          	}
          	var qty = table.GetText( cell, pfcParamMode.DWGTABLE_NORMAL)
          	
          	var mdl = table.GetCellReferenceModel(cell);
          	if( !mdl) {
          		txt = "Cannot get model object... Qty was extracted: " + qty;
          		return(txt);
          	}
          	var result = MdlParamAssign( mdl, qty);
          	if( result) {
          		txt += mdl.FullName + " : " + paramNameForQty + " ParamValue assigned: " + qty;
          	}
          	else {
          		txt = "===============Cannot create or modify model parameter for " + mdl.FullName;
          	}
          	return(txt);
          }
          
          
          function BomTableToMdlParams() {
             // Click Run to execute this script
          	
          	
          	const session = pfcGetCurrentSession ();
            var selBuff = session.GetCurrentSelectionBuffer();
          	var selected = selBuff.GetContents();
          	if( selected == null ) {
          		alert ("Must select BOM table...");
          		return;
          	}
          	if( selected.Count < 1 ) {
          		return;
          	}
          	
          	selected.forEach( sel => {
          
          		let table = sel.GetSelItem();
          		if( ! table ) {
          			return;
          		}
          		let rowCount = table.GetRowCount();
          	  
          		for( var i = rowStartNumber; i <= rowCount; i++) {
          			let txt = BomTableRowTextToMdlParam( table, i);
          			print(txt);
          		}
          		
          	});
          
          }
          BomTableToMdlParams();

           

           

           

           

           

           

          This code will populate model level parameter with the value from BOM table cell

           

          How to do it:

          • delete all text lines in web-editing window

          FV_1-1636578402879.png

           

          • and insert this code. Replace a column number and parameter name, row starting number in the pasted code with your values. (row and column count start with 1) 

          FV_0-1636584927607.png

           

          • open drawing with BOM table. Preselect BOM table - use 'Table' selection filter.
          • click on 'Clear' button and 'Run' button.

          This is about all to it.

           

          HIH.

          FV.

           

           

           

          DVsantacruz
          8-Gravel
          (To:FV)

          Woow FV, This seems very complex, I'll try it but I have no idea how to open the CreoJ.C. I'll figure it out.

          Thank you.

          FV
          17-Peridot
          17-Peridot
          (To:DVsantacruz)

          Hello all,

           

          to open Creo.JS interactive shell :

          while in web browser panel:

          1. click on '+' tab to add an empty browser tab
          2. go to navigation tab and type in or paste the text of the full file path where to your  creo's "Common Files\apps\creojs\creojsweb" folder is located 

          FV_0-1636652737077.png

          double-click on 'script_engine_testing.html' file.

           

          FV_1-1636652961562.png

           

          HIH.

           

          Announcements



          Top Tags