RESOLVIDO:: Criação de Relatórios Report_PDF

Olá a todos!

Gostaria de saber se alguém possui um passo a passo para a criação do reportPDF utilizando a biblioteca TCPDF (pq fazer pela interface não tá dando certo).
Criei minha aplicação, criei todos os formulários, processos na base e etc, porém estou com duas dificuldades:

  1. Deixar ele multiempresa/user (estou com um anjo tentando me ajudar)
  2. Criação destes relatórios.

Vi alguns tutoriais porém acabei ficando mais confusa.
Scriptcase ainda está engrenando na minha cabeça, desculpe se parecer que estou perdida.

4 Curtidas

Veja o exemplo, bem simples e dá uma ideia da construção.
Se tiver dúvidas pode me chamar.

1 - Crie uma app ReportPDF, no Comando Select, ao invés de selecionar uma tabela coloque o seu Select, no caso eu coloquei esse:

SELECT

pv.id AS idconta, pv.de_local, pv.vl_total,

it.nu_quantidade,

p.nm_produto, p.vl_venda

FROM

pdv_pedido_venda_itens it, produto p, pdv_pedido_venda pv

WHERE

it.id_pdv_pedido_venda = pv.id AND

it.id_produto = p.id AND

pv.id = [nu_pedido]

2 - Após criar, abrirá as Configurações do PDF, set os seguintes em Configurações do ReportPDF:

*** MARQUE TAMBÉM O Rodapé como Sim

  • Você verá que conforme o seu Select, os campos serão criados para fazerem parte do PDF:

  • Em Posicionamento, coloque os campos do PEDIDO no cabeçalho e dos ITENS DO PEDIDO no Corpo

*** O pv_valor_total no Rodapé (Que não está aparecendo aqui)

  • Em Layout PDF > Interface, você terá as seguintes telas:

Observe atentamente os campos, que foram acrescentados alguns campos manualmente para completar o layout.

CABEÇALHO

CORPO

RODAPE

Depois vá para essa tela:

E acrescente o código que desenha o Retângulo.

Saiba mais como desenhar, no arquivo desse site:

www.softasso.com.br/fpdf

Dá pra aprimorar muito, mas é bom vc começar pelo básico, depois vc se aprofunda em mais detalhes.

​A estrutura é como abaixo:​


CABEÇALHO COM LOGOTIPO


DADOS DO CLIENTE


ITENS DO PEDIDO


TOTAL


O Resultado é o abaixo:

2 Curtidas

Obrigado!! Vou fazer isso. Com as imagens ajudou bastante

Olá

Estou acompanhando o seu vídeo, mas ainda estou empacada se você poder me ajuda ficaria grata.

Fiz um relatório no Report PDF, ele será um relatório simples tirado de um formulário q já esta criado ele ira trazer alguns campos (apenas alguns algo simples sem ligação de botões) ate ai eu conseguir fazer o meu problema e com os códigos que você utiliza no video.

preciso criar as descrições dos resultados que já estão posicionados no PDF.

Não sei se fui clara.

Desde já agradeço sua atenção.

Não entendi seu problema.

Exemplo eu tenho um formulário de pedidos e neste formulário tem vários campos e abas com detalhe do pedido inseridos, eu tenho que fazer alguns relatórios em PDF desse formulário de pedido:

Exemplo: um relatório de pedido por produto
ou de pedidos por vendedor ou de pedidos por data …etc
todos terão como base o formulário de pedido.

eu fiz o primeiro relatório, e conseguir trazer as informações que selecionei para esse relatório.
ex ID do pedido
mas eu preciso agora criar as descrições de cada campo, para que quando o usuário abrir esse PDF saiba o que cada resulta representa.

Mas ainda não entendi com posso seguir com isso.

por que não usa app GRID?
e exporta para pdf?

Oi Haroldo

Então a aplicação de Grid já foi criada para o formulário de pedido ela e um pouco mais simplificada que o formulário mais ainda sim com muitos campos sem necessidade para esta no relatório que me foi solicitado a criar em PDF, mas fiz uma outra aplicação de grid, só para testar com os campos que preciso mas ela não ficou visualmente agradável.

