Atualize hoje para o Scriptcase 9 e ganhe 35% de desconto! Atualize hoje para o Scriptcase 9 e ganhe 35% de desconto! COMPRAR AGORA!

Autor Tópico: Fazendo um relatório FPDF  (Lida 16731 vezes)

Haroldo

  • Expert
  • *****
  • Mensagens: 6956
  • Conhecimento diminui limitações.△TFA△
    • InfinitusWeb Software de Gestãol/Gestão ITIL/Consultoria Scriptcase
Re:Fazendo um relatório FPDF
« Responder #15 Online: Novembro 12, 2012, 01:29:14 pm »
Legal, vou  fazer uns testes.

tatauzinho

  • Novato
  • *
  • Mensagens: 5
Re:Fazendo um relatório FPDF
« Responder #16 Online: Dezembro 19, 2012, 11:22:42 am »
Olá Saulo,

Legal seu relatório. Estou querendo desenvolver um em modelo bem parecido. Na verdade já tenho o relatório pronto em aplicação BLANK. Problema que tenho é que a saída é em HTML e o cliente agora quer que seja PDF. Posso gera-lo em PDF sem ter que adaptar/refazer todo o código?

Obrigado desde já.

Jean Matos

  • Expert
  • *****
  • Mensagens: 985
    • Gestão de Construtoras
    • Email
Re:Fazendo um relatório FPDF
« Responder #17 Online: Dezembro 19, 2012, 01:42:35 pm »
Saulo Borges, help-me.

Tenho esse HTML para o form Pai de uma Ordem de Compra
Código: [Selecionar]
<div style="text-align: center;">
<div style="text-align: center;"><big></big><big>
</big>FAVOR ANEXAR UMA C%uFFFDPIA DESTA ORDEM DE COMPRA NA NOTA FISCAL</div>
<table style="width: 1024px; height: 108px;" border="1"
 cellpadding="1" cellspacing="1">
  <tbody>
    <tr>
      <td style="background-color: rgb(173, 213, 188);"
 colspan="2" rowspan="1">
      <div style="text-align: center;"><big><big>ORDEM
DE COMPRA</big></big></div>
      <hr style="width: 100%; height: 2px;"></td>
    </tr>
    <tr>
      <td style="width: 500px;">N%uFFFD {sequencial} - ID
{numeroOdc} &nbsp;/ RM: {idrm} - Coleta: {idcoleta}</td>
      <td style="text-align: center;"> Data da Compra -
{datacompra} - Comprador - {comprador}</td>
    </tr>
  </tbody><tbody>
  </tbody>
</table>
<div style="text-align: left;"><span
 style="font-family: Arial;"></span><span
 style="font-family: Arial;"></span>DADOS DE
FATURAMENTO / LOCAL DE COBRAN%uFFFDA<br>
Nome:
Fm Engenharia Ltda&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp; Endere%uFFFDo: Rua
J%uFFFDlio Laender &nbsp;&nbsp;&nbsp; N%uFFFD: 40
&nbsp;&nbsp;&nbsp; Bairro:
Ipiranga<big> &nbsp;</big>Cidade: Te%uFFFDfilo Otoni - MG -
CEP: 39.801-002<big><br>
</big>C.N.P.J: 25.320.870/0001-79 &nbsp;I.E :
686.827.353.00-50 <br>
<hr style="width: 100%; height: 2px;">
<table style="text-align: left; width: 1024px; height: 110px;"
 border="1" cellpadding="1" cellspacing="1">
  <tbody>
    <tr>
      <td style="text-align: center; width: 400px;">FORNECEDOR</td>
      <td style="text-align: center; width: 320px;">CENTRO
DE CUSTO</td>
      <td style="text-align: center;">LOCAL DE ENTREGA</td>
    </tr>
    <tr>
      <td style="width: 400px; text-align: left;">Nome:
{razaosocial} <small>CNPJ: {cnpj}&nbsp;</small> <br>
Endere%uFFFDo: {end_forn} N%uFFFD {num_forn}<big><br>
      </big>Bairro: {bair_forn} Cidade: {cid_forn} Est: {est_forn}<br>
Vendedor: {vendedor} Telefone: {tel_forn}</td>
      <td style="text-align: left; width: 320px;">Nome:
{obra} Rua: {end_obra} <br>
Bairro: {bair_obra} Cidade: {cid_obra} <br>
Estado: {est_obra}</td>
      <td style="text-align: left;">Nome: {obra} Rua:
{end_obra} <br>
Bairro: {bair_obra} Cidade: {cid_obra} Estado: {est_obra}</td>
    </tr>
  </tbody>
</table>
MATERIAIS<br>
<hr style="width: 100%; height: 2px;">
<table style="text-align: left; width: 1024px;" border="1"
 cellpadding="1" cellspacing="1">
  <tbody>
    <tr>
      <td style="text-align: center;"><small>Descri%uFFFD%uFFFDo</small></td>
      <td style="text-align: center; width: 120px;"><small>Especifica%uFFFD%uFFFDo</small></td>
      <td style="text-align: center; width: 50px;"><small>NBR</small></td>
      <td style="text-align: center; width: 40px;"><small>Unid:</small></td>
      <td style="text-align: center; width: 60px;"><small>Quant:</small></td>
      <td style="text-align: center; width: 70px;"><small>R$
Unit</small></td>
      <td style="width: 70px; text-align: center;"><small>R$
