web
You’re offline. This is a read only version of the page.
close
Skip to main content

Notifications

Announcements

No record found.

Community site session details

Community site session details

Session Id :
Finance | Project Operations, Human Resources, ...
Answered

How can you query the BOMVersions of a productvariant?

(1) ShareShare
ReportReport
Posted on by 329
I am trying to create functionality where we copy all sorts of data from a chosen productvariant.
 
I am also trying to find the BOMVersions of a single productvariant, but I cannot see how it is queried in the application.
 
On the form EcoResProductVariantsPerCompany you can click the BOM button in the top of the screen, which will take you to the relevant BOMs for that productvariant.
 
The query for this screen seems to show that the correct data is obtained by INNER JOINING the productVariants to their inventDims to filter them based on the inventDims' product dimensions, which I was trying to reproduce in SQL:
 
select EcoResProductVariantDimensionValueConfig.CONFIGURATION	, * from EcoResProduct
inner join inventDimCombination on InventDimCombination.DistinctProductVariant = EcoResProduct.RecId
left outer join EcoResProductVariantDimensionValue EcoResProductVariantDimensionValueConfig ON EcoResProduct.RecId = EcoResProductVariantDimensionValueConfig.DistinctProductVariant
	AND ((EcoResProductVariantDimensionValueConfig.ProductDimensionAttribute = 5637144579))
left outer join ECORESCONFIGURATION ON ECORESCONFIGURATION.RecId = EcoResProductVariantDimensionValueConfig.CONFIGURATION
	AND ((EcoResProductVariantDimensionValueConfig.ProductDimensionAttribute = 5637144579))
left outer join EcoResProductVariantDimensionValue EcoResProductVariantDimensionValueSize ON EcoResProduct.RecId = EcoResProductVariantDimensionValueSize.DistinctProductVariant
	AND ((EcoResProductVariantDimensionValueSize.ProductDimensionAttribute = 5637144578)) 
left outer join EcoResProductVariantDimensionValue EcoResProductVariantDimensionValueColor ON EcoResProduct.RecId = EcoResProductVariantDimensionValueColor.DistinctProductVariant
	AND ((EcoResProductVariantDimensionValueColor.ProductDimensionAttribute = 5637144576))
left outer join EcoResProductVariantDimensionValue EcoResProductVariantDimensionValueStyle ON EcoResProduct.RecId = EcoResProductVariantDimensionValueStyle.DistinctProductVariant
	AND ((EcoResProductVariantDimensionValueStyle.ProductDimensionAttribute = 5637144580))	
left outer join EcoResProductVariantDimensionValue EcoResProductVariantDimensionValueVersion ON EcoResProduct.RecId = EcoResProductVariantDimensionValueVersion.DistinctProductVariant
	AND ((EcoResProductVariantDimensionValueVersion.ProductDimensionAttribute = 5637144577))
inner join InventDim 
on inventDim.CONFIGID = ECORESCONFIGURATION.NAME	
where ItemId = '10624-10'  and 8375 = EcoResProduct.instancerelationtype
This is a sample of me trying to get the productvariants and their related BOMVersions from one itemId. 
 
So far I keep getting wrong or too much data from every query that I try to create. And there must be an easier way to query this data in X++.
 
Does anyone know how I can obtain this data?
 
The microsoft query for the view (taken from the form when clicking BOMVersions from the EcoResProductVariantsPerCompany form):

SELECT FIRSTFAST FORUPDATE *
FROM BOMVersion(BOMVersion) USING INDEX ItemFromToIdx
WHERE ((PmfTypeId = 0))
	AND InventDimCombination.ItemId = BOMVersion.ItemId
OUTER JOIN FORUPDATE PersonnelNumber
FROM HcmWorker(Ref_HcmWorker_HcmWorker) ON BOMVersion.Approver = HcmWorker.RecId
	AND BOMVersion.Approver = HcmWorker.RecId
JOIN FORUPDATE *
FROM InventDim(InventDimBOMVersion) ON BOMVersion.InventDimId = InventDim.inventDimId
	AND (
		(configId = N'27-02-2019')
		OR (configId = '')
		)
	AND (
		(InventSizeId = '')
		OR (InventSizeId = '')
		)
	AND (
		(InventColorId = '')
		OR (InventColorId = '')
		)
	AND (
		(InventStyleId = '')
		OR (InventStyleId = '')
		)
	AND (
		(InventVersionId = N'B')
		OR (InventVersionId = '')
		)
 
 
 
 
