iMasters Fóruns: Relatório período de 10 dias via PDF - iMasters Fóruns

Ir para

Página 1 de 1
  • Novo tópico
  • Responder

Relatório período de 10 dias via PDF

#1 Membro offline   Ferreira Felipe Ícone

  • Ícone
  • Grupo: Membros
  • Posts: 159
  • Cadastrado: 24-março 05
  • Sexo:Masculino
  • Localização:Rio de Janeiro

Postou 05 novembro 2009 - 10:09

Ola mesu queridos amigos...

Gostaria de recorre a vossa sabedoria para conseguir concluir o meu relatório em PDF.

Estou utilizando o FPDF para conseguir fazer esse relatório.
Porem como na linha seguinte mostra, eu trago todos os dados da minha tabela MySQL para exportar no PDF. Gostaria de fazer com que mostrasse os ultimos 10 dias, e depois mais 10 dias e assim por diante ate formar 30 dias.

Ou seja, estava pensando em fazer 3 links na minha página.
Link 1: ultimos 10 dias
Link 2: Depois do 10º dia.
Link 3: Depois do 20º dia.

E quando usuário clicasse ja extaria exportado aqueles dias que eu informei.

$busca = mysql_query("SELECT * FROM dados_carimbo");

Acredito que tenha que mudar nessa linha que acabo de postar.

Segue agora o código todo.
<?php 
define('FPDF_FONTPATH', 'font/');
require('pdf/fpdf.php'); 

//conecta com o db.
include ("conectar.php");


//LOGO QUE SERÁ COLOCADO NO RELATÓRIO
$imagem = "img/logo.jpg"; 

$busca = mysql_query("SELECT * FROM dados_carimbo");

$pdf = new FPDF();
$pdf->Open();
$pdf->AddPage("[L,[A4]]");
$pdf->SetFont('Courier', 'B', 10);
$pdf->Image($imagem, 0, 0, 44, 20);
$pdf->Ln(2);

$pdf->Cell(40, 5, 'Data');
$pdf->SetX(35);
$pdf->Cell(40, 5, 'TSF');
$pdf->SetX(50);
$pdf->Cell(40, 5, 'Hora TSF');
$pdf->SetX(70);
$pdf->Cell(40, 5, 'Oferecidas');
$pdf->SetX(95);
$pdf->Cell(40, 5, 'Abandonadas');
$pdf->SetX(122);
$pdf->Cell(40, 5, 'TMA');
$pdf->SetX(140);
$pdf->Cell(40, 5, 'TME');

while ($resultado = mysql_fetch_array($busca)) {
    $pdf->ln();
    $pdf->Cell(40, 5, $resultado['Data']);
    $pdf->SetX(35);
    $pdf->Cell(40, 5, $resultado['TSF']);
    $pdf->SetX(50);
    $pdf->Cell(40, 5, $resultado['H_TSF']);
    $pdf->SetX(70);
    $pdf->Cell(40, 5, $resultado['Oferecidas']);
	$pdf->SetX(95);
    $pdf->Cell(40, 5, $resultado['Abandonadas']);
	$pdf->SetX(122);
    $pdf->Cell(40, 5, $resultado['TMA']);
	$pdf->SetX(145);
    $pdf->Cell(40, 5, $resultado['TME']);
}

$pdf->Output();
?>


Agradeço muito ajuda de todos e atenção tb.
Ate!!!


#2 Membro online   Beraldo Ícone

  • Insônia
  • Ícone
  • Grupo: Membros
  • Posts: 7060
  • Cadastrado: 02-julho 06
  • Sexo:Masculino
  • Localização:Curitiba - PR

Postou 05 novembro 2009 - 11:15

você pode usar BETWEEN na consulta:

SELECT campos FROM tabela WHERE data BETWEEN 'data1' AND 'data2';


onde data1 e data2 são do formato YYYY-MM-DD

Veja mais sobre data e hora no MySQL aqui:
http://dev.mysql.com...-functions.html

#3 Membro offline   Ferreira Felipe Ícone

  • Ícone
  • Grupo: Membros
  • Posts: 159
  • Cadastrado: 24-março 05
  • Sexo:Masculino
  • Localização:Rio de Janeiro

