Here is my Zen report, if it can help you something,
but it uses relationships Parent->Child->Child:
=================================================
/// Izdeliq.NEKReport
Class Izdeliq.NEKAmbReport Extends %ZEN.Report.reportPage
{
/// Class name of application this report belongs to.
Parameter APPLICATION = "Izdeliq.Application";
/// This is the default display mode for this report.
Parameter DEFAULTMODE = "html";
/// This is the optional XML namespace used for the report.
Parameter REPORTXMLNAMESPACE;
/// This is the default display mode for this report.
Parameter XSLTMODE;
Property NomerNEK As %ZEN.Datatype.string(ZENURL = "ID");
/// This XML defines the logical contents of this report.
XData ReportDefinition [ XMLNamespace = "
http://www.intersystems.com/
zen/report/definition" ]
{
<report xmlns="
http://www.intersystems.com/zen/report/definition"
name='myReport'
sql="SELECT ID,Sklad,NomerNEK,DataNEK FROM Izdeliq.NEKAmb WHERE
(NomerNEK = ?)
order by NomerNEK">
<parameter expression='$p(..NomerNEK,"|",1)'/>
<group name='NomerNEK' breakOnField="NomerNEK"
sql="Select IzdAmb,ID,IzdeliqAmbalaz,Izdeliq,Ambalaz from
Izdeliq.NEKIzdAmb
WHERE (IzdAmb=?)AND(IzdeliqAmbalaz=0)">
<parameter field="ID"/>
<attribute name="NomerNEK" field="NomerNEK"
expression="..KillSession(%val)"/>
<attribute name='DataNEK' field='DataNEK' />
<attribute name="Sklad" field="Sklad" expression="..GetSklad()" />
<group name="Izdeliq" breakOnField='Izdeliq'
sql="SELECT
Id,NomerIzdeliq,NameIzdeliq,MqrkaIzdeliq,CenaIzdeliq,KolichestvoIzdeliq,StojnostIzdeliq
FROM Izdeliq.NEKAmbItemsIzdeliq where (IzdAmbIzdeliq=?)" >
<parameter field="ID"/>
<attribute name='Izdeliq' field='Izdeliq' />
<aggregate name='sumIzdeliq' type="SUM" field='StojnostIzdeliq'/>
<aggregate type="CUSTOM" class="Izdeliq.NEKAmbReport.FormulaSum"
name='sumNEK' fields='StojnostIzdeliq,StojnostAmbalaz' />
<group name="recordIzdeliq" >
<attribute name='NomerIzdeliq' field='NomerIzdeliq' />
<attribute name='NameIzdeliq' field='NameIzdeliq' />
<attribute name='MqrkaIzdeliq' field='MqrkaIzdeliq'/>
<attribute name='CenaIzdeliq' field='CenaIzdeliq'/>
<attribute name='KolichestvoIzdeliq' field='KolichestvoIzdeliq' />
<attribute name='StojnostIzdeliq' field='StojnostIzdeliq' />
</group>
</group>
</group>
<group name='NomerNEK' breakOnField="NomerNEK"
sql="Select Id,IzdAmb,IzdeliqAmbalaz,Izdeliq,Ambalaz
from Izdeliq.NEKIzdAmb WHERE (IzdAmb=?)AND(IzdeliqAmbalaz=1)">
<parameter field="ID"/>
<group name="Ambalaz" breakOnField='Ambalaz'
sql="SELECT
ID,NomerAmbalaz,NameAmbalaz,MqrkaAmbalaz,CenaAmbalaz,KolichestvoAmbalaz,StojnostAmbalaz
FROM Izdeliq.NEKAmbItemsAmbalaz where (IzdAmbAmbalaz=?)">
<parameter field="ID"/>
<attribute name='Ambalaz' field='Ambalaz' />
<aggregate name='sumAmbalaz' type="SUM" field='StojnostAmbalaz'/>
<aggregate type="CUSTOM" class="Izdeliq.NEKAmbReport.FormulaSum"
name='sumNEK' fields='StojnostIzdeliq,StojnostAmbalaz' />
<group name="recordAmbalaz">
<attribute name='NomerAmbalaz' field='NomerAmbalaz'/>
<attribute name='NameAmbalaz' field='NameAmbalaz'/>
<attribute name='MqrkaAmbalaz' field='MqrkaAmbalaz'/>
<attribute name='CenaAmbalaz' field='CenaAmbalaz'/>
<attribute name='KolichestvoAmbalaz' field='KolichestvoAmbalaz' />
<attribute name='StojnostAmbalaz' field='StojnostAmbalaz' />
</group>
</group>
</group>
</report>
}
/// XML description for the display of this report. Used to generate
/// XSlT stylesheets for both HTML and XSL-FO
XData ReportDisplay [ XMLNamespace = "
http://www.intersystems.com/zen/
report/display" ]
{
<report xmlns="
http://www.intersystems.com/zen/report/display"
name='myReport' title='НЕК' style='standard'>
<document width="8.5in" height="11in" marginLeft="1.25in"
marginRight="1.25in" marginTop="1.0in" marginBottom="1.0in"></
document>
<body>
<header><p class="banner1">Нареждане за експедиция</p></header>
<group name="NomerNEK">
<table orient="col" width="8.5in" class='table2'>
<item field="@NomerNEK" width="1in"><caption value="N: НЕК:"
ifxpath="@NomerNEK&gt;0" /></item>
<item field="@DataNEK" width="1in"><caption value="Дата"
ifxpath="@NomerNEK&gt;0"/></item>
<item field="@Sklad" width="3.5in"><caption value="Склад:"
ifxpath="@NomerNEK&gt;0"/></item>
</table>
<group name="Izdeliq">
<table orient="row" width="8.5in" class='table2'>
<item field="@Izdeliq" width="6in"><caption value="Вид:" width="0.5in"/
></item>
</table>
<table orient="col"
group="recordIzdeliq" width="8.5in" class="table4" altcolor="#DFDFFF">
<item special="number" width=".45in" caption="#" />
<item field="@NomerIzdeliq" width="1in" caption="Номер" />
<item field="@NameIzdeliq" width="4in" caption="Наименования изделия"/
>
<item field="@MqrkaIzdeliq" width="0.5in" caption="М."/>
<item field="@CenaIzdeliq" style="text-align:right;" width="1in"
formatNumber='###,###,##0.00;(#)' caption="Цена"/>
<item field="@KolichestvoIzdeliq" style="text-align:right;"
width="1in" formatNumber='###,###,##0.000;(#)' caption="Количество"/>
<item field="@StojnostIzdeliq" style="text-align:right;" width="1in"
formatNumber='###,###,##0.00;(#)' caption="Стойност"/>
</table>
<table orient="row" width="8.5in" class='table2'>
<item field="sumIzdeliq" style="font-weight:bold;text-align:right;"
width="6.5in" formatNumber='###,###,##0.00;(#)'>
<caption value="Всичко за изделия:" width="2in"/></item>
</table>
</group>
<group name="Ambalaz" >
<table orient="row" width="8.5in" class='table2'>
<item field="@Ambalaz" width="6in"><caption value="Вид:" width="0.5in"/
></item>
</table>
<table orient="col" group="recordAmbalaz" width="8.5in" class="table4"
altcolor="#DFDFFF">
<item special="number" width=".45in" caption="#" />
<item field="@NomerAmbalaz" width="1in" caption="Номер"/>
<item field="@NameAmbalaz" width="4in" caption="Наименования амбалаж"/
>
<item field="@MqrkaAmbalaz" width="0.5in" caption="М."/>
<item field="@CenaAmbalaz" style="text-align:right;" width="1in"
formatNumber='###,###,##0.00;(#)' caption="Цена"/>
<item field="@KolichestvoAmbalaz" style="text-align:right;"
width="1in" formatNumber='###,###,##0.000;(#)' caption="Количество"/>
<item field="@StojnostAmbalaz" style="text-align:right;" width="1in"
formatNumber='###,###,##0.00;(#)' caption="Стойност"/>
</table>
<table orient="row" width="8.5in" class='table2'>
<item field="sumAmbalaz" style="font-weight:bold;text-align:right;"
width="6.5in" formatNumber='###,###,##0.00;(#)'>
<caption value="Всичко за амбалаж:" width="2in"/></item>
</table>
<table orient="row" width="8.5in" class='table2'>
<item field="sumNEK" style="font-weight:bold;text-align:right;"
width="6.5in" formatNumber='###,###,##0.00;(#)'>
<caption value="Всичко за нареждане:" width="2in"/></item>
</table>
</group>
</group>
</body>
</report>
}
/// Return a formatted version of the month property.
Method GetSklad() As %String
{
Set tObj = ##class(Nomenklaturi.Skladove).%OpenId(%val)
If ($IsObject(tObj)) {
Set Nomer = tObj.Nomer
Set Name = tObj.Name
}
Quit Nomer_" "_Name
}
Method KillSession(%val As %String) As %Status
{
k %session.Data("StojnostIzdeliq")
k %session.Data("StojnostAmbalaz")
Quit $$$OK
}
}
================================================
> > - Show quoted text -- Hide quoted text -