Group degradation in perceived performance

Hi there,
We recently upgraded to SDK 4.5.1 and noticed that our application took a hit in perceived responsiveness in the process. After digging around a bit I ran into a change in the Group class that is responsible for this degradation, the change itself is in bold:
    override public function set scrollRect(value:Rectangle):void    {        // Work-around for Flash Player bug: if GraphicElements share        // the Group's Display Object and cacheAsBitmap is true, the        // scrollRect won't function correctly.         var previous:Boolean = canShareDisplayObject;        super.scrollRect = value;         if (numGraphicElements > 0 && previous != canShareDisplayObject)            invalidateDisplayObjectOrdering();          if (mouseEnabledWhereTransparent && hasMouseListeners)        {                    // Re-render our mouse event fill if necessary.            redrawRequested = true;            super.$invalidateDisplayList();        }    }
Below please find a small application that illustrates this problem. Note that I have monkey patched Group in the default package so that it is possible to compile with and without the code above. I find that a large screen and Chrome help showcase the problem.
The part that I am not getting is what was the code in bold trying to fix in the first place?
Thanks!!
~ Miguel
<?xml version="1.0" encoding="utf-8"?>
<s:Application
    minWidth="955" minHeight="600"
    xmlns:fx="http://ns.adobe.com/mxml/2009"
    xmlns:s="library://ns.adobe.com/flex/spark"
    xmlns:mx="library://ns.adobe.com/flex/mx"
    xmlns:local="*">
    <fx:Script>
        <![CDATA[
            private var _moveMode:Boolean = false;
            protected function monkeypatchedgroup1_mouseMoveHandler(event:MouseEvent):void
                // TODO Auto-generated method stub
                if (_moveMode)
                    redBox.x = event.stageX;
                    redBox.y = event.stageY;
            protected function bordercontainer1_mouseDownHandler(event:MouseEvent):void
                // TODO Auto-generated method stub
                _moveMode = true;
            protected function monkeypatchedgroup1_mouseUpHandler(event:MouseEvent):void
                // TODO Auto-generated method stub
                _moveMode = false;
        ]]>
    </fx:Script>
    <fx:Declarations>
        <!-- Place non-visual elements (e.g., services, value objects) here -->
    </fx:Declarations>
    <local:MonkeyPatchedGroup
        width="100%" height="100%"
        mouseMove="monkeypatchedgroup1_mouseMoveHandler(event)"
        mouseUp="monkeypatchedgroup1_mouseUpHandler(event)">
        <s:BorderContainer id="redBox"
            width="50" height="50"
            backgroundColor="red"
            mouseDown="bordercontainer1_mouseDownHandler(event)"/>
    </local:MonkeyPatchedGroup>
</s:Application>
Here is the monkey patched group:
//  ADOBE SYSTEMS INCORPORATED
//  Copyright 2008 Adobe Systems Incorporated
//  All Rights Reserved.
//  NOTICE: Adobe permits you to use, modify, and distribute this file
//  in accordance with the terms of the license agreement accompanying it.
package
    import flash.display.BlendMode;
    import flash.display.DisplayObject;
    import flash.geom.Rectangle;
    import mx.core.FlexVersion;
    import mx.core.IFlexModule;
    import mx.core.IFontContextComponent;
    import mx.core.IUIComponent;
    import mx.core.IUITextField;
    import mx.core.IVisualElement;
    import mx.core.IVisualElementContainer;
    import mx.core.UIComponent;
    import mx.core.mx_internal;
    import mx.events.FlexEvent;
    import mx.graphics.shaderClasses.ColorBurnShader;
    import mx.graphics.shaderClasses.ColorDodgeShader;
    import mx.graphics.shaderClasses.ColorShader;
    import mx.graphics.shaderClasses.ExclusionShader;
    import mx.graphics.shaderClasses.HueShader;
    import mx.graphics.shaderClasses.LuminosityShader;
    import mx.graphics.shaderClasses.SaturationShader;
    import mx.graphics.shaderClasses.SoftLightShader;
    import mx.styles.IAdvancedStyleClient;
    import mx.styles.ISimpleStyleClient;
    import mx.styles.IStyleClient;
    import mx.styles.StyleProtoChain;
    import spark.components.ResizeMode;
    import spark.components.supportClasses.GroupBase;
    import spark.core.DisplayObjectSharingMode;
    import spark.core.IGraphicElement;
    import spark.core.IGraphicElementContainer;
    import spark.core.ISharedDisplayObject;
    import spark.events.ElementExistenceEvent;
    use namespace mx_internal;
    //  Events
     *  Dispatched when a visual element is added to the content holder.
     *  <code>event.element</code> is the visual element that was added.
     *  @eventType spark.events.ElementExistenceEvent.ELEMENT_ADD
     *  @langversion 3.0
     *  @playerversion Flash 10
     *  @playerversion AIR 1.5
     *  @productversion Flex 4
    [Event(name = "elementAdd", type = "spark.events.ElementExistenceEvent")]
     *  Dispatched when a visual element is removed from the content holder.
     *  <code>event.element</code> is the visual element that's being removed.
     *  @eventType spark.events.ElementExistenceEvent.ELEMENT_REMOVE
     *  @langversion 3.0
     *  @playerversion Flash 10
     *  @playerversion AIR 1.5
     *  @productversion Flex 4
    [Event(name = "elementRemove", type = "spark.events.ElementExistenceEvent")]
    //  Styles
     *  Color of text shadows.
     *  @default #FFFFFF
     *  @langversion 3.0
     *  @playerversion Flash 10
     *  @playerversion AIR 1.5
     *  @productversion Flex 4
    [Style(name = "textShadowColor", type = "uint", format = "Color", inherit = "yes", theme = "mobile")]
     *  Alpha of text shadows.
     *  @default 0.55
     *  @langversion 3.0
     *  @playerversion Flash 10
     *  @playerversion AIR 1.5
     *  @productversion Flex 4
    [Style(name = "textShadowAlpha", type = "Number", inherit = "yes", minValue = "0.0", maxValue = "1.0", theme = "mobile")]
    //  Excluded APIs
    [Exclude(name = "addChild", kind = "method")]
    [Exclude(name = "addChildAt", kind = "method")]
    [Exclude(name = "removeChild", kind = "method")]
    [Exclude(name = "removeChildAt", kind = "method")]
    [Exclude(name = "setChildIndex", kind = "method")]
    [Exclude(name = "swapChildren", kind = "method")]
    [Exclude(name = "swapChildrenAt", kind = "method")]
    [Exclude(name = "numChildren", kind = "property")]
    [Exclude(name = "getChildAt", kind = "method")]
    [Exclude(name = "getChildIndex", kind = "method")]
    //  Other metadata
    [ResourceBundle("components")]
    [DefaultProperty("mxmlContent")]
    [IconFile("Group.png")]
     *  The Group class is the base container class for visual elements.
     *  The Group container takes as children any components that implement
     *  the IUIComponent interface, and any components that implement
     *  the IGraphicElement interface.
     *  Use this container when you want to manage visual children,
     *  both visual components and graphical components.
     *  <p>To improve performance and minimize application size,
     *  the Group container cannot be skinned.
     *  If you want to apply a skin, use the SkinnableContainer instead.</p>
     *  <p><b>Note:</b> The scale grid might not function correctly when there
     *  are DisplayObject children inside of the Group, such as a component
     *  or another Group.  If the children are GraphicElement objects, and
     *  they all share the Group's DisplayObject, then the scale grid works
     *  properly.</p>
     *  <p>Setting any of the following properties on a GraphicElement child
     *  requires that GraphicElement to create its own DisplayObject,
     *  thus negating the scale grid properties on the Group.</p>
     *  <pre>
     *  alpha
     *  blendMode other than BlendMode.NORMAL or "auto"
     *  colorTransform
     *  filters
     *  mask
     *  matrix
     *  rotation
     *  scaling
     *  3D properties
     *  bounds outside the extent of the Group
     *  </pre>
     *  <p>The Group container has the following default characteristics:</p>
     *  <table class="innertable">
     *     <tr><th>Characteristic</th><th>Description</th></tr>
     *     <tr><td>Default size</td><td>Large enough to display its children</td></tr>
     *     <tr><td>Minimum size</td><td>0 pixels</td></tr>
     *     <tr><td>Maximum size</td><td>10000 pixels wide and 10000 pixels high</td></tr>
     *  </table>
     *  @mxml
     *  <p>The <code>&lt;s:Group&gt;</code> tag inherits all of the tag
     *  attributes of its superclass and adds the following tag attributes:</p>
     *  <pre>
     *  &lt;s:Group
     *    <strong>Properties</strong>
     *    blendMode="auto"
     *    mxmlContent="null"
     *    scaleGridBottom="null"
     *    scaleGridLeft="null"
     *    scaleGridRight="null"
     *    scaleGridTop="null"
     *    <strong>Events</strong>
     *    elementAdd="<i>No default</i>"
     *    elementRemove="<i>No default</i>"
     *  /&gt;
     *  </pre>
     *  @see spark.components.DataGroup
     *  @see spark.components.SkinnableContainer
     *  @includeExample examples/GroupExample.mxml
     *  @langversion 3.0
     *  @playerversion Flash 10
     *  @playerversion AIR 1.5
     *  @productversion Flex 4
    public class MonkeyPatchedGroup extends GroupBase implements IVisualElementContainer, IGraphicElementContainer, ISharedDisplayObject
         *  Constructor.
         *  @langversion 3.0
         *  @playerversion Flash 10
         *  @playerversion AIR 1.5
         *  @productversion Flex 4
        public function MonkeyPatchedGroup():void
            super();
        //  Variables
        private var needsDisplayObjectAssignment:Boolean = false;
        private var layeringMode:uint = ITEM_ORDERED_LAYERING;
        private var numGraphicElements:uint = 0;
        private static const ITEM_ORDERED_LAYERING:uint = 0;
        private static const SPARSE_LAYERING:uint = 1;
        //  Overridden properties
        //  baselinePosition
         *  @inheritDoc
         *  @langversion 3.0
         *  @playerversion Flash 10
         *  @playerversion AIR 1.5
         *  @productversion Flex 4
        override public function get baselinePosition():Number
            if (FlexVersion.compatibilityVersion < FlexVersion.VERSION_4_5)
                return super.baselinePosition;
            if (!validateBaselinePosition())
                return NaN;
            var bElement:IVisualElement = baselinePositionElement;
            // If no baselinePositionElement is specified, use the first element
            if (bElement == null)
                for (var i:int = 0; i < numElements; i++)
                    var elt:IVisualElement = getElementAt(i);
                    if (elt.includeInLayout)
                        bElement = elt;
                        break;
            if (bElement)
                return bElement.baselinePosition + bElement.y;
            else
                return super.baselinePosition;
        [Inspectable(category = "General", enumeration = "noScale,scale", defaultValue = "noScale")]
         *  @private
        override public function set resizeMode(value:String):void
            if (isValidScaleGrid())
                // Force the resize mode to be scale if we
                // have set scaleGrid properties
                value = ResizeMode.SCALE;
            super.resizeMode = value;
         *  @private
        override public function set scrollRect(value:Rectangle):void
            // Work-around for Flash Player bug: if GraphicElements share
            // the Group's Display Object and cacheAsBitmap is true, the
            // scrollRect won't function correctly.
            var previous:Boolean = canShareDisplayObject;
            super.scrollRect = value;
            if (numGraphicElements > 0 && previous != canShareDisplayObject)
                invalidateDisplayObjectOrdering();
            if (mouseEnabledWhereTransparent && hasMouseListeners)
                // Re-render our mouse event fill if necessary.
                redrawRequested = true;
                trace("Calling invalidateDisplayList in GroupBase");
                super.$invalidateDisplayList();
         * @private
        override mx_internal function set hasMouseListeners(value:Boolean):void
            if (mouseEnabledWhereTransparent)
                redrawRequested = true;
            super.hasMouseListeners = value;
         *  @private
        override public function set width(value:Number):void
            if (_width != value)
                if (mouseEnabledWhereTransparent && hasMouseListeners)
                    // Re-render our mouse event fill if necessary.
                    redrawRequested = true;
                    super.$invalidateDisplayList();
            super.width = value;
         *  @private
        override public function set height(value:Number):void
            if (_height != value)
                if (mouseEnabledWhereTransparent && hasMouseListeners)
                    // Re-render our mouse event fill if necessary.
                    redrawRequested = true;
                    super.$invalidateDisplayList();
            super.height = value;
        //  Properties
        //  alpha
        [Inspectable(defaultValue = "1.0", category = "General", verbose = "1")]
         *  @private
        override public function set alpha(value:Number):void
            if (super.alpha == value)
                return;
            if (_blendMode == "auto")
                // If alpha changes from an opaque/transparent (1/0) and translucent
                // (0 < value < 1), then trigger a blendMode change
                if ((value > 0 && value < 1 && (super.alpha == 0 || super.alpha == 1)) || ((value == 0 || value == 1) && (super.alpha > 0 && super.alpha < 1)))
                    blendModeChanged = true;
                    invalidateDisplayObjectOrdering();
                    invalidateProperties();
            super.alpha = value;
        //  baselinePositionElement
        private var _baselinePositionElement:IVisualElement;
         *  The element used to calculate the GroupBase's baselinePosition
         *  @langversion 3.0
         *  @playerversion Flash 10
         *  @playerversion AIR 1.5
         *  @productversion Flex 4
        public function get baselinePositionElement():IVisualElement
            return _baselinePositionElement;
         *  @private
        public function set baselinePositionElement(value:IVisualElement):void
            if (value === _baselinePositionElement)
                return;
            _baselinePositionElement = value;
            invalidateParentSizeAndDisplayList();
        //  blendMode
         *  @private
         *  Storage for the blendMode property.
        private var _blendMode:String = "auto";
        private var blendModeChanged:Boolean;
        private var blendShaderChanged:Boolean;
        [Inspectable(category = "General", enumeration = "auto,add,alpha,darken,difference,erase,hardlight,invert,layer,lighten,multiply,normal,subtract,screen,overlay,colordodge,colorburn,exclusion,softlight,hue,saturation,color,luminosity", defaultValue = "auto")]
         *  A value from the BlendMode class that specifies which blend mode to use.
         *  A bitmap can be drawn internally in two ways.
         *  If you have a blend mode enabled or an external clipping mask, the bitmap is drawn
         *  by adding a bitmap-filled square shape to the vector render.
         *  If you attempt to set this property to an invalid value,
         *  Flash Player or Adobe AIR sets the value to <code>BlendMode.NORMAL</code>.
         *  <p>A value of "auto" (the default) is specific to Group's use of
         *  blendMode and indicates that the underlying blendMode should be
         *  <code>BlendMode.NORMAL</code> except when <code>alpha</code> is not
         *  equal to either 0 or 1, when it is set to <code>BlendMode.LAYER</code>.
         *  This behavior ensures that groups have correct
         *  compositing of their graphic objects when the group is translucent.</p>
         *  @default "auto"
         *  @see flash.display.DisplayObject#blendMode
         *  @see flash.display.BlendMode
         *  @langversion 3.0
         *  @playerversion Flash 10
         *  @playerversion AIR 1.5
         *  @productversion Flex 4
        override public function get blendMode():String
            return _blendMode;
         *  @private
        override public function set blendMode(value:String):void
            if (value == _blendMode)
                return;
            invalidateProperties();
            blendModeChanged = true;
            //The default blendMode in FXG is 'auto'. There are only
            //certain cases where this results in a rendering difference,
            //one being when the alpha of the Group is > 0 and < 1. In that
            //case we set the blendMode to layer to avoid the performance
            //overhead that comes with a non-normal blendMode.
            if (value == "auto")
                _blendMode = value;
                // SDK-29631: Use super.$blendMode instead of super.blendMode
                // since Group completely overrides blendMode and we
                // want to bypass the extra logic in UIComponent which
                // has its own override.
                // TODO (egeorgie): figure out whether we can share some
                // of that logic in the future.
                if (((alpha > 0 && alpha < 1) && super.$blendMode != BlendMode.LAYER) || ((alpha == 1 || alpha == 0) && super.$blendMode != BlendMode.NORMAL))
                    invalidateDisplayObjectOrdering();
            else
                var oldValue:String = _blendMode;
                _blendMode = value;
                // If one of the non-native Flash blendModes is set,
                // record the new value and set the appropriate
                // blendShader on the display object.
                if (isAIMBlendMode(value))
                    blendShaderChanged = true;
                // Only need to re-do display object assignment if blendmode was normal
                // and is changing to something else, or the blend mode was something else
                // and is going back to normal.  This is because display object sharing
                // only happens when blendMode is normal.
                if ((oldValue == BlendMode.NORMAL || value == BlendMode.NORMAL) && !(oldValue == BlendMode.NORMAL && value == BlendMode.NORMAL))
                    invalidateDisplayObjectOrdering();
        //  mxmlContent
        private var mxmlContentChanged:Boolean = false;
        private var _mxmlContent:Array;
        [ArrayElementType("mx.core.IVisualElement")]
         *  The visual content children for this Group.
         *  This method is used internally by Flex and is not intended for direct
         *  use by developers.
         *  <p>The content items should only be IVisualElement objects.
         *  An <code>mxmlContent</code> Array should not be shared between multiple
         *  Group containers because visual elements can only live in one container
         *  at a time.</p>
         *  <p>If the content is an Array, do not modify the Array
         *  directly. Use the methods defined by the Group class instead.</p>
         *  @default null
         *  @langversion 3.0
         *  @playerversion Flash 10
         *  @playerversion AIR 1.5
         *  @productversion Flex 4
        public function set mxmlContent(value:Array):void
            if (createChildrenCalled)
                setMXMLContent(value);
            else
                mxmlContentChanged = true;
                _mxmlContent = value;
                    // we will validate this in createChildren();
         *  @private
        mx_internal function getMXMLContent():Array
            if (_mxmlContent)
                return _mxmlContent.concat();
            else
                return null;
         *  @private
         *  Adds the elements in <code>mxmlContent</code> to the Group.
         *  Flex calls this method automatically; you do not call it directly.
         *  @langversion 3.0
         *  @playerversion Flash 10
         *  @playerversion AIR 1.5
         *  @productversion Flex 4
        private function setMXMLContent(value:Array):void
            var i:int;
            // if there's old content and it's different than what
            // we're trying to set it to, then let's remove all the old
            // elements first.
            if (_mxmlContent != null && _mxmlContent != value)
                for (i = _mxmlContent.length - 1; i >= 0; i--)
                    elementRemoved(_mxmlContent[i], i);
            _mxmlContent = (value) ? value.concat() : null; // defensive copy
            if (_mxmlContent != null)
                var n:int = _mxmlContent.length;
                for (i = 0; i < n; i++)
                    var elt:IVisualElement = _mxmlContent[i];
                    // A common mistake is to bind the viewport property of a Scroller
                    // to a group that was defined in the MXML file with a different parent   
                    if (elt.parent && (elt.parent != this))
                        throw new Error(resourceManager.getString("components", "mxmlElementNoMultipleParents",
                                                                  [ elt ]));
                    elementAdded(elt, i);
        //  Properties: ScaleGrid
        private var scaleGridChanged:Boolean = false;
        // store the scaleGrid into a rectangle to save space (top, left, bottom, right);
        private var scaleGridStorageVariable:Rectangle;
        //  scale9Grid
         *  @private
        override public function set scale9Grid(value:Rectangle):void
            if (value != null)
                scaleGridTop = value.top;
                scaleGridBottom = value.bottom;
                scaleGridLeft = value.left;
                scaleGridRight = value.right;
            else
                scaleGridTop = NaN;
                scaleGridBottom = NaN;
                scaleGridLeft = NaN;
                scaleGridRight = NaN;
        //  scaleGridBottom
        [Inspectable(category = "General")]
         *  Specifies the bottom coordinate of the scale grid.
         *  @langversion 3.0
         *  @playerversion Flash 10
         *  @playerversion AIR 1.5
         *  @productversion Flex 4
        public function get scaleGridBottom():Number
            if (scaleGridStorageVariable)
                return scaleGridStorageVariable.height;
            return NaN;
        public function set scaleGridBottom(value:Number):void
            if (!scaleGridStorageVariable)
                scaleGridStorageVariable = new Rectangle(NaN, NaN, NaN, NaN);
            if (value != scaleGridStorageVariable.height)
                scaleGridStorageVariable.height = value;
                scaleGridChanged = true;
                invalidateProperties();
                invalidateDisplayList();
        //  scaleGridLeft
        [Inspectable(category = "General")]
         * Specifies the left coordinate of the scale grid.
         *  @langversion 3.0
         *  @playerversion Flash 10
         *  @playerversion AIR 1.5
         *  @productversion Flex 4
        public function get scaleGridLeft():Number
            if (scaleGridStorageVariable)
                return scaleGridStorageVariable.x;
            return NaN;
        public function set scaleGridLeft(value:Number):void
            if (!scaleGridStorageVariable)
                scaleGridStorageVariable = new Rectangle(NaN, NaN, NaN, NaN);
            if (value != scaleGridStorageVariable.x)
                scaleGridStorageVariable.x = value;
                scaleGridChanged = true;
                invalidateProperties();
                invalidateDisplayList();
        //  scaleGridRight
        [Inspectable(category = "General")]
         * Specifies the right coordinate of the scale grid.
         *  @langversion 3.0
         *  @playerversion Flash 10
         *  @playerversion AIR 1.5
         *  @productversion Flex 4
        public function get scaleGridRight():Number
            if (scaleGridStorageVariable)
                return scaleGridStorageVariable.width;
            return NaN;
        public function set scaleGridRight(value:Number):void
            if (!scaleGridStorageVariable)
                scaleGridStorageVariable = new Rectangle(NaN, NaN, NaN, NaN);
            if (value != scaleGridStorageVariable.width)
                scaleGridStorageVariable.width = value;
                scaleGridChanged = true;
                invalidateProperties();
                invalidateDisplayList();
        //  scaleGridTop
        [Inspectable(category = "General")]
         * Specifies the top coordinate of the scale grid.
         *  @langversion 3.0
         *  @playerversion Flash 10
         *  @playerversion AIR 1.5
         *  @productversion Flex 4
        public function get scaleGridTop():Number
            if (scaleGridStorageVariable)
                return scaleGridStorageVariable.y;
            return NaN;
        public function set scaleGridTop(value:Number):void
            if (!scaleGridStorageVariable)
                scaleGridStorageVariable = new Rectangle(NaN, NaN, NaN, NaN);
            if (value != scaleGridStorageVariable.y)
                scaleGridStorageVariable.y = value;
                scaleGridChanged = true;
                invalidateProperties();
                invalidateDisplayList();
        private function isValidScaleGrid():Boolean
            return !isNaN(scaleGridLeft) && !isNaN(scaleGridTop) && !isNaN(scaleGridRight) && !isNaN(scaleGridBottom);
        //  Overridden methods: UIComponent
         *  @private
         *  Whether createChildren() has been called or not.
         *  We use this in the setter for mxmlContent to know
         *  whether to validate the value immediately, or just
         *  wait to let createChildren() do it.
        private var createChildrenCalled:Boolean = false;
         *  @private
        override protected function createChildren():void
            super.createChildren();
            createChildrenCalled = true;
            if (mxmlContentChanged)
                mxmlContentChanged = false;
                setMXMLContent(_mxmlContent);
         *  @private
        override public function validateProperties():void
            super.validateProperties();
            // Property validation happens top-down, so now let's
            // validate graphic element properties after
            // calling super.validateProperties()
            if (numGraphicElements > 0)
                var length:int = numElements;
                for (var i:int = 0; i < length; i++)
                    var element:IGraphicElement = getElementAt(i) as IGraphicElement;
                    if (element)
                        element.validateProperties();
         *  @private
        override protected function commitProperties():void
            super.commitProperties();
            invalidatePropertiesFlag = false;
            if (blendModeChanged)
                blendModeChanged = false;
                // Figure out the correct blendMode value
                // to set.
                // SDK-29631: Use super.$blendMode instead of super.blendMode
                // since Group completely overrides blendMode and we
                // want to bypass the extra logic in UIComponent which
                // has its own override.
                // TODO (egeorgie): figure out whether we can share some
                // of that logic in the future.
                if (_blendMode == "auto")
                    if (alpha == 0 || alpha == 1)
                        super.$blendMode = BlendMode.NORMAL;
                    else
                        super.$blendMode = BlendMode.LAYER;
                else if (!isAIMBlendMode(_blendMode))
                    super.$blendMode = _blendMode;
                if (blendShaderChanged)
                    // The graphic element's blendMode was set to a non-Flash
                    // blendMode. We mimic the look by instantiating the
                    // appropriate shader class and setting the blendShader
                    // property on the displayObject.
                    blendShaderChanged = false;
                    switch (_blendMode)
                        case "color":
                            super.blendShader = new ColorShader();
                            break;
                        case "colordodge":
                            super.blendShader = new ColorDodgeShader();
                            break;
                        case "colorburn":
                            super.blendShader = new ColorBurnShader();
                            break;
                        case "exclusion":
                            super.blendShader = new ExclusionShader();
                            break;
                        case "hue":
                            super.blendShader = new HueShader();
                            break;
                        case "luminosity":
                            super.blendShader = new LuminosityShader();
                            break;
                        case "saturation":
                            super.blendShader = new SaturationShader();
                            break;
                        case "softlight":
                            super.blendShader = new SoftLightShader();
                            break;
            // Due to dependent properties alpha and blendMode there may be a need
            // for a second pass at committing properties (to ensure our new
            // blendMode or blendShader is assigned to our underlying display
            // object).
            if (invalidatePropertiesFlag)
                super.commitProperties();
                invalidatePropertiesFlag = false;
            if (needsDisplayObjectAssignment)
                needsDisplayObjectAssignment = false;
                assignDisplayObjects();
            if (scaleGridChanged)
                // Don't reset scaleGridChanged since we also check it in updateDisplayList
                if (isValidScaleGrid())
                    resizeMode = ResizeMode.SCALE; // Force the resizeMode to scale
         *  @private
        override public function validateSize(recursive:Boolean = false):void
            // Since IGraphicElement is not ILayoutManagerClient, we need to make sure we
            // validate sizes of the elements, even in cases where recursive==false.
            // Size validation happens bottom-up, so now let's
            // validate graphic element size before
            // calling super.validateSize()
            if (numGraphicElements > 0)
                var length:int = numElements;
                for (var i:int = 0; i < length; i++)
                    var element:IGraphicElement = getElementAt(i) as IGraphicElement;
                    if (element)
                        element.validateSize();
            super.validateSize(recursive);
         *  @private
        override public function setActualSize(w:Number, h:Number):void
            if (_width != w || _height != h)
                if (mouseEnabledWhereTransparent && hasMouseListeners)
                    // Re-render our mouse event fill if necessary.
                    redrawRequested = true;
                    super.$invalidateDisplayList();
            super.setActualSize(w, h);
         *  @private
        override public function validateDisplayList():void
            // call super.validateDisplayList() and let updateDisplayList() run
            super.validateDisplayList();
            // If the DisplayObject assignment is still not completed, then postpone validation
            // of the GraphicElements. invalidateDisplayList() will be called during the next
            // commitProperties() call since needsDisplayObjectAssignment=true,
            // so we will be re-running validateDisplayList() anyways
            if (needsDisplayObjectAssignment && invalidatePropertiesFlag)
                return;
            // DisplayList validation happens top-down, so we should
            // validate graphic element DisplayList after
            // calling super.validateDisplayList().  This is
            // gets tricky because of graphic-element sharing.  We clear
            // Group's graphic's object in updateDisplayList() and handle the
            // rest of the DisplayList validation in here.
            // Iterate through the graphic elements. If an element has a displayObject that has been
            // invalidated, then validate all graphic elements that draw to this displayObject.
            // The algorithm assumes that all of the elements that share a displayObject are in between
            // the element with the shared displayObject and the next element that has a displayObject.
            var sharedDisplayObject:ISharedDisplayObject = this;
            if (numGraphicElements > 0)
                var length:int = numElements;
                for (var i:int = 0; i < length; i++)
                    var element:IGraphicElement = getElementAt(i) as IGraphicElement;
                    if (!element)
                        continue;
                    // Do a special check for layer, we may stumble upon an element with layer != 0
                    // before we're done with the current shared sequence and we don't want to mark
                    // the sequence as valid, until we reach the next sequence.  
                    if (element.depth == 0)
                        // Is this the start of a new shared sequence?         
                        if (element.displayObjectSharingMode != DisplayObjectSharingMode.USES_SHARED_OBJECT)
                            // We have finished redrawing the previous sequence
                            if (sharedDisplayObject)
                                sharedDisplayObject.redrawRequested = false;
                            // Start the new sequence
                            sharedDisplayObject = element.displayObject as ISharedDisplayObject;
                        if (!sharedDisplayObject || sharedDisplayObject.redrawRequested)
                            element.validateDisplayList();
                    else
                        // If we have layering, we don't share the display objects.
                        // Don't update the current sharedDisplayObject
                        var elementDisplayObject:ISharedDisplayObject = element.displayObject as ISharedDisplayObject;
                        if (!elementDisplayObject || elementDisplayObject.redrawRequested)
                            element.validateDisplayList();
                            if (elementDisplayObject)
                                elementDisplayObject.redrawRequested = false;
            // Mark the last shared displayObject valid
            if (sharedDisplayObject)
                sharedDisplayObject.redrawRequested = false;
         *  @private
        override protected function updateDisplayList(unscaledWidth:Number, unscaledHeight:Number):void
            // let user's code (layout) run first before dealing with graphic element
            // sharing because that's when redraws can be requested
            super.updateDisplayList(unscaledWidth, unscaledHeight);
            // Clear the group's graphic because graphic elements might be drawing to it
            // This isn't needed for DataGroup because there's no DisplayObject sharing
            // This code exists in updateDisplayList() as opposed to validateDisplayList()
            // because of compatibility issues since most of this code was
            // refactored from updateDisplayList() and in to validateDisplayList().  User's code
            // already assumed that they could call super.updateDisplayList() and then be able to draw
            // into the Group's graphics object.  Because of that, the graphics.clear() call is left
            // in updateDisplayList() instead of in validateDisplayList() with the rest of the graphic
            // element sharing code.
            var sharedDisplayObject:ISharedDisplayObject = this;
            if (sharedDisplayObject.redrawRequested)
                // clear the graphics here.  The pattern is usually to call graphics.clear()
                // before calling super.updateDisplayList() so what happens in super.updateDisplayList()
                // isn't erased.  However, in this case, what happens in super.updateDisplayList() isn't
                // much, and we want to make sure super.updateDisplayList() runs first since the layout
                // is what actually triggers the the shareDisplayObject to request to be redrawn.
                graphics.clear();
                drawBackground();
                // If a scaleGrid is set, make sure the extent of the groups bounds are filled so
                // the player will scale our contents as expected.
                if (isValidScaleGrid() && resizeMode == ResizeMode.SCALE)
                    graphics.lineStyle();
                    graphics.beginFill(0, 0);
                    graphics.drawRect(0, 0, 1, 1);
                    graphics.drawRect(measuredWidth - 1, measuredHeight - 1, 1, 1);
                    graphics.endFill();
            if (scaleGridChanged)
                scaleGridChanged = false;
                if (isValidScaleGrid())
                    // Check for DisplayObjects other than overlays
                    var overlayCount:int = _overlay ? _overlay.numDisplayObjects : 0;
                    if (numChildren - overlayCount > 0)
                        throw new Error(resourceManager.getString("components", "scaleGridGroupError"));
                    super.scale9Grid = new Rectangle(scaleGridLeft,
                                                     scaleGridTop,
                                                     scaleGridRight - scaleGridLeft,
                                                     scaleGridBottom - scaleGridTop);
                else
                    super.scale9Grid = null;
         *  @private
         *  TODO (rfrishbe): Most of this code is a duplicate of UIComponent::notifyStyleChangeInChildren,
         *  refactor as appropriate to avoid code duplication once we have a common
         *  child iterator between UIComponent and Group.
        override public function notifyStyleChangeInChildren(
            styleProp:String, recursive:Boolean):void
            if (mxmlContentChanged || !recursive)
                return;
            var n:int = numElements;
            for (var i:int = 0; i < n; i++)
                var child:ISimpleStyleClient = getElementAt(i) as ISimpleStyleClient;
                if (child)
                    child.styleChanged(styleProp);
                    if (child is IStyleClient)
                        IStyleClient(child).notifyStyleChangeInChildren(styleProp,
                                                                        recursive);
            if (advanceStyleClientChildren != null)
                for (var styleClient:Object in advanceStyleClientChildren)
                    var iAdvanceStyleClientChild:IAdvancedStyleClient = styleClient as IAdvancedStyleClient;
                    if (iAdvanceStyleClientChild)
                        iAdvanceStyleClientChild.styleChanged(styleProp);
         *  @private
         *  TODO (rfrishbe): Most of this code is a duplicate of UIComponent::regenerateStyleCache,
         *  refactor as appropriate to avoid code duplication once we have a common
         *  child iterator between UIComponent and Group.
        override public function regenerateStyleCache(recursive:Boolean):void
            // Regenerate the proto chain for this object
            initProtoChain();
            // Recursively call this method on each child.
            var n:int = numElements;
            for (var i:int = 0; i < n; i++)
                var child:IVisualElement = getElementAt(i);
                if (child is IStyleClient)
                    // Does this object already have a proto chain?
                    // If not, there's no need to regenerate a new one.
                    if (IStyleClient(child).inheritingStyles != StyleProtoChain.STYLE_UNINITIALIZED)
                        IStyleClient(child).regenerateStyleCache(recursive);
                else if (child is IUITextField)
                    // Does this object already have a proto chain?
                    // If not, there's no need to regenerate a new one.
                    if (IUITextField(child).inheritingStyles)
                        StyleProtoChain.initTextField(IUITextField(child));
            // Call this method on each non-visual StyleClient
            if (advanceStyleClientChildren != null)
                for (var styleClient:Object in advanceStyleClientChildren)
                    var iAdvanceStyleClientChild:IAdvancedStyleClient = styleClient as IAdvancedStyleClient;
                    if (iAdvanceStyleClientChild && iAdvanceStyleClientChild.inheritingStyles != StyleProtoChain.STYLE_UNINITIALIZED)
                        iAdvanceStyleClientChild.regenerateStyleCache(recursive);
        //  Content management
         *  @private
        override public function get numElements():int
            if (_mxmlContent == null)
                return 0;
            return _mxmlContent.length;
         *  @private
        override public function getElementAt(index:int):IVisualElement
            // check for RangeError:
            checkForRangeError(index);
            return _mxmlContent[index];
         *  @private
         *  Checks the range of index to make sure it's valid
        private function checkForRangeError(index:int, addingElement:Boolean = false):void
            // figure out the maximum allowable index
            var maxIndex:int = (_mxmlContent == null ? -1 : _mxmlContent.length - 1);
            // if adding an element, we allow an extra index at the end
            if (addingElement)
                maxIndex++;
            if (index < 0 || index > maxIndex)
                throw new RangeError(resourceManager.getString("components", "indexOutOfRange",
                                                               [ index ]));
         * @private
        private function isAIMBlendMode(value:String):Boolean
            if (value == "colordodge" || value == "colorburn" || value == "exclusion" || value == "softlight" || value == "hue" || value == "saturatio

FYI - This regression has been filed here: http://bugs.adobe.com/jira/browse/SDK-31989

Similar Messages

  • Does the optimizer degrade significantly the performance while running ?

    Hi,
    I'm actually managing load tests on an application.
    I do a preliminary warm test of arround 30 mn, then I run a load test of about 3/4 hour.
    I've run JRA with the evaluation key close to the 1 hour expiry, and I observe that the optimizer is still working intensively (it works arround 5 mn for a 5mn record !).
    I observed too that the bmore I run the load test without restarting the serveur, the greater is the performance (better response time with fewer CPU consumption).
    I suppose it may a positive effect of the optimization performed by Jrockit, isn't it ?
    Is it normal that the optimizer takes so much time to converge ?
    Will the optimizer decrease and even stop after a while ?
    While the optimizer works - doing many optimizations all the time ( ~5mn optimizing during a 5 mn JRA record), is the performance significantly affected ?

    The optimizer is constantly watching the application and optimizing frequently used methods. On a large application it can take some time for it to find and optimize the required methods. One way to see the actions of the optimizer is to run with -Xverbose:opt which will print each method as it is optimized. The optimizer does take some CPU time to do it's work, but you will get that back since the methods are quicker.
    Regards,
    /Staffan

  • Icon Editor Bug (2010): Using icon editor degrades sub vi performance

    Here's an interesting bug I've spent the last several days chasing around.
    After editing a vi icon calls to that sub vi take longer until you close the project and reopen it.  I think it's related data copies being made for instances the IE opens, but without any knowledge of IE internals I'm just speculating.
    See the Main.vi block diagram in the attached project for repro steps.
    Attachments:
    IconEditorBug.zip ‏152 KB

    jareds wrote:
    Hi crelf,
    The CAR number is 275888.
    Thanks jareds.
    Copyright © 2004-2015 Christopher G. Relf. Some Rights Reserved. This posting is licensed under a Creative Commons Attribution 2.5 License.

  • Report Performance degradation

    hi,
    We are using around 16 entities in crm on demand R 16which includes both default as well as custom entites.
    Since custom entities are not visible in the historical subject area , we decided to stick to the real time reporting.
    Now the issue is , we have total 45 lakh record in these entites as a whole.We have reports where we need to retrieve the data across all the enties in one report.Intially we tested the reports with lesser no of records...the report performance was not that bad....but gradually it has degraded as we loaded more n more data over a period of time.The reports now takes approx 5-10 min and then finally diaplays an error msg.Infact after creating a report structure in Step 1 - Define Criteria......n moving to Step 2 - Create Layout it takes abnormal amount of time to display.As far as reports are concerned, we have built them using the best practice except the "Historical Subject Area Issue".
    Ideally for best performance how many records should be there one entity?
    What cud be the other reasons for such a performance?
    We are working in a multi tenant enviroment
    Edited by: Rita Negi on Dec 13, 2009 5:50 AM

    Rita,
    Any report built over the real-time subject areas will timeout after a period of 10 minutes. Real-time subject areas are really not suited for large reports and you'll find running them also degrades the application performance.
    Things that will degrade performance are:
    * Joins to other dimensions
    * Custom calculations
    * Number of records
    * Number of fields returned
    There are some things that just can't be done in real-time. I would look to remove joins from other dimensions e.g. Accounts/Contacts/Opportunities all in the same report. Apply more restrictive filters, e.g. current week/month to reduce the number of records required. Alternatively have very simple report, extract to excel and modify from there. Hopefully in R17 this will be added as a feature but it seems like you're stuck till then
    Thanks
    Oli @ Innoveer

  • Installed Firefox 4, no Firefox button, Menu buttons still in existence, performance seems degraded, any suggestions on how to get firefox button and streamline interface/troubleshoot performance?

    My wife installed Firefox 4 today, upgrading from another version of Firefox. She has a ton of addons and bookmarks/bookmarklets. Looking at her Firefox and at mine, they look radically different. She doesn't have a Firefox button, her menu bar is defaulted in place, it appears nowhere near as streamlined as my install does.
    She started browsing, and normally she opens a dozen or more tumblr windows at once, to look at photos. They all load fairly quickly, and are loaded within a few moments when she gets to each tab, with her OLD install of Firefox. Post-install, they load only after a few seconds being ON each tab, and all she's seen is a huge perceived performance decrease.
    Given that I encouraged her to update given how happy I am with Firefox 4, this is important to me (and my nearness to the doghouse). Please assist.

    Ah, I've done it! I needed to set my Firefox up the way yours is.
    I think I've got it though.
    Go to the CTR preferences (Ctrl + Shift + A, Extensions, Classic Theme Restorer, Preferences)
    Once there, check the box that says "Movable back-forward button". Once you're done, go into the Customize page (<code>about:customizing</code>) then drag out the original 29 Back button back into the Customize page. Then simply move your Classic Toolbar Buttons (back/forward) where you want it.
    Should look like this. (screenshot attached)
    EDIT: I noticed something whilst exploring CTR. The additional toolbar seems to be coming from CTR itself. Go to View (press F10 or ALT to show the menu bar) -> Toolbars -> uncheck Additional Toolbar. How's that?
    Let me know if that's what you wanted.

  • Performance Decreased with group by

    Hi,
    I am tuning a query in oracle. when I run the query without group by clause, the query runs in 5-6 sec, but after including the group by clause. The same query takes 14mins to run. If anybody has any idea of what is the impact of group by clause on performance of a SQL query, please help me . The table has 1million rows of data.

    Definitely group by clause will take more time.. Do you really need group by clause in the query ?
    Please check
    http://asktom.oracle.com/pls/asktom/f?p=100:11:0::::p11_question_id:561712900346367451
    REgards
    Rajesh
    Edited by: Rajesh on Jun 10, 2010 12:20 PM

  • Faces Performance vrs Struts

    In evaluating JSF's, I put together a simple customer maintenance application of about 10 screens, first using Struts and then again using JSF's, matching the UI exactly. To measure relative performance between these two technologies, I isolated 3 relative static pages from each and ran individual JMeter benchmarks against them (just cycling between these 3 pages over and over). The struts implementation is approximately 5 times faster (measured in pages/sec) over faces. My question is this the same observation most have seen so far (faces vrs struts)? I understand faces is new and will continue to improve. I am using the lastest snap of faces 1_1_01. I welcome any comments.

    This is a slow moving thread, but the issue stills seems to be hanging around. I got similar results current technology.
    I grabbed the attachments from the original performance bug https://javaserverfaces.dev.java.net/issues/show_bug.cgi?id=3 and ran some JMeter tests against the "JSP only" and the JSF versions.
    The pages are really simple, the JSP version outputs a page which is visually identical to the JSF page. The table in question had 10 columns and 50 - 200 rows. Not a huge amount of data. I used MyFaces 1.1.3 as the JSF implementation and ran the test in JBoss 4.0.4 GA running on JDK 1.4.2.
    Here's the results:
                   Table Rows   Average [ms]  Median [ms]   Hits / Min   Samples
    JSF Testcase    50           36            30            1300         5007
    JSP Testcase    50           14            10            4030         5001
    JSF Testcase    100          56            60            1050         5001
    JSP Testcase    100          21            20            2700         5001
    JSF Testcase    200          100           100           590          5001
    JSP Testcase    200          26            30            2170         5001 This data confirms the discussion original JSF bug. The JSF version started out nearly three times slower than the JSP page. The relative performance of the JSF version degraded to nearly four times slower as table rows were added.
    So if you are thinking about adopting JSF you should be aware of the performance hit and make sure that you can architect around the problem or get the performance benchmarks adjusted. Perceived performance is important in real life projects so it's more than a theoretical problem.
    I'd also like to know if anybody has ideas or code samples that make JSF perform better?

  • Report Performance is slow

    Hi
    In our production one report is running very slow, for one moth its taking 10 to 12 min earlier it was took only 2 min for month data, we are confused why itu2019s happening. Query is running on multiprovider. On cube we are using only one aggregate and in the query designer we are using Hierarchy(Active) & virtual key figure.
    We have not changed anything recently on the query, why this suddenly report running very slow.
    Please advice 
    Thanks,
    Manu.

    Hi,
    Check whether the Aggregate is up-to-date and whether it is being used by your query or not?
    Also check the number of records as well, if the output is huge then it is obvious that the queries can take more time to run. As you are using Virtual Keyfigure, this generally degrades the query performance.
    Regards,
    rik

  • Many-to-many performance issue

    I realize that many-to-many joins have been discussed before (yes, I looked through many threads), but I'm having a slight variation on the issue. Our data warehouse has been functioning for a couple of years now, but we're now experiencing a dramatic degradation in report performance. I'll tell you everything I know and what I've tried. My hope is that someone will have an idea that hasn't occurred to me yet.
    The troubling data links deal with accounts and account_types. Each transaction will have one account, but each account can have multiple account_types and each account_type is made up of multiple accounts. It ends up looking like this:
    Transaction_cube --< account_dimension >--< account_type_table
    Given the many-to-many relationship between account and account_type, this is the only architecture I could come up with that will maintain data integrity in the transaction cube.
    I know that this is the cause of the performance issues because the reports run normally when this is removed. The volume of data obviously increases over time, but the problem appeared very suddenly -- not a gradual degradation that one would expect from a volume issue. The cube is partitioned by year and we're a little below last year's growth.
    The other fact to throw in is that the account_type table did increase in size by an additional 30% when we first noticed the problem. However, the business was able to go back and remove half of the account_types (unused types) so now the table has fewer rows than it had before we noticed the problem (~15k rows in the account_type table).
    We have tried pinning the table so that it remain in memory, but that did not help. I tried creating a materialized view combining accounts and account_types with a similar lack of improvement. I've tried adding indexes, but there is still a full-table scan. All database objects are analyzed nightly after the data load is completed.
    I'm fresh out of ideas at this point. Any suggestions and/or ideas would be greatly appreciated.

    I've thought about that. What it would mean would be aprox. 20 additional columns for each of the different account_types. Unfortunately, that would also mean that all the reports that use the account_type would have to have a condition:
    WHERE acct_type1='Income Stmt." OR acct_type2='Income Stmt." OR ....
    Since the account_types are not set up in a hierarchy and there must be only one row for account, I'm not sure that this is a feasible solution.
    Thank you for the suggestion.

  • Calculation of customer payment performance   by profit center

    I want to calculate customer payment performance by profit center  it is a report.
    Caluation clue.
    <b>Performance is a measure of when the payment was made versus the due date calculated by the payment terms</b>.
    i want the logic to be included in the following code.
    REPORT                                               
    TABLE DECLARATIONS
    TABLES: BFOD_A,         "FI subsequent BA/PC adjustment: Customer items
            BSID,           "Open Items
            BSAD,           "Cleared Items
            BKPF,           "Docuemnt Header
            KNA1,           "Customer Master
            CEPCT,          "Texts for Profit Center Master Data
            CEPC,           "Profit center master data table
            SKB1,           "G/L account master
            VBFA,           "Sales Document Flow
            VBAK.           "Sales Document: Header Data
    CONTROLS: TABAGING TYPE TABLEVIEW USING SCREEN 9000.
    FIELD-SYMBOLS: <COLUMN>.
    Internal tables followed by types
    TYPES: BEGIN OF T_TOTAL,
             WAERS  LIKE COEP-TWAER,
             DAYS01 LIKE COEP-WTGBTR,
             DAYS02 LIKE COEP-WTGBTR,
             DAYS03 LIKE COEP-WTGBTR,
             DAYS04 LIKE COEP-WTGBTR,
             DAYS05 LIKE COEP-WTGBTR,
             TOTAL  LIKE COEP-WTGBTR,
           END OF T_TOTAL.
    DATA: V_DISVARIANT       TYPE DISVARIANT,
          REF_CUSTOM         TYPE REF TO CL_GUI_CUSTOM_CONTAINER,
          REF_ALV_ZRPT       TYPE REF TO CL_GUI_ALV_GRID.
    DATA: V_SAVE(1)    TYPE C,
          V_DEFAULT(1) TYPE C,
          V_VARIANT    TYPE DISVARIANT,
          V_SORT       TYPE LVC_S_SORT,
          V_LAYOUT     TYPE LVC_S_LAYO,
          V_SAVE_TABIX LIKE SY-TABIX,
          V_SAVE_TIME  LIKE SY-UZEIT,
          V_ALV_FIELDCAT TYPE LVC_S_FCAT,
          V_SAVE_INDEX LIKE SY-TABIX,
          V_ROW        TYPE LVC_S_ROW,
          V_ROWS       TYPE LINE OF LVC_T_ROW.
    DATA: BEGIN OF V_HDR,
            CURKY(9) TYPE C,
            CURR(20) TYPE C,
            COL1(20) TYPE C,
            COL2(20) TYPE C,
            COL3(20) TYPE C,
            COL4(20) TYPE C,
            TOTAL(20) TYPE C,
          END OF V_HDR.
    DATA: BEGIN OF V_FIELD,
            NAME(15) TYPE C,
            VALUE(17) TYPE C,
          END OF V_FIELD.
    DATA: BEGIN OF I_BFOD_A OCCURS 0,
            PRCTR LIKE BFOD_A-PRCTR,
            KUNNR LIKE BFOD_A-KUNNR,
            BUKRS LIKE BFOD_A-BUKRS,
            GJAHR LIKE BFOD_A-GJAHR,
            BELNR LIKE BFOD_A-BELNR,
            BUZEI LIKE BFOD_A-BUZEI,
            AUGDT LIKE BFOD_A-AUGDT,
            HKONT LIKE BFOD_A-HKONT,
            BUDAT LIKE BFOD_A-BUDAT,
            SHKZG LIKE BFOD_A-SHKZG,
            DMBTR LIKE BFOD_A-DMBTR,
            DMBE2 LIKE BFOD_A-DMBE2,
          END OF I_BFOD_A.
    DATA: I_SET_VALUES   LIKE SETVALUES OCCURS 0 WITH HEADER LINE,
          I_SORT         TYPE LVC_T_SORT,
          I_ALV_FIELDCAT TYPE LVC_T_FCAT,
          I_PRCTR_COCD   TYPE FCINPCA001 OCCURS 0 WITH HEADER LINE,
          I_BFODA_KUNNR  LIKE I_BFOD_A OCCURS 0 WITH HEADER LINE,
    Begin of changes for DEVK909110
         I_REPORT       TYPE ZFR0ARPR_S1 OCCURS 0 WITH HEADER LINE,
          I_REPORT       TYPE ZPSS_ARBYPC OCCURS 0 WITH HEADER LINE,
    End of changes for DEVK909110
          I_FAEDE        LIKE FAEDE,
          I_TOTAL        TYPE T_TOTAL OCCURS 0 WITH HEADER LINE.
    DATA: BEGIN OF I_BKPF OCCURS 0,
            BUKRS LIKE BKPF-BUKRS,
            BELNR LIKE BKPF-BELNR,
            GJAHR LIKE BKPF-GJAHR,
            BKTXT LIKE BKPF-BKTXT,
            XBLNR LIKE BKPF-XBLNR,
            HWAER LIKE BKPF-HWAER,
            HWAE2 LIKE BKPF-HWAE2,
          END OF I_BKPF.
    *... combine BSAD and BSID
    DATA: BEGIN OF I_BSYD OCCURS 0,
            KUNNR LIKE BSID-KUNNR,
            BUKRS LIKE BSID-BUKRS,
            GJAHR LIKE BSID-GJAHR,
            BELNR LIKE BSID-BELNR,
            BUZEI LIKE BSID-BUZEI,
            AUGDT LIKE BSID-AUGDT,
            BLDAT LIKE BSID-BLDAT,
            BUDAT LIKE BSID-BUDAT,
            HKONT LIKE BSID-HKONT,
            WAERS LIKE BSID-WAERS,
            ZFBDT LIKE BSID-ZFBDT,
            ZBD1T LIKE BSID-ZBD1T,
            ZBD2T LIKE BSID-ZBD2T,
            ZBD3T LIKE BSID-ZBD3T,
            XBLNR LIKE BSID-XBLNR,
            REBZG LIKE BSID-REBZG,
            SHKZG LIKE BSID-SHKZG,
            DMBTR LIKE BSID-DMBTR,
            WRBTR LIKE BSID-WRBTR,
          END OF I_BSYD.
    DATA: BEGIN OF I_CEPC OCCURS 0,
             PRCTR LIKE CEPC-PRCTR,
             KHINR LIKE CEPC-KHINR,
          END OF I_CEPC.
    DATA: BEGIN OF I_CEPCT OCCURS 0,
             PRCTR LIKE CEPCT-PRCTR,
             MCTXT LIKE CEPCT-MCTXT,
          END OF I_CEPCT.
    DATA: BEGIN OF I_PRCTR OCCURS 0,
            PRCTR LIKE BFOD_A-PRCTR,
          END OF I_PRCTR.
    DATA: BEGIN OF I_KNA1 OCCURS 0,
             KUNNR LIKE KNA1-KUNNR,
             NAME1 LIKE KNA1-NAME1,
          END OF I_KNA1.
    Working Variables Declarations
    *... accumulators
    DATA: V_BFOD_TXNAMT LIKE BSID-WRBTR,    "transaction currency amt
          V_FRCURR      LIKE TCURR-FCURR,   "local currency
          V_TOCURR      LIKE TCURR-FCURR,   "local currency
          V_LCURR       LIKE T001-WAERS,    "local currency
          V_CUSTTOTUSD  LIKE BFOD_A-DMBE2,  "customer total grp curr
          V_TOTAL       LIKE BPPE-WTP03,    "days total grp curr
          V_CURRENT     LIKE BPPE-WTP03,    "days current grp curr
          V_TOTAL_USD   LIKE BPPE-WTP03,    "days total grp curr
          V_TOTAL_ROW   LIKE BPPE-WTP03.    "total of local curr/row
    DATA: V_PRCTR          LIKE CEPC-PRCTR,   "profit center
          V_SUBRC          LIKE SY-SUBRC,
          V_FLAG           TYPE I,
          V_DPAST          TYPE I,     "past due days working
          V_GRAND          TYPE C,
          V_DIFF_COLOR     TYPE C,
          V_MSG(50)        TYPE C,
          V_SAVE_PCFN(128) TYPE C,
          V_EXTENSION(4)   TYPE C,
          V_PREV_PRCTR     LIKE CEPC-PRCTR,
          V_POS            LIKE SY-FDPOS,
          V_SAVE_BUKRS     LIKE BFOD_A-BUKRS,
          V_SAVE_KHINR     LIKE CEPC-KHINR,
          V_PERC           TYPE P DECIMALS 10,
          V_ZBD1T          LIKE BSID-ZBD1T,
          V_ZFBDT          LIKE BSID-ZFBDT,
          V_GROUP_CLASS    LIKE RGSBS-CLASS,
          V_GROUP_NAME     LIKE RGSBS-SETNR,
          V_GROUP_TITLE    LIKE RGSBS-TITLE,
          V_SETID          LIKE SETHIER-SETID,
          V_FILETYPE       LIKE RLGRAP-FILETYPE VALUE 'DAT',
          V_CNT            LIKE SY-TABIX,
          V_PREV_BELNR     LIKE BSID-BELNR,
          V_REPORT1        LIKE I_REPORT,
          V_REPORT         LIKE I_REPORT,
          V_TABIX          LIKE SY-TABIX.
    Constants
    CONSTANTS:
          C_0H(2)     TYPE C VALUE '0H',
          C_0106(4)   TYPE C VALUE '0106',
          C_SPACE(11) TYPE C VALUE '          ',
          C_USD(3)    TYPE C VALUE 'USD',
          C_KBRC      LIKE CEPC-KOKRS VALUE 'KBRC',
          C_TXT(4)    TYPE C VALUE '.txt',
          C_XLS(4)    TYPE C VALUE '.xls',
          C_RTF(4)    TYPE C VALUE '.rtf',
          C_PERIOD(1) TYPE C VALUE '.',
          C_TODATE    LIKE CEPC-DATBI VALUE '99991231'.
    RANGES: R_KUNNR FOR KNA1-KUNNR.         "Customer
    Selection Screen Parameters and Select-options
    SELECTION-SCREEN SKIP 1.
    SELECTION-SCREEN BEGIN OF BLOCK B1 WITH FRAME TITLE TEXT-001.
    PARAMETERS:     P_KHINR LIKE CEPC-KHINR.
    SELECT-OPTIONS: S_PRCTR FOR CEPC-PRCTR,
                    S_KUNNR FOR KNA1-KUNNR,
                    S_BUKRS FOR BKPF-BUKRS,
                    S_HKONT FOR SKB1-SAKNR.
    PARAMETERS:     P_BUDAT LIKE BFOD_A-BUDAT OBLIGATORY.
    SELECTION-SCREEN ULINE.
    SELECT-OPTIONS: S_BELNR FOR BFOD_A-BELNR,
                    S_AUART FOR VBAK-AUART,
                    S_VTWEG FOR VBAK-VTWEG,
                    S_VBTYP FOR VBFA-VBTYP_V.
    SELECTION-SCREEN ULINE.
    PARAMETERS: P_AGEDY TYPE ZZAGEMULT DEFAULT '30' OBLIGATORY.
    SELECTION-SCREEN END OF BLOCK B1.
    SELECTION-SCREEN SKIP.
    SELECTION-SCREEN BEGIN OF BLOCK B2 WITH FRAME.
    PARAMETERS: P_DSVAR LIKE DISVARIANT-VARIANT.
    SELECTION-SCREEN END OF BLOCK B2.
    class lcl_event_receiver: local class to handle event DOUBLE_CLICK
    Definition:
    CLASS LCL_EVENT_RECEIVER DEFINITION.
      PUBLIC SECTION.
        METHODS:
        MTH_PRINT_TOP_OF_PAGE
            FOR EVENT PRINT_TOP_OF_PAGE OF CL_GUI_ALV_GRID.
        METHODS:
        MTH_PRINT_TOP_OF_LIST
            FOR EVENT PRINT_TOP_OF_LIST OF CL_GUI_ALV_GRID.
      PRIVATE SECTION.
    ENDCLASS.                    "lcl_event_receiver DEFINITION
    class lcl_event_receiver: local class to handle event DOUBLE_CLICK
    Implementation:
    CLASS LCL_EVENT_RECEIVER IMPLEMENTATION.
      METHOD MTH_PRINT_TOP_OF_PAGE.
        CALL FUNCTION 'Z_CA_STD_HEADER'
          EXPORTING
            HEADING    = SY-TITLE
            P_REPID    = SY-CPROG
            LINE_WIDTH = SY-LINSZ.
      ENDMETHOD.                    "MTH_PRINT_TOP_OF_PAGE
      METHOD MTH_PRINT_TOP_OF_LIST.
        CALL FUNCTION 'Z_CA_STD_HEADER'
          EXPORTING
            HEADING    = SY-TITLE
            P_REPID    = SY-CPROG
            LINE_WIDTH = SY-LINSZ.
        CALL FUNCTION 'Z_CA_PRINT_SELECTION_OPTIONS'
          EXPORTING
            P_PGMN  = SY-CPROG
            P_SKIP  = 'X'
            P_NOTOP = 'X'.
        NEW-PAGE.
      ENDMETHOD.                    "MTH_PRINT_TOP_OF_LIST
    ENDCLASS.                    "LCL_EVENT_RECEIVER IMPLEMENTATION
    DATA: REF_EVENT_RECEIVER TYPE REF TO LCL_EVENT_RECEIVER.
    Selection Screen Prompt values
      At Selection Screen
    AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_DSVAR.
      DATA: LS_DISPLAY_VARIANT TYPE DISVARIANT.
    Get the display variant
      V_DISVARIANT-REPORT  = SY-CPROG.
      V_DISVARIANT-VARIANT = P_DSVAR.
      CALL FUNCTION 'REUSE_ALV_VARIANT_F4'
        EXPORTING
          IS_VARIANT = V_DISVARIANT
          I_SAVE     = 'A'
        IMPORTING
          ES_VARIANT = LS_DISPLAY_VARIANT
        EXCEPTIONS
          OTHERS     = 3.
    Load results to parameter
      IF SY-SUBRC = 0 AND NOT LS_DISPLAY_VARIANT IS INITIAL.
        P_DSVAR = LS_DISPLAY_VARIANT-VARIANT.
      ENDIF.
    *...performed when looking for values in fields
      performs the drop down selection list
    AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_KHINR.     "Profit center grp
      PERFORM F_GET_S_KHINR.
    Selection Screen validations
    AT SELECTION-SCREEN.
      IF P_KHINR IS INITIAL.
        IF S_PRCTR[] IS INITIAL.
          IF S_BUKRS[] IS INITIAL.
            MESSAGE E000 WITH TEXT-300 TEXT-302.
          ENDIF.
        ENDIF.
      ELSE.
        IF S_PRCTR[] IS INITIAL.
          PERFORM F_VALIDATE_KHINR.
        ELSE.
    *.. Error msg: Please enter either a Profit Center Group or a
                 profit center, but not both
          MESSAGE E000 WITH TEXT-300 TEXT-301.
          EXIT.
        ENDIF.
      ENDIF.
      IF NOT S_AUART[] IS INITIAL.
        MESSAGE E000 WITH TEXT-303.
      ENDIF.
      IF NOT S_VTWEG[] IS INITIAL.
        MESSAGE E000 WITH TEXT-304.
      ENDIF.
       Event AT LINE-SELECTION
    AT LINE-SELECTION.
      CHECK SY-LSIND LE 1.
      CHECK NOT I_REPORT-BELNR IS INITIAL.
      SET PARAMETER ID 'BLN'  FIELD I_REPORT-BELNR.
      SET PARAMETER ID 'BUK'  FIELD I_REPORT-BUKRS.
      SET PARAMETER ID 'GJR'  FIELD I_REPORT-GJAHR.
      CALL TRANSACTION 'FB03' AND SKIP FIRST SCREEN.
      CLEAR: I_REPORT-BELNR, I_REPORT-BUKRS, I_REPORT-GJAHR.
    INITIALIZATION
    INITIALIZATION.
    START OF MAIN PROCESSING
    START-OF-SELECTION.
    Check aging days multiplier
      IF P_AGEDY LE 0.
        MESSAGE S000 WITH 'Aging Days Multiplier must be greater than zero'.
        EXIT.
      ENDIF.
    Populate the s_prctr from a profit center group
      IF NOT I_SET_VALUES[] IS INITIAL.
        PERFORM F_POPULATE_PRCTR_FROM_PRCTRGRP.
      ENDIF.
    Build and validate prctr against cepc table
      IF NOT S_PRCTR[] IS INITIAL.
        PERFORM F_BUILD_I_CEPC_TABLE.      "FILLS THE VALID PROFIT CTR TABLE
      ENDIF.
    Get base selections
      PERFORM F_SELECT_DATA.               "BUILD REF INTERNAL TABLES
    Get additional fields and build reporting structure
      PERFORM F_BUILD_I_REPORT.            "BUILDS INTERNAL REPORTING TABLE
    Generate ALV report
      PERFORM F_WRITE_REPORT.              "WRITES i_report AND RUNS CALCS
    END-OF-SELECTION.
      FREE: I_BFOD_A, I_KNA1, I_CEPC, I_CEPCT, I_REPORT.
          Form  F_DIS_MSG
    FORM F_DIS_MSG USING VALUE(P_PERCENTAGE) VALUE(P_TEXT).
      CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'
        EXPORTING
          PERCENTAGE = P_PERCENTAGE
          TEXT       = P_TEXT
        EXCEPTIONS
          OTHERS     = 1.
    ENDFORM.                               " F_DIS_MSG
          Form  F_GET_S_KHINR
          Get prompt values for Profit Center Group
    FORM F_GET_S_KHINR.
      PERFORM F_DIS_MSG USING 100 'Get prompt values for Profit Ctr Group.'.
      COMMIT WORK.
      CALL FUNCTION 'K_GROUP_SELECT'
        EXPORTING
          BUTTONS            = 'X'
          CLASS              = '0H  '
          CRUSER             = '*'
          FIELD_NAME         = 'RPRCTR'
          SEARCHFLD          = 'KBRC'
          SEARCHFLD_INPUT    = ' '
          SEARCHFLD_REQUIRED = 'X'
          SET                = '*'
          START_COLUMN       = 10
          START_ROW          = 5
          TABLE              = 'GLPCT'
          TYPELIST           = 'BS'
          UPDUSER            = '*'
        IMPORTING
          CLASS_NAME         = V_GROUP_CLASS
          SET_NAME           = V_GROUP_NAME
          SET_TITLE          = V_GROUP_TITLE
        EXCEPTIONS
          NO_SET_PICKED      = 1
          OTHERS             = 2.
      IF SY-SUBRC = 0.
        P_KHINR = V_GROUP_NAME.
      ENDIF.
    ENDFORM.                               " F_GET_S_KHINR
          FORM F_VALIDATE_KHINR                                         *
    FORM F_VALIDATE_KHINR.
      PERFORM F_DIS_MSG USING 100 'Validate Profit Center group.'.
      COMMIT WORK.
      CLEAR I_SET_VALUES.
      REFRESH I_SET_VALUES.
      CONCATENATE C_0106  C_KBRC P_KHINR INTO V_SETID.
      CONDENSE V_SETID.
      CALL FUNCTION 'G_SET_TREE_IMPORT'
        EXPORTING
          CLIENT                    = SY-MANDT
          FIELDNAME                 = 'RPRCTR'
          LANGU                     = SY-LANGU
          SETID                     = V_SETID
          TABNAME                   = 'GLPCT'
          NO_TABLE_BUFFERING        = 'X'
        TABLES
          SET_VALUES                = I_SET_VALUES
        EXCEPTIONS
          SET_NOT_FOUND             = 1
          ILLEGAL_FIELD_REPLACEMENT = 2
          ILLEGAL_TABLE_REPLACEMENT = 3
          OTHERS                    = 4.
      IF SY-SUBRC NE 0.
    E: Unable to find Profit Center Group & - please modify selection
        MESSAGE E000 WITH TEXT-002 P_KHINR.
      ENDIF.
      IF I_SET_VALUES[] IS INITIAL.
        MESSAGE E000 WITH P_KHINR TEXT-039.
      ENDIF.
    ENDFORM.                               " F_VALIDATE_KHINR
          Form  F_SELECT_DATA
    FORM F_SELECT_DATA.
      PERFORM F_DIS_MSG USING 100 'Retrieve info from SAP tables.'.
      COMMIT WORK.
    Build the BFOD_A internal table based on user selections
    f i_cepc table is initial, it means derive all prctr under a co cd
      IF S_PRCTR[] IS INITIAL.
        PERFORM F_RETRIEVE_BFODA_BY_COMPANY.
      ELSE.
        PERFORM F_RETRIEVE_BFODA_BY_PRCTR.
      ENDIF.
      IF I_BFOD_A[] IS INITIAL.
    *... No records fit selection criteria.
        MESSAGE E000 WITH TEXT-H20.
      ENDIF.
    Get the text for profit center
      SELECT SPRAS PRCTR DATBI KOKRS MCTXT FROM CEPCT
                 INTO CORRESPONDING FIELDS OF TABLE I_CEPCT
                  FOR ALL ENTRIES IN I_CEPC
                WHERE SPRAS = SY-LANGU
                  AND PRCTR = I_CEPC-PRCTR.
    Build an internal table of unique bfod keys for bsid and bsad
      I_BFODA_KUNNR[] = I_BFOD_A[].
      SORT I_BFODA_KUNNR BY KUNNR BUKRS GJAHR BELNR BUZEI.
      DELETE ADJACENT DUPLICATES FROM I_BFODA_KUNNR COMPARING
         KUNNR BUKRS GJAHR BELNR BUZEI.
    Build BSID Internal table
      SELECT MANDT BUKRS KUNNR UMSKS UMSKZ AUGDT AUGBL ZUONR GJAHR BELNR
             BUZEI BUDAT HKONT BLDAT WAERS REBZG XBLNR SHKZG DMBTR
             WRBTR ZFBDT ZBD1T ZBD2T ZBD3T
                FROM BSID INTO CORRESPONDING FIELDS OF TABLE I_BSYD
                 FOR ALL ENTRIES IN I_BFODA_KUNNR
               WHERE KUNNR EQ I_BFODA_KUNNR-KUNNR
                 AND BUKRS EQ I_BFODA_KUNNR-BUKRS
                 AND GJAHR EQ I_BFODA_KUNNR-GJAHR
                 AND BELNR EQ I_BFODA_KUNNR-BELNR
                 AND BUZEI EQ I_BFODA_KUNNR-BUZEI.
    Build BSAD internal table
      SELECT MANDT BUKRS KUNNR UMSKS UMSKZ AUGDT AUGBL ZUONR GJAHR BELNR
          BUZEI HKONT BUDAT BLDAT WAERS REBZG XBLNR SHKZG DMBTR WRBTR ZFBDT
          ZBD1T ZBD2T ZBD3T
             FROM BSAD APPENDING CORRESPONDING FIELDS OF TABLE I_BSYD
              FOR ALL ENTRIES IN I_BFODA_KUNNR
            WHERE KUNNR EQ I_BFODA_KUNNR-KUNNR
              AND BUKRS EQ I_BFODA_KUNNR-BUKRS
              AND AUGDT GT P_BUDAT
              AND GJAHR EQ I_BFODA_KUNNR-GJAHR
              AND BELNR EQ I_BFODA_KUNNR-BELNR
              AND BUZEI EQ I_BFODA_KUNNR-BUZEI.
      IF NOT I_BSYD[] IS INITIAL.
    Remove records based on selection criteria
        DELETE I_BSYD WHERE
           NOT BUDAT LE P_BUDAT OR
           NOT HKONT IN S_HKONT.
      ENDIF.
    Acquire document headers
      SELECT BUKRS BELNR GJAHR BKTXT XBLNR HWAER HWAE2 FROM BKPF
                    INTO TABLE I_BKPF
                    FOR ALL ENTRIES IN I_BSYD
                    WHERE BUKRS EQ I_BSYD-BUKRS
                      AND BELNR EQ I_BSYD-BELNR
                      AND GJAHR EQ I_BSYD-GJAHR.
    Sort document lines
      SORT I_BSYD BY KUNNR BUKRS GJAHR BELNR BUZEI ASCENDING.
      SORT I_BKPF BY  BUKRS BELNR GJAHR ASCENDING.
    Create table of unique customers
      SORT I_BFODA_KUNNR BY KUNNR.
      DELETE ADJACENT DUPLICATES FROM I_BFODA_KUNNR COMPARING KUNNR.
    Build customer table
      SELECT KUNNR NAME1 FROM KNA1
                INTO TABLE I_KNA1
                 FOR ALL ENTRIES IN I_BFODA_KUNNR
               WHERE KUNNR EQ I_BFODA_KUNNR-KUNNR.
    Free memory space
      FREE I_BFODA_KUNNR.
    ENDFORM.                               " F_SELECT_DATA
          Form  F_BUILD_I_CEPC_TABLE
          build the i_cepc internal table that would populate the
          valid profit centers to processed.
    FORM F_BUILD_I_CEPC_TABLE.
      PERFORM F_DIS_MSG USING 100 'Build the Profit Center Ref Table.'.
      COMMIT WORK.
    Acquire CEPC table
      IF I_PRCTR[] IS INITIAL.
        SORT S_PRCTR.
        SELECT PRCTR KHINR
          FROM CEPC
          INTO TABLE I_CEPC
          WHERE PRCTR IN S_PRCTR.
    Sort table
        SORT I_CEPC BY PRCTR KHINR.
    Remove duplicate values
        DELETE ADJACENT DUPLICATES FROM I_CEPC COMPARING PRCTR.
        I_PRCTR[] = I_CEPC[].
    Sort table
        SORT I_PRCTR BY PRCTR.
      ELSE.
    Sort table
        SORT I_PRCTR BY PRCTR.
    Acquire CEPC table
        SELECT PRCTR KHINR
          FROM CEPC
          INTO TABLE I_CEPC
          FOR ALL ENTRIES IN I_PRCTR
          WHERE PRCTR = I_PRCTR-PRCTR.
    SOrt table
        SORT I_CEPC BY PRCTR KHINR.
      ENDIF.
      IF I_CEPC[] IS INITIAL.
        MESSAGE E000 WITH TEXT-006.
      ENDIF.
    ENDFORM.                               " F_BUILD_i_CEPC_TABLE
          Form  F_BUILD_I_REPORT
          Build the A/R report internal table from bfod_a, bsid and bsad
          It is necessary to go to BSAD/BSID to get the document currency
          not present in bfod_a.
    FORM F_BUILD_I_REPORT.
      PERFORM F_DIS_MSG USING 100 'Build the report information.'.
      COMMIT WORK.
    Sort all internal tables, this is essential for later processing
      SORT I_BFOD_A BY KUNNR BUKRS GJAHR BELNR BUZEI .
      SORT I_BSYD BY KUNNR BUKRS GJAHR BELNR BUZEI.
      SORT I_CEPC BY PRCTR KHINR.
      LOOP AT I_BFOD_A.
    New customer
        AT NEW KUNNR.
          READ TABLE I_KNA1 WITH KEY KUNNR = I_BFOD_A-KUNNR BINARY SEARCH.
          IF SY-SUBRC EQ 0.
            MOVE I_KNA1-NAME1 TO I_REPORT-NAME1.
          ENDIF.
        ENDAT.
    Acquire header fields
        READ TABLE I_BKPF WITH KEY BUKRS = I_BFOD_A-BUKRS
                                   BELNR = I_BFOD_A-BELNR
                                   GJAHR = I_BFOD_A-GJAHR BINARY SEARCH.
        IF SY-SUBRC NE 0.
          CLEAR I_BKPF.
        ENDIF.
    Build base record
        PERFORM F_MOVE_BASE_TO_REPORT.
    Load profit center data
        IF P_KHINR IS INITIAL.
          IF V_PREV_PRCTR = I_BFOD_A-PRCTR.
            I_REPORT-KHINR = I_CEPC-KHINR.
          ELSE.
            READ TABLE I_CEPC WITH KEY PRCTR = I_BFOD_A-PRCTR BINARY SEARCH.
            IF SY-SUBRC = 0.
              I_REPORT-KHINR = I_CEPC-KHINR.
            ELSE.
              CLEAR I_REPORT-KHINR.
            ENDIF.
            V_PREV_PRCTR = I_BFOD_A-PRCTR.
          ENDIF.
        ELSE.
          I_REPORT-KHINR = P_KHINR.
        ENDIF.
    Reverse signs
        IF I_REPORT-SHKZG = 'H'.
          I_REPORT-DMBTR = I_REPORT-DMBTR * -1.
          I_REPORT-DMBE2 = I_REPORT-DMBE2 * -1.
        ENDIF.
    Additional details
        READ TABLE I_BSYD WITH KEY KUNNR = I_BFOD_A-KUNNR
                                   BUKRS = I_BFOD_A-BUKRS
                                   GJAHR = I_BFOD_A-GJAHR
                                   BELNR = I_BFOD_A-BELNR
                                   BUZEI = I_BFOD_A-BUZEI BINARY SEARCH.
        IF SY-SUBRC = 0.
          PERFORM F_FORMAT_I_REPORT_FR_BSYD.
          APPEND I_REPORT.
        ENDIF.
      ENDLOOP.
    ENDFORM.                               " F_BUILD_I_REPORT
          Form  F_FORMAT_I_REPORT_FR_BSYD
    Retrieve all the information needed for reporting from BSID.
    If a document has a referencing invoice (REBZG), the payment terms
       and the baseline date to be used will come from the referencing
       invoice.
    FORM F_FORMAT_I_REPORT_FR_BSYD.
    *=> get the document currency amount from bsid
      I_REPORT-BLDAT = I_BSYD-BLDAT.
      I_REPORT-WAERS = I_BSYD-WAERS.
    PERFORM F_CONVERT_CURRENCY_FR_2_AMTS USING I_REPORT-HWAER I_BSYD-WAERS
                                                I_BSYD-DMBTR   I_BSYD-WRBTR
                                                             I_BFOD_A-DMBTR
                                                     CHANGING V_BFOD_TXNAMT.
      I_REPORT-WRBTR = V_BFOD_TXNAMT.
      IF I_BSYD-SHKZG = 'H'.
        I_REPORT-WRBTR = I_REPORT-WRBTR * -1.
      ENDIF.
      V_ZBD1T = I_BSYD-ZBD1T.
      V_ZFBDT = I_BSYD-ZFBDT.
    *=> determine reference document (referencing invoice)
      CLEAR I_REPORT-SORT.
      CASE I_BSYD-REBZG.
        WHEN ' '.
          I_REPORT-SORT = I_BFOD_A-BELNR.
        WHEN 'V'.
          I_REPORT-SORT = I_BSYD-XBLNR.
        WHEN OTHERS.
          I_REPORT-SORT = I_BSYD-REBZG.
          PERFORM F_GET_DATEPAYTERM_FR_ORIGDOC.
      ENDCASE.
      CLEAR I_FAEDE.
      I_FAEDE-SHKZG = I_BSYD-SHKZG.
      I_FAEDE-KOART = 'D'.
      I_FAEDE-ZFBDT = I_BSYD-ZFBDT.
      I_FAEDE-ZBD1T = I_BSYD-ZBD1T.
      I_FAEDE-ZBD2T = I_BSYD-ZBD2T.
      I_FAEDE-ZBD3T = I_BSYD-ZBD3T.
      I_FAEDE-REBZG = I_BSYD-REBZG.
      I_FAEDE-BLDAT = I_BSYD-BLDAT.
      CALL FUNCTION 'DETERMINE_DUE_DATE'
        EXPORTING
          I_FAEDE                    = I_FAEDE
        IMPORTING
          E_FAEDE                    = I_FAEDE
        EXCEPTIONS
          ACCOUNT_TYPE_NOT_SUPPORTED = 1
          OTHERS                     = 2.
      V_DPAST = P_BUDAT - I_FAEDE-NETDT.
      IF V_DPAST < 0.
        I_REPORT-DPAST = 0.
      ELSE.
        MOVE V_DPAST TO I_REPORT-DPAST.
      ENDIF.
      I_REPORT-ZBD1T = V_ZBD1T.
      I_REPORT-NETDT = I_FAEDE-NETDT.
    Update totals
      PERFORM F_BUILD_TOTALS.
    ENDFORM.                               " F_FORMAT_I_REPORT_FR_BSYD
          Form  F_GET_DATEPAYTERM_FR_ORIGDOC
    FORM F_GET_DATEPAYTERM_FR_ORIGDOC.
    In order to go back to the original document's payment terms and
    baseline date, we neeed to resort bsid/bsad to a different sort
    order b-coz only these 3 fields logically matched the orig doc
      SORT I_BSYD BY KUNNR BUKRS BELNR.
      READ TABLE I_BSYD WITH KEY KUNNR = I_BFOD_A-KUNNR
                                 BUKRS = I_BFOD_A-BUKRS
                                 BELNR = I_REPORT-SORT BINARY SEARCH.
      IF SY-SUBRC = 0.
        V_ZBD1T = I_BSYD-ZBD1T.            "payment term
        V_ZFBDT = I_BSYD-ZFBDT.            "baseline due date
      ENDIF.
      SORT I_BSYD BY KUNNR BUKRS GJAHR BELNR BUZEI.
    ENDFORM.                               " F_GET_DATEPAYTERM_FR_ORIGDOC
          Form  F_WRITE_REPORT
          Write A/R report summarized by profit center.
          Report will be build by profit center and sum all customers
             then will sum past do for profit center and catagorized
             will also sum by project / wbs element.
    FORM F_WRITE_REPORT.
      SORT I_REPORT BY PRCTR KUNNR SORT BLDAT BELNR DPAST DESCENDING.
      CALL SCREEN 9000.
    ENDFORM.                               " F_WRITE_REPORT
          Form  F_POPULATE_PRCTR_FROM_PRCTRGRP
    FORM F_POPULATE_PRCTR_FROM_PRCTRGRP.
      LOOP AT I_SET_VALUES.
        IF I_SET_VALUES-TO = I_SET_VALUES-FROM.
          I_PRCTR-PRCTR = I_SET_VALUES-TO.
          COLLECT I_PRCTR.
          S_PRCTR-SIGN   = 'I'.
          S_PRCTR-OPTION = 'EQ'.
          S_PRCTR-LOW    = I_SET_VALUES-TO.
          COLLECT S_PRCTR.
        ELSE.
          MESSAGE E000 WITH 'System Error, contact programmer'
                  I_SET_VALUES-TO I_SET_VALUES-FROM.
        ENDIF.
      ENDLOOP.
    ENDFORM.                               " F_POPULATE_PRCTR_FROM_PRCTRGRP
          Form  F_CONVERT_CURRENCY_FR_2_AMTS
          This function module will ensure proper handling of decimals
          and conversion of currency. This will give you the historical
          exchange rate used.
          BFOD_A does not have the trans curr amt so we will get it
           using:  ( bsid trans curr amt / bsid loc curr amt ) *
                   bfod_a loc currency amt
    FORM F_CONVERT_CURRENCY_FR_2_AMTS USING V_FRCURR V_TOCURR
                                            V_OFRAMT V_OTOAMT V_NFRAMT
                                     CHANGING V_NTOAMT.
      CALL FUNCTION 'Z_CONVERT_CURRENCY_FROM_2_AMTS'
        EXPORTING
          FROM_CURRENCY   = V_FRCURR
          TO_CURRENCY     = V_TOCURR
          OLD_FROM_AMOUNT = V_OFRAMT
          OLD_TO_AMOUNT   = V_OTOAMT
          NEW_FROM_AMOUNT = V_NFRAMT
        IMPORTING
          NEW_TO_AMOUNT   = V_NTOAMT
        EXCEPTIONS
          OTHERS          = 1.
      IF SY-SUBRC <> 0.
        MESSAGE E000 WITH TEXT-005.
      ENDIF.
    ENDFORM.                               " F_CONVERT_CURRENCY_FR_2_AMTS
          Form  F_RETRIEVE_BFODA_BY_COMPANY
    FORM F_RETRIEVE_BFODA_BY_COMPANY.
    Acquire BFOD_A table
      SELECT PRCTR KUNNR BUKRS GJAHR BELNR BUZEI AUGDT HKONT BUDAT
             SHKZG DMBTR DMBE2 FROM BFOD_A
         INTO TABLE I_BFOD_A
         WHERE BUKRS IN S_BUKRS.
      IF I_BFOD_A[] IS INITIAL.
        EXIT.
      ELSE.
    Remove records based on selection criteria
        DELETE I_BFOD_A WHERE NOT KUNNR IN S_KUNNR OR
                              NOT BUDAT LE P_BUDAT OR
                              NOT HKONT IN S_HKONT OR
                              NOT BELNR IN S_BELNR OR
                            ( NOT AUGDT IS INITIAL AND
                              NOT AUGDT > P_BUDAT ).
      ENDIF.
    Build selection option
      LOOP AT I_BFOD_A.
        I_PRCTR-PRCTR  = I_BFOD_A-PRCTR.
        COLLECT I_PRCTR.
        S_PRCTR-SIGN   = 'I'.
        S_PRCTR-OPTION = 'EQ'.
        S_PRCTR-LOW    = I_BFOD_A-PRCTR.
        COLLECT S_PRCTR.
      ENDLOOP.
      SORT S_PRCTR.
      SORT I_PRCTR BY PRCTR.
      PERFORM F_BUILD_I_CEPC_TABLE.
    ENDFORM.                    " F_RETRIEVE_BFODA_BY_COMPANY
          Form  F_RETRIEVE_BFODA_BY_PRCTR
    FORM F_RETRIEVE_BFODA_BY_PRCTR.
    Acquire BFOD_A table
      SELECT PRCTR KUNNR BUKRS GJAHR BELNR BUZEI AUGDT HKONT BUDAT
             SHKZG DMBTR DMBE2 FROM BFOD_A
         INTO TABLE I_BFOD_A
         FOR ALL ENTRIES IN I_PRCTR
         WHERE PRCTR = I_PRCTR-PRCTR AND
               KUNNR IN S_KUNNR AND
               BUKRS IN S_BUKRS.
      IF I_BFOD_A[] IS INITIAL.
        EXIT.
      ELSE.
    Remove records based on selection criteria
        DELETE I_BFOD_A WHERE NOT KUNNR IN S_KUNNR OR
                              NOT BUKRS IN S_BUKRS OR
                              NOT BUDAT LE P_BUDAT OR
                              NOT HKONT IN S_HKONT OR
                              NOT BELNR IN S_BELNR OR
                            ( NOT AUGDT IS INITIAL AND
                              NOT AUGDT > P_BUDAT ).
      ENDIF.
    ENDFORM.                    " F_RETRIEVE_BFODA_BY_PRCTR
          Form  F_MOVE_BASE_TO_REPORT
    FORM F_MOVE_BASE_TO_REPORT.
      I_REPORT-PRCTR = I_BFOD_A-PRCTR.
      I_REPORT-KUNNR = I_BFOD_A-KUNNR.
      I_REPORT-BELNR = I_BFOD_A-BELNR.
      I_REPORT-BUKRS = I_BFOD_A-BUKRS.
      I_REPORT-HKONT = I_BFOD_A-HKONT.
      I_REPORT-AUGDT = I_BFOD_A-AUGDT.
      I_REPORT-BUDAT = I_BFOD_A-BUDAT.
      I_REPORT-GJAHR = I_BFOD_A-GJAHR.
      I_REPORT-BUZEI = I_BFOD_A-BUZEI.
      I_REPORT-SHKZG = I_BFOD_A-SHKZG.
      I_REPORT-DMBTR = I_BFOD_A-DMBTR.
      I_REPORT-DMBE2 = I_BFOD_A-DMBE2.
      I_REPORT-HWAER = I_BKPF-HWAER.
      I_REPORT-HWAE2 = I_BKPF-HWAE2.
      I_REPORT-BKTXT = I_BKPF-BKTXT.
      I_REPORT-XBLNR = I_BKPF-XBLNR.
    ENDFORM.                    " F_MOVE_BASE_TO_REPORT
         Module  STATUS_9000  OUTPUT
          text
    MODULE STATUS_9000 OUTPUT.
      SET PF-STATUS '9000'.
      SET TITLEBAR '900'.
    Launch standard ALV grid
      PERFORM F_CREATE_ALV_GRID_CONTROL.
      PERFORM F_LOAD_COLUMN_HEADINGS.
    ENDMODULE.                 " STATUS_9000  OUTPUT
          Module  USER_COMMAND_9000  INPUT
          text
    MODULE USER_COMMAND_9000 INPUT.
      CASE SY-UCOMM.
        WHEN 'EXIT' OR 'CANC' OR 'BACK'.
          CALL METHOD REF_CUSTOM->FREE.
          SET SCREEN 0.
          LEAVE SCREEN.
    Begin of changes for Release 2 by HBE7890 - DEVK909110
        WHEN 'PRIN'.
          PERFORM PRINT_AGING_TOTALS.
    End of changes.
      ENDCASE.
    ENDMODULE.                 " USER_COMMAND_9000  INPUT
          Form  F_CREATE_ALV_GRID_CONTROL
          text
    FORM F_CREATE_ALV_GRID_CONTROL.
    Set field catalog for ALV
      PERFORM F_SET_FIELDCAT.
      IF REF_CUSTOM IS INITIAL.
      Create ALV container
        CREATE OBJECT REF_CUSTOM
          EXPORTING
            CONTAINER_NAME = 'ZRPT_CONTAINER'.
      Create ALV grid control
        CREATE OBJECT REF_ALV_ZRPT
          EXPORTING
            I_PARENT          = REF_CUSTOM.
    Adjust look and feel
        PERFORM F_CHANGE_SETTINGS.
    Call the ALV Build
        CALL METHOD REF_ALV_ZRPT->SET_TABLE_FOR_FIRST_DISPLAY
          EXPORTING
            IS_LAYOUT       = V_LAYOUT
            IS_VARIANT      = V_VARIANT
            I_SAVE          = V_SAVE
            I_DEFAULT       = V_DEFAULT
          CHANGING
            IT_SORT         = I_SORT
            IT_OUTTAB       = I_REPORT[]
            IT_FIELDCATALOG = I_ALV_FIELDCAT[].
    Create print top of page
        CREATE OBJECT REF_EVENT_RECEIVER.
        SET HANDLER REF_EVENT_RECEIVER->MTH_PRINT_TOP_OF_PAGE
            FOR REF_ALV_ZRPT.
    Create print top of page
        CREATE OBJECT REF_EVENT_RECEIVER.
        SET HANDLER REF_EVENT_RECEIVER->MTH_PRINT_TOP_OF_LIST
            FOR REF_ALV_ZRPT.
      ENDIF.
    ENDFORM.                    " F_CREATE_ALV_GRID_CONTROL
         Form  F_CHANGE_SETTINGS
          text
    FORM F_CHANGE_SETTINGS .
    Set layout parameters
      V_LAYOUT-GRID_TITLE = 'A/R by Profit Center'.
      V_LAYOUT-SEL_MODE   = 'A'.
      V_LAYOUT-INFO_FNAME = 'LINECOLOR'.
      V_LAYOUT-CWIDTH_OPT = 'X'.
      V_LAYOUT-NO_MERGING = 'X'.
      V_LAYOUT-NUMC_TOTAL = 'X'.
      V_DEFAULT           = 'X'.
      V_SAVE              = 'A'.
    Set display variant
      V_VARIANT-REPORT  = SY-REPID.
      IF P_DSVAR NE ''.
        V_VARIANT-VARIANT = P_DSVAR.
      ENDIF.
    ENDFORM.                    " F_CHANGE_SETTINGS
          Form  F_SET_FIELDCAT
          text
    FORM F_SET_FIELDCAT .
    Set field catalog for ALV
      CALL FUNCTION 'LVC_FIELDCATALOG_MERGE'
        EXPORTING
         I_STRUCTURE_NAME       = 'ZFR0ARPR_S1'  "DEVK909110
          I_STRUCTURE_NAME       = 'ZPSS_ARBYPC'                "DEVK909110
        CHANGING
          CT_FIELDCAT            = I_ALV_FIELDCAT
        EXCEPTIONS
          INCONSISTENT_INTERFACE = 1
          PROGRAM_ERROR          = 2
          OTHERS                 = 3.
    Override any attributes
      LOOP AT I_ALV_FIELDCAT INTO V_ALV_FIELDCAT.
        IF V_ALV_FIELDCAT-FIELDNAME EQ 'NAME1'.
          MOVE 'Customer Name' TO: V_ALV_FIELDCAT-REPTEXT,
                                   V_ALV_FIELDCAT-SCRTEXT_L,
                                   V_ALV_FIELDCAT-SCRTEXT_M,
                                   V_ALV_FIELDCAT-SCRTEXT_S.
        ENDIF.
        IF V_ALV_FIELDCAT-FIELDNAME EQ 'SORT'.
          MOVE 'Documentation' TO: V_ALV_FIELDCAT-REPTEXT,
                                   V_ALV_FIELDCAT-SCRTEXT_L,
                                   V_ALV_FIELDCAT-SCRTEXT_M.
          MOVE 'DocRef' TO         V_ALV_FIELDCAT-SCRTEXT_S.
        ENDIF.
        MODIFY I_ALV_FIELDCAT FROM V_ALV_FIELDCAT.
      ENDLOOP.
    ENDFORM.                    " F_SET_FIELDCAT
          Form  F_BUILD_TOTALS
          text
    FORM F_BUILD_TOTALS .
      DATA: V_DAYS TYPE I,
            V_INDEX(2) TYPE N.
      CLEAR I_TOTAL.
    Build total line
      MOVE I_REPORT-HWAER TO I_TOTAL-WAERS.
      MOVE I_REPORT-DMBTR TO I_TOTAL-TOTAL.
      DO 5 TIMES.
        V_DAYS = ( SY-INDEX - 1 ) * P_AGEDY.
        V_INDEX = SY-INDEX.
        IF I_REPORT-DPAST LE V_DAYS.
          CONCATENATE 'I_TOTAL-DAYS' V_INDEX INTO V_FIELD-NAME.
          ASSIGN (V_FIELD-NAME) TO <COLUMN>.
          <COLUMN> = I_REPORT-DMBTR.
          EXIT.
        ELSEIF SY-INDEX EQ 5.
          CONCATENATE 'I_TOTAL-DAYS' V_INDEX INTO V_FIELD-NAME.
          ASSIGN (V_FIELD-NAME) TO <COLUMN>.
          <COLUMN> = I_REPORT-DMBTR.
          EXIT.
        ENDIF.
      ENDDO.
      COLLECT I_TOTAL.
    ENDFORM.                    " F_BUILD_TOTALS
        

    CO-PA has all the information you need...
    Profitability Analysis is that part of CO where operations will access its performance factors and profitability statements contain margins, standard cost variance, sales information, allocations and other related profit or loss data. This module helps analyze profitability of customers, markets and products at various levels of contribution margins. Profitability is measured down to the SD billing document line and is adjusted periodically against standard costs and other costs.
    It has 2 methods of approach :
    Costing based Profitability Analysis - This is primarily designed to let you analyze profits quickly for the purpose of sales management.
    Account based Profitabilty Analysis - This type of Profitability Analysis enables you to reconcile cost and financial accounting at any time using accounts.
    Guess, the second approach is what you are looking for...

  • OIM 9.1.0.2 - User group permission

    Hi experts,
    IHAC that need to configure some user groups in order to perform just specifics activities. We have configured the user groups but with no sucess.
    1) Group that should see/track all the opened requests.
    Given all request permission. (The requests don´t appear)
    2) Group that should disable Resource from user thru User Detail -> Resource Profile.
    Given all resource objects permission. (Error message: No permission)
    3) Group that create/manage Attestation.
    Given all attestation permission. (The attestation is created, but it doesn´t appear to delegated user)
    Any tip on how to set the correct permission?
    Brgs,

    Hi,
    I was looking for the same questions! One of them I could make it to work...
    About quetion #3, some steps:
    1. Create a group with name, lets say: AttestationManagers
    2. Give the following permissions:
    Attestation Requests
    Attestation Process Tasks
    Attestation Data
    Attestation Process Definitions
    Attestation Process Administrator
    3. Make the users responsable of attestation process part of group: AttestationManagers
    4. Create an attestation process and in the last field: Process Owner, put AttestationManagers
    5. Click: "Run Now"
    6. This attestation should appear to the user responsable of it.
    You can find an explanation about the attestation process in the following link: http://download.oracle.com/docs/cd/E14049_01/doc.9101/e14057/attestation.htm#insertedID1 and about the Process Owner, the point 15.1.1 in the above link.
    I hope it helps!
    Regards.

  • Frustratingly slow performance Mavericks on Macbook Pro

    Hi
    I have a mid 2009 Macbook Pro with Mavericks installed. Lately I have been getting frustrating spinning beachball hangs, apps crashing (particularly mail and aperture), boot times of 5 minutes plus, and shutdown times as long as 7 minutes. I've read through as many forum posts as I can manage and not one seems to solve the problem. Looking through the system.log today I have noticed a few error messages that may or may not be contributing, but cannot work out what they mean or what to do about them. Any help/advice would be greatly appreciated. I am thinking about upgrading the internal 250GB HDD to either a 1TB hybrid SSHD or a 250GB SSD, and obviously doing a clean install. My only worry at the moment is losing lots of really importan data and being able to recover it from Time Machine.
    An extract from the system.log is below. My concerns are about the CGContextErase function, the One of the two will be used error, and the FT Message Delivery Failed errors. All of these are happenning around the time the machine is unresponsive.
    Thanks in advance
    Chris.
    Mar 17 10:45:14 chris-loneragans-macbook-pro.local com.apple.SecurityServer[15]: Killing auth hosts
    Mar 17 10:45:14 chris-loneragans-macbook-pro.local com.apple.SecurityServer[15]: Session 100015 destroyed
    Mar 17 10:45:14 chris-loneragans-macbook-pro.local com.apple.SecurityServer[15]: Session 100018 created
    Mar 17 10:45:16 chris-loneragans-macbook-pro.local Planbook[420]: The function `CGContextErase' is obsolete and will be removed in an upcoming update. Unfortunately, this application, or a library it uses, is using this obsolete function, and is thereby contributing to an overall degradation of system performance.
    Mar 17 10:45:25 chris-loneragans-macbook-pro.local sandboxd[323] ([420]): Planbook(420) deny file-issue-extension /Applications/Microsoft Office 2011/Microsoft Word.app
    Mar 17 10:45:40 chris-loneragans-macbook-pro.local Microsoft Word[429]: The function `CGContextErase' is obsolete and will be removed in an upcoming update. Unfortunately, this application, or a library it uses, is using this obsolete function, and is thereby contributing to an overall degradation of system performance.
    Mar 17 10:45:42 chris-loneragans-macbook-pro.local Microsoft Word[429]: Failed to read a font collection file at /Users/chrisloneragan/Library/FontCollections/Web-safe Mac:Windows.collection. Recommend manually removing the file.
    Mar 17 10:45:59 chris-loneragans-macbook-pro.local Console[436]: setPresentationOptions called with NSApplicationPresentationFullScreen when there is no visible fullscreen window; this call will be ignored.
    Mar 17 10:45:59 chris-loneragans-macbook-pro.local Console[436]: The function `CGContextErase' is obsolete and will be removed in an upcoming update. Unfortunately, this application, or a library it uses, is using this obsolete function, and is thereby contributing to an overall degradation of system performance.
    Mar 17 10:46:52 chris-loneragans-macbook-pro kernel[0]: **** [IOBluetoothHostControllerUSBTransport][SuspendDevice] -- Resume -- suspendDeviceCallResult = 0x0000 (kIOReturnSuccess) -- 0x4c00 ****
    Mar 17 10:46:55 chris-loneragans-macbook-pro kernel[0]: virtual bool IOUserEthernetController::setLinkState(bool): status=1 mCurrentMedium=0xffffff801aec8580
    Mar 17 10:46:59 chris-loneragans-macbook-pro.local configd[18]: network changed: v4(en2+:172.20.10.3) DNS+ Proxy+ SMB
    Mar 17 10:47:02 chris-loneragans-macbook-pro.local apsd[79]: Unrecognized leaf certificate
    Mar 17 10:47:03 chris-loneragans-macbook-pro Creative Cloud[283]: objc[283]: Class HTTPHeader is implemented in both /Applications/Utilities/Adobe Creative Cloud/ACC/C3ContainerBL.dylib and /Applications/Utilities/Adobe Creative Cloud/AppsPanel/AppsPanelIL.dylib. One of the two will be used. Which one is undefined.
    Mar 17 10:47:03 chris-loneragans-macbook-pro Creative Cloud[283]: objc[283]: Class ProxyManager is implemented in both /Applications/Utilities/Adobe Creative Cloud/ACC/C3ContainerBL.dylib and /Applications/Utilities/Adobe Creative Cloud/AppsPanel/AppsPanelIL.dylib. One of the two will be used. Which one is undefined.
    Mar 17 10:47:05 chris-loneragans-macbook-pro.local AirPlayUIAgent[313]: 2014-03-17 10:47:05.120203 AM [AirPlayUIAgent] Changed PIN pairing: no
    Mar 17 10:47:05 chris-loneragans-macbook-pro.local AirPlayUIAgent[313]: 2014-03-17 10:47:05.143376 AM [AirPlayUIAgent] Changed PIN pairing: no
    Mar 17 10:47:06 chris-loneragans-macbook-pro Creative Cloud[283]: objc[283]: Class HTTPHeader is implemented in both /Applications/Utilities/Adobe Creative Cloud/ACC/C3ContainerBL.dylib and /Applications/Utilities/Adobe Application Manager/UWA/UpdaterCore.framework/UpdaterCore. One of the two will be used. Which one is undefined.
    Mar 17 10:47:06 chris-loneragans-macbook-pro Creative Cloud[283]: objc[283]: Class ProxyManager is implemented in both /Applications/Utilities/Adobe Creative Cloud/ACC/C3ContainerBL.dylib and /Applications/Utilities/Adobe Application Manager/UWA/UpdaterCore.framework/UpdaterCore. One of the two will be used. Which one is undefined.
    Mar 17 10:47:15 chris-loneragans-macbook-pro.local Adobe CEF Helper[456]: Internals of CFAllocator not known; out-of-memory failures via CFAllocator will not result in termination. http://crbug.com/45650
    Mar 17 10:47:17 chris-loneragans-macbook-pro.local Adobe CEF Helper[459]: Internals of CFAllocator not known; out-of-memory failures via CFAllocator will not result in termination. http://crbug.com/45650
    Mar 17 10:47:17 chris-loneragans-macbook-pro.local sandboxd[323] ([222]): ubd(222) deny file-read-data /.DocumentRevisions-V100/PerUID/501/68/com.apple.documentVersions/BTEC Unit 41 Assignments.590d0ee2-ca19-479e-b059-01e580727142.numbers/Index.zip
    Mar 17 10:47:21 --- last message repeated 6 times ---
    Mar 17 10:47:21 chris-loneragans-macbook-pro.local Adobe CEF Helper[459]: The function `CGFontSetShouldUseMulticache' is obsolete and will be removed in an upcoming update. Unfortunately, this application, or a library it uses, is using this obsolete function, and is thereby contributing to an overall degradation of system performance.
    Mar 17 10:48:03 chris-loneragans-macbook-pro.local com.apple.SecurityServer[15]: Session 100020 created
    Mar 17 10:48:17 chris-loneragans-macbook-pro.local identityservicesd[250]: [Warning] FTMessageDelivery failed! (HTTP Status Code: 0) Error (NSURLErrorDomain:-1003): A server with the specified hostname could not be found. https://service1.ess.apple.com/WebObjects/QueryService.woa/wa/query?uri=tel%3A%2 B447799017325
    Mar 17 10:48:27 --- last message repeated 3 times ---
    Mar 17 10:48:27 chris-loneragans-macbook-pro.local Creative Cloud[283]: CFNetwork SSLHandshake failed (-9806)
    Mar 17 10:48:32 chris-loneragans-macbook-pro.local identityservicesd[250]: [Warning] FTMessageDelivery failed! (HTTP Status Code: 0) Error (NSURLErrorDomain:-1003): A server with the specified hostname could not be found. https://service1.ess.apple.com/WebObjects/QueryService.woa/wa/query?uri=tel%3A%2 B447799017325
    Mar 17 10:48:37 --- last message repeated 1 time ---
    Mar 17 10:48:37 chris-loneragans-macbook-pro.local identityservicesd[250]: [Warning] FTMessageDelivery failed! (HTTP Status Code: 0) Error (NSURLErrorDomain:-1003): A server with the specified hostname could not be found. https://service1.ess.apple.com/WebObjects/QueryService.woa/wa/query?uri=tel%3A%2 B447891187123
    Mar 17 10:48:41 --- last message repeated 1 time ---
    Mar 17 10:48:41 chris-loneragans-macbook-pro.local identityservicesd[250]: [Warning] FTMessageDelivery failed! (HTTP Status Code: 0) Error (NSURLErrorDomain:-1003): A server with the specified hostname could not be found. https://service1.ess.apple.com/WebObjects/QueryService.woa/wa/query?uri=tel%3A%2 B447799017325
    Mar 17 10:48:43 --- last message repeated 1 time ---
    Mar 17 10:48:43 chris-loneragans-macbook-pro.local identityservicesd[250]: [Warning] FTMessageDelivery failed! (HTTP Status Code: 0) Error (NSURLErrorDomain:-1003): A server with the specified hostname could not be found. https://service1.ess.apple.com/WebObjects/QueryService.woa/wa/query?uri=tel%3A%2 B447891187123
    Mar 17 10:48:50 --- last message repeated 1 time ---
    Mar 17 10:48:50 chris-loneragans-macbook-pro.local com.apple.SecurityServer[15]: Session 100021 created
    Mar 17 10:48:50 chris-loneragans-macbook-pro.local com.apple.SecurityServer[15]: Killing auth hosts
    Mar 17 10:48:50 chris-loneragans-macbook-pro.local com.apple.SecurityServer[15]: Session 100020 destroyed
    Mar 17 10:48:50 chris-loneragans-macbook-pro.local identityservicesd[250]: [Warning] FTMessageDelivery failed! (HTTP Status Code: 0) Error (NSURLErrorDomain:-1003): A server with the specified hostname could not be found. https://service1.ess.apple.com/WebObjects/QueryService.woa/wa/query?uri=tel%3A%2 B447799017325
    Mar 17 10:48:51 --- last message repeated 1 time ---
    Mar 17 10:48:51 chris-loneragans-macbook-pro.local identityservicesd[250]: [Warning] FTMessageDelivery failed! (HTTP Status Code: 0) Error (NSURLErrorDomain:-1003): A server with the specified hostname could not be found. https://service1.ess.apple.com/WebObjects/QueryService.woa/wa/query?uri=tel%3A%2 B447891187123
    Mar 17 10:49:01 --- last message repeated 3 times ---
    Mar 17 10:49:01 chris-loneragans-macbook-pro.local identityservicesd[250]: [Warning] FTMessageDelivery failed! (HTTP Status Code: 0) Error (NSURLErrorDomain:-1003): A server with the specified hostname could not be found. https://service1.ess.apple.com/WebObjects/QueryService.woa/wa/query?uri=tel%3A%2 B447799017325
    Mar 17 10:49:24 --- last message repeated 1 time ---
    Mar 17 10:49:24 chris-loneragans-macbook-pro.local identityservicesd[250]: [Warning] FTMessageDelivery failed! (HTTP Status Code: 0) Error (NSURLErrorDomain:-1003): A server with the specified hostname could not be found. https://service1.ess.apple.com/WebObjects/QueryService.woa/wa/query?uri=tel%3A%2 B447891187123
    Mar 17 10:49:24 --- last message repeated 1 time ---
    Mar 17 10:49:24 chris-loneragans-macbook-pro.local identityservicesd[250]: [Warning] FTMessageDelivery failed! (HTTP Status Code: 0) Error (NSURLErrorDomain:-1003): A server with the specified hostname could not be found. https://service1.ess.apple.com/WebObjects/QueryService.woa/wa/query?uri=tel%3A%2 B447799017325
    Mar 17 10:49:34 --- last message repeated 1 time ---
    Mar 17 10:49:34 chris-loneragans-macbook-pro.local com.apple.SecurityServer[15]: Session 100022 created
    Mar 17 10:49:34 chris-loneragans-macbook-pro.local com.apple.SecurityServer[15]: Killing auth hosts
    Mar 17 10:49:34 chris-loneragans-macbook-pro.local com.apple.SecurityServer[15]: Session 100021 destroyed
    Mar 17 10:49:34 chris-loneragans-macbook-pro.local identityservicesd[250]: [Warning] FTMessageDelivery failed! (HTTP Status Code: 0) Error (NSURLErrorDomain:-1003): A server with the specified hostname could not be found. https://service1.ess.apple.com/WebObjects/QueryService.woa/wa/query?uri=tel%3A%2 B447891187123
    Mar 17 10:49:37 --- last message repeated 1 time ---
    Mar 17 10:49:37 chris-loneragans-macbook-pro.local identityservicesd[250]: [Warning] FTMessageDelivery failed! (HTTP Status Code: 0) Error (NSURLErrorDomain:-1003): A server with the specified hostname could not be found. https://service1.ess.apple.com/WebObjects/QueryService.woa/wa/query?uri=tel%3A%2 B447799017325
    Mar 17 10:49:46 --- last message repeated 1 time ---
    Mar 17 10:49:46 chris-loneragans-macbook-pro.local identityservicesd[250]: [Warning] FTMessageDelivery failed! (HTTP Status Code: 0) Error (NSURLErrorDomain:-1003): A server with the specified hostname could not be found. https://service1.ess.apple.com/WebObjects/QueryService.woa/wa/query?uri=tel%3A%2 B447891187123
    Mar 17 10:49:51 --- last message repeated 1 time ---
    Mar 17 10:49:51 chris-loneragans-macbook-pro.local identityservicesd[250]: [Warning] FTMessageDelivery failed! (HTTP Status Code: 0) Error (NSURLErrorDomain:-1003): A server with the specified hostname could not be found. https://service1.ess.apple.com/WebObjects/QueryService.woa/wa/query?uri=tel%3A%2 B447799017325
    Mar 17 10:49:52 --- last message repeated 1 time ---
    Mar 17 10:49:52 chris-loneragans-macbook-pro.local Safari[469]: The function `CGContextErase' is obsolete and will be removed in an upcoming update. Unfortunately, this application, or a library it uses, is using this obsolete function, and is thereby contributing to an overall degradation of system performance.
    Mar 17 10:49:58 chris-loneragans-macbook-pro.local identityservicesd[250]: [Warning] FTMessageDelivery failed! (HTTP Status Code: 0) Error (NSURLErrorDomain:-1003): A server with the specified hostname could not be found. https://service1.ess.apple.com/WebObjects/QueryService.woa/wa/query?uri=tel%3A%2 B447891187123
    Mar 17 10:50:05 --- last message repeated 1 time ---
    Mar 17 10:50:05 chris-loneragans-macbook-pro.local com.apple.SecurityServer[15]: Session 100023 created
    Mar 17 10:50:05 chris-loneragans-macbook-pro.local com.apple.SecurityServer[15]: Killing auth hosts
    Mar 17 10:50:05 chris-loneragans-macbook-pro.local com.apple.SecurityServer[15]: Session 100022 destroyed
    Mar 17 10:50:05 chris-loneragans-macbook-pro.local identityservicesd[250]: [Warning] FTMessageDelivery failed! (HTTP Status Code: 0) Error (NSURLErrorDomain:-1003): A server with the specified hostname could not be found. https://service1.ess.apple.com/WebObjects/QueryService.woa/wa/query?uri=tel%3A%2 B447799017325
    Mar 17 10:50:13 --- last message repeated 1 time ---
    Mar 17 10:50:13 chris-loneragans-macbook-pro.local Safari[469]: CFPropertyListCreateFromXMLData(): Old-style plist parser: missing semicolon in dictionary on line 3. Parsing will be abandoned. Break on _CFPropertyListMissingSemicolon to debug.
    Mar 17 10:50:43 --- last message repeated 9 times ---
    Mar 17 10:50:47 chris-loneragans-macbook-pro.local Safari[469]: CFPropertyListCreateFromXMLData(): Old-style plist parser: missing semicolon in dictionary on line 3. Parsing will be abandoned. Break on _CFPropertyListMissingSemicolon to debug.
    Mar 17 10:50:47 chris-loneragans-macbook-pro.local Safari[469]: CFPropertyListCreateFromXMLData(): Old-style plist parser: missing semicolon in dictionary on line 3. Parsing will be abandoned. Break on _CFPropertyListMissingSemicolon to debug.
    Mar 17 10:51:11 --- last message repeated 8 times ---
    Mar 17 10:51:11 chris-loneragans-macbook-pro.local com.apple.WebKit.Networking[471]: CFNetwork SSLHandshake failed (-9806)

    Launch the Console application in any of the following ways:
    ☞ Enter the first few letters of its name into a Spotlight search. Select it in the results (it should be at the top.)
    ☞ In the Finder, select Go ▹ Utilities from the menu bar, or press the key combination shift-command-U. The application is in the folder that opens.
    ☞ Open LaunchPad. Click Utilities, then Console in the icon grid.
    Step 1
    Make sure the title of the Console window is All Messages. If it isn't, select All Messages from the SYSTEM LOG QUERIES menu on the left. If you don't see that menu, select
    View ▹ Show Log List
    from the menu bar.
    Enter the name of the crashed application or process in the Filter text field. Select the messages from the time of the last crash, if any. Copy them to the Clipboard by pressing the key combination command-C. Paste into a reply to this message (command-V).
    When posting a log extract, be selective. In most cases, a few dozen lines are more than enough.
    Please do not indiscriminately dump thousands of lines from the log into this discussion.
    Important: Some private information, such as your name, may appear in the log. Anonymize before posting.
    Step 2
    In the Console window, look under User Diagnostic Reports (not "Diagnostic and Usage Messages") for crash reports related to the crashed process. The report name starts with the name of the process, and ends with ".crash". Select the most recent report and post the entire contents — again, the text, not a screenshot. In the interest of privacy, I suggest that, before posting, you edit out the “Anonymous UUID,” a long string of letters, numbers, and dashes in the header of the report, if it’s present (it may not be.) Please don’t post other kinds of diagnostic report — they're very long and not helpful.

  • How to order / group a report by a placeholder column ?

    How to order / group a report by a placeholder column populated by the group filter ?
    In more detail .....
    My Data model editor's select statement brings back (say 1000 rows) from the database.
    The group filter decides (on performing certain validations) whether to print a row or not in the report.
    Additionally the group filter calculates a "rule type" (just a rule number to say on basis of what rule, the row was selected)
    I would like to order/group the report on the placeholder column which was calculated by the group filter ?
    Obviously, I won't be able to add the "ORDER BY :CP_RULE_NUMBER" in the sql statement as the placeholer column cp_rule_number
    is determined by the group filter level only. (If I do, I get a frequency error)
    Any ideas ?
    Thanks in advance.
    Edited by: user553361 on 8/10/2008 17:35

    how is the group filter implemented?
    If its pure PL/SQL, what about putting the filter-procedure in a stored function into the database? Then you could use the group filter in your query.

  • Performance improvements to LR3 features needed in LR4

    There are other threads already in existence which discuss how performance appears to have decreased in the LR4 beta, and I'm sure that's partly explained by the fact that it IS a beta containing unfinished & unoptimized code, and partly because it is actually doing more work than before.
    However, I see no mention from any Adobe sources of any attention being given to addressing the various performance issues that were already present in LR3.x and I think such performance tuning/optimization is sorely needed.
    In particular:
    Threading & parallelization - I recently upgraded my dual-core, 8GB RAM machine to quad-core (by changing only the CPU) but this gave a dissappointingly small boost in performance - it was barely noticeable during general use & exporting, surely something can be done to make better use of multiple cores, especially to make sure that the main application/editing UI *never* becomes sluggish (i.e. any LR tasks should run in the background and concede resources to the UI thread), and during export can't N-1 cores be used to process & export one image per core (in parallel) leaving one core for UI?
    Poor performance and user experience of deleting files - there's no visual feedback at all (i.e. a progress bar is needed) and it takes MUCH longer than is reasonable, deleting a few hundred sometimes takes 5mins, during which time LR is completely unusable.
    Importing images - even if RAW/NEF/DNG the perceived performance could surely be improved by populating the grid with thumbnails almost instantly by scanning the header of the files to extract the metadata including the thumbnails, THEN going back for a second pass which actually transfers/copies/moves the fullsize images, this approach would permit more useful work to be done while import is in progress.
    Module switching latency - a necessary evil because of the separation between Library and Develop, switching between them often takes seconds, this should be instant!
    That's far from an exhaustive list, but PLEASE could Adobe devote some resources to making these existing features perform better and in doing so alleviate some of the frustration & wasted time experienced in using LR day in, day out?
    Others are of course very welcome to list other important performance issues which I've omitted / not aware of...

    Agreed. On my list, some metadata fields (Title, Caption) have been replicated in the new Map Module, proving in principle that these fields could exist in other modules. Given the option to have metadata and keyword panels present in Develop mode, I'd never use the Library again.
    I feel that LR performance/productivity has gotten short changed this time around. Let us go well beyond hiding and showing modules to customize our LR workspace across multiple displays. GPU accelerate operations. Optimize the application, catalog and cache to benefit more from SSDs. Make all operations lightening fast then worry about superfluous stuff like Maps.
    Other than the book module (which is hamstrung by the Blurb-only initial limitation) nothing in LR4 is going to save me time. It feels like LR is drifting from its original high-volume mission. There are plenty of consumer-grade photo management apps out there, I don't want LR to turn into another one of them. 20 months till LR5 is a long time to wait to see if LR priorities embrace speed again.

  • Tools in Performance Tunning

    What are the tools in performance Tunning in ABAP/4
    Thanks  Regards,
    Kumar

    Hi kumar,
    Tools provided for Performance Analysis
    Following are the different tools provided by SAP for performance analysis of an ABAP object
    Run time analysis transaction SE30
    This transaction gives all the analysis of an ABAP program with respect to the database and the non-database processing.
    SQL Trace transaction ST05
    The trace list has many lines that are not related to the SELECT statement in the ABAP program. This is because the execution of any ABAP program requires additional administrative SQL calls. To restrict the list output, use the filter introducing the trace list.
    The trace list contains different SQL statements simultaneously related to the one SELECT statement in the ABAP program. This is because the R/3 Database Interface - a sophisticated component of the R/3 Application Server - maps every Open SQL statement to one or a series of physical database calls and brings it to execution. This mapping, crucial to R/3s performance, depends on the particular call and database system. For example, the SELECT-ENDSELECT loop on the SPFLI table in our test program is mapped to a sequence PREPARE-OPEN-FETCH of physical calls in an Oracle environment.
    The WHERE clause in the trace list's SQL statement is different from the WHERE clause in the ABAP statement. This is because in an R/3 system, a client is a self-contained unit with separate master records and its own set of table data (in commercial, organizational, and technical terms). With ABAP, every Open SQL statement automatically executes within the correct client environment. For this reason, a condition with the actual client code is added to every WHERE clause if a client field is a component of the searched table.
    To see a statement's execution plan, just position the cursor on the PREPARE statement and choose Explain SQL. A detailed explanation of the execution plan depends on the database system in use.
    how to perform sql trace:
    Poorly written SQL statements have the greatest impact on application performance. An SQL
    statement using which an Oracle database system reads and/or sorts thousands or even millions of
    rows of data can bring the database to a standstill. Indexes should be used properly to prevent such
    situations from occurring. To analyze such problems you should use the SQL Trace (TCode ST05) to
    with database access operations.
    CAUTION
    Only one person can perform an SQL trace at a time. Remember to turn off the
    trace when you are finished. SQL trace slows the system down.
    1. Using SQL Trace
    1. Open a program that you want to analyze, in the editor, so that it is ready and waiting to be
    executed.
    2. Open a new session using the menu path System   Create session.
    3. Run transaction ST05 (enter /nst05-zero-five, not oh-five in the Command field, or choose
    the menu path System  Utilities  Performance Trace).
    4. Then the initial screen of the test tool appears.
    The status of the Performance Trace is displayed in the lower part of the screen. This status tells you
    three things namely
      Whether any of the Performance Traces are switched on
      The users for whom Performance Trace is enabled
      The user that switched the Performance Trace on
    If the trace is switched on you must switch it off before you can proceed. There are two cases in
    which the trace needs to be switched off. They are
      If the trace was started within the past hour, it is possible that it is still being used. Contact the
    indicated user or try again later
      If the trace was started hours or days ago, the user probably left it on by mistake and it can be
    safely turned off
    To turn off the trace, press the Trace Off pushbutton.
    5. The initial screen has various trace functions such as SQL Trace, Enqueue Trace, RFC
    Trace
    6. Select SQL Trace.
    7. There are various options under which trace can be switched on. They are
      If you want to switch on the trace under your user name, choose Trace on.
      If you want to switch on the trace for another user or user group, choose Trace on for user.
      To enter a single user, specify the user name.
      To enter a user group, specify a search pattern (you can use the normal wildcards).
    If you want to change the user or user group, switch off the Performance Trace and then restart it,
    entering the new users or user group.
    8. Now switch back to the window containing your editor session (the one with your program
    waiting to be executed).
    9. Press F8 to run your program.
    Note Just press F8 and do nothing. Do not even press the Back button.
    10. When your program has run and the hourglass is no longer displayed, switch back to the trace
    window.
    11. Press the Trace Off pushbutton.
    12. Once Performance Trace is switched off, you can analyze the data
    Using Runtime Analysis Tool (SE30)
    1. You can open the Runtime Analysis tool as follows:
    To start from Choose
    Any screen System   Utilities   Runtime Analysis   Execute
    Initial screen of ABAP
    Workbench
    Test   Runtime Analysis
    Initial screen of ABAP Editor Program   Execute  Runtime Analysis
    ABAP Editor Utilities   More utilities   Runtime Analysis
    2. In the simplest case, you would enter a short description and a measurement object
    (transaction, program, or function module) to run the analysis in the current session.
    3. In the Measurement restrictions group box, you can make more specific restrictions for the
    measurement. For example, you may want to include only certain statements or time periods.
    (For further information refer section 3. 0).
    4. To start the measurement, choose Measure runtime. From the initial screen, you can
    specify whether the analysis should run in the same session or in a parallel session using the
    Enable/Disable button in the In parallel session group box.
    5. Run the transaction, program, or function module as normal.
    6. Return to the initial screen of the Runtime Analysis transaction. To do so, either leave
    transaction, program, or function module as normal, or start the runtime analysis again.
    7. The name of the performance data file that has just been created is displayed at the bottom of
    the initial screen. The file created by the system is added to the list of performance data files.
    You can now analyze, print, or delete the file, or save it locally. The Performance file group
    box contains options for analyzing performance files. (For further information refer sections 4.
    0 and 5. 0)
    regards,
    keerthi

Maybe you are looking for

  • Linux Performance Monitoring Scripts

    Hi Friends, My boss ask me to give weekly reports about the performance of the server. He wants the report in excel formant. I heard about vmstat, iostat,sar Are these the only command I need to monitor the performance of linux? Can you share me some

  • How to make a ring counter in Multisim

    How would I do this? Modify this shift-register in the following manner.  Disconnect the wires on the J and K inputs of the first (left most) flip-flop.  Wire the Q output from the right-most flip flop back to the J of the first flip-flop.  Now, wire

  • New Time Machine Settings?

    I am replacing my old time capsule with the new 2TB version.  Should I have the same settings?

  • How do I configure LDAP to run

    I downloaded the Softerra software but how do I configure it to have it checdk for the info I downloaded it to find?

  • DPS on the Mac App Store?

    Hello: I've been doing some testing on DPS with the Windows app and it's incredible and fabulous since I can access it from my Windows 8.1 laptop or computer. I know this is possible because of the Operating Sysmte instead of the technology but I'd l