Autor Tópico: [RESOLVIDO] Consulta com Subconsulta em Formato Livre  (Lida 117 vezes)

gutoribeiro

  • Intermediário
  • ***
  • Mensagens: 202
    • Email
[RESOLVIDO] Consulta com Subconsulta em Formato Livre
« Online: Outubro 02, 2017, 07:22:15 pm »
Alguém sabe me dizer, por favor, se é possível criar uma consulta com formato livre com subconsulta. Seria realizado um loop apenas nos dados da subconsulta.

Algo Assim:
Dados da consulta principal:
{Campo1} {Campo2} {Campo3} {Campo4}
Dados da Subconsulta:
  {CampoSub1} {CampoSub2} {CampoSub3} {CampoSub4}
  {CampoSub1} {CampoSub2} {CampoSub3} {CampoSub4}
  {CampoSub1} {CampoSub2} {CampoSub3} {CampoSub4}
  {CampoSub1} {CampoSub2} {CampoSub3} {CampoSub4}
« Última modificação: Outubro 05, 2017, 10:27:14 am por gutoribeiro »

gutoribeiro

  • Intermediário
  • ***
  • Mensagens: 202
    • Email
Re:Consulta com Subconsulta em Formato Livre
« Responder #1 Online: Outubro 03, 2017, 01:57:23 am »
Não consegui usar formato livre com consulta + subconsulta.

Tentei fazer assim:

Criei uma consulta baseada em 2 tabelas:

Código: [Selecionar]
SELECT
   f.id_fatura,
   f.dt_fatura_fechamento,
   f.tb_empresas_id,
   f.tb_clientes_id,
   f.vlr_total_consumo,
   f.vlr_total_diarias,
   f.desconto,
   f.adicionais,
   f.vlr_total,
   e.id,
   e.quarto,
   e.tarifa,
   e.dt_checkin,
   e.dt_chekout,
   e.id_hotel
FROM
   tb_fatura f INNER JOIN tb_estadia e ON f.tb_estadia_id = e.id
WHERE f.id_fatura = '[glo_id_fatura]'

Em seguida criei um template HTML pra usar como formato livre:

Código: [Selecionar]
<table cellspacing="0" border="0" align="center" width="280">
<colgroup width="95"></colgroup>
<colgroup span="3" width="85"></colgroup>
<tr>
<td rowspan=4 height="68" align="center" valign=middle><br><img src="layout-cupom2_html_b6ef7fb51d62bfc3.png" width=82 height=21 hspace=6 vspace=16>
</td>
<td colspan=3 align="center" valign=middle><font face="Verdana" size=0.5>{razao_social}</font></td>
</tr>
<tr>
<td colspan=3 align="center" valign=middle><font face="Verdana" size=0.5>{cnpj}</font></td>
</tr>
<tr>
<td colspan=3 align="center" valign=middle><font face="Verdana" size=0.5>{insc_estadual}</font></td>
</tr>
<tr>
<td style="border-bottom: 1px solid #000000" colspan=3 align="center" valign=middle><font face="Verdana" size=0.5>{endereco}</font></td>
</tr>
<tr>
<td style="border-bottom: 1px solid #000000" height="13" align="right"><b><font face="Verdana" size=0.5>Fatura nº:</font></b></td>
<td style="border-bottom: 1px solid #000000" align="left"><font face="Verdana" size=0.5>{id_fatura}</font></td>
<td style="border-bottom: 1px solid #000000" align="right"><font face="Verdana" size=0.5>Data:</font></td>
<td style="border-bottom: 1px solid #000000" align="left"><font face="Verdana" size=0.5>{data}</font></td>
</tr>
<tr>
<td height="11" align="right"><b><font face="Verdana" size=0.5>Check-in:</font></b></td>
<td align="left"><font face="Verdana" size=0.5>{dt_checkin}</font></td>
<td align="right"><b><font face="Verdana" size=0.5>Check-out:</font></b></td>
<td align="left"><font face="Verdana" size=0.5>{dt_checkout}</font></td>
</tr>
<tr>
<td height="12" align="right"><b><font face="Verdana" size=0.5>UH:</font></b></td>
<td align="left"><font face="Verdana" size=0.5>{uh}</font></td>
<td align="right"><b><font face="Verdana" size=0.5>Tarifa:</font></b></td>
<td align="left"><font face="Verdana" size=0.5>{tarifa}</font></td>
</tr>
<tr>
<td height="13" align="right"><b><font face="Verdana" size=0.5>Empresa:</font></b></td>
<td colspan=3 align="left" valign=middle><font face="Verdana" size=0.5>{empresa}</font></td>
</tr>
<tr>
<td style="border-bottom: 1px solid #000000" height="13" align="right"><b><font face="Verdana" size=0.5>Cliente:</font></b></td>
<td style="border-bottom: 1px solid #000000" colspan=3 align="left" valign=middle><font face="Verdana" size=0.5>{cliente}</font></td>
</tr>
<tr>
<td colspan=4 height="12" align="center" valign=middle bgcolor="#EEEEEE"><b><font face="Verdana" size=0.5>Consumo/Serviços</font></b></td>
</tr>
<tr>
<td height="12" align="left"><b><font face="Verdana" size=0.5>Item/Produto</font></b></td>
<td align="center"><b><font face="Verdana" size=0.5>Qtde</font></b></td>
<td align="right"><b><font face="Verdana" size=0.5>Vlr. Unit.</font></b></td>
<td align="right"><b><font face="Verdana" size=0.5>Subtotal</font></b></td>
</tr>
<tr>
                <!-- BEGIN bl2 -->
