P5 - Criar um relatório de conferência de checkin’s por localidade de partida (fixes bug #6360)

Tempo: 10 horas

git-svn-id: http://desenvolvimento.rjconsultores.com.br/repositorio/sco/AdmVenta/Web/trunk/ventaboletos@44871 d1611594-4594-4d17-8e1d-87c2c4800839
master
julio 2015-06-10 18:39:33 +00:00
parent 144e6e0823
commit d048a55939
11 changed files with 599 additions and 0 deletions

View File

@ -0,0 +1,104 @@
package com.rjconsultores.ventaboletos.relatorios.impl;
import java.sql.Connection;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Map;
import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource;
import org.apache.commons.lang.StringUtils;
import com.rjconsultores.ventaboletos.relatorios.utilitarios.Checkin;
import com.rjconsultores.ventaboletos.relatorios.utilitarios.Relatorio;
import com.rjconsultores.ventaboletos.web.utilerias.NamedParameterStatement;
public class RelatorioCheckin extends Relatorio {
public RelatorioCheckin(Map<String, Object> parametros, Connection conexao) {
super(parametros, conexao);
}
@Override
protected void processaParametros() throws Exception {
Integer corridaId = (Integer) getParametros().get("CORRIDA_ID");
Integer origenId = (Integer) getParametros().get("ORIGEN_ID");
String nomeBilheteiro = (String) getParametros().get("NOME_BILHETEIRO");
String numVoucher = (String) getParametros().get("NUM_VOUCHER");
Date fecInicio = (Date) getParametros().get("DATA_INICIAL");
Date fecFinal = (Date) getParametros().get("DATA_FINAL");
String sql = getSql(fecInicio, fecFinal, corridaId, origenId, nomeBilheteiro, numVoucher);
NamedParameterStatement stmt = new NamedParameterStatement(getConexao(), sql);
if (fecInicio != null && fecFinal != null) {
stmt.setTimestamp("fecInicio", new java.sql.Timestamp(fecInicio.getTime()));
stmt.setTimestamp("fecFinal", new java.sql.Timestamp(fecFinal.getTime()));
}
if (corridaId != null) {
stmt.setInt("corridaId", corridaId);
}
if (origenId != null) {
stmt.setInt("origenId", origenId);
}
if (StringUtils.isNotBlank(nomeBilheteiro)) {
stmt.setString("nomeBilheteiro", nomeBilheteiro);
}
if (StringUtils.isNotBlank(numVoucher)) {
stmt.setString("numVoucher", numVoucher);
}
List<Checkin> checkins = new ArrayList<Checkin>();
ResultSet rset = stmt.executeQuery();
while (rset.next()) {
Checkin checkin = new Checkin();
checkin.setBoletoId(rset.getLong("boleto_Id"));
checkin.setNumFolioSistema(rset.getString("numoperacion"));
checkin.setOrigen(rset.getString("descparada"));
checkin.setCorridaId(rset.getInt("corrida_id"));
checkin.setFeccorrida(rset.getTimestamp("feccorrida"));
checkin.setDataVenda(rset.getTimestamp("datavenda"));
checkin.setDataCancelado(rset.getTimestamp("datacancelado"));
checkin.setDataRemarcacao(rset.getTimestamp("dataremarcacao"));
checkin.setNombUsuario(rset.getString("nombusuario"));
checkins.add(checkin);
}
setLsDadosRelatorio(checkins);
}
public void setLsDadosRelatorio(List<Checkin> checkins) {
this.setCollectionDataSource(new JRBeanCollectionDataSource(checkins));
}
private String getSql(Date fecInicio, Date fecFinal, Integer corridaId, Integer origenId, String nomeBilheteiro, String numVoucher) {
StringBuffer sql = new StringBuffer();
sql.append("select b.boleto_id, b.numoperacion, o.descparada, b.corrida_id, ");
sql.append("b.feccorrida, bc.datavenda, bc.datacancelado, bc.dataremarcacao, u.nombusuario ");
sql.append("from boleto b ");
sql.append("inner join boleto_checkin bc on b.boleto_id = bc.boletooriginal_id ");
sql.append("inner join parada o on b.origen_id = o.parada_id ");
sql.append("inner join usuario u on b.usuario_id = u.usuario_id ");
sql.append(" where b.activo = 1 ");
sql.append(fecInicio == null && fecFinal == null ? "" : "and b.feccorrida between :fecInicio and :fecFinal ");
sql.append(corridaId == null ? "" : " and b.corrida_id = :corridaId ");
sql.append(origenId == null ? "" : " and b.origen_id = :origenId ");
sql.append(StringUtils.isBlank(nomeBilheteiro) ? "" : " and u.nombusuario like :nomeBilheteiro ");
sql.append(StringUtils.isBlank(numVoucher) ? "" : " and b.numoperacion = :numVoucher ");
return sql.toString();
}
}

View File

@ -0,0 +1,13 @@
#geral
msg.noData=Não foi possivel obter dados com os parâmetros informados.
#Labels cabeçalho
cabecalho.relatorio=Relatório:
cabecalho.periodo=Período:
cabecalho.periodoA=à
cabecalho.dataHora=Data/Hora:
cabecalho.impressorPor=Impressor por:
cabecalho.pagina=Página
cabecalho.de=de
cabecalho.filtros=Filtros:

View File

@ -0,0 +1,175 @@
<?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="RelatorioCheckin" pageWidth="595" pageHeight="842" whenNoDataType="NoDataSection" columnWidth="555" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20" uuid="48d32af4-ba9f-41c2-91a5-5d2fe57e149c">
<property name="ireport.zoom" value="1.4641000000000008"/>
<property name="ireport.x" value="0"/>
<property name="ireport.y" value="0"/>
<parameter name="NOME_RELATORIO" class="java.lang.String"/>
<parameter name="DATA_INICIAL" class="java.util.Date"/>
<parameter name="DATA_FINAL" class="java.util.Date"/>
<parameter name="CORRIDA_ID" class="java.lang.Long"/>
<parameter name="NUM_VOUCHER" class="java.lang.String"/>
<parameter name="ORIGEN" class="java.lang.String"/>
<parameter name="NOME_BILHETEIRO" class="java.lang.String"/>
<queryString>
<![CDATA[]]>
</queryString>
<field name="boletoId" class="java.lang.Long"/>
<field name="numFolioSistema" class="java.lang.String"/>
<field name="origen" class="java.lang.String"/>
<field name="corridaId" class="java.lang.Integer"/>
<field name="feccorrida" class="java.util.Date"/>
<field name="dataVenda" class="java.util.Date"/>
<field name="dataCancelado" class="java.util.Date"/>
<field name="dataRemarcacao" class="java.util.Date"/>
<field name="nombUsuario" class="java.lang.String"/>
<background>
<band splitType="Stretch"/>
</background>
<title>
<band height="24" splitType="Stretch">
<textField pattern="" isBlankWhenNull="false">
<reportElement mode="Transparent" x="0" y="0" width="338" height="20" forecolor="#000000" backcolor="#FFFFFF" uuid="5ee43799-932b-4ce1-8056-df380a9050a8"/>
<textElement textAlignment="Left" verticalAlignment="Top" rotation="None" markup="none">
<font fontName="SansSerif" size="12" isBold="true" isItalic="false" isUnderline="false" isStrikeThrough="false" pdfEncoding="Cp1252" isPdfEmbedded="false"/>
<paragraph lineSpacing="Single"/>
</textElement>
<textFieldExpression><![CDATA[$P{NOME_RELATORIO}]]></textFieldExpression>
</textField>
<line>
<reportElement x="0" y="20" width="555" height="1" uuid="b28df970-c219-4853-afeb-6821e0a44f04"/>
</line>
</band>
</title>
<pageHeader>
<band splitType="Stretch"/>
</pageHeader>
<columnHeader>
<band height="33" splitType="Stretch">
<staticText>
<reportElement x="0" y="0" width="100" height="30" uuid="6329d59a-06da-4cb8-afe9-738da0b71867"/>
<textElement>
<font isBold="true"/>
</textElement>
<text><![CDATA[Nº Bilhete / Voucher]]></text>
</staticText>
<staticText>
<reportElement x="100" y="0" width="134" height="30" uuid="9530b934-ab02-49e5-b92d-77012c21301d"/>
<textElement>
<font isBold="true"/>
</textElement>
<text><![CDATA[Origem]]></text>
</staticText>
<staticText>
<reportElement x="234" y="0" width="49" height="30" uuid="31ded62d-1237-4ce0-89ff-392e262b28fd"/>
<textElement>
<font isBold="true"/>
</textElement>
<text><![CDATA[Serviço]]></text>
</staticText>
<staticText>
<reportElement x="283" y="0" width="55" height="30" isPrintWhenDetailOverflows="true" uuid="7182958d-23c2-491c-b78f-bff5448efbe8"/>
<textElement rotation="None">
<font isBold="true" isUnderline="false"/>
</textElement>
<text><![CDATA[Data do Serviço]]></text>
</staticText>
<staticText>
<reportElement x="338" y="0" width="48" height="30" isPrintWhenDetailOverflows="true" uuid="d62d3352-3972-49c3-8848-84b148f091cd"/>
<textElement>
<font isBold="true"/>
</textElement>
<text><![CDATA[Data Checkin]]></text>
</staticText>
<staticText>
<reportElement x="386" y="0" width="115" height="30" uuid="54769773-b33c-4f10-b4f0-33e38df2326a"/>
<textElement>
<font isBold="true"/>
</textElement>
<text><![CDATA[Bilheteiro]]></text>
</staticText>
<staticText>
<reportElement x="501" y="0" width="54" height="30" isPrintWhenDetailOverflows="true" uuid="b4ca6634-4f46-4452-8a0a-fd5c2736e0ec"/>
<textElement>
<font isBold="true"/>
</textElement>
<text><![CDATA[Data Remarcada]]></text>
</staticText>
<line>
<reportElement x="0" y="30" width="555" height="1" uuid="acc2f86e-4ee2-4e61-807f-27fd740db652"/>
</line>
</band>
</columnHeader>
<detail>
<band height="23" splitType="Stretch">
<textField isBlankWhenNull="true">
<reportElement x="0" y="0" width="100" height="20" uuid="82b42ca3-255a-4038-9730-35e2f9a1bb0f"/>
<textElement>
<font size="8"/>
</textElement>
<textFieldExpression><![CDATA[$F{numFolioSistema}]]></textFieldExpression>
</textField>
<textField isBlankWhenNull="true">
<reportElement x="100" y="0" width="134" height="20" uuid="c5cc5e04-b1fa-4ebc-b408-3810648fc7eb"/>
<textElement>
<font size="8"/>
</textElement>
<textFieldExpression><![CDATA[$F{origen}]]></textFieldExpression>
</textField>
<textField isBlankWhenNull="true">
<reportElement x="234" y="0" width="49" height="20" uuid="d4baaf3d-a171-4b29-8aa8-cef5b56a11b3"/>
<textElement>
<font size="8"/>
</textElement>
<textFieldExpression><![CDATA[$F{corridaId}]]></textFieldExpression>
</textField>
<textField pattern="dd/MM/yyyy" isBlankWhenNull="true">
<reportElement x="283" y="0" width="55" height="20" uuid="acbbd64d-1fbd-4b4f-b7d5-5a11005ae98e"/>
<textElement>
<font size="8"/>
</textElement>
<textFieldExpression><![CDATA[$F{feccorrida}]]></textFieldExpression>
</textField>
<textField pattern="dd/MM/yyyy" isBlankWhenNull="true">
<reportElement x="338" y="0" width="48" height="20" uuid="1ce5d236-a684-450f-8e63-1523f0c7e103"/>
<textElement>
<font size="8"/>
</textElement>
<textFieldExpression><![CDATA[$F{dataVenda}]]></textFieldExpression>
</textField>
<textField isBlankWhenNull="true">
<reportElement x="386" y="0" width="115" height="20" uuid="64e2b043-f9cb-4211-852c-def2fed7ae2c"/>
<textElement>
<font size="8"/>
</textElement>
<textFieldExpression><![CDATA[$F{nombUsuario}]]></textFieldExpression>
</textField>
<textField pattern="dd/MM/yyyy" isBlankWhenNull="true">
<reportElement x="501" y="0" width="54" height="20" uuid="648d03b0-ee8a-4b2f-af9f-c33c4d01f40e"/>
<textElement>
<font size="8"/>
</textElement>
<textFieldExpression><![CDATA[$F{dataRemarcacao}]]></textFieldExpression>
</textField>
</band>
</detail>
<columnFooter>
<band splitType="Stretch"/>
</columnFooter>
<pageFooter>
<band splitType="Stretch"/>
</pageFooter>
<summary>
<band splitType="Stretch"/>
</summary>
<noData>
<band height="38">
<textField>
<reportElement x="15" y="11" width="530" height="20" uuid="c68d03cd-3b82-4f22-ba2a-6bb344fd3944"/>
<textElement markup="none">
<font size="11" isBold="true"/>
</textElement>
<textFieldExpression><![CDATA[$R{msg.noData}]]></textFieldExpression>
</textField>
</band>
</noData>
</jasperReport>

View File

@ -0,0 +1,89 @@
package com.rjconsultores.ventaboletos.relatorios.utilitarios;
import java.util.Date;
public class Checkin {
private Long boletoId;
private String numFolioSistema;
private String origen;
private Integer corridaId;
private Date feccorrida;
private Date dataVenda;
private Date dataCancelado;
private Date dataRemarcacao;
private String nombUsuario;
public Long getBoletoId() {
return boletoId;
}
public void setBoletoId(Long boletoId) {
this.boletoId = boletoId;
}
public String getNumFolioSistema() {
return numFolioSistema;
}
public void setNumFolioSistema(String numFolioSistema) {
this.numFolioSistema = numFolioSistema;
}
public String getOrigen() {
return origen;
}
public void setOrigen(String origen) {
this.origen = origen;
}
public Integer getCorridaId() {
return corridaId;
}
public void setCorridaId(Integer corridaId) {
this.corridaId = corridaId;
}
public Date getFeccorrida() {
return feccorrida;
}
public void setFeccorrida(Date feccorrida) {
this.feccorrida = feccorrida;
}
public Date getDataVenda() {
return dataVenda;
}
public void setDataVenda(Date dataVenda) {
this.dataVenda = dataVenda;
}
public Date getDataCancelado() {
return dataCancelado;
}
public void setDataCancelado(Date dataCancelado) {
this.dataCancelado = dataCancelado;
}
public Date getDataRemarcacao() {
return dataRemarcacao;
}
public void setDataRemarcacao(Date dataRemarcacao) {
this.dataRemarcacao = dataRemarcacao;
}
public String getNombUsuario() {
return nombUsuario;
}
public void setNombUsuario(String nombUsuario) {
this.nombUsuario = nombUsuario;
}
}

View File

@ -0,0 +1,110 @@
package com.rjconsultores.ventaboletos.web.gui.controladores.relatorios;
import java.util.HashMap;
import java.util.Map;
import javax.sql.DataSource;
import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Controller;
import org.zkoss.util.resource.Labels;
import org.zkoss.zhtml.Messagebox;
import org.zkoss.zk.ui.Component;
import org.zkoss.zk.ui.event.Event;
import org.zkoss.zul.Comboitem;
import org.zkoss.zul.ComboitemRenderer;
import org.zkoss.zul.Datebox;
import org.zkoss.zul.Intbox;
import org.zkoss.zul.Textbox;
import com.rjconsultores.ventaboletos.entidad.Parada;
import com.rjconsultores.ventaboletos.relatorios.impl.RelatorioCheckin;
import com.rjconsultores.ventaboletos.relatorios.utilitarios.Relatorio;
import com.rjconsultores.ventaboletos.utilerias.DateUtil;
import com.rjconsultores.ventaboletos.web.utilerias.MyComboboxParada;
import com.rjconsultores.ventaboletos.web.utilerias.MyComboboxParadaCve;
import com.rjconsultores.ventaboletos.web.utilerias.MyGenericForwardComposer;
@Controller("relatorioCheckinController")
@Scope("prototype")
public class RelatorioCheckinController extends MyGenericForwardComposer {
private static final long serialVersionUID = 1L;
private Datebox datInicial;
private Datebox datFinal;
private Intbox txtCorridaId;
private Textbox txtBilheteiro;
private Textbox txtVoucher;
private MyComboboxParada cmbParadaOrigem;
private MyComboboxParadaCve cmbParadaOrigemCve;
@Autowired
private DataSource dataSourceRead;
@Override
public void doAfterCompose(Component comp) throws Exception {
super.doAfterCompose(comp);
cmbParadaOrigemCve.setItemRenderer(new ComboitemRenderer() {
@Override
public void render(Comboitem cmbtm, Object o) throws Exception {
Parada parada = (Parada) o;
cmbtm.setLabel(parada.getCveparada());
cmbtm.setValue(parada);
}
});
}
public void onClick$btnExecutarRelatorio(Event ev) throws Exception {
Integer origenId = cmbParadaOrigemCve.getSelectedItem() == null ? null
: ((Parada) cmbParadaOrigemCve.getSelectedItem().getValue()).getParadaId();
String origen = cmbParadaOrigemCve.getSelectedItem() == null ? null
: ((Parada) cmbParadaOrigemCve.getSelectedItem().getValue()).getDescparada();
if (origenId == null && txtCorridaId.getValue() == null && StringUtils.isBlank(txtBilheteiro.getValue())
&& datInicial.getValue() == null && datFinal.getValue() == null && StringUtils.isBlank(txtVoucher.getValue())) {
Messagebox.show(Labels.getLabel("MSG.ningunRegistro"),
Labels.getLabel("indexController.mniRelatorioCheckin.label"),
Messagebox.OK, Messagebox.INFORMATION);
return;
}
Map<String, Object> parametros = new HashMap<String, Object>();
parametros.put("CORRIDA_ID", txtCorridaId.getValue());
parametros.put("NOME_BILHETEIRO", txtBilheteiro.getValue());
parametros.put("DATA_INICIAL", datInicial.getValue());
parametros.put("DATA_FINAL", datFinal.getValue());
parametros.put("NUM_VOUCHER", txtVoucher.getValue());
parametros.put("ORIGEN_ID", origenId);
parametros.put("ORIGEN", origen);
parametros.put("NOME_RELATORIO", Labels.getLabel("indexController.mniRelatorioCheckin.label"));
Relatorio relatorio = new RelatorioCheckin(parametros, dataSourceRead.getConnection());
Map<String, Object> args = new HashMap<String, Object>();
args.put("relatorio", relatorio);
openWindow("/component/reportView.zul",
Labels.getLabel("indexController.mniRelatorioCheckin.label"), args, MODAL);
}
public void onSelect$cmbParadaOrigemCve(Event ev) {
if (cmbParadaOrigemCve.getSelectedItem() != null) {
cmbParadaOrigem.setComboItemByParada((Parada) cmbParadaOrigemCve.getSelectedItem().getValue());
}
}
public void onSelect$cmbParadaOrigem(Event ev) {
if (cmbParadaOrigem.getSelectedItem() != null)
cmbParadaOrigemCve.setComboItemByParada((Parada) cmbParadaOrigem.getSelectedItem().getValue());
}
}

View File

@ -0,0 +1,25 @@
package com.rjconsultores.ventaboletos.web.utilerias.menu.item.relatorios;
import org.zkoss.util.resource.Labels;
import com.rjconsultores.ventaboletos.web.utilerias.PantallaUtileria;
import com.rjconsultores.ventaboletos.web.utilerias.menu.DefaultItemMenuSistema;
public class ItemMenuRelatorioCheckin extends DefaultItemMenuSistema {
public ItemMenuRelatorioCheckin() {
super("indexController.mniRelatorioCheckin.label");
}
@Override
public String getClaveMenu() {
return "COM.RJCONSULTORES.ADMINISTRACION.GUI.RELATORIOS.MENU.RELATORIOCHECKIN";
}
@Override
public void ejecutar() {
PantallaUtileria.openWindow("/gui/relatorios/filtroRelatorioCheckin.zul",
Labels.getLabel("indexController.mniRelatorioCheckin.label"), getArgs(), desktop);
}
}

View File

@ -235,6 +235,7 @@ indexController.mniRelatorioOCD.label = Reporte OCD por la empresa
indexController.mniRelatorioGratuidade.label = Reporte Gratuidade
indexController.mniRelatorioVendasBilheteiro.label = Reporte de Ventas por Agente de Billetes
indexController.mniRelatorioAgenciasNaoImportadas.label = Reporte Puntos Venta no Importados
indexController.mniRelatorioCheckin.label = Relatório de Checkin's
indexController.mniFechamentoParamgeral.label = Fechamento Conta Corrente
indexController.mniFechamentoParamptovta.label = Fechamento Conta Corrente Agência
indexController.mniRelatorioCorridas.label = Reporte de Corridas

View File

@ -239,6 +239,7 @@ indexController.mniRelatorioOCD.label = Relatório OCD por Empresa
indexController.mniRelatorioGratuidade.label = Relatório Gratuidade
indexController.mniRelatorioVendasBilheteiro.label = Relatório de Vendas por Bilheteiro
indexController.mniRelatorioAgenciasNaoImportadas.label = Relatório de Agências não Importadas
indexController.mniRelatorioCheckin.label = Relatório de Checkin's
indexController.mniFechamentoParamgeral.label = Fechamento Conta Corrente
indexController.mniFechamentoParamptovta.label = Fechamento Conta Corrente Agência
indexController.mniRelatorioCorridas.label = Relatório de Serviços

View File

@ -0,0 +1,81 @@
<?xml version="1.0" encoding="UTF-8"?>
<?page contentType="text/html;charset=UTF-8"?>
<?variable-resolver class="org.zkoss.zkplus.spring.DelegatingVariableResolver"?>
<?init class="org.zkoss.zkplus.databind.AnnotateDataBinderInit" arg0="winRelatorioCheckin"?>
<?taglib uri="http://www.zkoss.org/dsp/web/core" prefix="c"?>
<zk xmlns="http://www.zkoss.org/2005/zul">
<window id="winRelatorioCheckin"
apply="${relatorioCheckinController}" contentStyle="overflow:auto"
width="580px" border="normal">
<grid fixedLayout="true">
<columns>
<column width="20%" />
<column width="30%" />
<column width="20%" />
<column width="30%" />
</columns>
<rows>
<row>
<label
value="${c:l('relatorioReceitaDiariaAgenciaController.lbDataIni.value')}" />
<datebox id="datInicial" width="100%" mold="rounded"
format="dd/MM/yyyy" lenient="false" maxlength="10" />
<label
value="${c:l('relatorioReceitaDiariaAgenciaController.lbDataFin.value')}" />
<datebox id="datFinal" width="100%" mold="rounded"
format="dd/MM/yyyy" lenient="false" maxlength="10" />
</row>
</rows>
</grid>
<grid fixedLayout="true">
<columns>
<column width="20%" />
<column width="80%" />
</columns>
<rows>
<row>
<label
value="${c:l('relatorioTaxasLinhaController.lbCidadaOrigem.value')}" />
<cell>
<combobox id="cmbParadaOrigemCve"
use="com.rjconsultores.ventaboletos.web.utilerias.MyComboboxParadaCve"
mold="rounded" buttonVisible="true" width="30%" />
<combobox id="cmbParadaOrigem"
use="com.rjconsultores.ventaboletos.web.utilerias.MyComboboxParada"
mold="rounded" buttonVisible="true" width="65%" />
</cell>
</row>
<row>
<label
value="${c:l('relatorioOrigemDestinoController.lbServico.value')}" />
<intbox width="99%" id="txtCorridaId" />
</row>
<row>
<label id="lbBilheteiro" value="Bilheteiro" />
<textbox id="txtBilheteiro" width="99%"
maxlength="50"
use="com.rjconsultores.ventaboletos.web.utilerias.MyTextbox" />
</row>
<row>
<label id="lbVoucher" value="Numero Voucher" />
<textbox id="txtVoucher" width="99%" maxlength="50"
use="com.rjconsultores.ventaboletos.web.utilerias.MyTextbox" />
</row>
</rows>
</grid>
<toolbar>
<button id="btnExecutarRelatorio" image="/gui/img/find.png"
label="${c:l('relatorio.lb.btnExecutarRelatorio')}" />
</toolbar>
</window>
</zk>