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

Haroldo

  • Expert
  • *****
  • Mensagens: 6293
  • Conhecimento diminui limitações.△TFA△
    • Infinitus Web Gestão Empresarial/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: 956
    • 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
Sc - 6.xxx , 7.xxx e V8
Windows Server 2008 Enterpriser 64 bits
SqlServer 2008 Express 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: 1392
    • 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: 956
    • 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....
Sc - 6.xxx , 7.xxx e V8
Windows Server 2008 Enterpriser 64 bits
SqlServer 2008 Express 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: 956
    • 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...
Sc - 6.xxx , 7.xxx e V8
Windows Server 2008 Enterpriser 64 bits
SqlServer 2008 Express 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: 956
    • 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.
Sc - 6.xxx , 7.xxx e V8
Windows Server 2008 Enterpriser 64 bits
SqlServer 2008 Express 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: 1392
    • 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: 956
    • 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 ...
Sc - 6.xxx , 7.xxx e V8
Windows Server 2008 Enterpriser 64 bits
SqlServer 2008 Express 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: 1392
    • 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.