diff --git a/base/src/org/compiere/print/DataEngine.java b/base/src/org/compiere/print/DataEngine.java
index c097d1969f..f405aca2d1 100644
--- a/base/src/org/compiere/print/DataEngine.java
+++ b/base/src/org/compiere/print/DataEngine.java
@@ -51,6 +51,7 @@ import org.compiere.util.ValueNamePair;
* @author Teo Sarca, SC ARHIPAC SERVICE SRL
*
BF [ 1761891 ] Included print format with report view attached issue
* BF [ 1807368 ] DataEngine does not close DB connection
+ * BF [ 2549128 ] Report View Column not working at all
* @author victor.perez@e-evolution.com
* FR [ 2011569 ] Implementing new Summary flag in Report View http://sourceforge.net/tracker/index.php?func=detail&aid=2011569&group_id=176962&atid=879335
*/
@@ -205,9 +206,8 @@ public class DataEngine
// Direct SQL w/o Reference Info
StringBuffer sqlSELECT = new StringBuffer("SELECT ");
- StringBuffer sqlFROM = new StringBuffer(" FROM ");
- sqlFROM.append(tableName);
- StringBuffer sqlGROUP = new StringBuffer(" GROUP BY ");
+ StringBuffer sqlFROM = new StringBuffer(" FROM ").append(tableName);
+ ArrayList groupByColumns = new ArrayList();
//
boolean IsGroupedBy = false;
//
@@ -303,11 +303,14 @@ public class DataEngine
{
// => Table.Column,
sqlSELECT.append(tableName).append(".").append(ColumnName).append(",");
- sqlGROUP.append(tableName).append(".").append(ColumnName).append(",");
+ groupByColumns.add(tableName+"."+ColumnName);
pdc = new PrintDataColumn(AD_Column_ID, ColumnName, AD_Reference_ID, FieldLength, KEY, isPageBreak); // KeyColumn
}
- else if (!IsPrinted) // not printed Sort Columns
+ // not printed Sort Columns
+ else if (!IsPrinted)
+ {
;
+ }
// -- Parent, TableDir (and unqualified Search) --
else if (IsParent
|| AD_Reference_ID == DisplayType.TableDir
@@ -332,8 +335,8 @@ public class DataEngine
// => (..) AS AName, Table.ID,
sqlSELECT.append("(").append(eSql).append(") AS ").append(m_synonym).append(display).append(",")
.append(tableName).append(".").append(ColumnName).append(",");
- sqlGROUP.append(m_synonym).append(display).append(",")
- .append(tableName).append(".").append(ColumnName).append(",");
+ groupByColumns.add(m_synonym+display);
+ groupByColumns.add(tableName+"."+ColumnName);
orderName = m_synonym + display;
//
pdc = new PrintDataColumn(AD_Column_ID, ColumnName, AD_Reference_ID, FieldLength, orderName, isPageBreak);
@@ -358,8 +361,8 @@ public class DataEngine
sqlSELECT.append(m_synonym).append(".").append(display);
sqlSELECT.append(" AS ").append(m_synonym).append(display).append(",")
.append(tableName).append(".").append(ColumnName).append(",");
- sqlGROUP.append(m_synonym).append(".").append(display).append(",")
- .append(tableName).append(".").append(ColumnName).append(",");
+ groupByColumns.add(m_synonym+display);
+ groupByColumns.add(tableName+"."+ColumnName);
orderName = m_synonym + display;
// => x JOIN table A ON (x.KeyColumn=A.Key)
@@ -388,7 +391,7 @@ public class DataEngine
{
// => A.Name AS AName,
sqlSELECT.append(m_synonym).append(".Name AS ").append(m_synonym).append("Name,");
- sqlGROUP.append(m_synonym).append(".Name,");
+ groupByColumns.add(m_synonym+".Name");
orderName = m_synonym + "Name";
// => x JOIN AD_Ref_List A ON (x.KeyColumn=A.Value AND A.AD_Reference_ID=123)
if (IsMandatory)
@@ -403,7 +406,7 @@ public class DataEngine
{
// => A.Name AS AName,
sqlSELECT.append(m_synonym).append(".Name AS ").append(m_synonym).append("Name,");
- sqlGROUP.append(m_synonym).append(".Name,");
+ groupByColumns.add(m_synonym+".Name");
orderName = m_synonym + "Name";
// LEFT OUTER JOIN AD_Ref_List XA ON (AD_Table.EntityType=XA.Value AND XA.AD_Reference_ID=245)
@@ -483,8 +486,8 @@ public class DataEngine
sqlSELECT.append(m_synonym).append(".").append(display).append(" AS ")
.append(m_synonym).append(synonym).append(",")
.append(tableName).append(".").append(ColumnName).append(",");
- sqlGROUP.append(m_synonym).append(".").append(synonym).append(",")
- .append(tableName).append(".").append(ColumnName).append(",");
+ groupByColumns.add(m_synonym+"."+synonym);
+ groupByColumns.add(tableName+"."+ColumnName);
orderName = m_synonym + synonym;
// => x JOIN table A ON (table.ID=A.Key)
if (IsMandatory)
@@ -503,35 +506,33 @@ public class DataEngine
else
{
int index = FunctionColumn.indexOf('@');
- StringBuffer sb = new StringBuffer();
if (ColumnSQL != null && ColumnSQL.length() > 0)
{
// => ColumnSQL AS ColumnName
- sb.append(ColumnSQL);
- sqlSELECT.append(sb).append(" AS ").append(ColumnName).append(",");
+ sqlSELECT.append(ColumnSQL).append(" AS ").append(ColumnName).append(",");
if (!IsGroupFunction)
- sqlGROUP.append(sb).append(",");
+ groupByColumns.add(ColumnSQL);
orderName = ColumnName; // no prefix for synonym
}
else if (index == -1)
{
// => Table.Column,
- sb.append(tableName).append(".").append(ColumnName).append(",");
- sqlSELECT.append(sb);
+ StringBuffer sb = new StringBuffer();
+ sb.append(tableName).append(".").append(ColumnName);
+ sqlSELECT.append(sb).append(",");
if (!IsGroupFunction)
- sqlGROUP.append(sb).append(",");
+ groupByColumns.add(sb.toString());
}
else
{
// => Function(Table.Column) AS Column -- function has @ where column name goes
+ StringBuffer sb = new StringBuffer();
sb.append(FunctionColumn.substring(0, index))
- // If I eg entered sum(amount) as function column in the report view the query would look like:
- // Tablename.amountsum(amount), after removing the line below I get the wanted result. The original query column (tablename.column) is replaced by the function column entered in the report view window.
- // .append(tableName).append(".").append(ColumnName) // xxxxxx
+ .append(tableName).append(".").append(ColumnName)
.append(FunctionColumn.substring(index+1));
sqlSELECT.append(sb).append(" AS ").append(ColumnName).append(",");
if (!IsGroupFunction)
- sqlGROUP.append(sb).append(",");
+ groupByColumns.add(sb.toString());
orderName = ColumnName; // no prefix for synonym
}
pdc = new PrintDataColumn(AD_Column_ID, ColumnName,
@@ -544,6 +545,11 @@ public class DataEngine
if (AD_Column_ID == orderAD_Column_IDs[i])
{
orderColumns.set(i, orderName);
+ // We need to GROUP BY even is not printed, because is used in ORDER clause
+ if (!IsPrinted && !IsGroupFunction)
+ {
+ groupByColumns.add(tableName+"."+ColumnName);
+ }
break;
}
}
@@ -560,9 +566,9 @@ public class DataEngine
{
log.log(Level.SEVERE, "SQL=" + sql + " - ID=" + format.get_ID(), e);
}
- finally {
- DB.close(rs);
- DB.close(pstmt);
+ finally
+ {
+ DB.close(rs, pstmt);
rs = null;
pstmt = null;
}
@@ -619,9 +625,18 @@ public class DataEngine
tableName, MRole.SQL_FULLYQUALIFIED, MRole.SQL_RO));
}
- // Group By
+ // Add GROUP BY clause
if (IsGroupedBy)
- finalSQL.append(sqlGROUP.substring(0, sqlGROUP.length()-1)); // last ,
+ {
+ for (int i = 0; i < groupByColumns.size(); i++)
+ {
+ if (i == 0)
+ finalSQL.append(" GROUP BY ");
+ else
+ finalSQL.append(",");
+ finalSQL.append(groupByColumns.get(i));
+ }
+ }
// Add ORDER BY clause
if (orderColumns != null)