Postou 05 novembro 2009 - 11:34

Ver postBeraldo, em 05 novembro 2009 - 11:15 , disse:

SELECT campos FROM tabela WHERE data BETWEEN 'data1' AND 'data2';


Agradecido Beraldo,
Porém dessa forma eu tenho que colocar em 'data1' e 'data2' as datas e assim toda vez que for gerar o relatório terei que fazer a alteração nessa linha.

Se tiver a possibilidade de eu fazer um form e nesse form colocar $data1 e $data2 e dessa forma colocar ali automatico aee seria uma boa!!!
Mas não faço idéia de como fazer isso!!

#4 Membro online   Beraldo Ícone

  • Insônia
  • Ícone
  • Grupo: Membros
  • Posts: 7060
  • Cadastrado: 02-julho 06
  • Sexo:Masculino
  • Localização:Curitiba - PR

Postou 05 novembro 2009 - 17:28

É só calcular as datas com o auxílio da função date() do PHP

http://www.php.net

Também há as funções ADDDATE() e SUBDATE() (ou SUBDATE(), não lembro), do MySQL, no link que postei anteriormente

#5 Membro offline   Ferreira Felipe Ícone

  • Ícone
  • Grupo: Membros
  • Posts: 159
  • Cadastrado: 24-março 05
  • Sexo:Masculino
  • Localização:Rio de Janeiro

Postou 06 novembro 2009 - 08:02

Ver postBeraldo, em 05 novembro 2009 - 17:28 , disse:

É só calcular as datas com o auxílio da função date() do PHP


Muito agradecido querido Berlado,
você poderia me dar um exemplo? Não faço idéia de como fazer esse calculo com as datas!!

Agradeço pela sua atenção e sua paciência!
Bom final de semana.


#6 Membro offline   Roberto_S_Luz Ícone

  • Roberto Silva
  • Ícone
  • Grupo: Membros
  • Posts: 260
  • Cadastrado: 30-julho 08
  • Sexo:Masculino
  • Localização:Paraíso do Tocantins - TO

Postou 06 novembro 2009 - 08:32

Amigo Ferreira Felipe tenho um sistema que fiz um relatorio que trabalha quase igual ao seu porém...só não é em PDF, portanto...você pode fazer da seguinte forma.

Antes de gerar o PDF, faça um formulario contendo as duas datas...por exemplo.

<form action="gerar.php" name="form" metho="post">

   <table align="center">
       <tr>
           <td>
                   Data 1:
           </td>
            <td>
                 <input type="text" name="data1" value="" size="15">
           </td>
       </tr>
        <tr>
           <td>
                   Data 2:
           </td>
            <td>
                 <input type="text" name="data2" value="" size="15">
           </td>
       </tr>
        <tr>
           <td colspan="2">
                 <input type="submit" name="gerar" value="Gerar Relatorio">
           </td>
       </tr>
   </table>

</form>



Bom...dessa forma acima...você já tem o formulario para pegar o intervalo de datas que você desejar.

Então..no seu codigo que já está funcionando...você apenas irá pegar as datas enviadas e colocar na SQL, e incluir a clausula BETWEEN sugerida pelo Beraldo.

Exemplo:

//Pegando os dados enviados pelo form.

$data1 = $_GET["data1"];
$data2 = $_GET["data2"];

//Não sei alguns...mais de vez em quando tenho problemas no formato da data....então....tenho que converte-las e aqui vai uma forma

  $data1   = implode("/", array_reverse(explode("/", substr($data1, 0, 10)))).substr($data1, 10);
  $data2   = implode("/", array_reverse(explode("/", substr($data2, 0, 10)))).substr($data2, 10);

//Bom...supostamente as datas serão digitadas dessa forma no formulario "06/11/2009" então...com essas 2 linhas acima...irá ficar da seguinte forma "2009/11/06".

//Depois disso...basta colocar na sua SQL, veja o exemplo abaixo como o Beraldo descreveu
$sql = "SELECT campos FROM tabela WHERE data BETWEEN '".$data1."' AND '".$data2."'";


Bom...agora você tem o formulario para depois gerar algo mais dinamico...ou seja...num intervalo especifico...e não um que gere tudo.

