2011-09-08 7 views
4

안녕하세요 모든 iReports를 사용하여 보고서 중 하나를 생성하고 한 곳에서 붙어 있습니다.하위 보고서에서 iReport의 기본 보고서로 값을 반환

상황은 다음과 같이이다 :

내가 내 주 보고서에서 하나 개의 하위 보고서를 사용하고 그리고 난 쿼리가 실행 된 후 하위 보고서의 주 보고서로 다시 변수 (부동)을 반환하고자합니다. 그리고 난 그냥 ...

울부 짖는 소리가 내 JRXMLS (완벽하게 동일)의 내 더미 코드 및 스냅 .. 다시 내가 2 일 인터넷 검색 및 검색하지만 문제가 여전히 낭비 주 보고서에 null 값을 받고 있어요

주 보고서 JRXML

<?xml version="1.0" encoding="UTF-8"?> 
    <jasperReport xmlns="http://jasperreports.sourceforge.net/jasperreports" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports http://jasperreports.sourceforge.net/xsd/jasperreport.xsd" name="anuj" language="groovy" pageWidth="595" pageHeight="842" columnWidth="555" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20"> 
     <property name="ireport.zoom" value="1.0"/> 
     <property name="ireport.x" value="0"/> 
     <property name="ireport.y" value="0"/> 
     <parameter name="SUBREPORT_DIR" class="java.lang.String" isForPrompting="false"> 
      <defaultValueExpression><![CDATA["/home/anuj/Reports/"]]></defaultValueExpression> 
     </parameter> 
     <queryString language="SQL"> 
      <![CDATA[select * from "SensorType"]]> 
     </queryString> 
     <field name="SensorTypeId" class="java.lang.Integer"/> 
     <field name="SensorTypeName" class="java.lang.String"/> 
     <variable name="A" class="java.lang.Integer" resetType="None" calculation="System"/> 
     <background> 
      <band splitType="Stretch"/> 
     </background> 
     <title> 
      <band splitType="Stretch"/> 
     </title> 
     <pageHeader> 
      <band splitType="Stretch"/> 
     </pageHeader> 
     <columnHeader> 
      <band splitType="Stretch"/> 
     </columnHeader> 
     <detail> 
      <band height="23" splitType="Stretch"> 
       <textField> 
        <reportElement x="71" y="3" width="100" height="20"/> 
        <textElement/> 
        <textFieldExpression><![CDATA[$F{SensorTypeId}]]></textFieldExpression> 
       </textField> 
       <textField> 
        <reportElement x="202" y="3" width="112" height="20"/> 
        <textElement/> 
        <textFieldExpression><![CDATA[$F{SensorTypeName}]]></textFieldExpression> 
       </textField> 
      </band> 
     </detail> 
     <columnFooter> 
      <band height="5" splitType="Stretch"/> 
     </columnFooter> 
     <pageFooter> 
      <band height="1" splitType="Stretch"/> 
     </pageFooter> 
     <summary> 
      <band height="42" splitType="Stretch"> 
       <subreport> 
        <reportElement x="183" y="16" width="257" height="26"/> 
        <connectionExpression><![CDATA[$P{REPORT_CONNECTION}]]></connectionExpression> 
        <returnValue subreportVariable="A" toVariable="A"/> 
        <subreportExpression><![CDATA[$P{SUBREPORT_DIR} + "anuj_subreport1.jasper"]]></subreportExpression> 
       </subreport> 
       <textField> 
        <reportElement x="71" y="22" width="100" height="20"/> 
        <textElement/> 
        <textFieldExpression><![CDATA[$V{A}]]></textFieldExpression> 
       </textField> 
      </band> 
     </summary> 
    </jasperReport> 

하위 보고서 JRXML

