--- a/OBOlapClosureTreeHandler.java	2016-09-30 15:15:01.722178331 -0300
+++ b/OBOlapClosureTreeHandler.java	2016-09-30 15:03:42.422147621 -0300
@@ -10,9 +10,12 @@
 package org.openbravo.client.analytics;
 
 import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Comparator;
 import java.util.Date;
 import java.util.HashMap;
 import java.util.HashSet;
+import java.util.LinkedList;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
@@ -20,6 +23,7 @@
 import org.apache.log4j.Logger;
 import org.hibernate.Query;
 import org.hibernate.Session;
+import org.hibernate.criterion.Restrictions;
 import org.openbravo.base.exception.OBException;
 import org.openbravo.base.model.Entity;
 import org.openbravo.base.model.ModelProvider;
@@ -29,6 +33,7 @@
 import org.openbravo.client.analytics.mondrian.MondrianProvider;
 import org.openbravo.client.analytics.utils.OBAnalyticsUtils;
 import org.openbravo.dal.core.OBContext;
+import org.openbravo.dal.service.OBCriteria;
 import org.openbravo.dal.service.OBDal;
 import org.openbravo.erpCommon.businessUtility.Preferences;
 import org.openbravo.erpCommon.utility.PropertyException;
@@ -279,6 +284,7 @@
           child = new LocalTreeNode();
           child.setTree(tree);
           child.setId(treeNode.getNode());
+          child.setSqno(treeNode.getSequenceNumber());
           allNodes.put(child.getId(), child);
 
           // add to the root, will be removed if the child
@@ -299,6 +305,12 @@
           parent = new LocalTreeNode();
           parent.setId(treeNode.getReportSet());
           parent.setTree(tree);
+          OBCriteria<TreeNode> treeNodeParent = OBDal.getInstance().createCriteria(TreeNode.class);
+          treeNodeParent.add(Restrictions.eq(TreeNode.PROPERTY_NODE, parent.getId()));
+          TreeNode treeNodeP = (TreeNode) treeNodeParent.uniqueResult();
+          TreeNode aux = OBDal.getInstance().get(TreeNode.class, treeNodeP.getId());
+
+          parent.setSqno(aux.getSequenceNumber());
           allNodes.put(parent.getId(), parent);
           roots.add(parent);
         }
@@ -306,7 +318,26 @@
       }
 
       int ordinal = 1;
-      for (LocalTreeNode root : roots) {
+
+      List<LocalTreeNode> rootsList = new LinkedList<LocalTreeNode>();
+      rootsList.addAll(roots);
+
+      Collections.sort(rootsList, new Comparator<LocalTreeNode>() {
+
+        @Override
+        public int compare(LocalTreeNode o1, LocalTreeNode o2) {
+          // TODO Auto-generated method stub
+          if (o1.getSeqno() < o2.getSeqno()) {
+            return -1;
+          }
+          if (o1.getSeqno() > o2.getSeqno()) {
+            return 1;
+          }
+
+          return 0;
+        }
+      });
+      for (LocalTreeNode root : rootsList) {
         ordinal = root.updateOrdinalColumn(ordinal);
         ordinal++;
       }
@@ -322,6 +353,7 @@
   private class LocalTreeNode {
     private String id;
     private Tree tree;
+    private long seqno;
     private java.util.List<LocalTreeNode> children = new ArrayList<LocalTreeNode>();
 
     public String getId() {
@@ -332,6 +364,14 @@
       this.id = id;
     }
 
+    public long getSeqno() {
+      return this.seqno;
+    }
+
+    public void setSqno(long seqno) {
+      this.seqno = seqno;
+    }
+
     public java.util.List<LocalTreeNode> getChildren() {
       return children;
     }
@@ -456,4 +496,4 @@
     return ignoredTrees.contains(entity.getName());
   }
 
-}
\ No newline at end of file
+}