Total</small></td>
    </tr>
  </tbody>
</table>
<table style="text-align: left; width: 1024px; height: 750px;"
 border="0" cellpadding="1" cellspacing="1">
  <tbody>
    <tr>
      <td style="vertical-align: top;">{produtor}<br>
      <br>
      </td>
    </tr>
  </tbody>
</table>
<table style="text-align: left; width: 1024px;" border="1"
 cellpadding="1" cellspacing="1">
  <tbody>
    <tr>
      <td>Produtos: <big style="font-weight: bold;">{valorODC}</big></td>
      <td>Frete: <big style="font-weight: bold;">{frete}</big></td>
      <td>Descontos: <big style="font-weight: bold;">{desconto}</big></td>
      <td>Valor da compra: <big style="font-weight: bold;">{valorfinal}</big></td>
    </tr>
  </tbody>
</table>
CONDI%uFFFD%uFFFDES DE PAGAMENTO<br>
<div style="text-align: center;">
<hr style="width: 100%; height: 2px;">
<table style="text-align: left; width: 1024px;" border="1"
 cellpadding="1" cellspacing="1">
  <tbody>
    <tr>
      <td style="text-align: center; width: 200px;"><small>COMPRADOR</small></td>
      <td style="text-align: center; width: 200px;"><small>ENGENHEIRO</small></td>
      <td style="text-align: center;"><small>PARCELAS
ACORDADAS</small></td>
    </tr>
  </tbody>
</table>
<table style="text-align: left; width: 1024px; height: 87px;"
 border="1" cellpadding="1" cellspacing="1">
  <tbody>
    <tr>
      <td style="width: 200px;"></td>
      <td style="width: 200px;"></td>
      <td style="vertical-align: top;">{pagamento}</td>
    </tr>
  </tbody>
</table>
<br>
</div>
</div>
</div>


E esse HTML para o form filho que são os produtos.
Código: [Selecionar]
<table style="background-color: white; width: 1020px; height: 20px;"
 border="0" cellpadding="0" cellspacing="0">
  <tbody>
    <tr>
      <td style="text-align: left; width: 570px;">{descricao}
      </td>
      <td
 style="width: 120px; text-align: left; vertical-align: middle;">{id_descricao_componente}
      </td>
      <td style="width: 40px; text-align: center;">{nbr}</td>
      <td style="text-align: center; width: 20px;">{abreviacao}</td>
      <td style="text-align: center; width: 50px;">{dtqcomprar}
      </td>
      <td style="width: 70px; text-align: right;">{preco} </td>
      <td style="width: 70px; text-align: right;">{total}</td>
    </tr>
  </tbody>
</table>

Onde faço a quebra caso os produtos não caibam em apenas 1(uma) pagina ? Logo, neste caso teriam que sair 2(duas) paginas com Layout igual, estando diferente apenas os Produtos..

Help-me
V8.1, V9
Windows Server 2012 Enterpriser 64 bits
SqlServer 2012 datacenter 64 bits
Sistema Integrado de Gestão de Construtoras WaveTOR - Sistema Integrado de Gestão de Construtoras
Teófilo Otoni - MG
(33)8824-2775

saulobborges

  • Expert
  • *****
  • Mensagens: 1399
    • SGi Sistemas
    • Email
Re:Fazendo um relatório FPDF
« Responder #18 Online: Dezembro 20, 2012, 03:01:51 pm »
Jean o seu caso é mais complicado do que os relatório que eu utilizo, é bem parecido na verdade com a necessidade de uma nfe né com muito produtos onde é necessário repetir o pai  e continuar montando o filho com o restante dos produtos.
Vou estudar isso, porque nunca precisei usar mas já sei que em breve precisarei..assim que conseguir alguma coisa eu posto.

Jean Matos

  • Expert
  • *****
  • Mensagens: 985
    • Gestão de Construtoras
    • Email
Re:Fazendo um relatório FPDF
« Responder #19 Online: Dezembro 20, 2012, 03:57:01 pm »
OK.. obrigado.

estou trabalhando em uma solução com o report pdf com registros por linha.

percebi que lá quando uso a opção registros por linha aparece opção de cabeçalho , rodapé e corpo... dai estou montando o layout dentro do cabeçalho e neste caso esta repetindo conforme o numero de registros... só falta agora controlar a quantidade de registros dentro de cada pagina....

assim que terminar vou gravar em video tudo que fiz e vou postar no youtube..... no entanto quero fazer as 2(duas) opções funcionar....
V8.1, V9
Windows Server 2012 Enterpriser 64 bits
SqlServer 2012 datacenter 64 bits
Sistema Integrado de Gestão de Construtoras WaveTOR - Sistema Integrado de Gestão de Construtoras
Teófilo Otoni - MG
(33)8824-2775

Robert Berbert

  • Expert
  • *****
  • Mensagens: 769
  • Desenvolver é sempre estar se atualizando.
    • Conesoft
    • Email
Re:Fazendo um relatório FPDF
« Responder #20 Online: Dezembro 20, 2012, 04:00:35 pm »
Jean você pode pegar esse código e fazer na blank, eu tenho um exemplo se vc se interessar eu te mostro.

Eu usei o recordset do SC. sc_select();
-- Design ou programador eis a questão.

Jean Matos

  • Expert
  • *****
  • Mensagens: 985
    • Gestão de Construtoras
    • Email
