Ir para o conteúdo

 Voltar a Fórum do For...
Tela cheia

Relatório com agrupamento de dados

30 de Dezembro de 2014, 16:21 , por Desconhecido - | Ninguém seguindo este artigo por enquanto.
Visualizado 253 vezes

Prezados,

 

Estou criando um relatório utilizando TPDF. Criei uma consulta onde todos os pedidos e itens de pedidos são mostrados. Entretanto será necessário agrupar as informações por pedido, totalizando os valores ao final.

 

Vide código abaixo:

//*** Criacao do objeto PDF ***
$pdf = new TPDF('L');

//a classe TPDF procura pela funcao cabecalho() e se existir sera executada recebendo a instancia da classe TPDF
function cabecalho($pdf) {
    $pdf->SetTextColor(0,64,128);
    $pdf->setFont('','B',14);
    $pdf->cell(0, 5, 'Sistema - v-1.0', 0, 1, 'C');
    $pdf->setFont('','B',12);
    $pdf->cell(0, 5, 'Listagem', 0, 1, 'C');
    $pdf->ln(1);
    $pdf->setFont('', '', 10);
    //exibir criterio utilizado no filtro
    $criterio = (($criterio == '') ? 'Todos os produtos' : $criterio);
    $pdf->SetTextColor(0,0,255);//0,64,128);
    $pdf->setFont('','B',7);
    $pdf->cell(0, 5, 'Criterio de Consulta: '.$criterio, 0, 1, 'L');
    $pdf->ln(1);
}

//a classe TPDF procurao pela funcao rodape() e se existir sera executada recebendo a instancia da classe TPDF
function rodape($pdf) {
    $pdf->setY($pdf->h - 10);
    $pdf->cell(50, 5, 'Emissao: '.date('d/m/Y h:i:s'), 'T', 0, 'L');
    $pdf->cell(0, 5, 'Pagina: '.$pdf->PageNo().' de {nb}', 'T', 0, 'R');   
}

//adicionar array de objeto pdf
$pdf->setData($dados);

/*criacao de corpo do relatorio, que neste caso sera uma listagem simples, tipo tabela (gride)
 * adicionar colunas que iremos listar da tabela.
 */
$pdf->addColumn('Empenho', 20, 'C', 'TXT_EMPENHO', 'white', 'B', 8, 'black', 'times');
$pdf->addColumn('RM', 15, 'C', 'TXT_REGISTRO', 'white', 'B', 8, 'black', 'times');
$pdf->addColumn('Grupo', 40, 'L', 'NUM', 'white', NULL, 8, 'black', 'times');
$pdf->addColumn('Dt', 15, 'C', 'DAT', 'white', NULL, 8, 'black', 'times');
$pdf->addColumn('Termo', 20, 'C', 'TXT_TERMO', 'white', 'B', 8, 'black', 'times');
$pdf->addColumn('Obs.', 70, 'C', 'TXT_OBS', 'white', NULL, 8, 'black', 'times');
$pdf->addColumn('R$ (unitario)', 15, 'C', 'NUM_VALOR', 'white', NULL, 8, 'black', 'times');
$pdf->addColumn('Descricao', 80, 'C', 'TXT_DESCRIMINACAO', 'white', 'B', 8, 'black', 'times');
$pdf->printRows();  //criar a grid do pdf
$pdf->show();

 

Obrigada,

Aline.

 

 


Autor: Paiva Macena