Abraços e boa sorte!!! :thumbsup:

#7 Membro online   Beraldo Ícone

  • Insônia
  • Ícone
  • Grupo: Membros
  • Posts: 7060
  • Cadastrado: 02-julho 06
  • Sexo:Masculino
  • Localização:Curitiba - PR

Postou 06 novembro 2009 - 08:49

use a busca. há diversos tópicos sobre manipulação de datas:
http://www.google.co...Pesquisa+Google

Veja também as funções mktime() e strtotime() do PHP. Na documentação há exemplos de como adicionar e subtrair dias em datas.

#8 Membro offline   João Batista Neto Ícone

  • Verschränkung
  • Ícone
  • Grupo: Moderadores Trainee
  • Posts: 862
  • Cadastrado: 03-janeiro 09
  • Sexo:Masculino
  • Localização:Franca/SP

Postou 07 novembro 2009 - 07:16

Ver postFerreira Felipe, em 05 novembro 2009 - 11:34 , disse:

Porém dessa forma eu tenho que colocar em 'data1' e 'data2' as datas e assim toda vez que for gerar o relatório terei que fazer a alteração nessa linha.


Amigão, veja só:

mysql> select * from `datas`;
+----+---------+---------------------+
| id | nome	| date 	|
+----+---------+---------------------+
| 1 | Teste 1 | 2009-10-09 07:59:49 |
| 2 | Teste 2 | 2009-10-10 07:59:49 |
| 3 | Teste 3 | 2009-10-14 07:59:49 |
| 4 | Teste 4 | 2009-10-20 07:59:49 |
| 5 | Teste 5 | 2009-10-22 07:59:49 |
| 6 | Teste 6 | 2009-10-30 07:59:49 |
| 7 | Teste 7 | 2009-11-07 08:00:24 |
+----+---------+---------------------+
7 rows in set (0.00 sec)


Se eu entendi bem, você quer os resultados dos últimos 10 dias:

mysql> SELECT * from `datas` d where d.`date` BETWEEN (now() - interval 10 day) and now();
+----+---------+---------------------+
| id | nome	| date 	|
+----+---------+---------------------+
| 6 | Teste 6 | 2009-10-30 07:59:49 |
| 7 | Teste 7 | 2009-11-07 08:00:24 |
+----+---------+---------------------+
2 rows in set (0.00 sec)


Entre o 20o. dia até o 10o.:

mysql> SELECT * from `datas` d where d.`date` BETWEEN (now() - interval 20 day) and (now() - interval 10 day);
+----+---------+---------------------+
| id | nome	| date 	|
+----+---------+---------------------+
| 4 | Teste 4 | 2009-10-20 07:59:49 |
| 5 | Teste 5 | 2009-10-22 07:59:49 |
+----+---------+---------------------+
2 rows in set (0.00 sec)


Entre o 30o. dia até o 20o.:
mysql> SELECT * from `datas` d where d.`date` BETWEEN (now() - interval 30 day) and (now() - interval 20 day);
+----+---------+---------------------+
| id | nome	| date 	|
+----+---------+---------------------+
| 1 | Teste 1 | 2009-10-09 07:59:49 |
| 2 | Teste 2 | 2009-10-10 07:59:49 |
| 3 | Teste 3 | 2009-10-14 07:59:49 |
+----+---------+---------------------+
3 rows in set (0.00 sec)


#9 Membro offline   Ferreira Felipe Ícone

  • Ícone
  • Grupo: Membros
  • Posts: 159
  • Cadastrado: 24-março 05
  • Sexo:Masculino
  • Localização:Rio de Janeiro

Postou 07 novembro 2009 - 07:26

Muito agradecido amigo João, Roberto e Beraldo.
Vou fazer os testes aqui e mais tarde eu volto com o resultado...
Qualquer dificuldade eu suplico!!! rsrsrs :blush:

Obrigado pela atenção de todos vcs, um bom final de semana!!!

Página 1 de 1
  • Novo tópico
  • Responder

1 usuário(s) está(ão) lendo este tópico
0 membro(s), 1 visitante(s) e 0 membros anônimo(s)