Re:Fazendo um relatório FPDF
« Responder #21 Online: Dezembro 20, 2012, 04:02:00 pm »
Irmao,se puder me mandar eu agradeço...
V8.1, V9
Windows Server 2012 Enterpriser 64 bits
SqlServer 2012 datacenter 64 bits
Sistema Integrado de Gestão de Construtoras WaveTOR - Sistema Integrado de Gestão de Construtoras
Teófilo Otoni - MG
(33)8824-2775

Robert Berbert

  • Expert
  • *****
  • Mensagens: 769
  • Desenvolver é sempre estar se atualizando.
    • Conesoft
    • Email
Re:Fazendo um relatório FPDF
« Responder #22 Online: Dezembro 20, 2012, 04:18:06 pm »
http://svconesoft.no-ip.org:8887/conehotel/

login: teste
senha: teste

Vá em check-in, clique no X de finalizar hospedagem. Na tela que aparecer clica na Lupa Detalhar.

Essa tela foi feita na app Blank.

Eu errei  não foi sc_select, foi lookup mesmo.

Segue o código:

Código: [Selecionar]
$sql_acomp = "SELECT NOME FROM HOT004 WHERE TIPO = 2"
. " AND COD_HOSPEDAGEM = '" . [glo_reserva] . "'";
sc_lookup(cs, $sql_acomp);
$nacomp = count({cs});
if (isset({cs[0][0]})) {
$valor_add = $nacomp * 30.00;
}
else {
$valor_add = 0.00;
}

// SQL
$check_sql = "SELECT HOT003.DATA_ENTRADA, HOT003.DATA_SAIDA, HOT003.HORA_SAIDA, HOT001.NOME, CAD001.NOME, HOT003.HORA_ENTRADA"
   . " FROM HOT003"
   . " JOIN HOT001 ON HOT001.CODIGO = HOT003.COD_SUITE"
   . " JOIN CAD001 ON CAD001.CODIGO = HOT003.COD_CLIENTE"
   . " WHERE HOT003.CODIGO = '" . [glo_reserva] . "'";
sc_lookup(rs, $check_sql);

if (isset({rs[0][0]}))     // ENCONTRADO
{
$entrada = {rs[0][0]};
//$saida = {rs[0][1]};
$saida = date("Y-m-d");

$data_entrada = pegaTimeStamp($entrada);
$data_saida = pegaTimeStamp($saida);

$diferenca = $data_saida - $data_entrada;
$dias = (int)floor($diferenca / (60 * 60 * 24));

$entrada = sc_date_conv({rs[0][0]},"db_format","dd/mm/aaaa");
$saida = sc_date_conv({rs[0][1]},"db_format","dd/mm/aaaa");
?>
<script>
function imprime_form()
{
if (confirm('Deseja imprimir essa pagina?')) {
document.getElementById('imprimir').style.visibility = 'hidden';
document.getElementById('voltar').style.visibility = 'hidden';
window.print();
}
}
function voltar_blank()
{
history.back();
/*var iframe = document.getElementById('nmsc_iframe_consulta_checkin');
var src = "../blank/blank.php";
iframe.src = src;*/
}
</script>

<!-- CÓDIGO DE GERAÇÃO DE DIÁRIAS E CONSUMOS -->
<style>
tr {
border: 1px solid black;
}
#main {
border: 1px solid black;
font-family: Calibri, Candara, Segoe, "Segoe UI", Optima, Arial, sans-serif;
font-size: 13px;
}
.title {
font-size: 25px;
text-align: center;
}
.nome {
font-size: 14px;
}
#info {
font-size: 13px;
text-align: center;
}
#endereco {
border: 0px;
font-size: 12px;
}
.total {
color: #CC0000;
font-size: 13px;
vertical-align: top;
}


</style>

<table id="main" border=0 width="680" cellspacing=0 cellpadding=0>
<tr>
<td height=120 rowspan=2 colspan=1 style="border-bottom: 1px solid black; border-right: 1px solid black" align="center">
<img src="../_lib/img/logo_ext.png">
</td>
<td colspan=5 height=60 class="title" style="border-bottom: 1px solid black;">
<b><i> APIDES PALACE HOTEL </i></b> <br>
<b><span id="info">Extrato para simples conferência</span></b>
</td>
</tr>
<tr>
<td colspan=5 style="border-bottom: 1px solid black;">
<table border=0 cellspacing=0 cellpadding=0 width="100%" id="endereco">
<tr>
<td><b>Endereço:</b></td>
<td colspan=2> ROD BR 101 NORTE KM 17, 809 </td>
<td> <b>CEP:</b> 29830-000</td>
</tr>
<tr>
<td><b>Cidade:</b></td>
<td> PEDRO CANÁRIO - ES </td>
<td><b>Fone:</b> (27) 3764-2223</td>
<td><b>Fax:</b> (27) 3764-0045</td>
</tr>
<tr>
<td><b>CNPJ:</b></td>
<td> 07.683.292/0001-53 </td>
<td><b>Inscri&ccedil;&atilde;o Estadual:</b></td>
<td> ISENTO</td>
</tr>
</table>
</td>
</tr>
<tr>
<td class="nome" colspan=5>
<b>Titular:</b><b><?php echo " " . {rs[0][4]} ?></b>
</td>
<td>
<?php echo date("d/m/Y"); ?>
</td>
</tr>
<tr>
<td>
<b>Empresa:</b>
</td>
<td colspan=5>

