Add group of text fields but show only one group field which has data in Jasper - jasper-reports

I have two groups text fields.
1st group (Stock Code) is :
$F{VW_STOCKOPNAME_S1_KL}
$F{VW_STOCKOPNAME_S2_JB}
$F{VW_STOCKOPNAME_S3_NB}
$F{VW_STOCKOPNAME_S4_SB}
2nd group (Asset Code) is :
$F{VW_STOCKOPNAME_A1_GOLONGAN}
$F{VW_STOCKOPNAME_A2_BIDANG}
$F{VW_STOCKOPNAME_A3_KELOMPOK}
$F{VW_STOCKOPNAME_A4_SUBKELOMPOK}
$F{VW_STOCKOPNAME_A5_SUBSUBKEL}
and I have field called Product :
$F{VW_STOCKOPNAME_PRODUCT}
Each product has either Asset Code / Stock Code.
If a product has Asset Code, then Stock Code field is automatically blank,
it works the other way around.
Code || Product
----------------------
1-2-1-1 || Stock Goods
0-2-3-1 || Asset Goods
How can I make it automatically show each product with matching code?

for all the textfields in group add property "Blank When Null"(isBlankWhenNull="true")
update: Added PrintWhenExpression
<textField isStretchWithOverflow="true" isBlankWhenNull="true">
<reportElement x="143" y="29" width="260" height="20" isRemoveLineWhenBlank="true">
<printWhenExpression><![CDATA[($F{VW_STOCKOPNAME_S1_KL}!=null && $F{VW_STOCKOPNAME_S2_JB}!=null && $F{VW_STOCKOPNAME_S3_NB}!=null && $F{VW_STOCKOPNAME_S4_SB}!=null)]]></printWhenExpression>
</reportElement>
<box leftPadding="2"/>
<textElement verticalAlignment="Middle">
<font isBold="true"/>
</textElement>
<textFieldExpression class="java.lang.String"><![CDATA[$F{VW_STOCKOPNAME_S1_KL}]]></textFieldExpression>
or you can also use print when expression

Related

Jasper report XLS export shows value as String instead of Currency

I have a similar issue as described here but with the value type instead of value pattern. I have a value called 'Balance'
<parameter name="Balance" class="java.lang.String"/>
and corresponding field
<textField isStretchWithOverflow="true" isBlankWhenNull="true">
<reportElement x="400" y="55" width="117" height="7"/>
<textElement textAlignment="Right" verticalAlignment="Top">
<font size="7" isBold="true" pdfFontName="Helvetica" isPdfEmbedded="false"/>
</textElement>
<textFieldExpression><![CDATA[( $P{Balance}.equals(null) ? "" : $P{Balance} )]]></textFieldExpression>
</textField>
When I export my Jasper report as XLS, 'Balance' value comes in correct pattern (ie. $400.20) but Excel consider this as a String instead of Currency.
Any idea how to fix it would be much appreciated.

Text truncated on JasperReports

I have a JasperReports's report within an application that is truncating text and I am unsure how to get it to display the full name.
The code snippet below shows that I have included isStretchWithOverflow="true":
<textField isStretchWithOverflow="true" isBlankWhenNull="true">
<reportElement x="353" y="0" width="79" height="30"/>
<textElement textAlignment="Right"/>
<textFieldExpression class="java.lang.String"><![CDATA[$F{acname}]]></textFieldExpression>
</textField>
The JasperReports's image shows incorrect values. One of these should read: 'Double Time Pay - Bill Regular' and the other 'Double Time Pay - Bill Overtime'.

Print a field when certain value is not present Jasper reports

I am creating a JasperReports's report using iReport. I have a date field where once instance is 01-JAN-1900. I need any time the date field has this value then null value is printed. I have tried this:
<textField pattern="dd-MMM-yyyy" isBlankWhenNull="true">
<reportElement uuid="4dd05795-8363-4cf3-ad30-239aac3a086f" x="3" y="0" width="63" height="15">
<printWhenExpression><![CDATA[$F{TRAN_DATE} != "01-JAN-1900"]]></printWhenExpression>
</reportElement>
<textElement>
<font size="9"/>
</textElement>
<textFieldExpression><![CDATA[$F{TRAN_DATE}]]></textFieldExpression>
</textField>
But the value is still getting printed. How do I achieve this?
You cannot compare dissimilar types. Drop the String literal and compare datetime types.
If your field $F{TRAN_DATE} is in java.util.Date type, change it to java.lang.String and your condition should work.

