summaryrefslogtreecommitdiff
path: root/reportdesign
diff options
context:
space:
mode:
authorLionel Elie Mamane <lionel@mamane.lu>2013-03-12 17:57:57 +0100
committerLionel Elie Mamane <lionel@mamane.lu>2013-03-12 18:16:45 +0100
commit4178806bb010129f3b13b62825476666fe48ddcd (patch)
tree26f68a3eb4891945ee06f3630dcf93960de7b3ac /reportdesign
parent36caac0e029a3caf50cb27af339efd69008d414e (diff)
reportbuilder: make "Group on" not-"Each Value" actually work
Change-Id: Id5d73f9aac48ebfb6987e5bf0df37e62f1817bdc
Diffstat (limited to 'reportdesign')
-rw-r--r--reportdesign/source/filter/xml/xmlEnums.hxx1
-rw-r--r--reportdesign/source/filter/xml/xmlExport.cxx15
-rw-r--r--reportdesign/source/filter/xml/xmlfilter.cxx1
3 files changed, 14 insertions, 3 deletions
diff --git a/reportdesign/source/filter/xml/xmlEnums.hxx b/reportdesign/source/filter/xml/xmlEnums.hxx
index 53df992246ea..1d98a4d92eff 100644
--- a/reportdesign/source/filter/xml/xmlEnums.hxx
+++ b/reportdesign/source/filter/xml/xmlEnums.hxx
@@ -60,6 +60,7 @@ namespace rptxml
XML_TOK_START_NEW_COLUMN ,
XML_TOK_RESET_PAGE_NUMBER ,
XML_TOK_PRINT_HEADER_ON_EACH_PAGE ,
+ XML_TOK_SORT_EXPRESSION ,
XML_TOK_GROUP_EXPRESSION ,
XML_TOK_GROUP_HEADER ,
XML_TOK_GROUP_GROUP ,
diff --git a/reportdesign/source/filter/xml/xmlExport.cxx b/reportdesign/source/filter/xml/xmlExport.cxx
index ba25f5e15e0e..781c71304269 100644
--- a/reportdesign/source/filter/xml/xmlExport.cxx
+++ b/reportdesign/source/filter/xml/xmlExport.cxx
@@ -1078,7 +1078,8 @@ sal_Bool ORptExport::exportGroup(const Reference<XReportDefinition>& _xReportDef
if ( xGroup->getResetPageNumber() )
AddAttribute(XML_NAMESPACE_REPORT, XML_RESET_PAGE_NUMBER, XML_TRUE );
- ::rtl::OUString sExpression = xGroup->getExpression();
+ const ::rtl::OUString sField = xGroup->getExpression();
+ ::rtl::OUString sExpression = sField;
if ( !sExpression.isEmpty() )
{
static ::rtl::OUString s_sQuote(RTL_CONSTASCII_USTRINGPARAM("\"\""));
@@ -1097,6 +1098,7 @@ sal_Bool ORptExport::exportGroup(const Reference<XReportDefinition>& _xReportDef
sFormula += ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("\")"));
sExpression = sFormula;
}
+ AddAttribute(XML_NAMESPACE_REPORT, XML_SORT_EXPRESSION, sField);
AddAttribute(XML_NAMESPACE_REPORT, XML_GROUP_EXPRESSION,sExpression);
sal_Int16 nRet = xGroup->getKeepTogether();
::rtl::OUStringBuffer sValue;
@@ -1525,6 +1527,7 @@ void ORptExport::exportGroupsExpressionAsFunction(const Reference< XGroups>& _xG
::rtl::OUString sFunction,sPrefix,sPostfix;
::rtl::OUString sExpression = xGroup->getExpression();
::rtl::OUString sFunctionName;
+ ::rtl::OUString sInitialFormula;
switch(nGroupOn)
{
case report::GroupOn::PREFIX_CHARACTERS:
@@ -1558,14 +1561,18 @@ void ORptExport::exportGroupsExpressionAsFunction(const Reference< XGroups>& _xG
{
sFunction = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("INT"));
uno::Reference< XFunction> xCountFunction = xFunctions->createFunction();
- xCountFunction->setInitialFormula(beans::Optional< ::rtl::OUString>(sal_True,::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("rpt:1"))));
+ xCountFunction->setInitialFormula(beans::Optional< ::rtl::OUString>(sal_True,::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("rpt:0"))));
::rtl::OUString sCountName = sFunction + ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("_count_")) + sExpression;
xCountFunction->setName(sCountName);
xCountFunction->setFormula(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("rpt:[")) + sCountName + ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("] + 1")));
exportFunction(xCountFunction);
sExpression = sCountName;
- sPrefix = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(" / ")) + ::rtl::OUString::valueOf(xGroup->getGroupInterval());
+ // The reference to sCountName in the formula of sFunctionName refers to the *old* value
+ // so we need to expand the the formula of sCountName
+ sPrefix = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(" + 1) / ")) + ::rtl::OUString::valueOf(xGroup->getGroupInterval());
sFunctionName = sFunction + ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("_")) + sExpression;
+ sFunction = sFunction + ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("("));
+ sInitialFormula = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("rpt:0"));
}
break;
default:
@@ -1580,6 +1587,8 @@ void ORptExport::exportGroupsExpressionAsFunction(const Reference< XGroups>& _xG
sFunctionName = sFunctionName.replace(pReplaceChars[j],'_');
xFunction->setName(sFunctionName);
+ if ( !sInitialFormula.isEmpty() )
+ xFunction->setInitialFormula(beans::Optional< ::rtl::OUString>(sal_True, sInitialFormula));
sFunction = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("rpt:")) + sFunction;
sFunction += ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("(["));
sFunction += sExpression;
diff --git a/reportdesign/source/filter/xml/xmlfilter.cxx b/reportdesign/source/filter/xml/xmlfilter.cxx
index 22fbd1550575..71c8e679c577 100644
--- a/reportdesign/source/filter/xml/xmlfilter.cxx
+++ b/reportdesign/source/filter/xml/xmlfilter.cxx
@@ -797,6 +797,7 @@ const SvXMLTokenMap& ORptFilter::GetGroupElemTokenMap() const
{ XML_NAMESPACE_REPORT, XML_RESET_PAGE_NUMBER , XML_TOK_RESET_PAGE_NUMBER },
{ XML_NAMESPACE_REPORT, XML_PRINT_HEADER_ON_EACH_PAGE , XML_TOK_PRINT_HEADER_ON_EACH_PAGE },
{ XML_NAMESPACE_REPORT, XML_RESET_PAGE_NUMBER , XML_TOK_RESET_PAGE_NUMBER },
+ { XML_NAMESPACE_REPORT, XML_SORT_EXPRESSION , XML_TOK_SORT_EXPRESSION },
{ XML_NAMESPACE_REPORT, XML_GROUP_EXPRESSION , XML_TOK_GROUP_EXPRESSION },
{ XML_NAMESPACE_REPORT, XML_GROUP_HEADER , XML_TOK_GROUP_HEADER },
{ XML_NAMESPACE_REPORT, XML_GROUP , XML_TOK_GROUP_GROUP },