Quintiq file version 2.0 #parent: #root Method CreateShadowConversionFactor () id:Method_FormUnitsOfMeasurement_CreateShadowConversionFactor { #keys: '[124808.2.631315687]' Body: [* // Generate conversion factor shadow instances DataHolderShadowGlobalParameters.Data( null( shadow[GlobalParameters_MP], owning ) ); //Ownership on GP so that it is possible to show multi rows when multiple uoms are selected. owner := shadow( MacroPlan.GlobalParameters_MP() ); DataHolderShadowGlobalParameters.Data( &owner ); traverse( DataHolderMatrixEditorRows.Data(), Elements, rowheader ) { traverse( DataHolderMatrixEditorColumns.Data(), Elements, colheader, rowheader <> colheader ) { baseconversionfactor := null( BaseConversionFactor ); // Get conversion factor regardless it is base or inverse, to show Factor value in matrix conversionfactor := select( rowheader, AsSourceUnitOfMeasure, cf, not cf.IsProductDependent(), cf.TargetUnitOfMeasure() = colheader ); // Need to set relation to base conversion factor // If it is base, relset straight away. if( not isnull( conversionfactor ) ) { if( conversionfactor.istype( BaseConversionFactor ) ) { baseconversionfactor := conversionfactor.astype( BaseConversionFactor ); } // Else if it is inverse, relset the base conversion factor the inverse factor belongs to. else { baseconversionfactor := conversionfactor.astype( InverseConversionFactor ).BaseConversionFactor(); } } // Create shadow conversion factor in matrix DataHolderShadowGlobalParameters.Data().ConversionFactorInMatrix( relnew, SourceUnitOfMeasureInConversionMatrix := rowheader, TargetUnitOfMeasureInConversionMatrix := colheader, BaseConversionFactor := baseconversionfactor, Factor := guard( conversionfactor.Factor(), 1 ) ); } } *] }