22 comentários

  • 51b06d6eae66e2cfdfc361d418eea715?only path=false&size=50&d=404Luis Eugênio barbosa(usuário não autenticado)
    10 de Janeiro de 2015, 22:44

     

    Aline,

    A classe TPDF ajuda na impressão de grides, mas não possui funções de subtotais. Neste caso você terá que fazer "na unha" mesmo, depois de imprimir os gride, imprimir o subtotal da maneira tradicional, fazendo o loop, somando tudo e imprimindo. Lembrando que a classe TPDF é uma extensão da FPDF. ( http://www.fpdf.org/ )

    <?php

    //*** Criacao do objeto PDF ***

    $frm = new TForm();

    $pdf = new TPDF('L');

    //a classe TPDF procura pela funcao cabecalho() e se existir sera executada recebendo a instancia da classe TPDF

    function cabecalho($pdf) {

        $pdf->SetTextColor(0,64,128);

        $pdf->setFont('','B',14);

        $pdf->cell(0, 5, 'Sistema - v-1.0', 0, 1, 'C');

        $pdf->setFont('','B',12);

        $pdf->cell(0, 5, 'Listagem', 0, 1, 'C');

        $pdf->ln(1);

        $pdf->setFont('', '', 10);

        //exibir criterio utilizado no filtro

        $criterio = (($criterio == '') ? 'Todos os produtos' : $criterio);

        $pdf->SetTextColor(0,0,255);//0,64,128);

        $pdf->setFont('','B',7);

        $pdf->cell(0, 5, 'Criterio de Consulta: '.$criterio, 0, 1, 'L');

        $pdf->ln(1);

    }

    //a classe TPDF procurao pela funcao rodape() e se existir sera executada recebendo a instancia da classe TPDF

    function rodape($pdf) {

        $pdf->setY($pdf->h - 10);

        $pdf->cell(50, 5, 'Emissao: '.date('d/m/Y h:i:s'), 'T', 0, 'L');

        $pdf->cell(0, 5, 'Pagina: '.$pdf->

        PageNo().' de {nb}', 'T', 0, 'R');

    }

    // simular resultado do banco de dados

    $dados= null;

    $dados['TXT_EMPENHO'][] = '2015NE4454';

    $dados['TXT_REGISTRO'][] = 'REGNE4454';

    $dados['NUM'][] = 'NUM';

    $dados['DAT'][] = '01/01/2015';

    $dados['TXT_TERMO'][] = 'Termo';

    $dados['TXT_OBS'][] = 'OBS';

    $dados['NUM_VALOR'][] = '10.45';

    $dados['TXT_DESCRIMINACAO'][] = 'Descriminação';

    $dados['TXT_EMPENHO'][] = '2015NE4478';

    $dados['TXT_REGISTRO'][] = 'REGNE4457';

    $dados['NUM'][] = 'NUM';

    $dados['DAT'][] = '02/01/2015';

    $dados['TXT_TERMO'][] = 'Termo 2';

    $dados['TXT_OBS'][] = 'OBS 2';

    $dados['NUM_VALOR'][] = '150.47';

    $dados['TXT_DESCRIMINACAO'][] = 'Descriminação';

    //adicionar array de objeto pdf

    $pdf->setData($dados);

    /*criacao de corpo do relatorio, que neste caso sera uma listagem simples, tipo tabela (gride)

     * adicionar colunas que iremos listar da tabela.

     */

    $pdf->addColumn('Empenho', 20, 'C', 'TXT_EMPENHO', 'white', 'B', 8, 'black', 'times');

    $pdf->addColumn('RM', 15, 'C', 'TXT_REGISTRO', 'white', 'B', 8, 'black', 'times');

    $pdf->addColumn('Grupo', 40, 'L', 'NUM', 'white', NULL, 8, 'black', 'times');

    $pdf->addColumn('Dt', 15, 'C', 'DAT', 'white', NULL, 8, 'black', 'times');

    $pdf->addColumn('Termo', 20, 'C', 'TXT_TERMO', 'white', 'B', 8, 'black', 'times');

    $pdf->addColumn('Obs.', 70, 'C', 'TXT_OBS', 'white', NULL, 8, 'black', 'times');

    $pdf->addColumn('R$ (unitario)', 15, 'C', 'NUM_VALOR', 'white', NULL, 8, 'black', 'times');

    $pdf->addColumn('Descricao', 80, 'C', 'TXT_DESCRIMINACAO', 'white', 'B', 8, 'black', 'times');

    $pdf->printRows();  //criar a grid do pdf

    // imprimir o subtotal

    $total = 0;

    $pdf->SetFillColor(240); // fundo cinza

    foreach($dados['NUM_VALOR'] as $k=>$v)

    {

    $total += floatval($v); // somar a coluna NUM_VALOR

    }

    //  imprimir a palavra subtotal ocupando as 5 primeiras colunas, o metodo getRowMaxWidth() retorna a soma de todas as larguras das colunas ou a de uma coluna especifica

    $pdf->cell($pdf->getRowMaxWidth()-($pdf->getRowWidths(6)+$pdf->getRowWidths(7)) ,5,'Subtotal:',1,0,'R',1);

    $pdf->cell($pdf->getRowWidths(6),5,number_format($total,2,'.',','),1,0,'C',1);

    $pdf->cell($pdf->getRowWidths(7),5,'',1,1,'R',1);

    $pdf->SetFillColor(255,255,255); // fundo branco

    //echo 'Pdf gerado em: '.$pdf->show('teste.pdf',false);

    $pdf->show(); 

     

    abraço. 

Essa comunidade não possui posts nesse blog