</td>
</tr>
<tr>
<td style="border-bottom: 1px solid black;" colspan=2>
<b>Data Chegada:</b><?php echo " "$entrada " " . {rs[0][5]} ?>
</td>
<td style="border-bottom: 1px solid black;">
<b>Saída:</b>
</td>
<td style="border-bottom: 1px solid black;" colspan=2>
<?php echo $saida " " . {rs[0][5]}; ?>
</td>
<td class="nome" style="border-bottom: 1px solid black;">
<b>Apartamento:</b>&nbsp;&nbsp;<b><?php echo {rs[0][3]} ?></b>
</td>
</tr>
<tbody bgcolor="#D0D0D0">
<tr>
<td style="border-bottom: 1px solid black;">
Ponto de Venda
</td>
<td style="border-bottom: 1px solid black;">
Comanda
</td>
<td style="border-bottom: 1px solid black;">
Data
</td>
<td style="border-bottom: 1px solid black;" align="center">
Quant.
</td>
<td style="border-bottom: 1px solid black;">
Produto
</td>
<td style="border-bottom: 1px solid black;" align="right">
Valor
</td>
</tr>
</tbody>
<!-- LOOP COMEÇA AQUI  -->
<?php
$check_sql "SELECT HOT002.VALOR FROM HOT003"
    
" JOIN HOT001 ON HOT001.CODIGO = HOT003.COD_SUITE"
" JOIN HOT002 ON HOT002.TIPO_SUITE = HOT001.TIPO"
   
" WHERE HOT003.CODIGO = '" . [glo_reserva] . "'"
" AND HOT002.COD_MODELO = '".[glo_modelo]."'"
" AND HOT002.TIPO = '".[glo_tipo]."'";
sc_lookup(rs$check_sql);

$valor_diaria 0.00;
if (isset({rs[0][0]}))
{
$dia_acomp $valor_add + {rs[0][0]};
for ($i=1$i<=$dias$i++) {
$valor_diaria = (float)$valor_diaria $dia_acomp;
if ($i == 1) {
$titulo "DIÁRIA";
$borda "border-right: 1px solid black; border-bottom: 0px";
}
else if ($i $dias) {
$titulo "";
$borda "border-right: 1px solid black; border-bottom: 0px";
}
else {
$titulo "";
$borda "border-right: 1px solid black; border-bottom: 1px solid black;";
}
?>

<tr>
<td style="<?php echo $borda?>">
<?php echo $titulo?>
</td>
<td style="border-right: 1px solid black; border-bottom: 1px solid black;">
0
</td>
<td style="border-right: 1px solid black; border-bottom: 1px solid black;">
<?php 
$explode sc_date($entrada"dd/mm/aaaa""+"$i00);
$explode explode("/"$explode);
$dia $explode[0];
$mes $explode[1];

echo $dia ."/"$mes;
?>

</td>
<td style="border-right: 1px solid black; border-bottom: 1px solid black;" align="center">
1,00
</td>
<td style="border-right: 1px solid black; border-bottom: 1px solid black;">
DIÁRIA
</td>
<td style="border-right: 1px solid black; border-bottom: 1px solid black;" align="right">
<?php 
echo number_format($dia_acomp,2,",","."); // Valor da diária
?>

</td>
</tr>
<!-- FECHA TR DO LOOP -->
<?php
}
}
?>

<!-- LOOP COMEÇA AQUI PRODUTOS -->
<?php
$sql "SELECT MES002.QTDE, EST003.NOME, MES002.TOTAL, MES002.CODIGO, HOT001.CODIGO FROM HOT003"
" JOIN HOT001 ON HOT001.CODIGO = HOT003.COD_SUITE"
" JOIN mes002 ON MES002.cod_mesa = hot001.nome"
" JOIN est003 ON est003.codigo = mes002.COD_PRODUTO"
" JOIN mes001 ON mes001.cod_hospedagem = hot003.CODIGO"
   
" WHERE HOT003.CODIGO = '" . [glo_reserva] . "'"
" AND MES001.SITUACAO <> 0";
sc_lookup(bs$sql);
$valor_frigobar 0.00;
$count count({bs});
if (isset({bs[0][0]})) {
for ($j=0$j<$count$j++) {
$valor_frigobar $valor_frigobar + {bs[$j][2]};
if ($j == 0) {
$titulo "PRODUTOS";
$borda "border-right: 1px solid black; border-bottom: 0px";
}
else if ($j < ($count-1)) {
$titulo "";
$borda "border-right: 1px solid black; border-bottom: 0px";
}
else {
$titulo "";
$borda "border-right: 1px solid black; border-bottom: 1px solid black;";
}
?>

<tr>
<td style="<?php echo $borda?>">
<?php echo $titulo?>
</td>
<td style="border-right: 1px solid black; border-bottom: 1px solid black;">
<?php echo {bs[0][3]} ?>
</td>
<td style="border-right: 1px solid black; border-bottom: 1px solid black;">
DATA
</td>
<td style="border-right: 1px solid black; border-bottom: 1px solid black;" align="center">
<?php 
echo number_format({bs[$j][0]},2,",",".");  
// Quantidade
?>

</td>
<td style="border-right: 1px solid black; border-bottom: 1px solid black;">
<?php 
echo {bs[$j][1]};
// Descrição
?>

</td>
<td style="border-right: 1px solid black; border-bottom: 1px solid black;" align="right">
<?php 
echo number_format({bs[$j][2]},2,",","."); 
// Valor
?>

</td>
</tr>
<!-- FECHA TR DO LOOP -->
<?php
}
}
?>