O relatório em PDF será simples eu só estou com problema de criar as descrições de cada campo, com os comandos de código que você usou tipo para criar o retângulo do CNPJ da empresa.

eu só preciso fazer algo desse tipo (a imagem eu encontrei na internet)

Se você aplicar o exemplo de PDF que dei anteriormente, vc conseguirá construir esse relatório tranquilamente, pois ele não difere muito do meu exemplo.
Se precisar, posso te ajudar.

1 Curtida

Oi @joaocarlostr eu fiz com pouco do relatório com base no seu exemplo, mas eu preciso criar as descrições dos campos

desculpe pelo garrancho kkk.

pois outras pessoas terão o acesso aos relatórios e concorda que elas terão que saber o que cada resultado representa.

O Haroldo se dispôs a me ajudar, mas se eu tiver alguma dúvida eu aviso, o auxilio e conhecimento de todos do fórum será sempre bem vindo.

Obrigada por querer me ajudar :blush:

Abra o ReportPDF:

  1. No 2º Layout PDF / Interface adicione 3 campos na Aba Cabeçalho
  2. No 1º Layout PDF Posicione os campos no layout
  3. Depois em Configurações: mude para label e informe o Label do campo;
1 Curtida

Oi @joaocarlostr , desta forma a aplicação não me deu uma total liberdade para definir da formar que eu precisava, mas agradeço sua atenção e disposição em me ajudar.

Muito obrigada!

Criação de relatório em Report PDF com sucesso graças a ajuda do @InfinitusWeb.

Ele me mostrou como fazer todo o relatório no método PHP, me dando total liberdade para definir o relatório da minha maneira. Conforme a imagem os métodos utilizados para a criação:

o select da tabela utilizada está no método Codigo, juntamente com códigos de régua e linha em zebra:

regua(297,210);

$zebra=true;

$_sel="

select

A.VENDEDOR_APELIDO as Vendedor,

A.OS as OS,

A.NOME_CLIENTE as Cliente,

convert(char, A.DATA_CADASTRAMENTO, 104) as Data_Cad,

convert(char, A.DATA_PREVISAO_ENTREGA, 104) as Data_Prev,

A.QTDE_TOTAL as Qtde,

A.VALOR_TOTAL as Valor,

B.DESC_OS_TIPO as Tipo,

C.DESC_OS_STATUS as Status

from OS_CABECALHO A

inner join OS_TIPOS B ON A.ID_OS_TIPO = B.ID_OS_TIPO

INNER JOIN OS_STATUS C ON A.ID_OS_STATUS = C.ID_OS_STATUS

WHERE A.CODIGO_FILIAL = ‘[VAR_EMPRESA]’

";

sc_select(rs,$_sel);

if ({rs} === false)

{

echo "Erro de acesso. Mensagem = " . {rs_erro};

}

else

{

while (!{rs}->EOF){

if ([os]->linha==1) { Cabecalho(); }

[os]->linha++;

$arr=[{rs}->fields[0],{rs}->fields[1],{rs}->fields[2],trim({rs}->fields[3]),trim({rs}->fields[4]),{rs}->fields[5],{rs}->fields[6],{rs}->fields[7],{rs}->fields[8]];

Detalhe($arr, $zebra);

$zebra=!$zebra;

{rs}->MoveNext();

}

{rs}->Close();

}

No método cabecalho os comandos para o cabeçalho, campos, imagem(logo), fonte, linha, cor,

$img = sc_url_library(‘prj’,‘Imagens’,‘logo.png’);

$this->Pdf->SetTextColor(0,0,0);

$this->Pdf->Image($img,10,5,0,0);

$this->Pdf->SetFont(’’,’’, 10);

$this->Pdf->SetXY(245,15);

$this->Pdf->Cell(20,0,‘Emissão:’,0,0,‘L’);

$this->Pdf->Cell(20,0,Date(‘d/m/Y’),0,1,‘R’);