Categories:
I have the same question (0)
  • Superbunny Profile Picture
    329 on at
    It seems I am close with the following query:
     
    select EcoResConfiguration.NAME,
    EcoResSize.Name,
    ecoresVersion.Name,
    ecoresStyle.name,
    ecorescolor.name,
    Displayproductnumber,
    EcoResProductVariantDimensionValueConfig.Configuration from EcoResProduct
    inner join inventDimCombination on InventDimCombination.DistinctProductVariant = EcoResProduct.RecId
    left outer join EcoResProductVariantDimensionValue EcoResProductVariantDimensionValueConfig ON EcoResProduct.RecId = EcoResProductVariantDimensionValueConfig.DistinctProductVariant
        AND ((EcoResProductVariantDimensionValueConfig.ProductDimensionAttribute = 5637144579))
        left outer join EcoResConfiguration ON EcoResConfiguration.RecId = EcoResProductVariantDimensionValueConfig.CONFIGURATION
        AND ((EcoResProductVariantDimensionValueConfig.ProductDimensionAttribute = 5637144579))
    left outer join EcoResProductVariantDimensionValue EcoResProductVariantDimensionValueSize ON EcoResProduct.RecId = EcoResProductVariantDimensionValueSize.DistinctProductVariant
        AND ((EcoResProductVariantDimensionValueSize.ProductDimensionAttribute = 5637144578))
        left outer join EcoResSize ON EcoResProductVariantDimensionValueSize.Size_ = EcoResSize.RecId
    left outer join EcoResProductVariantDimensionValue EcoResProductVariantDimensionValueColor ON EcoResProduct.RecId = EcoResProductVariantDimensionValueColor.DistinctProductVariant
        AND ((EcoResProductVariantDimensionValueColor.ProductDimensionAttribute = 5637144576))
        left outer join EcoResColor ON EcoResProductVariantDimensionValueColor.Color = EcoResColor.RecId
    left outer join EcoResProductVariantDimensionValue EcoResProductVariantDimensionValueStyle ON EcoResProduct.RecId = EcoResProductVariantDimensionValueStyle.DistinctProductVariant
        AND ((EcoResProductVariantDimensionValueStyle.ProductDimensionAttribute = 5637144580))    
        left outer join EcoResStyle ON EcoResProductVariantDimensionValueStyle.Style = EcoResStyle.RecId
    left outer join EcoResProductVariantDimensionValue EcoResProductVariantDimensionValueVersion ON EcoResProduct.RecId = EcoResProductVariantDimensionValueVersion.DistinctProductVariant
        AND ((EcoResProductVariantDimensionValueVersion.ProductDimensionAttribute = 5637144577))
        left outer join EcoResVersion ON EcoResProductVariantDimensionValueVersion.ProductVersion = EcoResVersion.RecId
    --inner join InventDim 
    --on inventDim.ConfigId= EcoResConfiguration.Name OR (inventDim.ConfigId= '')
    --and inventDim.InventSizeId = EcoResSize.Name OR (inventDim.InventSizeId = '')
    --and inventDim.InventColorId  = ecorescolor.Name or (inventDim.InventColorId  = '')
    --and inventDim.InventStyleId  = ecoresStyle.Name or (inventDim.InventStyleId = '')
    --and inventDim.InventVersionId  = ecoresVersion.Name or (inventDim.InventVersionId = '')
    where ItemId = '10624-10'  and 8375 = EcoResProduct.instancerelationtype
     
    Here I am trying to reproduce Microsoft's query by inner joinging the inventDim with the dimensions as filter. Without this part, I am correctly getting 4 lines (1 for each productVariant). As soon as I add the INNER JOIN to inventDim however, I am getting 12.000 results. Obviously this resultset contains mostly inventDim that are not links to the correct BOMVersion.InventDimId. Therefore I am  stuck here, not knowing how I can reach my BOMVersions via the query
  • Suggested answer
    Justin Kruger Profile Picture
    183 on at
    Hi,
     
    You query seems overly complex. Is there specific info you need from the product variant itself or are you purely trying to relate various product invent dimension combinations to the bom versions ?
     
    If so, then this query should work fine.
     
    select * from BOMVERSION BV
    join INVENTDIM ID on ID.INVENTDIMID = BV.INVENTDIMID
    where BV.ITEMID = 'YouItem'
    and ID.INVENTCOLORID = 'YourColor'
    and ID. INVENTSIZEID = 'YourSize'
    and ID.INVENTSTYLEID = 'YourStyle'
    and ID.CONFIGID = 'YourConfig'
  • Superbunny Profile Picture
    329 on at
     
    Hello Justin, thank you for your response.
     
    The problem is that my product variants have the same ItemId, so your query gives me the BOMVersions of all the productvariants.
  • Verified answer
    Superbunny Profile Picture
    329 on at
    I seem to have done it. For those interested, here is the query.
     
    I really dislike the hard IDs for productDimensionAttributes, but Microsoft uses it to in their queries:
     
     InventDimCombination inventDimCombination;
      InventDim inventDim;
      BOMVersion bomVersion;
      EcoResProductVariantConfiguration ecoResProductVariantConfiguration;
      EcoResConfiguration ecoResConfiguration;
      EcoResProductVariantSize ecoResProductVariantSize;
      EcoResSize ecoResSize;
      EcoResProductVariantStyle ecoResProductVariantStyle;
      EcoresStyle ecoresStyle;
      EcoResProductVariantColor ecoResProductVariantColor;
      EcoResColor ecoResColor;
      EcoResProductVariantVersion ecoResProductVariantVersion;
      EcoResVersion ecoResVersion;
      InventDim    inventDimNew;
    
      while select * from ecoResDistinctProductVariantLocal
              where  ecoResDistinctProductVariantLocal.RecId == {YOUR-PRODUCTVARIANT-RECID}     
          join * from inventDimCombination
              where InventDimCombination.DistinctProductVariant == ecoResDistinctProductVariantLocal.RecId
              && InventDimCombination.ItemId == {YOUR-ITEM-ID}     
          outer join * from ecoResProductVariantConfiguration
              where ecoResDistinctProductVariant.RecId == ecoResProductVariantConfiguration.DistinctProductVariant
              && ((ecoResProductVariantConfiguration.ProductDimensionAttribute == 5637144579))
          outer join Name from ecoResConfiguration
              where ecoResProductVariantConfiguration.Configuration == ecoResConfiguration.RecId
          outer join * from ecoResProductVariantSize
              where ecoResDistinctProductVariant.RecId == ecoResProductVariantSize.DistinctProductVariant
               && ((ecoResProductVariantSize.ProductDimensionAttribute == 5637144578))
          outer join Name from ecoResSize 
              where ecoResProductVariantSize.Size == ecoResSize.RecId
          outer join * from ecoResProductVariantColor 
              where ecoResDistinctProductVariant.RecId == ecoResProductVariantColor.DistinctProductVariant
               && ((ecoResProductVariantColor.ProductDimensionAttribute == 5637144576))
          outer join Name from ecorescolor
              where ecoResProductVariantColor.Color == ecorescolor.RecId
          outer join * from ecoResProductVariantStyle 
              where ecoResDistinctProductVariant.RecId == ecoResProductVariantStyle.DistinctProductVariant
               && ((ecoResProductVariantStyle.ProductDimensionAttribute == 5637144580))
          outer join Name from ecoresStyle
              where ecoResProductVariantStyle.Style == ecoresStyle.RecId
          outer join * from ecoResProductVariantVersion
              where ecoResDistinctProductVariant.RecId == ecoResProductVariantVersion.DistinctProductVariant
               && ((ecoResProductVariantVersion.ProductDimensionAttribute == 5637144577))
          outer join Name from ecoresVersion
              where ecoResProductVariantVersion.ProductVersion == ecoresVersion.RecId
          join * from inventDim
              where inventDim.ConfigId == ecoResConfiguration.Name || (inventDim.ConfigId == '')
              && inventDim.InventSizeId == ecoResSize.Name || (inventDim.InventSizeId == '')
              && inventDim.InventColorId == ecorescolor.Name || (inventDim.InventSizeId == '')
              && inventDim.InventStyleId == ecoresStyle.Name || (inventDim.InventStyleId == '')
              && inventDim.InventVersionId == ecoresVersion.Name || (inventDim.InventVersionId == '')
          join * from BOMVersion 
              where BOMVersion.InventDimId == inventDim.InventDimId 
              && BOMVersion.ItemId == InventDimCombination.ItemId
     

Under review

Thank you for your reply! To ensure a great experience for everyone, your content is awaiting approval by our Community Managers. Please check back later.

Helpful resources

Quick Links

Responsible AI policies

As AI tools become more common, we’re introducing a Responsible AI Use…

Neeraj Kumar – Community Spotlight

We are honored to recognize Neeraj Kumar as our Community Spotlight honoree for…

Leaderboard > Finance | Project Operations, Human Resources, AX, GP, SL

#1
André Arnaud de Calavon Profile Picture

André Arnaud de Cal... 467 Super User 2025 Season 2

#2
Martin Dráb Profile Picture

Martin Dráb 420 Most Valuable Professional

#3
BillurSamdancioglu Profile Picture

BillurSamdancioglu 241 Most Valuable Professional

Last 30 days Overall leaderboard

Product updates

Dynamics 365 release plans