<?xml version="1.0" encoding="UTF-8"?> 
<jasperReport xmlns="http://jasperreports.sourceforge.net/jasperreports" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports http://jasperreports.sourceforge.net/xsd/jasperreport.xsd" name="anuj_subreport1" language="groovy" pageWidth="555" pageHeight="802" columnWidth="555" leftMargin="0" rightMargin="0" topMargin="0" bottomMargin="0"> 
    <property name="ireport.zoom" value="1.0"/> 
    <property name="ireport.x" value="0"/> 
    <property name="ireport.y" value="149"/> 
    <queryString> 
     <![CDATA[select Sum("SensorTypeId") from "SensorType";]]> 
    </queryString> 
    <field name="sum" class="java.lang.Long"/> 
    <variable name="A" class="java.lang.Integer" resetType="None" calculation="System"> 
     <variableExpression><![CDATA[$F{sum}]]></variableExpression> 
    </variable> 
    <background> 
     <band splitType="Stretch"/> 
    </background> 
    <title> 
     <band height="79" splitType="Stretch"> 
      <staticText> 
       <reportElement x="169" y="59" width="100" height="20"/> 
       <textElement/> 
       <text><![CDATA[sum]]></text> 
      </staticText> 
      <textField> 
       <reportElement x="216" y="59" width="100" height="20"/> 
       <textElement/> 
       <textFieldExpression><![CDATA[$F{sum}]]></textFieldExpression> 
      </textField> 
     </band> 
    </title> 
    <pageHeader> 
     <band height="35" splitType="Stretch"/> 
    </pageHeader> 
    <columnHeader> 
     <band height="61" splitType="Stretch"/> 
    </columnHeader> 
    <detail> 
     <band height="125" splitType="Stretch"/> 
    </detail> 
     <columnFooter> 
     <band height="45" splitType="Stretch"/> 
    </columnFooter> 
    <pageFooter> 
     <band height="54" splitType="Stretch"/> 
    </pageFooter> 
    <summary> 
     <band height="42" splitType="Stretch"/> 
    </summary> 
</jasperReport> 

미리 감사드립니다.

답변

4

하위 보고서 변수에 calculation=System이 있습니다. 스크립틀릿을 사용하여 직접 변수를 계산할 때 사용해야합니다. 보고서에 적절한 스크립틀릿이 연결되어 있지 않으므로 변수가 절대로 계산되지 않습니다. 보고서가 실행되는 동안

<variable name="A" class="java.lang.Integer" resetType="Report" calculation="Nothing"> 
    <variableExpression><![CDATA[$F{sum}]]></variableExpression> 
</variable> 

resetType="Report"

변수를 재설정하지 않습니다 : 그것은 다음과 같이 하위 보고서의 시작에 뭔가를 계산되도록

당신은 아마 변수 정의를 변경하고 싶습니다. calculation="Nothing"은 데이터 집합의 모든 행에 대해 variableExpression을 평가합니다.

이러한 속성은 사용 된 기본값이기 때문에 생략 할 수 있습니다. 그런 다음 변수가 올바르게 초기화되었는지 확인해야합니다.

4

질문에 이미 대답했지만, 주요 보고서 (SubReport를 호출하는 보고서)의 변수에 calculation="System"이 있어야하는 중요성을 강조하고 싶습니다.

나는 변수 "A"는 정확하게 calculation="System"을 가지고, 위의 주 보고서 JRXML의 더미 코드에서 ...이 문제를 파악하기 전에

을 많은 시간을 낭비. NB : @GenericJon의 대답은 하위 보고서의 변수를 다룹니다.

1

내가 계산은 다음과 같이 입력하지 @ bubba_hego99에 동의 이니 더 caculation, 단지 시스템으로 설정하거나 다른 사업자로 가치를

시스템.

아무것도 계산하지 않고 그냥 변수를 설정하십시오.

sum execute sum ($ Feild ("A")).

....

다른 세부 사항을 알고 싶으면 ireport 문서를보아야합니다. JasperReports에 이전 버전의

0

참고 :

하위 보고서 returnValue, 하위 보고서 자체와 동일한 대역에서 안됩니다 반환 된 변수를 사용.

악보의 렌더링이 끝날 때쯤 나는 생각합니다.

다른 밴드를 추가하고 내부에 변수를 사용하십시오. JasperReports Ultimate Guide에서

+0

사실 동일한 세부 밴드에서 'returnValue'를 사용할 수 있습니다 현재 6.4. 나는 현재 그것을 (returnValue'를 변수로 설정 한 다음'printWhenExpression'에서 변수를 사용하여) 밴드의 모양을 제어하고'textField'의 내용을 제어하기 위해 (다시'returnValue'를 사용하여) 'textField'의 논리에 사용되는'$ V {something}'변수를 설정하고'textField'에 대해'evaluationTime = "Report"를 사용합니다). – sboggs10

4

:

된 보고서에서 오는 값은 하위 보고서를 포함하는 전체 밴드가 인쇄 된 경우에만 사용할 수 있습니다. 하위 보고서와 같은 밴드에있는 텍스트 필드를 사용하여이 값을 인쇄하려면 텍스트 필드의 평가 시간을 Band로 설정하십시오.

관련 문제