$this->Pdf->SetXY(245,20);

$this->Pdf->Cell(20,0,‘Hora:’,0,0,‘L’);

$this->Pdf->Cell(20,0,Date(‘H:i:s’),0,0,‘R’);

$this->Pdf->SetLineStyle(array(‘color’ => array(0,0,0)));

$this->Pdf->Line(10,27,287,27);

$this->Pdf->SetFont(‘Helvetica’,’’, 12);

$this->Pdf->SetXY(0,30);

$this->Pdf->Cell(297,0,‘ORDEM DE SERVICO POR VENDEDOR’,0,0,‘C’);

$this->Pdf->Line(5,38,292,38);

$this->Pdf->SetXY(0,42);

$this->Pdf->SetFont(‘Helvetica’,’’, 12);

$this->Pdf->SetX(5);

$this->Pdf->Cell(30,0,‘VENDEDOR’,0,0,‘C’);

$this->Pdf->Cell(10,0,‘OS’,0,0,‘C’);

$this->Pdf->Cell(60,0,‘Cliente’,0,0,‘C’);

$this->Pdf->Cell(25,0,‘Data_Cad’,0,0,‘C’);

$this->Pdf->Cell(25,0,‘Data_Prev’,0,0,‘C’);

$this->Pdf->Cell(20,0,‘Qtde’,0,0,‘C’);

$this->Pdf->Cell(30,0,‘Valor’,0,0,‘C’);

$this->Pdf->Cell(40,0,‘Tipo’,0,0,‘C’);

$this->Pdf->Cell(30,0,‘Status’,0,1,‘C’);

$this->Pdf->Line(5,47,292,47);

$this->Pdf->SetXY(0,[os]->detY);

Em Detalhe os comandos para posição de linha, células

$y=$this->Pdf->GetY();

if ($y >= 190) {

$this->Pdf->AddPage();

Cabecalho();

}

$y=$this->Pdf->GetY();

if ($zebra) {

// $this->Pdf->SetFillColor(200,220,255);

$this->Pdf->Rect(5, $y,286, 5, ‘F’, ‘’, array(211,211,211));

}else{

$this->Pdf->Rect(5, $y,286, 5, ‘F’, ‘’, array(255,255,255));

// $this->Pdf->SetFillColor(255,255,255);

}

$this->Pdf->SetFont(‘Helvetica’,’’, 10);

$this->Pdf->SetX(5);

$this->Pdf->Cell(30,0,$campos[0],0,0,‘L’,1);

$this->Pdf->Cell(10,0,$campos[1],0,0,‘R’,1);

$this->Pdf->Cell(60,0,$campos[2],0,0,‘L’,1);

$this->Pdf->Cell(25,0,$campos[3],0,0,‘C’,1);

$this->Pdf->Cell(25,0,$campos[4],0,0,‘C’,1);

$this->Pdf->Cell(20,0,$campos[5],0,0,‘R’,1);

$valor=$campos[5]*$campos[6];

$this->Pdf->Cell(30,0,$valor,0,0,‘R’,1);

$this->Pdf->Cell(40,0,$campos[7],0,0,‘L’,1);

$this->Pdf->Cell(30,0,$campos[8],0,1,‘L’,1);

$this->Pdf->Ln(1);

[os]->total+=$valor;

Em atributo foi definido parâmetros campos e zebra image
image

No rodapé comandos para o campo Total, numeração de pagina

$this->Pdf->SetFont(‘Helvetica’,’’, 14);

$this->Pdf->SetX(175);

$this->Pdf->Cell(30,0,'TOTAL : '.[os]->total,0,0,‘R’);

$this->Pdf->SetFont(‘Courier’,’’, 9);

$this->Pdf->SetXY(0,200);

$this->Pdf->Cell(297,0,‘Pag ‘.$this->Pdf->PageNo().’/’.$this->Pdf->getNumPages(),0,0,‘C’);

Em régua o comando para régua

$this->Pdf->SetTextColor(217,121,69); //(255, 139,71);