<tr>
<td rowspan=7 colspan=4 style="border-right: 1px solid black;" valign="top">
<br>OBS: Detalhes são insuficientes.
</td>
<td colspan=1>
DIÁRIAS
</td>
<td align="right">
<?
echo number_format($valor_diaria,2,",",".");
// Total das diárias
?>
</td>
</tr>
<tr>
<td colspan=1>
FRIGOBAR
</td>
<td align="right">
<?php 
echo number_format($valor_frigobar,2,",","."); 
// Total Frigobar  
?>

</td>
</tr>
<tr>
<td colspan=1 style="border-bottom: 1px solid black;">
LAVANDERIA
</td>
<td style="border-bottom: 1px solid black;" align="right">
0,00
</td>
</tr>
<tr>
<td colspan=1>
TOTAL DA CONTA
</td>
<td align="right">
<?php 
$total_parcial $valor_frigobar $valor_diaria;
echo number_format($total_parcial,2,",",".");  // Total parcial
?>

</td>
</tr>
<tr>
<td colspan=1>
DESCONTO
</td>
<td align="right">
<?php //Falta criar campo desconto
$desconto 0.00;
echo number_format($desconto,2,",",".");
?>

</td>
</tr>
<tr>
<td colspan=1 style="border-bottom: 1px solid black;">
ADIANTAMENTO
</td>
<td style="border-bottom: 1px solid black;" align="right">
<?php //Falta criar campo adiantamento
$adiantamento 0.00;
number_format($adiantamento,2,",",".");
?>

</td>
</tr>
<tr>
<td colspan=1 height="70" class="total">
<b>TOTAL GERAL</b>
</td>
<td class="total" align="right">
<?php 
$total_geral = ($valor_frigobar $valor_diaria) - $desconto $adiantamento;
echo number_format($total_geral,2,",","."); // Total Geral
?>

</td>
</tr>
</table>
<table id="botoes" border=0 width="680" cellspacing=0 cellpadding=0>
<tr>
<td width="50%" align="right">
<a href="../blank/blank.php">VOLTAR</a>
<input id="voltar" name="voltar" value="Voltar" type="button" onClick="voltar_blank()">
</td>
<td align="left">
<input id="imprimir" name="imprimir" value="Imprimir" type="button" onClick="imprime_form()">
</td>
</tr>
</table>
<!-- FIM DO CÓDIGO -->
<?php

/*$inicio = '08-10-2008 10:00:00';
$tolerancia = "02:00:00";

$resultado = somaHoras($inicio, 1, $tolerancia);
echo "<br>". $resultado;*/
}
else     
// NÃO ENCONTRADO
{
sc_error_message("ERRO DE PROCURA!");
}
« Última modificação: Dezembro 20, 2012, 04:33:05 pm por Robert Berbert »
-- Design ou programador eis a questão.

Jean Matos

  • Expert
  • *****
  • Mensagens: 985
    • Gestão de Construtoras
    • Email
Re:Fazendo um relatório FPDF
« Responder #23 Online: Dezembro 20, 2012, 04:28:59 pm »
Obrigado. vou estudar esse código.
parece que é isso mesmo que preciso.
V8.1, V9
Windows Server 2012 Enterpriser 64 bits
SqlServer 2012 datacenter 64 bits
Sistema Integrado de Gestão de Construtoras WaveTOR - Sistema Integrado de Gestão de Construtoras
Teófilo Otoni - MG
(33)8824-2775

saulobborges

  • Expert
  • *****
  • Mensagens: 1399
    • SGi Sistemas
    • Email
Re:Fazendo um relatório FPDF
« Responder #24 Online: Dezembro 20, 2012, 04:33:55 pm »
Olá Saulo,

Legal seu relatório. Estou querendo desenvolver um em modelo bem parecido. Na verdade já tenho o relatório pronto em aplicação BLANK. Problema que tenho é que a saída é em HTML e o cliente agora quer que seja PDF. Posso gera-lo em PDF sem ter que adaptar/refazer todo o código?

Obrigado desde já.
Cara tem que ver o conteúdo da sua blank, acredito que dá pra adaptar pro formato livre mas sem ver o código complica. Mas uma opção é usar o include da biblioteca FPDF e chamar pra converter o html gerado.

Robert Berbert

  • Expert
  • *****
  • Mensagens: 769
  • Desenvolver é sempre estar se atualizando.
    • Conesoft
    • Email
Re:Fazendo um relatório FPDF
« Responder #25 Online: Dezembro 20, 2012, 04:35:39 pm »
Eu tenho mania de desenhar HTML com php e mysql então eu sempre faço assim, ainda nem parei pra estudar a consulta com sub-consultas. Mas em breve eu vou tentar usa-la pra ver se me poupa tempo.
-- Design ou programador eis a questão.

tatauzinho

  • Novato
  • *
  • Mensagens: 5
Re:Fazendo um relatório FPDF
« Responder #26 Online: Dezembro 21, 2012, 09:25:36 am »
Olá Saulo,

No momento estou tentando utilizar umas bibliotecas externas para gerar o pdf apartir do html. Veja que no final tem o código comentado das mesmas.
Segue código:

//Parametros passados pelas telas ctrl_imprime_boleto_venda e nf_saida
//Formatacao das datas: inicial e final
if ([p6] == "F") {
   [p2] = sc_date_conv([p2],"aaaammdd","dd/mm/aaaa");
   [p3] = sc_date_conv([p3],"aaaammdd","dd/mm/aaaa");
} else {
   [p4] = "(".[p4].")";
}

//Montagem da clausula WHERE
$var_where = " id_forma_pagamento = 3 AND nsp.id NOT IN (SELECT id_nf_saida_parcela FROM recebimento) AND (bol.impresso = '[p5]' OR '[p5]' = 'T')";

if (!empty([p1])) {
   $var_where .= " AND cli.codigo = '[p1]'";
}

if (!empty([p2])) {
   $var_where .= " AND nfs.data_venda between '[p2]' AND '[p3]'";
}

if (!empty([p4])) {
   $var_where .= " AND cli.id IN [p4]";
}

if (!empty([p8])) {
   $var_where .= " AND cli.cnpj = '[p8]'";
}

/*Inicio Lookups: para obtencao de dados para preenchimento do boleto*/
sc_lookup(rs, "SELECT distinct cli.razao_social, cli.logradouro, cli.cidade, cli.uf, cli.cep,
      nfs.numero_nf, nsp.parcela, nsp.data_vencimento, bol.valor,
      cli.nome_fantasia, cli.codigo, nfs.id, cli.cnpj, cli.bairro, bol.nosso_numero,
      bol.gerado_data, nfs.valor_total
      FROM boleto bol
      INNER JOIN nf_saida_parcela nsp ON nsp.id = bol.id_nf_saida_parcela
      INNER JOIN nf_saida nfs ON nfs.id = nsp.id_nf_saida
      INNER JOIN nf_saida_item nfsi ON nfsi.id_nf_saida = nfs.id
      INNER JOIN cliente cli ON cli.id = nfs.id_cliente
      WHERE ". $var_where ." ORDER BY nsp.parcela");

sc_lookup(cedente, "SELECT ced.nosso_numero, ced.agencia, ced.agencia_digito,
      ced.conta, ced.conta_digito, ced.carteira, ced.id, ced.nome,
      bco.codigo, ced.convenio
      FROM cedente as ced
      INNER JOIN banco bco ON ced.id_banco = bco.id");

sc_lookup(carta, "SELECT conteudo, id FROM modelo_carta");

/*Fim Lookups*/

if (isset($rs) && !empty($rs)) {/*Verifico se esta setado array vindo do lookup rs*/
   //Contagem de parcelas      
   sc_lookup(count_parc, "SELECT count(*) FROM nf_saida_parcela nsp
      INNER JOIN nf_saida nfs ON nfs.id = nsp.id_nf_saida
      INNER JOIN cliente cli ON cli.id = nfs.id_cliente
      WHERE nfs.id = ". $rs[0][11]."");
   
   //Verifica o num.de registros, recebe cast para inteiro e armazena na count_reg.
   $count_reg = (int)count($rs);
   
   //Rodrigo: SQL para busca de produtos do item da PRIMEIRA NF      
   sc_lookup(pdt, "SELECT prod.nome, nfi.quantidade,
      nfi.valor_unitario, nfi.valor_total FROM produto prod
      INNER JOIN nf_saida_item nfi ON nfi.id_produto = prod.id
      WHERE nfi.id_nf_saida = ". $rs[0][11] ." ORDER BY prod.nome");      
   
   //Recebe id da NF_SAIDA.
   $id_nfSaida = $rs[0][11];

   for ($i = 0; $i < $count_reg; $i++) { //Realiza repeticao até o ultimo registro encontrado.
      // DADOS DO BOLETO PARA O SEU CLIENTE
      $dias_de_prazo_para_pagamento = 10;
      $data_venc = sc_date_conv($rs[$i][7],"aaaa-mm-dd", "dd/mm/aaaa");// Prazo de X dias OU informe data: "13/04/2006";
      $valor_cobrado = $rs[$i][8]; // Valor - REGRA: Sem pontos na milhar e tanto faz com "." ou "," ou com 1 ou 2 ou sem casa decimal
      $valor_boleto= number_format($valor_cobrado, 2, ',', '');
      $dadosboleto["nosso_numero"] = $rs[$i][14];  //Conforme instruções do cliente
      $dadosboleto["numero_documento"] = $rs[$i][5];// Num do pedido ou do contrato
      $dadosboleto["data_vencimento"] = $data_venc; // Data de Vencimento do Boleto - REGRA: Formato DD/MM/AAAA
      $dadosboleto["data_documento"] = date("d/m/Y"); // Data de emissão do Boleto
      $dadosboleto["data_processamento"] = sc_date_conv($rs[$i][15],"aaaa-mm-dd", "dd/mm/aaaa"); // Data de processamento do boleto (opcional)
      $dadosboleto["valor_boleto"] = $valor_boleto;    // Valor do Boleto - REGRA: Com vírgula e sempre com duas casas depois da virgula
      $dadosboleto["carta"] = $carta[0][0];
      
      //Alterar o texto da carta colocando o vencimento e numero da parcela dinamicamente
      $modelo_carta = str_replace('|vencimento|', $data_venc, $carta[0][0]);
      $modelo_carta = str_replace('|parcela_inicio|', $rs[$i][6], $modelo_carta);
      $modelo_carta = str_replace('|parcela_fim|', $count_parc[0][0], $modelo_carta);
      $dadosboleto["carta"] = $modelo_carta;
            
      // DADOS DO SEU CLIENTE
      $dadosboleto["sacado"] = $rs[$i][0];
      $dadosboleto["sacado_cnpj"] = $rs[$i][12];
      $dadosboleto["endereco1"] = $rs[$i][1] . " - " . $rs[$i][13];
      $dadosboleto["endereco2"] = $rs[$i][2] ." - ". $rs[$i][3] ." - ". $rs[$i][4];
      $dadosboleto["fantasia"] =  $rs[$i][9];
      $dadosboleto["codcliente"] = $rs[$i][10];
      
      //PARCELA
      $dadosboleto["parcela"] = $rs[$i][6];                        
      
      //Verifica se houve mudanca de id da NF_SAIDA
      if($id_nfSaida != $rs[$i][11] ){
         //Atribui o id da nova NF_SAIDA
         $id_nfSaida = $rs[$i][11];
         
         //Recontagem de parcelas
         sc_lookup(count_parc, "SELECT count(*) FROM nf_saida_parcela nsp
            INNER JOIN nf_saida nfs ON nfs.id = nsp.id_nf_saida
            INNER JOIN cliente cli ON cli.id = nfs.id_cliente
            WHERE cli.id_tipo_cliente = 2 and nfs.id = $id_nfSaida ");
            
         //Rodrigo: SQL para busca de produtos APOS A PRIMEIRA NF (Se houver)      
         sc_lookup(pdt, "SELECT prod.nome, nfi.quantidade,
            nfi.valor_unitario, nfi.valor_total FROM produto prod
            INNER JOIN nf_saida_item nfi ON nfi.id_produto = prod.id
            WHERE nfi.id_nf_saida = $id_nfSaida ORDER BY prod.nome");         
      }
      
      // INFORMACOES PARA O CLIENTE
      $dadosboleto["instrucoes1"] = "- ESTE BOLETO REFERE-SE A CAMPANHA LIQUIDA SALVADOR 2013";
      $dadosboleto["instrucoes2"] = "- NÃO RECEBER ESTE BOLETO COM 10 DIAS DE VENCIDO";
      $dadosboleto["instrucoes3"] = "- NÃO RECEBER ESTE BOLETO COM DESCONTO";
      $dadosboleto["instrucoes4"] = "- Em caso de dúvidas entre em contato conosco: financeiro@cdl.com.br";
      $dadosboleto["instrucoes5"] = "&nbsp&nbspParcela " . $dadosboleto["parcela"] . " de " . $count_parc[0][0];
                              
      // DADOS OPCIONAIS DE ACORDO COM O BANCO OU CLIENTE
      $dadosboleto["quantidade"] = "001";
      $dadosboleto["valor_unitario"] = $valor_boleto;
      $dadosboleto["aceite"] = "";      
      $dadosboleto["especie"] = "R$";
      $dadosboleto["especie_doc"] = "DS";
      
      // ---------------------- DADOS FIXOS DE CONFIGURAÇÃO DO SEU BOLETO --------------- //
      // DADOS DA SUA CONTA - Bradesco
      $dadosboleto["agencia"] = $cedente[0][1]; // Num da agencia, sem digito
      $dadosboleto["agencia_dv"] = $cedente[0][2]; // Digito do Num da agencia
      $dadosboleto["conta"] = $cedente[0][3];    // Num da conta, sem digito
      $dadosboleto["conta_dv"] = $cedente[0][4];    // Digito do Num da conta
      
      // DADOS PERSONALIZADOS - Bradesco
      $dadosboleto["conta_cedente"] = $cedente[0][3];; // ContaCedente do Cliente, sem digito (Somente Números)
      $dadosboleto["conta_cedente_dv"] = $cedente[0][4]; // Digito da ContaCedente do Cliente
      $dadosboleto["carteira"] = $cedente[0][5];  // Código da Carteira: pode ser 06 ou 03
      $dadosboleto["banco"] = $cedente[0][8]; // Codigo do banco
      $dadosboleto["convenio"] = $cedente[0][9]; //Convenio do cedente
      
      // SEUS DADOS
      $dadosboleto["identificacao"] = "CDL - Boleto de cobrança bancária";
      $dadosboleto["cpf_cnpj"] = "15.178.692/0001-30";
      $dadosboleto["endereco"] = "Rua Carlos Gomes, 1063 - Aflitos";
      $dadosboleto["cidade_uf"] = "Salvador / Bahia";
      $dadosboleto["cedente"] = $cedente[0][7];
      
      //Rodrigo: LISTAR PRODUTOS DA NF      
      $tab_produtos = '';
      $dadosboleto["kitnome"] = '';
      for($x = 0; $x < count($pdt); $x++){
         //Verifica se o produto eh kit e adciona o nome do kit sem discriminacao de
         //socio ou nao socio para uso no layout_bradesco_prevenda.php (include).
         if(strtoupper(substr($pdt[$x][0], 0, 3)) == "KIT"){
            //Verifica se o kit tem o separador (-) de NO/PP '-' socio/nao socio
            if(!strrpos($pdt[$x][0], "-")){
               $dadosboleto["kitnome"] .= $pdt[$x][1]  . " - " .
               $pdt[$x][0] . "; ";
            }else{
               $dadosboleto["kitnome"] .= $pdt[$x][1]  . " - " .
               substr($pdt[$x][0] , 0, strrpos($pdt[$x][0], "-")) . "; ";               
            }
         }         
         
         //Montagem dinamica das linhas e celulas da tabela de produtos no boleto
         //iniciada no layout_bradesco_venda.php (include).
         $tab_produtos .= "<tr>
               <td class='cp' align='left'>               
               " . $pdt[$x][0] ."
               </td>
               <td class='cp' align='right'>               
               " . $pdt[$x][1] ."            
               </td>
               <td class='cp' align='right'>               
               " . number_format($pdt[$x][2] , 2 , ',' , '.') . "               
               </td>
               <td class='cp' align='right'>               
               " . number_format($pdt[$x][3] , 2 , ',' , '.') ."               
               </td>
               </tr>";
      }
      //Rodrigo: Montagem estatica das informacoes de parcelas, total parcela e total venda.
      $tab_produtos .= "<tr>
                 <td colspan='4' style='border-bottom:1px solid; border-bottom-color:#000000'>&nbsp;
                 </td>             
              </tr>
              <tr>
                 <td class='cp' align='left'>
                    PARCELA " . $rs[$i][6] . " DE " . $count_parc[0][0] . "
                 </td>
                 <td class='cp' align='right'>
                    VALOR DESTA PARCELA R$ " . number_format($valor_cobrado , 2 , ',' , '.') . "
                 </td>             
                 <td colspan='2' class='cp' align='right'>
                    TOTAL DA VENDA R$ " . number_format($rs[0][16], 2, ',' , '.') . "
                 </td>
              </tr>
              ";
      $dadosboleto["produtos"] = $tab_produtos;      
      
      
       //inicia o buffer      
      //ob_start();
      
      // NÃO ALTERAR!
      include_once("include/funcoes_bradesco.php");   
      
      
      //gera_boleto(&$dadosboleto);
      $dadosboleto = gera_boleto_2($dadosboleto);
         
   
      //O Teste abaixo verifica o parametro P7 quanto a tipo de boleto (P=prevenda / V=venda) que deve ser impresso.
      if([p7] == "P"){
         include("include/layout_bradesco_prevenda.php");
      }else{
         include("include/layout_bradesco_venda.php");
      }
      
         
      include("include/layout_correio.php");

      //$htmlBoleto = ob_get_clean();
      
      //Criando um novo arquivo
      //file_put_contents("boleto.htm", $htmlBoleto);
      
      //require_once('..\..\..\..\dompdf\dompdf_config.inc.php');
      //$html = file_get_contents("boleto.htm");
      //$dompdf = new DOMPDF();
      //$boletoPdf = mb_convert_encoding($html, 'HTML-ENTITIES', 'UTF-8');
      //$dompdf->load_html($boletoPdf);
      //$dompdf->set_paper("A4", "portrait");
      //$dompdf->render();
      //$dompdf->stream('boleto.pdf');
      

      //C:\Arquivos de programas\netmake\v6\wwwroot\


      //require_once('..\..\..\..\html2pdf\html2pdf.class.php');
      //$html = file_get_contents("boleto.htm");
          //$html2pdf = new HTML2PDF('P','A4','fr');
          //$html2pdf->WriteHTML($html);
          //$html2pdf->Output('boleto.pdf');
      //exit;
      
      //Flegar o boleto como IMPRESSO
      $sql = "UPDATE boleto SET impresso = 'S' WHERE nosso_numero = '".$rs[$i][14]."'";
      sc_exec_sql($sql);
   }
} else {
   sc_alert("Estes boletos jah foram impressos ou nao existem");
}

Jean Matos

  • Expert
  • *****
  • Mensagens: 985
    • Gestão de Construtoras
    • Email
Re:Fazendo um relatório FPDF
« Responder #27 Online: Dezembro 21, 2012, 10:47:44 am »
Resolvi o problema de imprimir várias páginas e repetir o layout sem a necessidade de interferir no código do reportPDF...
apenas desenho o formulario com a biblioteca e o resto com o proprio report..

na proxima semana vou publicar em vídeo ...
V8.1, V9
Windows Server 2012 Enterpriser 64 bits
SqlServer 2012 datacenter 64 bits
Sistema Integrado de Gestão de Construtoras WaveTOR - Sistema Integrado de Gestão de Construtoras
Teófilo Otoni - MG
(33)8824-2775

saulobborges

  • Expert
  • *****
  • Mensagens: 1399
    • SGi Sistemas
    • Email
Re:Fazendo um relatório FPDF
« Responder #28 Online: Dezembro 21, 2012, 01:08:44 pm »
Tatauzinho, o seu script esta certinho, o que você pode fazer é jogar o buffer direto para a FPDF:

Isso aqui tem no manual do SC
Código: [Selecionar]
sc_include_lib ("fpdf");

$pdf=new FPDF();
$pdf->Output('../tmp/boleto.pdf'); //aqui no output você pode especificar a variável com o conteúdo do buffer e salvar em um diretório.

tatauzinho

  • Novato
  • *
  • Mensagens: 5
Re:Fazendo um relatório FPDF
« Responder #29 Online: Dezembro 21, 2012, 03:00:44 pm »
Olá Saulo,

Já tentei ler do buffer e inlusive ler o html gerado salvo em um diretório. Tudo isso com várias bibliotecas. E todas deram erros muito loucos...rsrs.
Não encontrei meneira de ler o html com a FPDF. Tenho que recontruir todo meu boleto?

Obrigado mais uma vez.