<td height="17" align="left"><font face="Verdana" size=0.5>{item_produto}</font></td>
<td align="center"><font face="Verdana" size=0.5>{qtde}</font></td>
<td align="right"><font face="Verdana" size=0.5>{vlr_unit}</font></td>
<td align="right"><font face="Verdana" size=0.5>{subtotal}</font></td>
                <!-- END bl2 -->
</tr>
<tr>
<td style="border-bottom: 1px solid #000000" colspan=4 height="17" align="center" valign=middle><br></td>
</tr>
<tr>
<td colspan=3 height="17" align="right" valign=middle><b><font face="Verdana" size=0.5>V.T. Consumo:</font></b></td>
<td align="left"><font face="Verdana" size=0.5>{total_consumo}</font></td>
</tr>
<tr>
<td height="17" align="right"><b><font face="Verdana" size=0.5>Diárias:</font></b></td>
<td align="left"><font face="Verdana" size=0.5>{qtde_diarias}</font></td>
<td align="right"><b><font face="Verdana" size=0.5>V. T. Diárias</font></b></td>
<td align="left"><font face="Verdana" size=0.5>{vlr_diarias}</font></td>
</tr>
<tr>
<td colspan=3 height="17" align="right" valign=middle><b><font face="Verdana" size=0.5>Descontos:</font></b></td>
<td align="left"><font face="Verdana" size=0.5>{descontos}</font></td>
</tr>
<tr>
<td colspan=3 height="17" align="right" valign=middle><b><font face="Verdana" size=0.5>Adicionais:</font></b></td>
<td align="left"><font face="Verdana" size=0.5>{adicionais}</font></td>
</tr>
<tr>
<td style="border-bottom: 1px solid #000000" colspan=3 height="17" align="right" valign=middle><b><font face="Verdana" size=0.5>Total:</font></b></td>
<td style="border-bottom: 1px solid #000000" align="left"><font face="Verdana" size=0.5>{total_fatura}</font></td>
</tr>
<tr>
<td colspan=4 height="17" align="center" valign=middle><b><i><font face="Verdana" size=0.5>Agradecemos a preferência! Volte sempre!</font></i></b></td>
</tr>
</table>

Depois no evento onRecord da consulta, realizo um select em outra tabela para listar os consumos referentes a tabela estadia:

Código: [Selecionar]
//Selecionando os dados do consumo da estadia
sc_select(meus_dados, "SELECT
tb_produtos_id_produto, qtde, valor_unit, valor_total
   FROM
        tb_consumo
   WHERE
    tb_estadia_id = '{e.id}'
");
if ({meus_dados} == false)
{
   sc_error_message("Erro ao acessar a base de dados!");
}
else
{
while (!$meus_dados->EOF){
{produto} = $meus_dados->fields[0];
{qtde} = $meus_dados->fields[1];
{vlr_unit} = $meus_dados->fields[2];
{subtotal} = $meus_dados->fields[3];
$meus_dados->MoveNext();
}
$meus_dados->Close();
}

O problema está em que só é exibido um registro, não vai para próximo, pois a estadia possui mais de um consumo cadastrado.

Alguém sabe me dizer o que eu estou fazendo de errado?

Haroldo

  • Expert
  • *****
  • Mensagens: 7528
  • Conhecimento diminui limitações.△TFA△
    • InfinitusWeb Software de Gestãol/Gestão ITIL/Consultoria Scriptcase
Re:Consulta com Subconsulta em Formato Livre
« Responder #2 Online: Outubro 03, 2017, 10:11:13 am »
Debug.

Jailton

  • Expert
  • *****
  • Mensagens: 2588
Re:Consulta com Subconsulta em Formato Livre
« Responder #3 Online: Outubro 04, 2017, 02:10:17 pm »
Vou ensinar um macete fazer PDF Consulta Formato Livre com detalhes (Sub-Consultas)

Na Consulta principal no OnRecord:
[glo_id]={e.id}; // Marque na consulta principal [glo_id] como Variável Saída.

Crie uma outra GRID consulta somente com os itens detalhes 'tb_consumo' que você quer mostrar, e na SQL desta consulta coloque no WHERE  tb_estadia_id = [glo_id],
remova cabeçalho, rodapé, e todos os botões da barra de ferramentas, marque que esta consulta é Paginação *TOTAL*. [SALVE]

Agora na consulta Principal crie uma Sub-Consulta chamada: Produtos_Detalhes e chame a GRID de consulta criada e vincule o campo 'e.id' na ligação para o campo [glo_id]

Seu formulário Livre tem que ficar assim, veja que os itens produtos é somente um campo ali é a outra Sub-Consulta.


Remover esta parte do seu html:

   <tr>
                <!-- BEGIN bl2 -->
      <td height="17" align="left"><font face="Verdana" size=0.5>{item_produto}</font></td>
      <td align="center"><font face="Verdana" size=0.5>{qtde}</font></td>
      <td align="right"><font face="Verdana" size=0.5>{vlr_unit}</font></td>
      <td align="right"><font face="Verdana" size=0.5>{subtotal}</font></td>
                <!-- END bl2 -->
   </tr>


A principio para teste coloque a consulta em Modo Horizontal/Vertical Normal - tire o modo Livre, isso é para ajudar a marcar e testar os campos e sub-consultas,
ok testando e dando tudo certo coloque agora no Modo Livre, pegue o template Livre correto, veja se ficou tudo certo e agora você pode abrir esta consulta direto
em PDF ou deixar ela abrir em formato livre e deixar o botão PDF ai fica a seu critério.

Quando precisar pode gerar os Templates em Formato Livre no OFFICE 2016:
http://www.scriptcase.com.br/forum/index.php/topic,12176.msg63130.html#msg63130
« Última modificação: Outubro 04, 2017, 02:42:42 pm por Jailton »
O Princípio da Vibração. "Nada está parado, tudo se move, tudo vibra". Caibalion.

Haroldo

  • Expert
  • *****
  • Mensagens: 7528
  • Conhecimento diminui limitações.△TFA△
    • InfinitusWeb Software de Gestãol/Gestão ITIL/Consultoria Scriptcase
Re:Consulta com Subconsulta em Formato Livre
« Responder #4 Online: Outubro 05, 2017, 09:45:42 am »
Jailton, já não conversamos a respeito desse tipo de intervenção?
Quer dar dica cira um tópico novo, mas quebrar a linha de raciocínio numa ajuda.
Você  é um bom programado e eu gosto de você. tem ótimas dicas e é minucioso ao dar as sugestões.

Vou ensinar um macete fazer PDF Consulta Formato Livre com detalhes (Sub-Consultas)

Na Consulta principal no OnRecord:
[glo_id]={e.id}; // Marque na consulta principal [glo_id] como Variável Saída.

Crie uma outra GRID consulta somente com os itens detalhes 'tb_consumo' que você quer mostrar, e na SQL desta consulta coloque no WHERE  tb_estadia_id = [glo_id],
remova cabeçalho, rodapé, e todos os botões da barra de ferramentas, marque que esta consulta é Paginação *TOTAL*. [SALVE]

Agora na consulta Principal crie uma Sub-Consulta chamada: Produtos_Detalhes e chame a GRID de consulta criada e vincule o campo 'e.id' na ligação para o campo [glo_id]

Seu formulário Livre tem que ficar assim, veja que os itens produtos é somente um campo ali é a outra Sub-Consulta.


Remover esta parte do seu html:

   <tr>
                <!-- BEGIN bl2 -->
      <td height="17" align="left"><font face="Verdana" size=0.5>{item_produto}</font></td>
      <td align="center"><font face="Verdana" size=0.5>{qtde}</font></td>
      <td align="right"><font face="Verdana" size=0.5>{vlr_unit}</font></td>
      <td align="right"><font face="Verdana" size=0.5>{subtotal}</font></td>
                <!-- END bl2 -->
   </tr>


A principio para teste coloque a consulta em Modo Horizontal/Vertical Normal - tire o modo Livre, isso é para ajudar a marcar e testar os campos e sub-consultas,
ok testando e dando tudo certo coloque agora no Modo Livre, pegue o template Livre correto, veja se ficou tudo certo e agora você pode abrir esta consulta direto
em PDF ou deixar ela abrir em formato livre e deixar o botão PDF ai fica a seu critério.

Quando precisar pode gerar os Templates em Formato Livre no OFFICE 2016:
http://www.scriptcase.com.br/forum/index.php/topic,12176.msg63130.html#msg63130

gutoribeiro

  • Intermediário
  • ***
  • Mensagens: 202
    • Email
Re:Consulta com Subconsulta em Formato Livre
« Responder #5 Online: Outubro 05, 2017, 10:23:38 am »
Obrigado pelas respostas!

No modo debug não consegui visualizar nada de anormal, o while aparentemente foi executado, porém não foi "printado" os registros.

Eu resolvi da seguinte forma, ao invés de fazer a consulta baseada na tabela de fatura (tb_fatura), fiz a consulta baseada na tabela de consumo (tb_consumo). Usando o template que eu criei no libreoffice Calc (equivalente ao excel) os itens foram listados perfeitamente.

Para mostrar os demais campos, fiz alguns procedimentos no onExecute da consulta pra buscar os demais campos das outras tabelas.

Cupom Não Fiscal funcionando perfeitamente agora.

Obrigado a todos.