Report's text field's "stretch with over flow" option add empty row in PDF export

I have set the "Stretch With Overflow" option True to some text fields , when the data over flow in the jasper viewer is working correctly, the text is on 2 rows but in PDF document the second row is empty: it just adds an empty row.
Exemple xml code :
<textField isStretchWithOverflow="true" isBlankWhenNull="true">
<reportElement positionType="Float" stretchType="RelativeToTallestObject" x="165" y="0" width="35" height="10" isRemoveLineWhenBlank="true" uuid="a5d7ff35-a2dc-480e-80a7-9246d8618b27"/>
<textElement textAlignment="Left">
<font fontName="Futura Std Light" size="7"/>
<paragraph lineSpacing="Single"/>
</textElement>
<textFieldExpression><![CDATA[$F{montant} == null && $F{numeroAppelant} != null ? $F{numeroAppele}.toString():
$F{duree} != null ? $F{duree}.toString() :
$F{volumeKo} != null ? null : $F{montant}.toString()]]>
</textFieldExpression>
I found the solution,
I just set the line spacing property to 1.5 !
I found that when I change the font, it works wright. The problem that the same font on another report works fine with stretch with overflow option.

Formatting/Pattern issue - Appending the Int with text is causing formatting error

So I am running into issues with JasperReports pattern field. I have created a cross tab and I need all $F{ScoreMeasure} to have two decimal places and appended with a "%" sign. So for example a cell for the $F{ScoreMeasure} in the crosstab should show 25.42%.
The issue I have come across is I appended the "%" sign by adding it to the text field expression:$V{ScoreMeasure}+"%". This works fine with whole numbers.
When I try add the two decimal places by adding the pattern #,##0.00 and run the report I get some fields have two decimals and others have multiple (up to 8).
If I drop the appended text (+"%") from the text field expression I get the right format. But I cant work out how to get the two?
Here's an extract of when it is working without the "%" appended:
<crosstabCell width="73" height="25" rowTotalGroup="Name">
<cellContents backcolor="#005FB3" mode="Opaque">
<box>
<pen lineWidth="0.5" lineStyle="Solid" lineColor="#000000"/>
</box>
<textField pattern="#,##0.00">
<reportElement style="Crosstab Data Text" x="0" y="0" width="73" height="25" forecolor="#FFFFFF" uuid="50401fd4-b9b1-4bf2-bd74-9a0f083e77ff"/>
<textElement verticalAlignment="Middle">
<font fontName="Arial"/>
</textElement>
<textFieldExpression><![CDATA[$V{ScoreMeasure}
]]></textFieldExpression>
</textField>
</cellContents>
And here it is appended with the text which is breaking the format:
<crosstabCell width="73" height="25" rowTotalGroup="Name">
<cellContents backcolor="#005FB3" mode="Opaque">
<box>
<pen lineWidth="0.5" lineStyle="Solid" lineColor="#000000"/>
</box>
<textField pattern="#,##0.00">
<reportElement style="Crosstab Data Text" x="0" y="0" width="73" height="25" forecolor="#FFFFFF" uuid="50401fd4-b9b1-4bf2-bd74-9a0f083e77ff"/>
<textElement verticalAlignment="Middle">
<font fontName="Arial"/>
</textElement>
<textFieldExpression><![CDATA[$V{ScoreMeasure}+"%"
]]></textFieldExpression>
</textField>
</cellContents>
Anyone come across this? Any suggestions on how to fix?
Okay so the solution was in the pattern I selected "Custom Format" I then added the pattern for two decimal places ###0.00 and tried appending it with the % sign. So my custom pattern looked like ###0.00%;-###0.00%.
But when this is run it multiplied the figure bu 100. It turns out "The presence of the percentage character in the pattern causes the value to be multiplied by 100 before being formatted."
So in order to avoid this you add quotes around the % sign. So your final pattern looks like this: ###0.00'%';-###0.00'%'
When run you will then get your two decimal place with the % sign
How about clicking on the field you want to customized.
Go to Properties
Go to Pattern then click on the Number -> click on Decimal for 2 spaces
Then Press OK.
Then go back to the Pattern again and go to Custom Format.
Then put a percentage in the text field for the positive and negative part
Then press ok.
EDIT
How about making the Field a string and then append the percent sign like:
$F{ScoreMeasure}.toString()+"%"