$this->Pdf->SetLineStyle(array(‘color’ => array(237,188,119)));

$this->Pdf->SetFont(‘Courier’,’’, 6);

$this->Pdf->SetMargins(0,0,0);

$m=0; //esquerda

for ($i = 1; $i <= $a-5; $i++) {

$m++;

if ($m == 5) {

$m = 0; $t = 3;

$this->Pdf->SetXY(1,$i-2);

$this->Pdf->Cell(6,3,$i,0,0,‘R’);

if ($grade && $i>=8 && $i <= $a-6) {

$this->Pdf->SetLineStyle(array(‘width’ => 0.1));

$this->Pdf->Line(8,$i,$l-8,$i);

}

$this->Pdf->SetLineStyle(array(‘width’ => 0.3));

} else {

$t = 2;

$this->Pdf->SetLineStyle(array(‘width’ => 0.1));

}

$this->Pdf->Line(0,$i,$t,$i);

}

$m=3;//direita

for ($i = 4; $i <= $a; $i++) {

$m++;

if ($m == 5) {

$m = 0; $t = 3;

$this->Pdf->SetXY($l-6,$i-2);

if ($i > 5) $this->Pdf->Cell(4,0,$i,0,0,‘R’);

$this->Pdf->SetLineStyle(array(‘width’ => 0.3));

} else {

$t = 2;

$this->Pdf->SetLineStyle(array(‘width’ => 0.1));

}

$this->Pdf->Line($l-$t,$i,$l,$i);

}

$m=3;//superior

for ($i = 4; $i <= $l; $i++) {

$m++;

if ($m == 5 ) {

$m = 0; $t = 3;

$this->Pdf->SetXY($i-1,2);

if ($i > 5 && $i < $l) $this->Pdf->Cell(4,3,$i,0,0,‘R’);

if ($grade && $i>=8 && $i <= $l-8) {

$this->Pdf->SetLineStyle(array(‘width’ => 0.1));

$this->Pdf->Line($i,6,$i,$a-6);

}

$this->Pdf->SetLineStyle(array(‘width’ => 0.3));

} else {

$t = 2;

$this->Pdf->SetLineStyle(array(‘width’ => 0.1));

}

$this->Pdf->Line($i,0,$i,$t);

}

$m=0;//inferior

for ($i =1; $i <= $l-6; $i++) {

$m++;

if ($m == 5) {

$m = 0; $t = 3;

$this->Pdf->SetXY($i-1,$a-5);

if ($i < $l-5) $this->Pdf->Cell(4,3,$i,0,0,‘R’);

$this->Pdf->SetLineStyle(array(‘width’ => 0.3));

} else {

$t = 2;

$this->Pdf->SetLineStyle(array(‘width’ => 0.1));

}

$this->Pdf->Line($i,$a,$i,$a-$t);

}
Em atributo foi definido parâmetros de I, A e Grade
image

No evento onApplicationInit

[os]= new stdClass;

[os]->detY=50;

[os]->linha = 1;

[os]->total = 0;

Em onRecord

$this->Codigo();

o resultado

Muito Obrigada Haroldo e todos pela atenção e ajuda :blush::blush::blush:

3 Curtidas

Tópico solucionado!
Obrigado a todos!

1 Curtida

Olá, como eu retirar as linhas do grid para deixar um relatório mais limpo?
Hoje se eu fizer o relatório pelo grid fica um cabeçalho feio e este seu acima foi feito no grid?
Se for, é deste jeito que quero.

Se puder me ajudar agradeço

Quero relatórios bem simples

Use o ReportPDF, vc irá inserir somente as informações que deseja no PDF.

1 Curtida

Oi @acombat tudo bem?

o meu relatório foi feito em Reporte PDF para me dar total liberdade de definição, acima esta o método que foi utilizado na criação.

Espero que ajude com o que você precisa.

Relativamente a este exemplo como estão a proceder ao salto de página. Por exemplo uma listagem que ultrapasse o nº de itens por página. Para que não aconteça esta situação:

@herberto, você usa o padrão do SC ou você escreve o código?